From 44c748f968f6a82e6dab444e6b9127f5a342f0e2 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sat, 3 Jun 2017 08:04:13 +0000 Subject: [PATCH] Use regular instance methods instead of association extensions. Rails 5.1 seems to mess things up in this particular case (role.workflow_rules.copy calls the extension declare in Tracker model). git-svn-id: http://svn.redmine.org/redmine/trunk@16597 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/roles_controller.rb | 2 +- app/controllers/trackers_controller.rb | 2 +- app/models/role.rb | 7 ++++++- app/models/tracker.rb | 8 ++++++-- app/models/workflow_rule.rb | 2 +- test/unit/role_test.rb | 2 +- test/unit/tracker_test.rb | 2 +- 7 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/controllers/roles_controller.rb b/app/controllers/roles_controller.rb index d134e1f67..6071e767b 100644 --- a/app/controllers/roles_controller.rb +++ b/app/controllers/roles_controller.rb @@ -60,7 +60,7 @@ class RolesController < ApplicationController if request.post? && @role.save # workflow copy if !params[:copy_workflow_from].blank? && (copy_from = Role.find_by_id(params[:copy_workflow_from])) - @role.workflow_rules.copy(copy_from) + @role.copy_workflow_rules(copy_from) end flash[:notice] = l(:notice_successful_create) redirect_to roles_path diff --git a/app/controllers/trackers_controller.rb b/app/controllers/trackers_controller.rb index 5bae880d1..c624133a7 100644 --- a/app/controllers/trackers_controller.rb +++ b/app/controllers/trackers_controller.rb @@ -44,7 +44,7 @@ class TrackersController < ApplicationController if @tracker.save # workflow copy if !params[:copy_workflow_from].blank? && (copy_from = Tracker.find_by_id(params[:copy_workflow_from])) - @tracker.workflow_rules.copy(copy_from) + @tracker.copy_workflow_rules(copy_from) end flash[:notice] = l(:notice_successful_create) redirect_to trackers_path diff --git a/app/models/role.rb b/app/models/role.rb index 8f72b6c52..b5be74179 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -61,7 +61,8 @@ class Role < ActiveRecord::Base before_destroy :check_deletable has_many :workflow_rules, :dependent => :delete_all do def copy(source_role) - WorkflowRule.copy(nil, source_role, nil, proxy_association.owner) + ActiveSupport::Deprecation.warn "role.workflow_rules.copy is deprecated and will be removed in Redmine 4.0, use role.copy_worflow_rules instead" + proxy_association.owner.copy_workflow_rules(source_role) end end has_and_belongs_to_many :custom_fields, :join_table => "#{table_name_prefix}custom_fields_roles#{table_name_suffix}", :foreign_key => "role_id" @@ -261,6 +262,10 @@ class Role < ActiveRecord::Base self end + def copy_workflow_rules(source_role) + WorkflowRule.copy(nil, source_role, nil, self) + end + # Find all the roles that can be given to a project member def self.find_all_givable Role.givable.to_a diff --git a/app/models/tracker.rb b/app/models/tracker.rb index 9c19111b1..4004e80d2 100644 --- a/app/models/tracker.rb +++ b/app/models/tracker.rb @@ -29,10 +29,10 @@ class Tracker < ActiveRecord::Base has_many :issues has_many :workflow_rules, :dependent => :delete_all do def copy(source_tracker) - WorkflowRule.copy(source_tracker, nil, proxy_association.owner, nil) + ActiveSupport::Deprecation.warn "tracker.workflow_rules.copy is deprecated and will be removed in Redmine 4.0, use tracker.copy_worflow_rules instead" + proxy_association.owner.copy_workflow_rules(source_tracker) end end - has_and_belongs_to_many :projects has_and_belongs_to_many :custom_fields, :class_name => 'IssueCustomField', :join_table => "#{table_name_prefix}custom_fields_trackers#{table_name_suffix}", :association_foreign_key => 'custom_field_id' acts_as_positioned @@ -121,6 +121,10 @@ class Tracker < ActiveRecord::Base core_fields end + def copy_workflow_rules(source_tracker) + WorkflowRule.copy(source_tracker, nil, self, nil) + end + # Returns the fields that are disabled for all the given trackers def self.disabled_core_fields(trackers) if trackers.present? diff --git a/app/models/workflow_rule.rb b/app/models/workflow_rule.rb index da7a91f43..d6df726f7 100644 --- a/app/models/workflow_rule.rb +++ b/app/models/workflow_rule.rb @@ -29,7 +29,7 @@ class WorkflowRule < ActiveRecord::Base # Copies workflows from source to targets def self.copy(source_tracker, source_role, target_trackers, target_roles) unless source_tracker.is_a?(Tracker) || source_role.is_a?(Role) - raise ArgumentError.new("source_tracker or source_role must be specified") + raise ArgumentError.new("source_tracker or source_role must be specified, given: #{source_tracker.class.name} and #{source_role.class.name}") end target_trackers = [target_trackers].flatten.compact diff --git a/test/unit/role_test.rb b/test/unit/role_test.rb index 092df322e..9ddac8c77 100644 --- a/test/unit/role_test.rb +++ b/test/unit/role_test.rb @@ -59,7 +59,7 @@ class RoleTest < ActiveSupport::TestCase target = Role.new(:name => 'Target') assert target.save - target.workflow_rules.copy(source) + target.copy_workflow_rules(source) target.reload assert_equal rule_count, target.workflow_rules.size end diff --git a/test/unit/tracker_test.rb b/test/unit/tracker_test.rb index ad842a753..99ea47b4f 100644 --- a/test/unit/tracker_test.rb +++ b/test/unit/tracker_test.rb @@ -47,7 +47,7 @@ class TrackerTest < ActiveSupport::TestCase target = Tracker.new(:name => 'Target', :default_status_id => 1) assert target.save - target.workflow_rules.copy(source) + target.copy_workflow_rules(source) target.reload assert_equal rules_count, target.workflow_rules.size end -- 2.39.5