module DynamicRendering::ActsAsDynamicallyRenderable

Constants

DESKTOP_VIEWPORT
MOBILE_USER_AGENT
MOBILE_VIEWPORT
USE_DYNAMIC_RENDERING_FOR_USER_AGENTS

Public Instance Methods

enable_dynamic_rendering(arguments = {}) click to toggle source
# File lib/dynamic_rendering/acts_as_dynamically_renderable.rb, line 36
def enable_dynamic_rendering(arguments = {})
  append_after_action(:render_dynamically, **arguments)
end
render_dynamically(log_level: :info) click to toggle source
# File lib/dynamic_rendering/acts_as_dynamically_renderable.rb, line 14
      def render_dynamically(log_level: :info)
        return unless request_suitable_for_dynamic_rendering? && response_suitable_for_dynamic_rendering?

        Rails.logger.public_send(
          log_level,
          <<~TEXT
            [Dynamic rendering 🔍 ]:
            • URL: #{request.original_url}"
            • User-Agent: #{request.user_agent}
            • Viewport: #{dynamic_rendering_viewport.inspect}
          TEXT
        )

        response.body = HtmlRenderer.new(
          response.body,
          dynamic_rendering_viewport,
          request.original_url
        ).to_s
      end

Private Instance Methods

dynamic_rendering_request_from_mobile_crawler?() click to toggle source
# File lib/dynamic_rendering/acts_as_dynamically_renderable.rb, line 53
def dynamic_rendering_request_from_mobile_crawler?
  MOBILE_USER_AGENT.match?(request.user_agent)
end
dynamic_rendering_viewport() click to toggle source
# File lib/dynamic_rendering/acts_as_dynamically_renderable.rb, line 47
def dynamic_rendering_viewport
  return MOBILE_VIEWPORT if dynamic_rendering_request_from_mobile_crawler?

  DESKTOP_VIEWPORT
end
request_suitable_for_dynamic_rendering?() click to toggle source
# File lib/dynamic_rendering/acts_as_dynamically_renderable.rb, line 43
def request_suitable_for_dynamic_rendering?
  USE_DYNAMIC_RENDERING_FOR_USER_AGENTS.match?(request.user_agent)
end
response_suitable_for_dynamic_rendering?() click to toggle source
# File lib/dynamic_rendering/acts_as_dynamically_renderable.rb, line 57
def response_suitable_for_dynamic_rendering?
  response.ok? &&
    Mime::Type.lookup(response.media_type).html?
end