lib/react/rails/controller_renderer.rb in react-rails-1.7.2 vs lib/react/rails/controller_renderer.rb in react-rails-1.8.0

- old
+ new

@@ -1,18 +1,35 @@ -class React::Rails::ControllerRenderer - include React::Rails::ViewHelper - include ActionView::Helpers::TagHelper - include ActionView::Helpers::TextHelper +module React + module Rails + # A renderer class suitable for `ActionController::Renderers`. + # It is associated to `:component` in the Railtie. + # + # It is prerendered with {React::ServerRendering}. + # + # @example Rendering a component from a controller + # class TodosController < ApplicationController + # def index + # @todos = Todo.all + # render component: 'TodoList', props: { todos: @todos }, tag: 'span', class: 'todo' + # end + # end + class ControllerRenderer + include React::Rails::ViewHelper + include ActionView::Helpers::TagHelper + include ActionView::Helpers::TextHelper - attr_accessor :output_buffer + attr_accessor :output_buffer - def initialize(options={}) - controller = options[:controller] - @__react_component_helper = controller.__react_component_helper - end + def initialize(options={}) + controller = options[:controller] + @__react_component_helper = controller.__react_component_helper + end - def call(name, options, &block) - props = options.fetch(:props, {}) - options = options.slice(:data, :aria, :tag, :class, :id).merge(prerender: true) - react_component(name, props, options, &block) + # @return [String] Prerendered HTML for `component_name` with `options[:props]` + def call(component_name, options, &block) + props = options.fetch(:props, {}) + options = options.slice(:data, :aria, :tag, :class, :id).merge(prerender: true) + react_component(component_name, props, options, &block) + end + end end end