Sha256: 3a4009942d67b034210549d38cc624d577b5d8687f94a5011bba2c2f0f5898d7

Contents?: true

Size: 955 Bytes

Versions: 5

Compression:

Stored size: 955 Bytes

Contents

# frozen_string_literal: true

require 'uri'

module Maglev
  class PreviewConstraint
    CRAWLER_USER_AGENTS = /Googlebot|Twitterbot|facebookexternalhit|LinkedInBot/o.freeze

    attr_reader :preview_host

    def initialize(preview_host: nil)
      @preview_host = preview_host == true ? default_preview_host : preview_host
    end

    def matches?(request)
      (accepted_format?(request) || crawler?(request)) && match_host?(request)
    end

    protected

    def default_preview_host
      return nil if Maglev.config.preview_host.blank?

      URI.parse(Maglev.config.preview_host).host # make sure we get only the host here
    end

    def accepted_format?(request)
      %i[html xml].include?(request.format.symbol)
    end

    def crawler?(request)
      request.format.symbol.nil? && CRAWLER_USER_AGENTS.match?(request.user_agent)
    end

    def match_host?(request)
      !preview_host || preview_host == request.host
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
maglevcms-1.7.3 lib/maglev/preview_constraint.rb
maglevcms-1.7.2 lib/maglev/preview_constraint.rb
maglevcms-1.7.1 lib/maglev/preview_constraint.rb
maglevcms-1.7.0 lib/maglev/preview_constraint.rb
maglevcms-1.6.1 lib/maglev/preview_constraint.rb