class ServicePattern::Service
Public Class Methods
call(*args, &blk)
click to toggle source
# File lib/service_pattern/service.rb, line 12 def self.call(*args, &blk) execute(*args, &blk) end
chain(*args, &blk)
click to toggle source
The same as execute but doesn't catch FailedError so they are passed on to the parent service call
# File lib/service_pattern/service.rb, line 3 def self.chain(*args, &blk) service = new(*args, &blk) can_execute_response = service.can_execute? ServicePattern::Service.fail!(can_execute_response.errors) unless can_execute_response.success? service.perform end
convert_errors(errors)
click to toggle source
# File lib/service_pattern/service.rb, line 24 def self.convert_errors(errors) errors = [errors] unless errors.is_a?(Array) errors.map do |error| error = ServicePattern::FailError.new(message: error) unless error.is_a?(ServicePattern::FailError) error end end
execute(*args, &blk)
click to toggle source
# File lib/service_pattern/service.rb, line 16 def self.execute(*args, &blk) new(*args, &blk).execute end
execute!(*args, &blk)
click to toggle source
# File lib/service_pattern/service.rb, line 20 def self.execute!(*args, &blk) new(*args, &blk).execute! end
fail!(errors)
click to toggle source
# File lib/service_pattern/service.rb, line 32 def self.fail!(errors) errors = convert_errors(errors) error_messages = errors.map(&:message) error = ServicePattern::FailedError.new(error_messages.join(". ")) error.errors = errors raise error end
Public Instance Methods
can_execute?()
click to toggle source
# File lib/service_pattern/service.rb, line 42 def can_execute? succeed! end
execute()
click to toggle source
# File lib/service_pattern/service.rb, line 46 def execute can_execute_response = can_execute? return can_execute_response unless can_execute_response.success? perform rescue ServicePattern::FailedError => e ServicePattern::Response.new(errors: e.errors) end
execute!()
click to toggle source
# File lib/service_pattern/service.rb, line 55 def execute! can_execute_response = can_execute? ServicePattern::Service.fail!(can_execute_response.errors) unless can_execute_response.success? response = perform ServicePattern::Service.fail!(response.errors) unless response.success? response.result end
fail!(errors, type: nil)
click to toggle source
# File lib/service_pattern/service.rb, line 67 def fail!(errors, type: nil) errors = [ServicePattern::FailError.new(message: errors, type: type)] if type ServicePattern::Service.fail!(errors) end
perform(*_args)
click to toggle source
# File lib/service_pattern/service.rb, line 63 def perform(*_args) raise NoMethodError, "You should implement the `perform` method on your service" end
succeed!(result = nil)
click to toggle source
# File lib/service_pattern/service.rb, line 73 def succeed!(result = nil) ServicePattern::Response.new(result: result) end