Class: FunApi::Depends

Inherits:
Object
  • Object
show all
Defined in:
lib/funapi/depends.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(callable, **sub_dependencies) ⇒ Depends

Returns a new instance of Depends.



7
8
9
10
11
12
# File 'lib/funapi/depends.rb', line 7

def initialize(callable, **sub_dependencies)
  @callable = callable
  @sub_dependencies = sub_dependencies

  validate_callable!
end

Instance Attribute Details

#callableObject (readonly)

Returns the value of attribute callable.



5
6
7
# File 'lib/funapi/depends.rb', line 5

def callable
  @callable
end

#sub_dependenciesObject (readonly)

Returns the value of attribute sub_dependencies.



5
6
7
# File 'lib/funapi/depends.rb', line 5

def sub_dependencies
  @sub_dependencies
end

Instance Method Details

#call(context, cache = {}) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/funapi/depends.rb', line 14

def call(context, cache = {})
  cache_key = object_id

  return cache[cache_key] if cache.key?(cache_key)

  resolved_deps, sub_cleanups = resolve_sub_dependencies(context, cache)
  available_context = context.merge(resolved_deps)

  result, cleanup = execute_callable(available_context)

  combined_cleanup = if sub_cleanups.any? || cleanup
    lambda {
      sub_cleanups.each(&:call)
      cleanup&.call
    }
  end

  final_result = [result, combined_cleanup]
  cache[cache_key] = final_result
  final_result
end