module Cater::Service

Public Instance Methods

_service_success=(result) click to toggle source
# File lib/cater/service.rb, line 72
def _service_success=(result)
  @_service_success = result
end
after_call(*filters, &blk) click to toggle source
# File lib/cater/service.rb, line 78
def after_call(*filters, &blk)
  set_callback(:call, :after, *filters, &blk)
end
after_error(*filters, &blk) click to toggle source
# File lib/cater/service.rb, line 94
def after_error(*filters, &blk)
  set_callback(:error, :after, *filters, &blk)
end
after_success(*filters, &blk) click to toggle source
# File lib/cater/service.rb, line 90
def after_success(*filters, &blk)
  set_callback(:success, :after, *filters, &blk)
end
around_call(*filters, &blk) click to toggle source
# File lib/cater/service.rb, line 82
def around_call(*filters, &blk)
  set_callback(:call, :around, *filters, &blk)
end
before_call(*filters, &blk) click to toggle source
# File lib/cater/service.rb, line 86
def before_call(*filters, &blk)
  set_callback(:call, :before, *filters, &blk)
end
call(*args) click to toggle source
# File lib/cater/service.rb, line 98
def call(*args)
  instance = self.new
  instance.run_callbacks :call do
    begin
      instance.call(*args)
      instance.send(:_service_success=, true)
      instance.run_callbacks :success
    rescue ServiceError
      instance.send(:_service_success=, false)
      instance.run_callbacks :error
    end
  end

  return instance
end
error!(message=nil) click to toggle source

raise error

error! “Something is required” errors.messages # => {:base=> [“Something is required”]}

error! name: “is required”, email: “invalid” errors.messages # => {:name=> [“is required”], :email=> [“invalid”]}

error! other_service.errors,

# File lib/cater/service.rb, line 36
def error!(message=nil)
  if message.kind_of?  ActiveModel::Errors
    self.errors.copy! message
    self.message = message.values.join ', '
  elsif message.kind_of? Hash
    message.each do |attr, msg|
      if msg.kind_of? Array
        msg.each{|m| self.errors.add(attr, m)}
      else
        self.errors.add(attr, msg)
      end
    end
    self.message = message.values.join ', '
  else
    self.errors.add(:base, message)
    self.message = message
  end
  raise ServiceError
end
error?() click to toggle source
# File lib/cater/service.rb, line 56
def error?
  !success?
end
on_error() { |self| ... } click to toggle source
# File lib/cater/service.rb, line 65
def on_error
  yield self if block_given? && error?
  self
end
on_success() { |self| ... } click to toggle source
# File lib/cater/service.rb, line 60
def on_success
  yield self if block_given? && success?
  self
end
success?() click to toggle source
# File lib/cater/service.rb, line 19
def success?
  fail "Service was not called yet" if @_service_success.nil?
  @_service_success
end