module TheFactory::DSL

Public Instance Methods

define_component_activation_method() click to toggle source
# File lib/the_factory/dsl.rb, line 11
def define_component_activation_method
  mod = self
  define_method(:"__mf_activate_#{mod.component_name}_component__") do |method_name, base_class, klass, init = nil, &block|
    component_class = public_send(:"#{mod.__mf_registry_method_name__}")[method_name] # inherited
    raise(ArgumentError, 'please provide a block or class') if component_class.nil? && klass.nil? && block.nil?

    target_class = component_class || klass || base_class

    __mf_composite_check_inheritance__!(target_class, base_class)

    patched_class = __mf_composite_patch_class__(target_class, &block)
    __mf_composite_define_init__(patched_class, &init)
    public_send(mod.__mf_store_method_name__, method_name, patched_class)
  end
end
define_component_adding_method() click to toggle source
# File lib/the_factory/dsl.rb, line 43
def define_component_adding_method
  mod = self
  default_init = ->(klass, *attrs) { klass.new }
  define_method(component_name.to_sym) do |method_name, base_class: Class.new, init: default_init|
    singleton_class.class_eval do
      attr_accessor :"#{mod.__mf_component_class_reader__(method_name)}"
      private :"#{mod.__mf_component_class_reader__(method_name)}="
    end
    __mf_composite_define_init__(base_class, &init)
    public_send(mod.__mf_store_method_name__, method_name, base_class)
    mod.define_component_configure_method(method_name)
    mod.define_component_new_instance_method(method_name)
  end
end
define_component_configure_method(method_name) click to toggle source
# File lib/the_factory/dsl.rb, line 35
def define_component_configure_method(method_name)
  mod = self
  define_method :"#{method_name}_#{mod.component_name}" do |klass = nil, init: nil, &block|
    base_class = public_send(:"#{mod.__mf_component_class_reader__(method_name)}")
    public_send(mod.__mf_activation_method_name__, method_name, base_class, klass, init, &block)
  end
end
define_component_new_instance_method(method_name) click to toggle source
# File lib/the_factory/dsl.rb, line 27
def define_component_new_instance_method(method_name)
  mod = self
  define_method mod.__mf_new_instance_method_name__(method_name) do |*args|
    klass = public_send(mod.__mf_component_class_reader__(method_name))
    klass.__mf_init__(klass, *args)
  end
end
define_component_store_method() click to toggle source
# File lib/the_factory/dsl.rb, line 3
      def define_component_store_method
  mod = self
  define_method(:"#{mod.__mf_store_method_name__}") do |method_name, klass|
    send(:"#{mod.__mf_component_class_reader__(method_name)}=", klass)
    public_send(:"#{mod.__mf_registry_method_name__}")[method_name] = klass
  end
end
define_components_registry() click to toggle source
# File lib/the_factory/dsl.rb, line 58
          def define_components_registry
            mod = self
            module_eval <<-METHOD, __FILE__, __LINE__ + 1
              def #{mod.__mf_registry_method_name__}
                @#{mod.__mf_registry_method_name__} ||= {}
              end
            METHOD
          end