Class: Apiwork::Adapter::Capability::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/apiwork/adapter/capability/runner.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(capabilities, wrapper_type:) ⇒ Runner

Returns a new instance of Runner.



13
14
15
16
# File 'lib/apiwork/adapter/capability/runner.rb', line 13

def initialize(capabilities, wrapper_type:)
  @capabilities = capabilities
  @wrapper_type = wrapper_type
end

Class Method Details

.run(capabilities, data:, representation_class:, request:, wrapper_type:) ⇒ Object



8
9
10
# File 'lib/apiwork/adapter/capability/runner.rb', line 8

def run(capabilities, data:, representation_class:, request:, wrapper_type:)
  new(capabilities, wrapper_type:).run(data, representation_class, request)
end

Instance Method Details

#run(data, representation_class, request) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/apiwork/adapter/capability/runner.rb', line 18

def run(data, representation_class, request)
   = {}
  serialize_options = {}
  includes = []

  result_data = @capabilities.reduce(data) do |current, capability|
    result = capability.apply(current, representation_class, request, wrapper_type: @wrapper_type)
    next current unless result

    .merge!(result.) if result.
    serialize_options.merge!(result.serialize_options || {})
    includes << result.includes if result.includes.present?
    result.data || current
  end

  includes.concat(representation_class.preloads)
  preloaded = preload_associations(result_data, includes.flatten.compact)

  [preloaded, , serialize_options]
end