module Civil::Service

Public Class Methods

included(klass) click to toggle source
# File lib/civil/service.rb, line 3
def self.included(klass)
  class << klass
    # Civil::Service.service
    # Wrapper method, used within service class
    #
    # service do
    #   execute_step_1
    #   execute_step_2
    #   ...
    # end
    def service(&block)
      define_method '_run', &block
    end

    # Civil::Service.call
    # Initiate service execution and return standardized result
    #
    # result = MyService.call(foo: 1, bar: 'a')
    #
    # if result.ideal?
    #   ...
    # else
    #   ...
    # end
    def call(params = {}, &block)
      service = new(params)
      data = (block ? service.instance_eval(&block) : service._run)

      Civil::Result.new(data, service._conditions, service._meta)
    end
  end
end
new(params = {}) click to toggle source
# File lib/civil/service.rb, line 36
def initialize(params = {})
  params.to_h.each do |(name, value)|
    instance_variable_set("@#{name}", value)
  end
end

Public Instance Methods

_conditions() click to toggle source
# File lib/civil/service.rb, line 54
def _conditions
  @_conditions ||= Civil::Hash.new
end
_meta() click to toggle source
# File lib/civil/service.rb, line 58
def _meta
  @_meta ||= Civil::Hash.new
end
add_condition(key, condition) click to toggle source
# File lib/civil/service.rb, line 42
def add_condition(key, condition)
  conditions = (_conditions[key.to_sym] ||= Civil::Array.new)

  conditions << condition
end
add_meta(key, metadatum) click to toggle source
# File lib/civil/service.rb, line 48
def add_meta(key, metadatum)
  meta = (_meta[key.to_sym] ||= Civil::Array.new)

  meta << metadatum
end
merge_result(result) click to toggle source
# File lib/civil/service.rb, line 62
def merge_result(result)
  _conditions.merge! result.conditions
  _meta.merge! result.meta
  result.data
end