Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app/roles
diff options
context:
space:
mode:
authorRobert Speicher <rspeicher@gmail.com>2012-08-09 05:40:57 +0400
committerRobert Speicher <rspeicher@gmail.com>2012-08-09 05:44:33 +0400
commitf36f0dac9d2a009f29d2253dcd7c66d5a46ffd56 (patch)
tree60dd3e641ce7fc44dc7283f8a1e3732a9a0aedf0 /app/roles
parent7a4c95888225bf465187f9a186fb5373e8405a5f (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.rb47
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