diff options
author | Robert Speicher <rspeicher@gmail.com> | 2012-08-09 05:40:57 +0400 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2012-08-09 05:44:33 +0400 |
commit | f36f0dac9d2a009f29d2253dcd7c66d5a46ffd56 (patch) | |
tree | 60dd3e641ce7fc44dc7283f8a1e3732a9a0aedf0 /app/roles | |
parent | 7a4c95888225bf465187f9a186fb5373e8405a5f (diff) |
Consolidate functionality shared between Issue and MergeRequest
Any associations, validations, delegates, scopes and methods that
were exactly the same in both Issue and MergeRequest models have been
moved to a new IssueCommonality module (role) that gets included by each
class.
There was actually quite a bit of duplication, because MergeRequests are
basically just specialized Issues.
Diffstat (limited to 'app/roles')
-rw-r--r-- | app/roles/issue_commonality.rb | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/app/roles/issue_commonality.rb b/app/roles/issue_commonality.rb index e3c2c0476a1..424b9cfb11b 100644 --- a/app/roles/issue_commonality.rb +++ b/app/roles/issue_commonality.rb @@ -1,3 +1,50 @@ # Contains common functionality shared between Issues and MergeRequests module IssueCommonality + extend ActiveSupport::Concern + + included do + attr_protected :author, :author_id, :project, :project_id + + belongs_to :project + belongs_to :author, :class_name => "User" + belongs_to :assignee, :class_name => "User" + has_many :notes, :as => :noteable, :dependent => :destroy + + validates_presence_of :project_id + validates_presence_of :author_id + + validates :title, + :presence => true, + :length => { :within => 0..255 } + + + scope :opened, where(:closed => false) + scope :closed, where(:closed => true) + scope :assigned, lambda { |u| where(:assignee_id => u.id)} + + delegate :name, + :email, + :to => :author, + :prefix => true + + delegate :name, + :email, + :to => :assignee, + :allow_nil => true, + :prefix => true + + attr_accessor :author_id_of_changes + end + + def self.search query + where("title like :query", :query => "%#{query}%") + end + + def today? + Date.today == created_at.to_date + end + + def new? + today? && created_at == updated_at + end end |