Skip to content
Snippets Groups Projects
Commit f36f0dac authored by Robert Speicher's avatar Robert Speicher
Browse files

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
No related branches found
No related tags found
1 merge request!1208Consolidate functionality shared between Issue and MergeRequest
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -136,7 +96,7 @@ class MergeRequest < ActiveRecord::Base
commits.first
end
 
def merged?
def merged?
merged && merge_event
end
 
Loading
Loading
@@ -153,7 +113,7 @@ class MergeRequest < ActiveRecord::Base
end
 
def probably_merged?
unmerged_commits.empty? &&
unmerged_commits.empty? &&
commits.any? && open?
end
 
Loading
Loading
@@ -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
Loading
Loading
# 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment