Class: InertiaRails::Renderer

Inherits:
Object
  • Object
show all
Defined in:
lib/inertia_rails/renderer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(component, controller, request, response, render_method, **options) ⇒ Renderer

Returns a new instance of Renderer.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/inertia_rails/renderer.rb', line 19

def initialize(component, controller, request, response, render_method, **options)
  if component.is_a?(Hash) && options.key?(:props)
    raise ArgumentError,
          'Parameter `props` is not allowed when passing a Hash as the first argument'
  end

  @controller = controller
  @configuration = controller.__send__(:inertia_configuration)
  @component = resolve_component(component)
  @request = request
  @response = response
  @render_method = render_method
  @props = options.fetch(:props, component.is_a?(Hash) ? component : controller.__send__(:inertia_view_assigns))
  @view_data = options.fetch(:view_data, {})
  @deep_merge = options.fetch(:deep_merge, configuration.deep_merge_shared_data)
  @encrypt_history = options.fetch(:encrypt_history, configuration.encrypt_history)
  @clear_history = options.fetch(:clear_history, controller.session[:inertia_clear_history] || false)
  @controller.instance_variable_set('@_inertia_rendering', true)
  controller.inertia_meta.add(options[:meta]) if options[:meta]
end

Instance Attribute Details

#clear_historyObject (readonly)

Returns the value of attribute clear_history.



9
10
11
# File 'lib/inertia_rails/renderer.rb', line 9

def clear_history
  @clear_history
end

#componentObject (readonly)

Returns the value of attribute component.



9
10
11
# File 'lib/inertia_rails/renderer.rb', line 9

def component
  @component
end

#configurationObject (readonly)

Returns the value of attribute configuration.



9
10
11
# File 'lib/inertia_rails/renderer.rb', line 9

def configuration
  @configuration
end

#controllerObject (readonly)

Returns the value of attribute controller.



9
10
11
# File 'lib/inertia_rails/renderer.rb', line 9

def controller
  @controller
end

#encrypt_historyObject (readonly)

Returns the value of attribute encrypt_history.



9
10
11
# File 'lib/inertia_rails/renderer.rb', line 9

def encrypt_history
  @encrypt_history
end

#propsObject (readonly)

Returns the value of attribute props.



9
10
11
# File 'lib/inertia_rails/renderer.rb', line 9

def props
  @props
end

#view_dataObject (readonly)

Returns the value of attribute view_data.



9
10
11
# File 'lib/inertia_rails/renderer.rb', line 9

def view_data
  @view_data
end

Instance Method Details

#renderObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/inertia_rails/renderer.rb', line 40

def render
  @response.headers['Vary'] = if @response.headers['Vary'].blank?
                                'X-Inertia'
                              else
                                "#{@response.headers['Vary']}, X-Inertia"
                              end
  if @request.headers['X-Inertia']
    @response.set_header('X-Inertia', 'true')
    @render_method.call json: page.to_json, status: @response.status, content_type: Mime[:json]
  else
    begin
      return render_ssr if configuration.ssr_enabled
    rescue StandardError
      nil
    end
    controller.instance_variable_set('@_inertia_page', page)
    @render_method.call template: 'inertia', layout: layout, locals: view_data.merge(page: page)
  end
end