summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2010-12-12 17:00:52 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2010-12-12 17:00:52 +0000
commitac60fc9c1c587ba1f600c7d17723d2b88f2b6bed (patch)
treecb6b99fd80e8e2107dd6dcf140bec7e354af8c70 /app
parentaaee26ae229f1f6cc863094aa58f32c434c98c58 (diff)
downloadredmine-ac60fc9c1c587ba1f600c7d17723d2b88f2b6bed.tar.gz
redmine-ac60fc9c1c587ba1f600c7d17723d2b88f2b6bed.zip
Refactor and add tests for News #index API (#7072).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4505 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r--app/controllers/news_controller.rb25
-rw-r--r--app/models/news.rb5
-rw-r--r--app/views/news/index.api.rsb14
3 files changed, 37 insertions, 7 deletions
diff --git a/app/controllers/news_controller.rb b/app/controllers/news_controller.rb
index eebc0ba02..e7c643e90 100644
--- a/app/controllers/news_controller.rb
+++ b/app/controllers/news_controller.rb
@@ -26,15 +26,26 @@ class NewsController < ApplicationController
accept_key_auth :index
def index
- @news_pages, @newss = paginate :news,
- :per_page => 10,
- :conditions => Project.allowed_to_condition(User.current, :view_news, :project => @project),
- :include => [:author, :project],
- :order => "#{News.table_name}.created_on DESC"
+ case params[:format]
+ when 'xml', 'json'
+ @offset, @limit = api_offset_and_limit
+ else
+ @limit = 10
+ end
+
+ scope = @project ? @project.news.visible : News.visible
+
+ @news_count = scope.count
+ @news_pages = Paginator.new self, @news_count, @limit, params['page']
+ @offset ||= @news_pages.current.offset
+ @newss = scope.all(:include => [:author, :project],
+ :order => "#{News.table_name}.created_on DESC",
+ :offset => @offset,
+ :limit => @limit)
+
respond_to do |format|
format.html { render :layout => false if request.xhr? }
- format.xml { render :xml => @newss.to_xml }
- format.json { render :json => @newss.to_json }
+ format.api
format.atom { render_feed(@newss, :title => (@project ? @project.name : Setting.app_title) + ": #{l(:label_news_plural)}") }
end
end
diff --git a/app/models/news.rb b/app/models/news.rb
index a167cdf38..00729f06c 100644
--- a/app/models/news.rb
+++ b/app/models/news.rb
@@ -29,6 +29,11 @@ class News < ActiveRecord::Base
acts_as_activity_provider :find_options => {:include => [:project, :author]},
:author_key => :author_id
+ named_scope :visible, lambda {|*args| {
+ :include => :project,
+ :conditions => Project.allowed_to_condition(args.first || User.current, :view_news)
+ }}
+
def visible?(user=User.current)
!user.nil? && user.allowed_to?(:view_news, project)
end
diff --git a/app/views/news/index.api.rsb b/app/views/news/index.api.rsb
new file mode 100644
index 000000000..2cacbc7f8
--- /dev/null
+++ b/app/views/news/index.api.rsb
@@ -0,0 +1,14 @@
+api.array :news, api_meta(:total_count => @news_count, :offset => @offset, :limit => @limit) do
+ @newss.each do |news|
+ api.news do
+ api.id news.id
+ api.project(:id => news.project_id, :name => news.project.name) unless news.project.nil?
+ api.author(:id => news.author_id, :name => news.author.name) unless news.author.nil?
+
+ api.title news.title
+ api.summary news.summary
+ api.description news.description
+ api.created_on news.created_on
+ end
+ end
+end