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