Sha256: 3dbb84d6acf006c289ee5dcf6e2bc5328bd8c1d339a27eb5ee69beb273805053

Contents?: true

Size: 1.67 KB

Versions: 2

Compression:

Stored size: 1.67 KB

Contents

# frozen_string_literal: true

require "relaton_cen/hit"

module RelatonCen
  # Page of hit collection.
  class HitCollection < RelatonBib::HitCollection
    DOMAIN = "https://standards.cen.eu/dyn/www/"

    # @return [Mechanize]
    attr_reader :agent

    # @param ref [String]
    # @param year [String]
    def initialize(ref, year = nil) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
      super ref, year
      @agent = Mechanize.new
      agent.user_agent_alias = "Mac Safari"
      if !ref || ref.empty?
        @array = []
        return
      end

      search_page = agent.get "#{DOMAIN}f?p=204:105:0:::::"
      form = search_page.at "//form"
      req_body = form.xpath("//input").map do |f|
        next if f[:name].empty? || f[:name] == "f11"

        val = case f[:value]
              when "LANGUAGE_LIST" then 0
              when "STAND_REF" then ref
              else
                case f[:name]
                when "p_request" then "S1-S2-S3-S4-S5-S6"
                when "f10" then ""
                else f[:value]
                end
              end
        if f[:name] == "f10" then "f10=#{f[:value]}&f11=#{val}"
        else "#{f[:name]}=#{val}"
        end
      end.compact.join("&")
      resp = agent.post form[:action], req_body
      @array = hits resp
    end

    private

    # @param resp [Mechanize::Page]
    # @return [Array<RelatonCen::Hit>]
    def hits(resp)
      resp.xpath("//table[@class='dashlist']/tbody/tr/td[2]").map do |h|
        ref = h.at("strong/a")
        code = ref.text.strip
        url = ref[:href]
        Hit.new({ code: code, url: url }, self)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
relaton-cen-1.9.0 lib/relaton_cen/hit_collection.rb
relaton-cen-1.8.pre1 lib/relaton_cen/hit_collection.rb