module Froxy::Monkey::SideLoadAssets

Public Instance Methods

render_template(view, template, layout_name, locals) click to toggle source
Calls superclass method
# File lib/froxy/monkey/side_load_assets.rb, line 8
def render_template(view, template, layout_name, locals)
  return super if template.type != :html

  # Side load layout assets - if any.
  if layout_name
    layout = find_layout(layout_name, locals.keys, [formats.first])
    layout && side_load_assets(view, layout)
  end

  # Side load view assets - if any.
  side_load_assets view, template

  super
end

Private Instance Methods

instrument(action, payload, &block) click to toggle source
# File lib/froxy/monkey/side_load_assets.rb, line 56
def instrument(action, payload, &block)
  ActiveSupport::Notifications.instrument("#{action}.action_view", payload, &block)
end
side_load_assets(view, tpl) click to toggle source
# File lib/froxy/monkey/side_load_assets.rb, line 25
def side_load_assets(view, tpl)
  path = tpl.short_identifier.delete_suffix('.html.erb')

  instrument :side_loaded_assets, identifier: tpl.identifier, asset_types: [] do |payload|
    side_load_js path, view, payload
    side_load_css path, view, payload
  end
end
side_load_css(path, view, log_payload) click to toggle source
# File lib/froxy/monkey/side_load_assets.rb, line 45
def side_load_css(path, view, log_payload)
  # Check that the file actually exists.
  return unless Rails.root.join(path).sub_ext('.css').exist?

  view.content_for :side_loaded_css do
    view.stylesheet_link_tag(path).tap do |tag|
      !tag.nil? && (log_payload[:asset_types] << :css)
    end
  end
end
side_load_js(path, view, log_payload) click to toggle source
# File lib/froxy/monkey/side_load_assets.rb, line 34
def side_load_js(path, view, log_payload)
  # Check that the file actually exists.
  return unless Rails.root.join(path).sub_ext('.js').exist?

  view.content_for :side_loaded_js do
    view.javascript_include_tag(path, type: :module).tap do |tag|
      !tag.nil? && (log_payload[:asset_types] << :js)
    end
  end
end