Sha256: 1d91e47afc2c36673a221f8cab7af2c91d3de5856acc81db68730099cca3eee7

Contents?: true

Size: 1.14 KB

Versions: 6

Compression:

Stored size: 1.14 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)
      @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

6 entries across 6 versions & 1 rubygems

Version Path
grover-1.1.5 lib/grover/options_builder.rb
grover-0.12.3 lib/grover/options_builder.rb
grover-0.12.2 lib/grover/options_builder.rb
grover-0.12.1 lib/grover/options_builder.rb
grover-0.11.4 lib/grover/options_builder.rb
grover-0.11.3 lib/grover/options_builder.rb