Sha256: 82259318560ed89ff33fcf93a11f6d3be161cff4b7dc71c4a1380366f3ee2e3d

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

module Relaton
  class Bibcollection
    ATTRIBS = %i[
      title
      items
      doctype
    ]

    attr_accessor *ATTRIBS

    def initialize(options)
      self.items = []
      ATTRIBS.each do |k|
        method = "#{k}="
        value = options[k.to_s]
        # puts "K #{method}"
        # puts value.inspect

        self.send("#{k}=", options[k.to_s])
        # puts "SET! to #{self.send(k).inspect}"
      end

      # puts items.inspect
      self.items = self.items.inject([]) do |acc,item|
        acc << if item.is_a?(Bibcollection) || item.is_a?(Bibdata)
          item
        else
          # puts "item.inspect #{item.inspect}"
          new_bib_item_class(item)
        end
      end

      self
      # byebug
    end

    def new_bib_item_class(options)
      if options["items"]
        Bibcollection.new(options)
      else
        Bibdata.new(options)
      end
    end

    def items_flattened

      items.inject([]) do |acc,item|
        if item.is_a? Bibcollection
          acc << item.items_flattened
        else
          acc << item
        end
      end

    end

    def to_xml
      collection_type = if doctype
        "type=\"#{doctype}\""
      else
        'xmlns="http://riboseinc.com/isoxml"'
      end

      ret = "<relaton-collection #{collection_type}>"
      ret += "<title>#{title}</title>" if title
      unless items.empty?
        items.each do |item|
          ret += "<relation type='partOf'>"
          ret += item.to_xml
          ret += "</relation>\n"
        end
      end
      ret += "</relaton-collection>\n"
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
relaton-cli-0.1.0 lib/relaton/bibcollection.rb