Module: ImplicitRendering

Defined in:
lib/implicit_rendering.rb,
lib/implicit_rendering/version.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

VERSION =
'0.1.4'.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.prepended(base) ⇒ Object



14
15
16
17
# File 'lib/implicit_rendering.rb', line 14

def self.prepended(base)
  base.extend ClassMethods
  base.attr_reader :action_before_implicit_render
end

Instance Method Details

#default_renderObject



19
20
21
22
23
24
25
# File 'lib/implicit_rendering.rb', line 19

def default_render
  override_template_name = self.class.implicit_render_mapping&.dig(action_name)

  return super unless perform_implicit_rendering?(action_name, override_template_name)

  render override_template_name
end

#perform_implicit_rendering?(action_name, template_name) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
41
42
43
# File 'lib/implicit_rendering.rb', line 38

def perform_implicit_rendering?(action_name, template_name)
  return false if template_exists?(action_name.to_s, _prefixes, variants: request.variant)

  template_name.present? &&
    self.class.implicit_render_formats.any? {|format| request.format == format }
end

#render(options = {}) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/implicit_rendering.rb', line 27

def render(options={})
  if options.is_a?(Hash) &&
    (override_template_name = self.class.implicit_render_mapping&.dig(options[:action].to_s)) &&
    perform_implicit_rendering?(options[:action], override_template_name)

    @action_before_implicit_render = options[:action]
    options[:action] = override_template_name
  end
  super
end