module Spree::ServiceModule::Base
Public Class Methods
prepended(base)
click to toggle source
# File lib/spree_extension/service_module.rb, line 45 def self.prepended(base) class << base prepend Callable end end
Public Instance Methods
call(input = nil)
click to toggle source
Calls superclass method
# File lib/spree_extension/service_module.rb, line 51 def call(input = nil) input ||= {} @_passed_input = Result.new(true, input) result = super @_passed_input = result if result.is_a? Result enforce_data_format @_passed_input end
Private Instance Methods
enforce_data_format()
click to toggle source
# File lib/spree_extension/service_module.rb, line 97 def enforce_data_format raise WrongDataPassed, "You didn't use `success` or `failure` method to return value from method." unless @_passed_input.instance_of? Result end
failure(value, error = nil)
click to toggle source
# File lib/spree_extension/service_module.rb, line 92 def failure(value, error = nil) error = value.errors if error.nil? && value.respond_to?(:errors) Result.new(false, value, ResultError.new(error)) end
run(callable)
click to toggle source
# File lib/spree_extension/service_module.rb, line 62 def run(callable) return unless @_passed_input.success? if callable.instance_of? Symbol unless respond_to?(callable, true) raise MethodNotImplemented, "You didn't implement #{callable} method. Implement it before calling this class" end callable = method(callable) end unless callable.respond_to?(:call) raise NonCallablePassedToRun, 'You can pass only symbol with method name or instance of callable class to run method' end begin @_passed_input = callable.call(@_passed_input.value) rescue ArgumentError => e if e.message.include? 'missing' raise IncompatibleParamsPassed, "You didn't pass #{e.message} to callable '#{callable.name}'" else raise IncompatibleParamsPassed, "You passed #{e.message} to callable '#{callable.name}'" end end end
success(value)
click to toggle source
# File lib/spree_extension/service_module.rb, line 88 def success(value) Result.new(true, value, nil) end