Class: FunApi::Depends
- Inherits:
-
Object
- Object
- FunApi::Depends
- Defined in:
- lib/funapi/depends.rb
Instance Attribute Summary collapse
-
#callable ⇒ Object
readonly
Returns the value of attribute callable.
-
#sub_dependencies ⇒ Object
readonly
Returns the value of attribute sub_dependencies.
Instance Method Summary collapse
- #call(context, cache = {}) ⇒ Object
-
#initialize(callable, **sub_dependencies) ⇒ Depends
constructor
A new instance of Depends.
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
#callable ⇒ Object (readonly)
Returns the value of attribute callable.
5 6 7 |
# File 'lib/funapi/depends.rb', line 5 def callable @callable end |
#sub_dependencies ⇒ Object (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 |