class Relaton::Bibcollection
Constants
- ATTRIBS
Public Class Methods
from_xml(source)
click to toggle source
@param source [Nokogiri::XML::Element]
# File lib/relaton/bibcollection.rb, line 34 def self.from_xml(source) title = find_text("./relaton-collection/title", source) author = find_text( "./relaton-collection/contributor[role/@type='author']/organization/"\ "name", source ) items = find_xpath("./relaton-collection/relation", source)&.map do |item| bibdata = find("./bibdata|./bibitem", item) klass = bibdata ? Bibdata : Bibcollection klass.from_xml(bibdata || item) end new(title: title, author: author, items: items) end
new(options)
click to toggle source
@param options [Hash]
# File lib/relaton/bibcollection.rb, line 12 def initialize(options) ATTRIBS.each do |k| value = options[k] || options[k.to_s] send("#{k}=", value) end reduce_items end
Public Instance Methods
<<(item)
click to toggle source
Add a dcoument to the collection @param item [RelatonBib::BibliographicItem]
# File lib/relaton/bibcollection.rb, line 27 def <<(item) items << new_bib_item_class(item) end
doc_number()
click to toggle source
arbitrary number, must sort after all bib items
# File lib/relaton/bibcollection.rb, line 21 def doc_number 9999999 end
items_flattened()
click to toggle source
rubocop:enable Metrics/MethodLength
# File lib/relaton/bibcollection.rb, line 98 def items_flattened items.sort_by! &:doc_number items.reduce([]) do |acc, item| acc << if item.is_a? ::Relaton::Bibcollection item.items_flattened else item end end end
new_bib_item_class(item)
click to toggle source
@param item [Hash, RelatonBib::BibliographicItem, Relatin::Bibdata,
Relaton::Bibcollection]
@return [Relaton::Bibdata, Relaton::Bibcollection]
# File lib/relaton/bibcollection.rb, line 83 def new_bib_item_class(item) if item.is_a?(Hash) if item["items"] ::Relaton::Bibcollection.new(item) else bibitem = ::Relaton::Cli::YAMLConvertor.convert_single_file item ::Relaton::Bibdata.new bibitem end elsif item.is_a?(Relaton::Bibdata) || item.is_a?(Relaton::Bibcollection) item else ::Relaton::Bibdata.new(item) end end
to_h()
click to toggle source
# File lib/relaton/bibcollection.rb, line 114 def to_h items.sort_by! &:doc_number a = ATTRIBS.reduce({}) do |acc, k| acc[k.to_s] = send(k) acc end a["items"] = a["items"].map(&:to_h) { "root" => a } end
to_xml(opts = {})
click to toggle source
@param opts [Hash] @return [String] XML
# File lib/relaton/bibcollection.rb, line 54 def to_xml(opts = {}) items.sort_by! &:doc_number collection_type = if doctype "type=\"#{doctype}\"" else 'xmlns="https://open.ribose.com/relaton-xml"' end ret = "<relaton-collection #{collection_type}>" ret += "<title>#{title}</title>" if title if author ret += "<contributor><role type='author'/><organization><name>"\ "#{author}</name></organization></contributor>" end unless items.empty? items.each do |item| ret += "<relation type='partOf'>" ret += item.to_xml(opts) ret += "</relation>\n" end end ret += "</relaton-collection>\n" end
to_yaml()
click to toggle source
# File lib/relaton/bibcollection.rb, line 110 def to_yaml to_h.to_yaml end
Private Instance Methods
reduce_items()
click to toggle source
# File lib/relaton/bibcollection.rb, line 129 def reduce_items self.items = (items || []).reduce([]) do |acc, item| acc << if item.is_a?(Bibcollection) || item.is_a?(Bibdata) item else new_bib_item_class(item) end end end