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