Module: Civil::Service

Defined in:
lib/civil/service.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 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

Instance Method Details

#_conditionsObject



54
55
56
# File 'lib/civil/service.rb', line 54

def _conditions
  @_conditions ||= Civil::Hash.new
end

#_metaObject



58
59
60
# File 'lib/civil/service.rb', line 58

def _meta
  @_meta ||= Civil::Hash.new
end

#add_condition(key, condition) ⇒ Object



42
43
44
45
46
# 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) ⇒ Object



48
49
50
51
52
# File 'lib/civil/service.rb', line 48

def add_meta(key, metadatum)
  meta = (_meta[key.to_sym] ||= Civil::Array.new)

  meta << metadatum
end

#initialize(params = {}) ⇒ Object



36
37
38
39
40
# File 'lib/civil/service.rb', line 36

def initialize(params = {})
  params.to_h.each do |(name, value)|
    instance_variable_set("@#{name}", value)
  end
end