Sha256: 9a62c6e314c0d0e7457647524992f0ee19a48ac35bce4ffd7e19f84a53e5a884
Contents?: true
Size: 1.56 KB
Versions: 18
Compression:
Stored size: 1.56 KB
Contents
require "singleton" module Accessor class DomesticRecommendationsAccessor include Singleton RecommendationDetails = Struct.new(:summary, :description, keyword_init: true) def fetch_details(schema_version:, improvement_number:) unless memoized_schema?(schema_version) assessment_type = schema_version.split("-").first is_ni = schema_version.include? "-NI-" definitions_document = Nokogiri::XML(File.open("api/schemas/xml/#{schema_version}/#{assessment_type}/ExternalDefinitions.xml")) sub_object = {} country_node = definitions_document.at_xpath("//Country[Country-Code[contains(text(), '#{is_ni ? 'NIR' : 'EAW'}')]]") recommendations = country_node.search("Recommendation") recommendations.each do |recommendation| sub_object[recommendation.at_css("Improvement-Number").content] = { summary: recommendation.at_css("Improvement-Summary[language='1']").content, description: recommendation.at_css("Improvement-Description[language='1']").content, } end memoize_schema_hash(schema_version, sub_object) end RecommendationDetails.new(**memoized_schema(schema_version)[improvement_number]) end def reset! @memo = nil end private def memo @memo ||= {} end def memoized_schema?(schema_version) memo.key?(schema_version) end def memoize_schema_hash(schema_version, hash) memo[schema_version] = hash end def memoized_schema(schema_version) memo[schema_version] end end end
Version data entries
18 entries across 18 versions & 1 rubygems