class ServicePacker::Service

Attributes

actions[R]
callbacks[R]
validations[R]

Public Class Methods

new() click to toggle source
# File lib/service_packer/service.rb, line 3
def initialize
  common_validation_define { true }
  common_callback_define { true }
  @validations = {}
  @actions = {}
  @callbacks = {}
  @config = ServicePacker::Configuration.new

  @method_name = nil
end

Public Instance Methods

action_define(*args, &block) click to toggle source
# File lib/service_packer/service.rb, line 35
def action_define(*args, &block)
  add_action(@method_name, *args, &block)
end
callback_define(*args, &block) click to toggle source
# File lib/service_packer/service.rb, line 39
def callback_define(*args, &block)
  add_callback(@method_name, *args, &block)
end
common_callback_define(*args, &block) click to toggle source
# File lib/service_packer/service.rb, line 27
def common_callback_define(*args, &block)
  @common_callback = ServicePacker::Core::Callback.new("common_callback", *args, &block)
end
common_validation_define(*args, &block) click to toggle source
# File lib/service_packer/service.rb, line 23
def common_validation_define(*args, &block)
  @common_validation = ServicePacker::Core::Validation.new("common_validation", *args, &block)
end
invoke(record, name, params, *args) click to toggle source
# File lib/service_packer/service.rb, line 43
def invoke(record, name, params, *args)
  record.__set_arguments(params.zip(args).to_h)
  result = process(record, name, *args)
  record.__clear_arguments

  result
end
process(record, name, *args) click to toggle source
# File lib/service_packer/service.rb, line 51
def process(record, name, *args)
  validation_result = @common_validation.invoke(record, *args) && @validations[name].invoke(record, *args)

  if validation_result
    action_result = @actions[name].invoke(record, *args)
    if (action_result.respond_to?(:errors) && action_result.errors.empty?) || action_result == true
      @common_callback.invoke(record, *args)
      @callbacks[name].invoke(record, *args)
      true
    else
      false
    end
  else
    false
  end
end
setup_method(name, &block) click to toggle source
# File lib/service_packer/service.rb, line 14
def setup_method(name, &block)
  @method_name = name
  validation_define { true }
  action_define { true }
  callback_define { true }
  block.call if block_given?
  @method_name = nil
end
validation_define(*args, &block) click to toggle source
# File lib/service_packer/service.rb, line 31
def validation_define(*args, &block)
  add_validation(@method_name, *args, &block)
end

Private Instance Methods

add_action(name, *args, &block) click to toggle source
# File lib/service_packer/service.rb, line 76
def add_action(name, *args, &block)
  @actions[name] = ServicePacker::Core::Action.new(name, *args, &block)
end
add_callback(name, *args, &block) click to toggle source
# File lib/service_packer/service.rb, line 80
def add_callback(name, *args, &block)
  @callbacks[name] = ServicePacker::Core::Callback.new(name, *args, &block)
end
add_validation(name, *args, &block) click to toggle source
# File lib/service_packer/service.rb, line 72
def add_validation(name, *args, &block)
  @validations[name] = ServicePacker::Core::Validation.new(name, *args, &block)
end