Class: CurationConcerns::Workflow::ActionTakenService
- Inherits:
-
Object
- Object
- CurationConcerns::Workflow::ActionTakenService
- Defined in:
- app/services/curation_concerns/workflow/action_taken_service.rb
Overview
Responsible for performing additional functions when the given criteria is met.
Instance Attribute Summary collapse
-
#action ⇒ Object
readonly
Returns the value of attribute action.
-
#comment ⇒ Object
readonly
Returns the value of attribute comment.
-
#target ⇒ Object
readonly
Returns the value of attribute target.
-
#user ⇒ Object
readonly
Returns the value of attribute user.
Class Method Summary collapse
-
.handle_action_taken(target:, action:, comment:, user:) ⇒ Object
For the given target and :action - Find the appropriate “function” to call - Then call that function.
Instance Method Summary collapse
-
#call ⇒ Boolean
Calls all the workflow methods for this action.
-
#initialize(target:, action:, comment:, user:) ⇒ ActionTakenService
constructor
A new instance of ActionTakenService.
-
#process_action(service_name) {|status| ... } ⇒ Object
The result of calling the method.
-
#resolve_service(class_name) ⇒ Class, NilClass
Return nil if unable to locate the class.
Constructor Details
#initialize(target:, action:, comment:, user:) ⇒ ActionTakenService
Returns a new instance of ActionTakenService.
15 16 17 18 19 20 |
# File 'app/services/curation_concerns/workflow/action_taken_service.rb', line 15 def initialize(target:, action:, comment:, user:) @target = target @action = action @comment = comment @user = user end |
Instance Attribute Details
#action ⇒ Object (readonly)
Returns the value of attribute action.
22 23 24 |
# File 'app/services/curation_concerns/workflow/action_taken_service.rb', line 22 def action @action end |
#comment ⇒ Object (readonly)
Returns the value of attribute comment.
22 23 24 |
# File 'app/services/curation_concerns/workflow/action_taken_service.rb', line 22 def comment @comment end |
#target ⇒ Object (readonly)
Returns the value of attribute target.
22 23 24 |
# File 'app/services/curation_concerns/workflow/action_taken_service.rb', line 22 def target @target end |
#user ⇒ Object (readonly)
Returns the value of attribute user.
22 23 24 |
# File 'app/services/curation_concerns/workflow/action_taken_service.rb', line 22 def user @user end |
Class Method Details
.handle_action_taken(target:, action:, comment:, user:) ⇒ Object
For the given target and :action
-
Find the appropriate “function” to call
-
Then call that function. If the function returns a truthy value, then save the target
8 9 10 11 12 13 |
# File 'app/services/curation_concerns/workflow/action_taken_service.rb', line 8 def self.handle_action_taken(target:, action:, comment:, user:) new(target: target, action: action, comment: comment, user: user).call end |
Instance Method Details
#call ⇒ Boolean
Calls all the workflow methods for this action. Stops calling methods if any return falsy
26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'app/services/curation_concerns/workflow/action_taken_service.rb', line 26 def call return unless action.triggered_methods.any? success = action.triggered_methods.order(:weight).all? do |method| status = process_action(method.service_name) Rails.logger.debug("Result of #{method.service_name} is #{status}") status end return target.save if success Rails.logger.error "Not all workflow methods were successful, so not saving (#{target.id})" false end |
#process_action(service_name) {|status| ... } ⇒ Object
Returns the result of calling the method.
42 43 44 45 46 47 48 49 50 |
# File 'app/services/curation_concerns/workflow/action_taken_service.rb', line 42 def process_action(service_name) service = resolve_service(service_name) return unless service result = service.call(target: target, comment: comment, user: user) yield(result) if block_given? result end |
#resolve_service(class_name) ⇒ Class, NilClass
Return nil if unable to locate the class
54 55 56 57 58 59 60 61 62 63 64 |
# File 'app/services/curation_concerns/workflow/action_taken_service.rb', line 54 def resolve_service(class_name) klass = begin class_name.constantize rescue NameError Rails.logger.error "Unable to find '#{class_name}', so not running workflow callback" return nil end return klass if klass.respond_to?(:call) Rails.logger.error "Expected '#{class_name}' to respond to 'call', but it didn't, so not running workflow callback" nil end |