Sha256: a6800c2398130a24df9eafdab14e95e3fcb5a3d6f5a974da25a41da4a42fd9ea

Contents?: true

Size: 1.77 KB

Versions: 5

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

require "relaton_cen/hit"

module RelatonCen
  # Page of hit collection.
  class HitCollection < RelatonBib::HitCollection
    DOMAIN = "https://standards.cencenelec.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=205:105:0:::::"
      form = search_page.at "//form[@id='wwvFlowForm']"
      skip_inputs = %w[f11 essentialCookies]
      req_body = form.xpath(".//input").map do |f|
        next if f[:name].empty? || skip_inputs.include?(f[:name])

        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-CEN-CLC-"
                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

5 entries across 5 versions & 1 rubygems

Version Path
relaton-cen-1.11.0 lib/relaton_cen/hit_collection.rb
relaton-cen-1.10.1 lib/relaton_cen/hit_collection.rb
relaton-cen-1.10.0 lib/relaton_cen/hit_collection.rb
relaton-cen-1.9.2 lib/relaton_cen/hit_collection.rb
relaton-cen-1.9.1 lib/relaton_cen/hit_collection.rb