holderdeord/hdo-storting-importer

View on GitHub
lib/hdo/storting_importer/parliament_issue_details.rb

Summary

Maintainability
A
55 mins
Test Coverage
# encoding: UTF-8

module Hdo
  module StortingImporter
    class ParliamentIssueDetails
      include HasJsonSchema
      include IvarEquality
      include Inspectable

      schema_path StortingImporter.lib.join("hdo/storting_importer/schema/parliament_issue_details.json").to_s

      attr_reader :external_id, :links

      def self.example(overrides = nil)
        obj = new(
          "53520",
          [
            {
              "external_id"=>"s101208",
              "title"=>"Stortingsreferat 08.12.2010",
              "url"=>
               "https://www.stortinget.no/no/Saker-og-publikasjoner/Publikasjoner/Referater/Stortinget/2010-2011/101208/7/",
              "type"=>"referat",
              "subtype"=>"storting"
            }
          ]
        )

        if overrides
          obj = from_hash(obj.to_hash.merge(overrides))
        end

        obj
      end

      def self.json_example
        Util.json_pretty example
      end

      def self.from_storting_doc(doc)
        from_storting_node doc.xpath("//detaljert_sak").first
      end

      def self.from_storting_node(node)
        id = node.xpath('id').text

        link_nodes = node.css('publikasjon_referanse_liste > publikasjon_referanse')
        links = link_nodes.map do |ref|
          external_id = ref.css('eksport_id').text.strip
          type        = ref.css('type').text.strip
          subtype     = ref.css('undertype').text

          {
            'external_id' => external_id.empty? ? nil : external_id,
            'title'       => ref.css('lenke_tekst').text,
            'url'         => ref.css('lenke_url').text,
            'type'        => type.empty? ? nil : type,
            'subtype'     => subtype.empty? ? nil : subtype
          }
        end

        new id, links
      end

      def self.from_hash(hash)
        new hash['external_id'],
            hash['links']
      end

      def initialize(external_id, links)
        @external_id = external_id
        @links       = links
      end

      def short_inspect
        short_inspect_string :include => [:external_id, :links]
      end

      def to_hash
        {
          'kind'        => self.class.kind,
          'external_id' => @external_id,
          'links'       => @links
        }
      end

    end
  end
end