Class: Apiwork::Adapter::Standard::IncludesResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/apiwork/adapter/standard/includes_resolver.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(representation_class) ⇒ IncludesResolver

Returns a new instance of IncludesResolver.



15
16
17
# File 'lib/apiwork/adapter/standard/includes_resolver.rb', line 15

def initialize(representation_class)
  @representation_class = representation_class
end

Instance Attribute Details

#representation_classObject (readonly)



7
8
9
# File 'lib/apiwork/adapter/standard/includes_resolver.rb', line 7

def representation_class
  @representation_class
end

Class Method Details

.resolve(representation_class, params = {}, include_always: false) ⇒ Object



10
11
12
# File 'lib/apiwork/adapter/standard/includes_resolver.rb', line 10

def resolve(representation_class, params = {}, include_always: false)
  new(representation_class).resolve(params, include_always:)
end

Instance Method Details

#always_included(visited = Set.new) ⇒ Object



25
26
27
28
# File 'lib/apiwork/adapter/standard/includes_resolver.rb', line 25

def always_included(visited = Set.new)
  associations = representation_class.associations.select { |_, a| a.include == :always }
  extract_associations(associations, visited)
end

#format(hash) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/apiwork/adapter/standard/includes_resolver.rb', line 40

def format(hash)
  return [] if hash.blank?

  result = hash.map do |key, value|
    if value.blank?
      key
    else
      { key => format(value) }
    end
  end

  result.size == 1 ? result.first : result
end

#from_params(params, visited = Set.new) ⇒ Object



30
31
32
# File 'lib/apiwork/adapter/standard/includes_resolver.rb', line 30

def from_params(params, visited = Set.new)
  extract_from_hash(params, visited)
end

#merge(base, override) ⇒ Object



34
35
36
37
38
# File 'lib/apiwork/adapter/standard/includes_resolver.rb', line 34

def merge(base, override)
  return base if override.blank?

  base.deep_merge(override.deep_symbolize_keys)
end

#resolve(params = {}, include_always: false) ⇒ Object



19
20
21
22
23
# File 'lib/apiwork/adapter/standard/includes_resolver.rb', line 19

def resolve(params = {}, include_always: false)
  base = include_always ? always_included : {}
  merged = merge(base, from_params(params))
  format(merged)
end