Sha256: 829e7e8ff3a7b7bbe93ebd507e89abb3bf4f840d4f25db9c79fce3ce5a5b72f6

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

module RelatonJis
  class Hit < RelatonBib::Hit
    #
    # Create new hit
    #
    # @param [Nokogiri::XML::Element] node found node
    # @param [RelatonJis::HitCollection] collection hit collection
    #
    # @return [RelatonJis::Hit] new hit
    #
    def self.create(node, collection)
      a = node.at("./a")
      hit = { id: a.at("./text()").text.strip, url: a["href"] }
      new hit, collection
    end

    #
    # Check if hit matches reference
    #
    # @param [Hash] ref_parts parts of reference
    # @param [String, nil] year year
    # @param [Boolean] all_parts check all parts of reference
    #
    # @return [Boolean] true if hit matches reference
    #
    def match?(ref_parts, year = nil, all_parts: false) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/PerceivedComplexity
      id_parts[:code].include?(ref_parts[:code]) &&
        (all_parts || (ref_parts[:part].nil? || ref_parts[:part] == id_parts[:part])) &&
        (all_parts || year.nil? || year == id_parts[:year]) &&
        ((ref_parts[:expl].nil? || !id_parts[:expl].nil?) &&
         (ref_parts[:expl_num].nil? || ref_parts[:expl_num] == id_parts[:expl_num])) &&
        ((ref_parts[:amd].nil? || !id_parts[:amd].nil?) &&
          (ref_parts[:amd_num].nil? || ref_parts[:amd_num] == id_parts[:amd_num]) &&
          (ref_parts[:amd_year].nil? || ref_parts[:amd_year] == id_parts[:amd_year]))
    end

    #
    # Return parts of document id
    #
    # @return [Hash] hash with parts of document id
    #
    def id_parts
      @id_parts ||= hit_collection.parse_ref hit[:id]
    end

    def fetch
      @fetch ||= Scraper.new(hit[:url]).fetch
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
relaton-jis-1.14.1 lib/relaton_jis/hit.rb