Commit f36f0dac authored by Robert Speicher's avatar Robert Speicher

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.
parent 7a4c9588
......@@ -4,58 +4,17 @@ class Issue < ActiveRecord::Base
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
......
......@@ -10,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
......@@ -96,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
......@@ -136,7 +96,7 @@ class MergeRequest < ActiveRecord::Base
commits.first
end
def merged?
def merged?
merged && merge_event
end
......@@ -153,7 +113,7 @@ class MergeRequest < ActiveRecord::Base
end
def probably_merged?
unmerged_commits.empty? &&
unmerged_commits.empty? &&
commits.any? && open?
end
......@@ -171,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
......
# 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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment