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
This commit is contained in:
Jean-Philippe Lang
2010-12-12 17:00:52 +00:00
parent aaee26ae22
commit ac60fc9c1c
6 changed files with 144 additions and 7 deletions
+18 -7
View File
@@ -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
+5
View File
@@ -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
+14
View File
@@ -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