module Injectable::InstanceMethods
Public Class Methods
new(args = {})
click to toggle source
Initialize the service with the dependencies injected
Calls superclass method
# File lib/injectable/instance_methods.rb, line 4 def initialize(args = {}) check_missing_arguments!(self.class.required_initialize_arguments, args) variables_for!(self.class.initialize_arguments, args) variables_from_dependencies!(args) super() end
Public Instance Methods
call(args = {})
click to toggle source
Entry point of the service. Arguments for this method should be declared explicitly with '.argument' and declare this method without arguments
Calls superclass method
# File lib/injectable/instance_methods.rb, line 14 def call(args = {}) check_call_definition! check_missing_arguments!(self.class.required_call_arguments, args) variables_for!(self.class.call_arguments, args) super() end
Private Instance Methods
check_call_definition!()
click to toggle source
# File lib/injectable/instance_methods.rb, line 23 def check_call_definition! return if (self.class.ancestors - [Injectable::InstanceMethods]).any? do |ancestor| ancestor.instance_methods(false).include?(:call) end raise NoMethodError, "A #call method with zero arity must be defined in #{self.class}" end
check_missing_arguments!(expected, args)
click to toggle source
# File lib/injectable/instance_methods.rb, line 30 def check_missing_arguments!(expected, args) missing = expected - args.keys return if missing.empty? raise ArgumentError, "missing keywords: #{missing.join(',')}" end
dependencies_proxy()
click to toggle source
# File lib/injectable/instance_methods.rb, line 49 def dependencies_proxy @dependencies_proxy ||= self.class.dependencies.proxy end
variables_for!(subject, args)
click to toggle source
# File lib/injectable/instance_methods.rb, line 36 def variables_for!(subject, args) subject.each do |arg, options| instance_variable_set("@#{arg}", args.fetch(arg) { options[:default] }) end end
variables_from_dependencies!(args)
click to toggle source
# File lib/injectable/instance_methods.rb, line 42 def variables_from_dependencies!(args) self.class.dependencies.names.each do |name| next if self.class.initialize_arguments.key?(name) instance_variable_set("@#{name}", args[name]) if args.key?(name) end end