class Codependent::Validators::ConstructorInjectionValidator
Public Instance Methods
call(_, state, dependencies)
click to toggle source
# File lib/codependent/validators/constructor_injection_validator.rb, line 6 def call(_, state, dependencies) raise Codependent::Errors::MissingTypeError unless state[:type] return unless dependencies.count > 0 validate_constructor_params(state[:type], dependencies) end
Private Instance Methods
all_keywords?(params)
click to toggle source
# File lib/codependent/validators/constructor_injection_validator.rb, line 16 def all_keywords?(params) params.all? { |p| p[0] == :key || p[0] == :keyreq } end
extract_param_names(params)
click to toggle source
# File lib/codependent/validators/constructor_injection_validator.rb, line 20 def extract_param_names(params) params.map { |p| p[1] } end
params_for_all_dependencies?(dependencies, parameter_names)
click to toggle source
# File lib/codependent/validators/constructor_injection_validator.rb, line 24 def params_for_all_dependencies?(dependencies, parameter_names) (dependencies - parameter_names).empty? end
validate_constructor_params(klass, dependencies)
click to toggle source
# File lib/codependent/validators/constructor_injection_validator.rb, line 28 def validate_constructor_params(klass, dependencies) params = klass.instance_method(:initialize).parameters raise Codependent::Errors::NoConstructorArgsError if params.count == 0 return unless all_keywords?(params) parameter_names = extract_param_names(params) return if params_for_all_dependencies?(dependencies, parameter_names) raise Codependent::Errors::MissingKeywordArgError end