class CrystalClear::Resolver

Public Instance Methods

get(class_name) click to toggle source

@return [<? extends class_name>]

# File lib/crystal_clear/resolver.rb, line 7
def get(class_name)
  result = storage[class_name]
  raise ClassNotRegisteredError.new("No information about class: #{class_name}") unless result
  result.instantiate
end
register(builder) click to toggle source

@param [CrystalClear::RegistrationBuilder] builder @return [CrystalClear::Resolver]

# File lib/crystal_clear/resolver.rb, line 15
def register(builder)
  raise ArgumentError, "#{builder.class} is not a CrystalClear::RegistrationBuilder" unless builder.is_a?(CrystalClear::RegistrationBuilder)
  builder.build(add_procedure)
  self
end
register_as_singleton(class_name) click to toggle source

@param [Class] class_name @return [CrystalClear::Resolver]

# File lib/crystal_clear/resolver.rb, line 30
def register_as_singleton(class_name)
  raise ArgumentError, "#{class_name.class} is not a Class" unless class_name.is_a?(Class)
  register(CrystalClear::RegistrationBuilder.for(class_name).resolves_to_singleton)
end
register_class(class_name) click to toggle source

@param [Class] class_name @return [CrystalClear::Resolver]

# File lib/crystal_clear/resolver.rb, line 23
def register_class(class_name)
  raise ArgumentError, "#{class_name.class} is not a Class" unless class_name.is_a?(Class)
  register(CrystalClear::RegistrationBuilder.for(class_name))
end
register_provider(provider_class, class_name) click to toggle source

@param [Class] provider_class @param [Class] class_name @return [CrystalClear::Resolver]

# File lib/crystal_clear/resolver.rb, line 38
def register_provider(provider_class, class_name)
  raise ArgumentError, "#{provider_class} is not a Class" unless provider_class.is_a?(Class)
  raise ArgumentError, "#{provider_class} is not a Provider" unless provider_class < CrystalClear::Provider
  raise ArgumentError, "#{class_name} is not a Class" unless class_name.is_a?(Class)
  register(CrystalClear::RegistrationBuilder.for(class_name).resolves_to_provider(provider_class))
end
register_singleton_provider(provider_class, class_name) click to toggle source

@param [Class] provider_class @param [Class] class_name @return [CrystalClear::Resolver]

# File lib/crystal_clear/resolver.rb, line 48
def register_singleton_provider(provider_class, class_name)
  raise ArgumentError, "#{provider_class} is not a Class" unless provider_class.is_a?(Class)
  raise ArgumentError, "#{provider_class} is not a Provider" unless provider_class < CrystalClear::Provider
  raise ArgumentError, "#{class_name} is not a Class" unless class_name.is_a?(Class)
  register(CrystalClear::RegistrationBuilder.for(class_name).resolves_to_singleton_provider(provider_class))
end

Private Instance Methods

add_procedure() click to toggle source
# File lib/crystal_clear/resolver.rb, line 61
def add_procedure
  @add_procedure ||= proc do |classes, instantiator, class_name|
    classes.each do |c|
      if storage[c].nil?
        storage[c] = instantiator
      else
        raise ClassAlreadyRegisteredError.new("Class #{c} already registered for class: #{class_name}")
      end
    end
  end
end
storage() click to toggle source
# File lib/crystal_clear/resolver.rb, line 57
def storage
  @storage ||= {}
end