Sha256: e6431ea13ec953f5726a4038cae28f4fa2a1ebc2705ac83fbec507e3de41b72a

Contents?: true

Size: 1.15 KB

Versions: 3

Compression:

Stored size: 1.15 KB

Contents

# frozen_string_literal: true

require 'grover/utils'
require 'grover/options_fixer'

class Grover
  #
  # Build options from Grover.configuration, meta_options, and passed-in options
  #
  class OptionsBuilder < Hash
    def initialize(options, url)
      super()
      @url = url
      combined = grover_configuration
      Utils.deep_merge! combined, Utils.deep_stringify_keys(options)
      Utils.deep_merge! combined, meta_options unless url_source?

      update OptionsFixer.new(combined).run
    end

    private

    def grover_configuration
      Utils.deep_stringify_keys Grover.configuration.options
    end

    #
    # Extract out options from meta tags in the source - based on code from PDFKit project
    #
    def meta_options
      meta_opts = {}

      meta_tags.each do |meta|
        tag_name = meta['name'] && meta['name'][/#{Grover.configuration.meta_tag_prefix}([a-z_-]+)/, 1]
        next unless tag_name

        Utils.deep_assign meta_opts, tag_name.split('-'), meta['content']
      end

      meta_opts
    end

    def meta_tags
      Nokogiri::HTML(@url).xpath('//meta')
    end

    def url_source?
      @url.match(/\Ahttp/i)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
grover-1.1.8 lib/grover/options_builder.rb
grover-1.1.7 lib/grover/options_builder.rb
grover-1.1.6 lib/grover/options_builder.rb