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