holderdeord/hdo-storting-importer

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

Summary

Maintainability
A
35 mins
Test Coverage
module Hdo
  module StortingImporter
    class Proposition
      include HasJsonSchema
      include IvarEquality
      include Inspectable

      attr_reader :external_id, :description, :on_behalf_of, :body, :delivered_by

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

      def self.example(overrides = nil)
        obj = new('1234', 'description', 'on behalf of', 'body', Representative.example)

        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_hash(hash)
        arr = [
          hash['external_id'],
          hash['description'],
          hash['on_behalf_of'],
          hash['body'],
          hash['delivered_by'] && Representative.from_hash(hash['delivered_by']),
        ]

        new(*arr)
      end

      def self.from_storting_doc(doc, date)
        doc.css("voteringsforslag").map do |n|
          rep_node = n.css("forslag_levert_av_representant").first
          if rep_node && rep_node['nil'] != 'true'
            delivered_by = Representative.from_storting_node(rep_node, date)
          else
            delivered_by = nil
          end

          new n.css("forslag_id").first.text,
              n.css("forslag_betegnelse").first.text,
              n.css("forslag_paa_vegne_av_tekst").first.text,
              Util.remove_invalid_html(n.css("forslag_tekst").first.text),
              delivered_by

        end
      end

      def initialize(external_id, description, on_behalf_of, body, delivered_by)
        @external_id  = external_id
        @description  = description
        @on_behalf_of = on_behalf_of
        @body         = body
        @delivered_by = delivered_by
      end

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

      def to_hash
        h = {
          'kind'         => self.class.kind,
          'external_id'  => @external_id,
          'description'  => @description,
          'on_behalf_of' => @on_behalf_of,
          'body'         => @body
        }

        h['delivered_by'] = @delivered_by.to_hash if @delivered_by

        h
      end
    end # Proposition
  end
end