lib/grover/options_builder.rb
# 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