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

Version Path
epb_view_models-2.0.7 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-2.0.6 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-2.0.5 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-2.0.4 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-2.0.3 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-2.0.2 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-2.0.1 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-2.0.0 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-1.2.3 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-1.2.2 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-1.2.1 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-1.2.0 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-1.1.6 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-1.1.5 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-1.1.4 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-1.1.3 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-1.1.2 lib/accessor/domestic_recommendations_accessor.rb
epb_view_models-1.1.1 lib/accessor/domestic_recommendations_accessor.rb