class RelatonIsoBib::IsoBibliographicItem

Bibliographic item.

Constants

SUBDOCTYPES
TYPES

Attributes

doctype[R]

@return [String, NilClass]

editorialgroup[R]

@return [RelatonIsoBib::EditorialGroup]

horizontal[R]

@return [Boolean, nil]

ics[R]

@return [Array<RelatonIsoBib::Ics>]

stagename[R]

@return [String, NilClass]

structuredidentifier[R]

@return [RelatonIsoBib::StructuredIdentifier]

Public Class Methods

new(**args) click to toggle source

@param edition [String] @param docnumber [String, NilClass] @param language [Array<String>] @param script [Arrra<String>] @param docstatus [RelatonBib::DocumentStatus, NilClass] @param type [String, NilClass] @param formattedref [RelatonBib::FormattedRef, NilClass] @param version [RelatonBib::BibliographicItem::Version, NilClass] @param biblionote [Array<RelatonBib::BiblioNote>] @param series [Array<RelatonBib::Series>] @param medium [RelatonBib::Medium, NilClas] @param place [Array<String>] @param extent [Array<Relaton::BibItemLocality>] @param accesslocation [Array<String>] @param classification [RelatonBib::Classification, NilClass] @param validity [RelatonBib:Validity, NilClass] @param docid [Array<RelatonBib::DocumentIdentifier>] @param doctype [String, nil] @param subdoctype [String, nil] @param horizontal [Boolean, nil] @param structuredidentifier [RelatonIsoBib::StructuredIdentifier] @param stagename [String, NilClass]

@param title [Array<Hash>] @option title [String] :title_intro @option title [String] :title_main @option title [String] :title_part @option title [String] :language @option title [String] :script

@param editorialgroup [Hash, RelatonIsoBib::EditorialGroup] @option workgrpup [String] :name @option workgrpup [String] :abbreviation @option workgrpup [String] :url @option workgrpup [Hash] :technical_committee @option technical_committee [String] :name @option technical_committee [String] :type @option technical_committee [Integer] :number

@param ics [Array<Hash>] @option ics [Integer] :field @option ics [Integer] :group @option ics [Integer] :subgroup

@param date [Array<Hash>] @option date [String] :type @option date [String] :from @option date [String] :to

@param abstract [Array<Hash>] @option abstract [String] :content @option abstract [String] :language @option abstract [String] :script @option abstract [String] :type

@param contributor [Array<Hash>] @option contributor [Hash] :entity @option entity [String] :name @option entity [String] :url @option entity [String] :abbreviation @option contributor [Array<String>] :role

@param copyright [Hash] @option copyright [Hash] :owner @option owner [String] :name @option owner [String] :abbreviation @option owner [String] :url @option copyright [String] :from @option copyright [String] :to

@param link [Array<Hash, RelatonBib::TypedUri>] @option link [String] :type @option link [String] :content

@param relation [Array<Hash>] @option relation [String] :type @option relation [RelatonIsoBib::IsoBibliographicItem] :bibitem @option relation [Array<RelatonBib::BibItemLocality>] :bib_locality

@raise [ArgumentError]

Calls superclass method
# File lib/relaton_iso_bib/iso_bibliographic_item.rb, line 133
def initialize(**args)
  check_doctype args[:doctype]

  arg_names = %i[
    id title docnumber language script docstatus date abstract contributor
    edition version relation biblionote series medium place copyright link
    fetched docid formattedref extent accesslocation classification validity
    editorialgroup doctype keyword
  ]
  super_args = args.select { |k| arg_names.include? k }
  super(**super_args)

  @type = args[:type] || "standard"

  if args[:editorialgroup]
    @editorialgroup = if args[:editorialgroup].is_a?(Hash)
                        EditorialGroup.new(**args[:editorialgroup])
                      else args[:editorialgroup]
                      end
  end

  if args[:subdoctype] && !SUBDOCTYPES.include?(args[:subdoctype])
    warn "Invald subdoctype '#{args[:subdoctype]}'. Allowed values are: #{SUBDOCTYPES.join(', ')}"
  end
  @subdoctype = args[:subdoctype]
  @structuredidentifier = args[:structuredidentifier]
  @horizontal = args[:horizontal]
  @ics = args.fetch(:ics, []).map { |i| i.is_a?(Hash) ? Ics.new(**i) : i }
  @stagename = args[:stagename]
  @id_attribute = true
end

Public Instance Methods

to_asciibib(prefix = "") click to toggle source

@param prefix [String] @return [String]

Calls superclass method
# File lib/relaton_iso_bib/iso_bibliographic_item.rb, line 200
def to_asciibib(prefix = "")
  pref = prefix.empty? ? prefix : "#{prefix}."
  out = super
  out += "#{pref}stagename:: #{stagename}\n" if stagename
  out
end
to_hash() click to toggle source

@return [Hash]

Calls superclass method
# File lib/relaton_iso_bib/iso_bibliographic_item.rb, line 191
def to_hash
  hash = super
  hash["horizontal"] = horizontal unless horizontal.nil?
  hash["stagename"] = stagename if stagename
  hash
end
to_xml(**opts) { |b| ... } click to toggle source

@param opts [Hash] @option opts [Nokogiri::XML::Builder] :builder XML builder @option opts [Boolean] :bibdata @option opts [String] :lang language @return [String] XML

Calls superclass method
# File lib/relaton_iso_bib/iso_bibliographic_item.rb, line 170
def to_xml(**opts)
  super(**opts) do |b|
    if block_given? then yield b
    elsif opts[:bibdata] && has_ext_attrs?
      b.ext do
        b.doctype doctype if doctype
        b.subdoctype subdoctype if subdoctype
        b.horizontal horizontal unless horizontal.nil?
        editorialgroup&.to_xml b
        ics.each { |i| i.to_xml b }
        structuredidentifier&.to_xml b
        b.stagename stagename if stagename
      end
    end
  end
end

Private Instance Methods

check_doctype(doctype) click to toggle source

@param doctype [String] @raise ArgumentError

# File lib/relaton_iso_bib/iso_bibliographic_item.rb, line 211
def check_doctype(doctype)
  if doctype && !self.class::TYPES.include?(doctype)
    warn "[relaton-iso-bib] WARNING: invalid doctype: #{doctype}"
    warn "[relaton-iso-bib] Allowed doctypes are: #{self.class::TYPES.join(', ')}"
  end
end
has_ext_attrs?() click to toggle source

@return [Boolean]

# File lib/relaton_iso_bib/iso_bibliographic_item.rb, line 234
def has_ext_attrs? # rubocop:disable Metrics/CyclomaticComplexity
  (doctype || !horizontal.nil? || editorialgroup || ics.any? ||
    structuredidentifier || stagename || horizontal)
end
makeid(id, attribute, _delim = "") click to toggle source
# File lib/relaton_iso_bib/iso_bibliographic_item.rb, line 218
def makeid(id, attribute, _delim = "") # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/AbcSize
  return nil if attribute && !@id_attribute

  id ||= @docidentifier.reject { |i| i&.type == "DOI" }[0]
  if id
    idstr = id.id
    idstr = "IEV" if structuredidentifier&.project_number == "IEV"
  else
    idstr = formattedref&.content
  end
  idstr&.gsub(/:/, "-")&.gsub(/\s/, "")&.strip
end