Class: React::TopLevelRailsComponent

Inherits:
Object
  • Object
show all
Includes:
Component
Defined in:
lib/rails-helpers/top_level_rails_component.rb

Instance Attribute Summary

Attributes included from Component

#waiting_on_resources

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Component

#_render_wrapper, #component_did_mount, #component_did_update, #component_will_mount, #component_will_receive_props, #component_will_unmount, #component_will_update, #define_state, #deprecated_params_method, deprecation_warning, #emit, included, #initialize, #props_changed?, #should_component_update?, #update_react_js_state, #watch

Class Method Details

.search_pathObject



5
6
7
# File 'lib/rails-helpers/top_level_rails_component.rb', line 5

def self.search_path
  @search_path ||= [Module]
end

Instance Method Details

#renderObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/rails-helpers/top_level_rails_component.rb', line 17

def render
  paths_searched = []
  if params.component_name.start_with? "::"
    paths_searched << params.component_name.gsub(/^\:\:/,"")
    component = params.component_name.gsub(/^\:\:/,"").split("::").inject(Module) { |scope, next_const| scope.const_get(next_const, false) } rescue nil
    return present component, params.render_params if component && component.method_defined?(:render)
  else
    self.class.search_path.each do |path|
      # try each path + params.controller + params.component_name
      paths_searched << "#{path.name + '::' unless path == Module}#{params.controller}::#{params.component_name}"
      component = "#{params.controller}::#{params.component_name}".split("::").inject(path) { |scope, next_const| scope.const_get(next_const, false) } rescue nil
      return present component, params.render_params if component && component.method_defined?(:render)
    end
    self.class.search_path.each do |path|
      # then try each path + params.component_name
      paths_searched << "#{path.name + '::' unless path == Module}#{params.component_name}"
      component = "#{params.component_name}".split("::").inject(path) { |scope, next_const| scope.const_get(next_const, false) } rescue nil
      return present component, params.render_params if component && component.method_defined?(:render)
    end
  end
  raise "Could not find component class '#{params.component_name}' for params.controller '#{params.controller}' in any component directory. Tried [#{paths_searched.join(", ")}]"
end