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