lib/link_thumbnailer/scrapers/base.rb in link_thumbnailer-3.3.1 vs lib/link_thumbnailer/scrapers/base.rb in link_thumbnailer-3.3.2

- old
+ new

@@ -1,67 +1,69 @@ -require 'delegate' -require 'link_thumbnailer/models/title' -require 'link_thumbnailer/models/description' -require 'link_thumbnailer/models/image' -require 'link_thumbnailer/models/video' - -module LinkThumbnailer - module Scrapers - class Base < ::SimpleDelegator - - attr_reader :config, :document, :website, :attribute_name - - def initialize(document, website = nil) - @config = ::LinkThumbnailer.page.config - @document = document - @website = website - - super(config) - end - - def call(attribute_name) - return false unless website.present? - return false unless applicable? - - @attribute_name = attribute_name - - website.send("#{attribute_name}=", value) - website - end - - def applicable? - true - end - - def value - fail NotImplementedError - end - - private - - def meta_xpath(options = {}) - meta_xpaths(options).first - end - - def meta_xpaths(options = {}) - key = options.fetch(:key, :property) - value = options.fetch(:value, :content) - attribute = options.fetch(:attribute, attribute_name) - - document.xpath("//meta[translate(@#{key},'#{abc.upcase}','#{abc}') = '#{attribute}' and string-length(@#{value}) > 0]") - end - - def abc - 'abcdefghijklmnopqrstuvwxyz' - end - - def model_class - "::LinkThumbnailer::Models::#{attribute_name.to_s.camelize}".constantize - end - - def modelize(node, text = nil) - model_class.new(node, text) - end - - end - end -end +# frozen_string_literal: true + +require 'delegate' +require 'link_thumbnailer/models/title' +require 'link_thumbnailer/models/description' +require 'link_thumbnailer/models/image' +require 'link_thumbnailer/models/video' + +module LinkThumbnailer + module Scrapers + class Base < ::SimpleDelegator + + attr_reader :config, :document, :website, :attribute_name + + def initialize(document, website = nil) + @config = ::LinkThumbnailer.page.config + @document = document + @website = website + + super(config) + end + + def call(attribute_name) + return false unless website.present? + return false unless applicable? + + @attribute_name = attribute_name + + website.send("#{attribute_name}=", value) + website + end + + def applicable? + true + end + + def value + fail NotImplementedError + end + + private + + def meta_xpath(options = {}) + meta_xpaths(options).first + end + + def meta_xpaths(options = {}) + key = options.fetch(:key, :property) + value = options.fetch(:value, :content) + attribute = options.fetch(:attribute, attribute_name) + + document.xpath("//meta[translate(@#{key},'#{abc.upcase}','#{abc}') = '#{attribute}' and string-length(@#{value}) > 0]") + end + + def abc + 'abcdefghijklmnopqrstuvwxyz' + end + + def model_class + "::LinkThumbnailer::Models::#{attribute_name.to_s.camelize}".constantize + end + + def modelize(node, text = nil) + model_class.new(node, text) + end + + end + end +end