diff options
author | Felipe Artur <felipefac@gmail.com> | 2017-06-20 00:02:02 +0300 |
---|---|---|
committer | Felipe Artur <felipefac@gmail.com> | 2017-06-21 22:10:28 +0300 |
commit | 9e02a8f719ba056ee1ef94226a0627783fcc649a (patch) | |
tree | 038cd6ba4d4e1085c89272d055e22540117295f3 | |
parent | 8a0942f0c41f558301ab8ecbc292d3a8a4f1b168 (diff) |
Create group milestone model
-rw-r--r-- | app/controllers/groups/milestones_controller.rb | 38 | ||||
-rw-r--r-- | app/models/group_milestone.rb | 30 |
2 files changed, 36 insertions, 32 deletions
diff --git a/app/controllers/groups/milestones_controller.rb b/app/controllers/groups/milestones_controller.rb index e52fa766044..53c03a005a2 100644 --- a/app/controllers/groups/milestones_controller.rb +++ b/app/controllers/groups/milestones_controller.rb @@ -15,14 +15,15 @@ class Groups::MilestonesController < Groups::ApplicationController end def new - @milestone = Milestone.new + @milestone = GroupMilestone.new end def create - project_ids = params[:milestone][:project_ids].reject(&:blank?) + # Use a service to create the milestone here title = milestone_params[:title] + @milestone = GroupMilestone.new(milestone_params) - if create_milestones(project_ids) + if @milestone.save redirect_to milestone_path(title) else render_new_with_error(project_ids.empty?) @@ -42,20 +43,20 @@ class Groups::MilestonesController < Groups::ApplicationController private - def create_milestones(project_ids) - return false unless project_ids.present? + # def create_milestones(project_ids) + # return false unless project_ids.present? - ActiveRecord::Base.transaction do - @projects.where(id: project_ids).each do |project| - Milestones::CreateService.new(project, current_user, milestone_params).execute - end - end + # ActiveRecord::Base.transaction do + # @projects.where(id: project_ids).each do |project| + # Milestones::CreateService.new(project, current_user, milestone_params).execute + # end + # end - true - rescue ActiveRecord::ActiveRecordError => e - flash.now[:alert] = "An error occurred while creating the milestone: #{e.message}" - false - end + # true + # rescue ActiveRecord::ActiveRecordError => e + # flash.now[:alert] = "An error occurred while creating the milestone: #{e.message}" + # false + # end def render_new_with_error(empty_project_ids) @milestone = Milestone.new(milestone_params) @@ -68,7 +69,7 @@ class Groups::MilestonesController < Groups::ApplicationController end def milestone_params - params.require(:milestone).permit(:title, :description, :start_date, :due_date, :state_event) + params.require(:group_milestone).permit(:title, :description, :start_date, :due_date, :state_event) end def milestone_path(title) @@ -76,11 +77,12 @@ class Groups::MilestonesController < Groups::ApplicationController end def milestones - @milestones = GroupMilestone.build_collection(@group, @projects, params) + @milestones = GroupMilestone.all end def milestone - @milestone = GroupMilestone.build(@group, @projects, params[:title]) + # Use a finder here + @milestone = GroupMilestone.find(params[:id]) render_404 unless @milestone end end diff --git a/app/models/group_milestone.rb b/app/models/group_milestone.rb index 86d38e5468b..033e06ab1d7 100644 --- a/app/models/group_milestone.rb +++ b/app/models/group_milestone.rb @@ -1,19 +1,21 @@ -class GroupMilestone < GlobalMilestone - attr_accessor :group +class GroupMilestone < ActiveRecord::Base + include StripAttribute - def self.build_collection(group, projects, params) - super(projects, params).each do |milestone| - milestone.group = group - end - end + has_many :issues + has_many :merge_requests - def self.build(group, projects, title) - super(projects, title).tap do |milestone| - milestone&.group = group - end - end + # Use a uniqueness scope here to check name with project milestones + validates :title, presence: true - def issues_finder_params - { group_id: group.id } + # Move this validation to a concern and share with project milestone + validate :start_date_should_be_less_than_due_date, if: proc { |m| m.start_date.present? && m.due_date.present? } + strip_attributes :title + alias_attribute :name, :title + + + def start_date_should_be_less_than_due_date + if due_date <= start_date + errors.add(:start_date, "Can't be greater than due date") + end end end |