module Dry::Container::ClassInterface
Class-level DSL for nested container definition
Public Instance Methods
apply_namespace!()
click to toggle source
# File lib/dry/container/nested.rb, line 121 def apply_namespace! key_methods.map do |method| redefine_method method end end
Private Instance Methods
key_methods()
click to toggle source
Methods accepting key as one of their parameters @return [<UnboundMethod>]
# File lib/dry/container/nested.rb, line 131 def key_methods Mixin.instance_methods(false).inject([]) do |result, method| key_parameter(method) ? result + [method] : result end end
key_parameter(method_or_name)
click to toggle source
@param [UnboundMethod] method_or_name
# File lib/dry/container/nested.rb, line 138 def key_parameter(method_or_name) method_or_name = method_definition(method_or_name) method_or_name.parameters.detect { |_kind, name| :key == name } end
method_definition(method_or_name, from: Mixin)
click to toggle source
@param [UnboundMethod, Symbol] method_or_name @param [Module] from @return [UnboundMethod]
# File lib/dry/container/nested.rb, line 146 def method_definition(method_or_name, from: Mixin) if method_or_name.is_a?(Symbol) method_or_name = from.instance_method method_or_name end unless method_or_name.is_a? UnboundMethod raise ArgumentError, "#{method_or_name} is not an unbound method or symbol "\ "found in #{from}", caller.join("\n") end method_or_name end
redefine_method(method)
click to toggle source
@param [UnboundMethod] method
# File lib/dry/container/nested.rb, line 160 def redefine_method(method) method = method_definition(method) key_parameter = key_parameter(method) index = method.parameters.index(key_parameter) define_method method.name do |*args, **kwargs| args = args.dup args[index] = prefixed(args[index]) container.send(method.name, *args, **kwargs) end end