class React::TopLevelRailsComponent

Attributes

event_history[RW]

Public Class Methods

callback_history_for(proc_name) click to toggle source
# File lib/react/top_level_rails_component.rb, line 6
def callback_history_for(proc_name)
  event_history[proc_name]
end
clear_callback_history_for(proc_name) click to toggle source
# File lib/react/top_level_rails_component.rb, line 14
def clear_callback_history_for(proc_name)
  event_history[proc_name] = []
end
clear_event_history_for(event_name) click to toggle source
# File lib/react/top_level_rails_component.rb, line 26
def clear_event_history_for(event_name)
  event_history["_on#{event_name.event_camelize}"] = []
end
event_history_for(event_name) click to toggle source
# File lib/react/top_level_rails_component.rb, line 18
def event_history_for(event_name)
  event_history["_on#{event_name.event_camelize}"]
end
last_callback_for(proc_name) click to toggle source
# File lib/react/top_level_rails_component.rb, line 10
def last_callback_for(proc_name)
  event_history[proc_name].last
end
last_event_for(event_name) click to toggle source
# File lib/react/top_level_rails_component.rb, line 22
def last_event_for(event_name)
  event_history["_on#{event_name.event_camelize}"].last
end

Public Instance Methods

component() click to toggle source
# File lib/react/top_level_rails_component.rb, line 31
def component
  return @component if @component
  paths_searched = []
  component = nil
  if params.component_name.start_with?('::')
    # if absolute path of component is given, look it up and fail if not found
    paths_searched << params.component_name
    component = begin
                  Object.const_get(params.component_name)
                rescue NameError
                  nil
                end
  else
    # if relative path is given, look it up like this
    # 1) we check each path + controller-name + component-name
    # 2) if we can't find it there we check each path + component-name
    # if we can't find it we just try const_get
    # so (assuming controller name is Home)
    # ::Foo::Bar will only resolve to some component named ::Foo::Bar
    # but Foo::Bar will check (in this order) ::Home::Foo::Bar, ::Components::Home::Foo::Bar, ::Foo::Bar, ::Components::Foo::Bar
    self.class.search_path.each do |scope|
      paths_searched << "#{scope.name}::#{params.controller}::#{params.component_name}"
      component = begin
                    scope.const_get(params.controller, false).const_get(params.component_name, false)
                  rescue NameError
                    nil
                  end
      break if component != nil
    end
    unless component
      self.class.search_path.each do |scope|
        paths_searched << "#{scope.name}::#{params.component_name}"
        component = begin
                      scope.const_get(params.component_name, false)
                    rescue NameError
                      nil
                    end
        break if component != nil
      end
    end
  end
  @component = component
  return @component if @component && @component.method_defined?(:render)
  raise "Could not find component class '#{params.component_name}' for params.controller '#{params.controller}' in any component directory. Tried [#{paths_searched.join(", ")}]"
end
render() click to toggle source
# File lib/react/top_level_rails_component.rb, line 90
def render
  React::RenderingContext.render(component, @render_params)
end