Adds named scopes to replace custom finders.
* Adds watched_by class method in ActsAsWatchable * Adds Issue#recently_updated, Issue#with_limit and Issue#on_active_project #2482 git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3557 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
cfa1f0c231
commit
22c1e2b8cf
|
@ -51,6 +51,7 @@ class Issue < ActiveRecord::Base
|
|||
attr_reader :current_journal
|
||||
|
||||
validates_presence_of :subject, :priority, :project, :tracker, :author, :status
|
||||
|
||||
validates_length_of :subject, :maximum => 255
|
||||
validates_inclusion_of :done_ratio, :in => 0..100
|
||||
validates_numericality_of :estimated_hours, :allow_nil => true
|
||||
|
@ -60,6 +61,11 @@ class Issue < ActiveRecord::Base
|
|||
|
||||
named_scope :open, :conditions => ["#{IssueStatus.table_name}.is_closed = ?", false], :include => :status
|
||||
|
||||
named_scope :recently_updated, :order => "#{self.table_name}.updated_on DESC"
|
||||
named_scope :with_limit, lambda { |limit| { :limit => limit} }
|
||||
named_scope :on_active_project, :include => [:status, :project, :tracker],
|
||||
:conditions => ["#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"]
|
||||
|
||||
before_create :default_assign
|
||||
before_save :reschedule_following_issues, :close_duplicates, :update_done_ratio_from_issue_status
|
||||
after_save :create_journal
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
<h3><%=l(:label_watched_issues)%> (<%= Issue.visible.count(:include => :watchers,
|
||||
:conditions => ["#{Watcher.table_name}.user_id = ?", user.id]) %>)</h3>
|
||||
<% watched_issues = Issue.visible.find(:all,
|
||||
:include => [:status, :project, :tracker, :watchers],
|
||||
:limit => 10,
|
||||
:conditions => ["#{Watcher.table_name}.user_id = ?", user.id],
|
||||
:order => "#{Issue.table_name}.updated_on DESC") %>
|
||||
<h3><%=l(:label_watched_issues)%> (<%= Issue.visible.watched_by(user.id).count %>)</h3>
|
||||
<% watched_issues = Issue.visible.on_active_project.watched_by(user.id).recently_updated.with_limit(10) %>
|
||||
|
||||
<%= render :partial => 'issues/list_simple', :locals => { :issues => watched_issues } %>
|
||||
<% if watched_issues.length > 0 %>
|
||||
|
|
|
@ -656,4 +656,24 @@ class IssueTest < ActiveSupport::TestCase
|
|||
assert_equal 2, groups.size
|
||||
assert_equal 5, groups.inject(0) {|sum, group| sum + group['total'].to_i}
|
||||
end
|
||||
|
||||
def test_recently_updated_with_limit_scopes
|
||||
#should return the last updated issue
|
||||
assert_equal 1, Issue.recently_updated.with_limit(1).length
|
||||
assert_equal Issue.find(:first, :order => "updated_on DESC"), Issue.recently_updated.with_limit(1).first
|
||||
end
|
||||
|
||||
def test_on_active_projects_scope
|
||||
assert Project.find(2).archive
|
||||
|
||||
before = Issue.on_active_project.length
|
||||
# test inclusion to results
|
||||
issue = Issue.generate_for_project!(Project.find(1), :tracker => Project.find(2).trackers.first)
|
||||
assert_equal before + 1, Issue.on_active_project.length
|
||||
|
||||
# Move to an archived project
|
||||
issue.project = Project.find(2)
|
||||
assert issue.save
|
||||
assert_equal before, Issue.on_active_project.length
|
||||
end
|
||||
end
|
||||
|
|
|
@ -15,6 +15,10 @@ module Redmine
|
|||
has_many :watchers, :as => :watchable, :dependent => :delete_all
|
||||
has_many :watcher_users, :through => :watchers, :source => :user
|
||||
|
||||
named_scope :watched_by, lambda { |user_id|
|
||||
{ :include => :watchers,
|
||||
:conditions => ["#{Watcher.table_name}.user_id = ?", user_id] }
|
||||
}
|
||||
attr_protected :watcher_ids, :watcher_user_ids
|
||||
end
|
||||
end
|
||||
|
@ -60,14 +64,7 @@ module Redmine
|
|||
notified.collect(&:mail).compact
|
||||
end
|
||||
|
||||
module ClassMethods
|
||||
# Returns the objects that are watched by user
|
||||
def watched_by(user)
|
||||
find(:all,
|
||||
:include => :watchers,
|
||||
:conditions => ["#{Watcher.table_name}.user_id = ?", user.id])
|
||||
end
|
||||
end
|
||||
module ClassMethods; end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue