class Codependent::InjectableBuilder

Attributes

dependencies[R]
id[R]
resolver[R]
state[R]
type[R]
validator[R]

Public Class Methods

new(id, type) click to toggle source
# File lib/codependent/injectable_builder.rb, line 16
def initialize(id, type)
  @id = id
  @type = type
  @dependencies = []
  @state = {}
  @skip_checks = false
end

Public Instance Methods

build() click to toggle source
# File lib/codependent/injectable_builder.rb, line 61
def build
  return unless @validator

  validate unless @skip_checks

  Injectable.new(@type, @dependencies, @state, @resolver)
end
depends_on(*dependencies) click to toggle source
# File lib/codependent/injectable_builder.rb, line 57
def depends_on(*dependencies)
  @dependencies.concat(dependencies)
end
from_provider(&block) click to toggle source
# File lib/codependent/injectable_builder.rb, line 32
def from_provider(&block)
  @state = { provider: block }
  @validator = Validators::ProviderValidator
  @resolver = Resolvers::ProviderResolver
end
from_type(klass, additional_args = nil) click to toggle source
# File lib/codependent/injectable_builder.rb, line 38
def from_type(klass, additional_args = nil)
  @state = {
    type: klass,
    additional_args: additional_args
  }

  @validator = Validators::ConstructorInjectionValidator
  @resolver = Resolvers::EagerTypeResolver
end
from_value(value) click to toggle source
# File lib/codependent/injectable_builder.rb, line 26
def from_value(value)
  @state = { value: value }
  @validator = Validators::ValueValidator
  @resolver = Resolvers::ValueResolver
end
inject_setters() click to toggle source
# File lib/codependent/injectable_builder.rb, line 48
def inject_setters
  @validator = Validators::SetterInjectionValidator
  @resolver = Resolvers::DeferredTypeResolver
end
skip_checks() click to toggle source
# File lib/codependent/injectable_builder.rb, line 53
def skip_checks
  @skip_checks = true
end

Private Instance Methods

validate() click to toggle source
# File lib/codependent/injectable_builder.rb, line 71
def validate
  @validator.new.(@type, @state, @dependencies)
rescue Codependent::Errors::CodependentError => e
  raise "#{e.message} Check the configuration for #{id}."
end