class ViewComponentReflex::ReflexFactory

Public Class Methods

new(component) click to toggle source
# File lib/view_component_reflex/reflex_factory.rb, line 3
def initialize(component)
  @component = component
  @new = false
  reflex.component_class = component
end

Public Instance Methods

nested?() click to toggle source
# File lib/view_component_reflex/reflex_factory.rb, line 9
def nested?
  @nested ||= @component.name.include?("::")
end
new?() click to toggle source
# File lib/view_component_reflex/reflex_factory.rb, line 21
def new?
  @new
end
reflex() click to toggle source
# File lib/view_component_reflex/reflex_factory.rb, line 25
def reflex
  @reflex ||= if nested?
    reflex_from_nested_component
  else
    reflex_from_component
  end
end
reflex_from_component() click to toggle source
# File lib/view_component_reflex/reflex_factory.rb, line 52
def reflex_from_component
  if Object.const_defined?(reflex_name)
    Object.const_get(reflex_name)
  else
    @new = true
    Object.const_set(reflex_name, reflex_instance)
  end
end
reflex_from_nested_component() click to toggle source
# File lib/view_component_reflex/reflex_factory.rb, line 37
def reflex_from_nested_component
  parent = if @component.respond_to? :module_parent
    @component.module_parent
  else
    @component.parent
  end

  if parent.const_defined?(reflex_name)
    parent.const_get(reflex_name)
  else
    @new = true
    parent.const_set(reflex_name, reflex_instance)
  end
end
reflex_instance() click to toggle source
# File lib/view_component_reflex/reflex_factory.rb, line 33
def reflex_instance
  @reflex_instance ||= Class.new(@component.reflex_base_class)
end
reflex_name() click to toggle source
# File lib/view_component_reflex/reflex_factory.rb, line 13
def reflex_name
  @reflex_name ||= if nested?
    @component.name.split("::").last
  else
    @component.name
  end + "Reflex"
end