diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2012-08-10 17:48:16 +0400 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2012-08-10 17:48:16 +0400 |
commit | 1413c23c502d5a5cbc9b81f553a245103c1d6e50 (patch) | |
tree | e294fc61e4915791c5340d4d586ca2b3845e951d | |
parent | 5fd0e7ba119d59a3e9f2ea3eed03ece1e8baeec3 (diff) | |
parent | b7f9b8223e40aa9e4aa8579d9a062df7e2e1d959 (diff) |
Merge pull request #1208 from tsigo/issue_commonality
Consolidate functionality shared between Issue and MergeRequest
-rw-r--r-- | app/models/issue.rb | 42 | ||||
-rw-r--r-- | app/models/merge_request.rb | 51 | ||||
-rw-r--r-- | app/roles/issue_commonality.rb | 52 | ||||
-rw-r--r-- | spec/models/issue_spec.rb | 8 | ||||
-rw-r--r-- | spec/models/merge_request_spec.rb | 9 |
5 files changed, 76 insertions, 86 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb index 7f935900911..d8ca59c23db 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1,60 +1,20 @@ class Issue < ActiveRecord::Base + include IssueCommonality include Upvote acts_as_taggable_on :labels - belongs_to :project belongs_to :milestone - belongs_to :author, :class_name => "User" - belongs_to :assignee, :class_name => "User" - has_many :notes, :as => :noteable, :dependent => :destroy - - attr_protected :author, :author_id, :project, :project_id - attr_accessor :author_id_of_changes - - validates_presence_of :project_id - validates_presence_of :author_id - - delegate :name, - :email, - :to => :author, - :prefix => true - - delegate :name, - :email, - :to => :assignee, - :allow_nil => true, - :prefix => true - - validates :title, - :presence => true, - :length => { :within => 0..255 } validates :description, :length => { :within => 0..2000 } - scope :opened, where(:closed => false) - scope :closed, where(:closed => true) - scope :assigned, lambda { |u| where(:assignee_id => u.id)} - acts_as_list def self.open_for(user) opened.assigned(user) 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 - def is_assigned? !!assignee_id end diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 2581f3be4c9..a77081c9528 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -1,6 +1,7 @@ require File.join(Rails.root, "app/models/commit") class MergeRequest < ActiveRecord::Base + include IssueCommonality include Upvote BROKEN_DIFF = "--broken-diff" @@ -9,47 +10,15 @@ class MergeRequest < ActiveRecord::Base CAN_BE_MERGED = 2 CANNOT_BE_MERGED = 3 - belongs_to :project - belongs_to :author, :class_name => "User" - belongs_to :assignee, :class_name => "User" - has_many :notes, :as => :noteable, :dependent => :destroy - serialize :st_commits serialize :st_diffs - attr_protected :author, :author_id, :project, :project_id - attr_accessor :author_id_of_changes, - :should_remove_source_branch + attr_accessor :should_remove_source_branch - validates_presence_of :project_id - validates_presence_of :author_id validates_presence_of :source_branch validates_presence_of :target_branch validate :validate_branches - delegate :name, - :email, - :to => :author, - :prefix => true - - delegate :name, - :email, - :to => :assignee, - :allow_nil => true, - :prefix => true - - 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)} - - def self.search query - where("title like :query", :query => "%#{query}%") - end - def self.find_all_by_branch(branch_name) where("source_branch like :branch or target_branch like :branch", :branch => branch_name) end @@ -95,14 +64,6 @@ class MergeRequest < ActiveRecord::Base self.save end - def today? - Date.today == created_at.to_date - end - - def new? - today? && created_at == updated_at - end - def diffs st_diffs || [] end @@ -135,7 +96,7 @@ class MergeRequest < ActiveRecord::Base commits.first end - def merged? + def merged? merged && merge_event end @@ -152,7 +113,7 @@ class MergeRequest < ActiveRecord::Base end def probably_merged? - unmerged_commits.empty? && + unmerged_commits.empty? && commits.any? && open? end @@ -170,8 +131,8 @@ class MergeRequest < ActiveRecord::Base self.update_attributes :state => CANNOT_BE_MERGED end - def reloaded_commits - if open? && unmerged_commits.any? + def reloaded_commits + if open? && unmerged_commits.any? self.st_commits = unmerged_commits save end diff --git a/app/roles/issue_commonality.rb b/app/roles/issue_commonality.rb new file mode 100644 index 00000000000..353d6a5c977 --- /dev/null +++ b/app/roles/issue_commonality.rb @@ -0,0 +1,52 @@ +# 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 + + module ClassMethods + def search(query) + where("title like :query", :query => "%#{query}%") + end + end + + def today? + Date.today == created_at.to_date + end + + def new? + today? && created_at == updated_at + end +end diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index fbd4031fa0b..806b8ee74e0 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -106,6 +106,14 @@ describe Issue do end end + describe ".search" do + let!(:issue) { Factory.create(:issue, :title => "Searchable issue", + :project => Factory.create(:project)) } + + it "matches by title" do + Issue.search('able').all.should == [issue] + end + end end # == Schema Information # diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index ac986ccebe3..4ef6becf41b 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -56,6 +56,15 @@ describe MergeRequest do subject.upvotes.should == 2 end end + + describe ".search" do + let!(:issue) { Factory.create(:issue, :title => "Searchable issue", + :project => Factory.create(:project)) } + + it "matches by title" do + Issue.search('able').all.should == [issue] + end + end end # == Schema Information # |