Class: Boil::Composer::TargetClassDecorator

Inherits:
Object
  • Object
show all
Includes:
ReflectionHelpers
Defined in:
lib/boil/composer/target_class_decorator.rb

Constant Summary

Constants included from ReflectionHelpers

ReflectionHelpers::ClassConstNotFound

Instance Method Summary collapse

Methods included from ReflectionHelpers

#class_name?, #constantize_class, #constructor_parameters

Constructor Details

#initialize(target_class) ⇒ TargetClassDecorator

Returns a new instance of TargetClassDecorator.



6
7
8
# File 'lib/boil/composer/target_class_decorator.rb', line 6

def initialize(target_class)
  @target_class = target_class
end

Instance Method Details

#define_factory_method(class_or_name) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/boil/composer/target_class_decorator.rb', line 10

def define_factory_method(class_or_name)
  factory_method_name = factory_method_name(class_or_name)
  prevent_old_method_override(factory_method_name)
  unless @target_class.method_defined?(factory_method_name)
    cls = constantize_class(class_or_name)
    constructor_params = constructor_parameters(cls)
    @target_class.send(:define_method, factory_method_name) do
      instance_variable_name = "@#{factory_method_name.to_s}".to_sym
      instance_variable = instance_variable_get(instance_variable_name)
      if instance_variable
        instance_variable
      else
        instance_variable_set(instance_variable_name, cls.new(*constructor_params.map {|p| send(p)}))
      end
    end 
    register_factory_method(factory_method_name)
  end
end

#factory_method?(meth) ⇒ Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/boil/composer/target_class_decorator.rb', line 33

def factory_method?(meth)
  factory_methods.include?(meth)
end

#factory_methodsObject



37
38
39
40
41
42
43
# File 'lib/boil/composer/target_class_decorator.rb', line 37

def factory_methods
  if @target_class.class_variable_defined?(FACTORY_METHODS_VAR_NAME) 
    @target_class.class_variable_get(FACTORY_METHODS_VAR_NAME)
  else
    []
  end
end

#method_defined?(meth) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/boil/composer/target_class_decorator.rb', line 29

def method_defined?(meth)
  @target_class.method_defined?(meth)
end