Class: RelatonIsoBib::IsoBibliographicItem

Inherits:
RelatonBib::BibliographicItem
  • Object
show all
Defined in:
lib/relaton_iso_bib/iso_bibliographic_item.rb

Overview

Bibliographic item.

Constant Summary collapse

DOCTYPES =
%w[
  international-standard technical-specification technical-report
  publicly-available-specification international-workshop-agreement guide
  amendment technical-corrigendum directive
].freeze
SUBDOCTYPES =
%w[specification method-of-test vocabulary code-of-practice].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**args) ⇒ IsoBibliographicItem

Returns a new instance of IsoBibliographicItem.

Parameters:

  • edition (String)
  • docnumber (String, NilClass)
  • language (Array<String>)
  • script (Arrra<String>)
  • docstatus (RelatonBib::DocumentStatus, NilClass)
  • type (String, NilClass)
  • formattedref (RelatonBib::FormattedRef, NilClass)
  • version (RelatonBib::BibliographicItem::Version, NilClass)
  • biblionote (Array<RelatonBib::BiblioNote>)
  • series (Array<RelatonBib::Series>)
  • medium (RelatonBib::Medium, NilClas)
  • place (Array<String>)
  • extent (Array<Relaton::BibItemLocality>)
  • accesslocation (Array<String>)
  • classification (RelatonBib::Classification, NilClass)
  • validity (RelatonBib:Validity, NilClass)
  • docid (Array<RelatonBib::DocumentIdentifier>)
  • doctype (String, nil)
  • subdoctype (String, nil)
  • horizontal (Boolean, nil)
  • structuredidentifier (RelatonIsoBib::StructuredIdentifier)
  • stagename (String, NilClass)
  • title (Array<Hash>)
  • editorialgroup (Hash, RelatonIsoBib::EditorialGroup)
  • ics (Array<Hash>)
  • date (Array<Hash>)
  • abstract (Array<Hash>)
  • contributor (Array<Hash>)
  • copyright (Hash)
  • link (Array<Hash, RelatonBib::TypedUri>)
  • relation (Array<Hash>)
  • workgrpup (Hash)

    a customizable set of options

  • technical_committee (Hash)

    a customizable set of options

  • entity (Hash)

    a customizable set of options

  • owner (Hash)

    a customizable set of options

Raises:

  • (ArgumentError)


130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/relaton_iso_bib/iso_bibliographic_item.rb', line 130

def initialize(**args)
  check_doctype args[:doctype]

  args[:type] ||= "standard"
  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 type
  ]
  super_args = args.select { |k| arg_names.include? k }
  super(**super_args)

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

  if args[:subdoctype] && !self.class::SUBDOCTYPES.include?(args[:subdoctype])
    Util.warn "Invald subdoctype `#{args[:subdoctype]}`. Allowed values are: #{self.class::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

Instance Attribute Details

#doctypeString, NilClass (readonly)

Returns:

  • (String, NilClass)


36
37
38
# File 'lib/relaton_iso_bib/iso_bibliographic_item.rb', line 36

def doctype
  @doctype
end

#editorialgroupRelatonIsoBib::EditorialGroup (readonly)



42
43
44
# File 'lib/relaton_iso_bib/iso_bibliographic_item.rb', line 42

def editorialgroup
  @editorialgroup
end

#horizontalBoolean? (readonly)

Returns:

  • (Boolean, nil)


39
40
41
# File 'lib/relaton_iso_bib/iso_bibliographic_item.rb', line 39

def horizontal
  @horizontal
end

#icsArray<RelatonIsoBib::Ics> (readonly)



45
46
47
# File 'lib/relaton_iso_bib/iso_bibliographic_item.rb', line 45

def ics
  @ics
end

#stagenameString, NilClass (readonly)

Returns:

  • (String, NilClass)


36
37
38
# File 'lib/relaton_iso_bib/iso_bibliographic_item.rb', line 36

def stagename
  @stagename
end

#structuredidentifierRelatonIsoBib::StructuredIdentifier (readonly)



30
31
32
# File 'lib/relaton_iso_bib/iso_bibliographic_item.rb', line 30

def structuredidentifier
  @structuredidentifier
end

#titleArray<RelatonBib::TypedTitleString> (readonly)

Returns:

  • (Array<RelatonBib::TypedTitleString>)


# File 'lib/relaton_iso_bib/iso_bibliographic_item.rb', line 32

Instance Method Details

#ext_schemaString

Fetch the flavour schema version

Returns:

  • (String)

    flavour schema version



166
167
168
# File 'lib/relaton_iso_bib/iso_bibliographic_item.rb', line 166

def ext_schema
  @ext_schema ||= schema_versions["relaton-model-iso"]
end

#to_asciibib(prefix = "") ⇒ String

Parameters:

  • prefix (String) (defaults to: "")

Returns:

  • (String)


218
219
220
221
222
223
# File 'lib/relaton_iso_bib/iso_bibliographic_item.rb', line 218

def to_asciibib(prefix = "")
  pref = prefix.empty? ? prefix : "#{prefix}."
  out = super
  out += "#{pref}stagename:: #{stagename}\n" if stagename
  out
end

#to_hash(embedded: false) ⇒ Hash

Render the document as HASH

Parameters:

  • embedded (Boolean) (defaults to: false)

    true if the bibitem is embedded in another bibitem

Returns:

  • (Hash)

    the document as HAS



209
210
211
212
213
214
# File 'lib/relaton_iso_bib/iso_bibliographic_item.rb', line 209

def to_hash(embedded: false)
  hash = super
  hash["horizontal"] = horizontal unless horizontal.nil?
  hash["stagename"] = stagename if stagename
  hash
end

#to_xml(**opts) ⇒ String

Render the document as an XML string.

Parameters:

  • opts (Hash)

    options

Options Hash (**opts):

  • :builder (Nokogiri::XML::Builder)

    XML builder

  • :bibdata (Boolean)

    if true, bibdata element is created

  • :embedded (Boolean)

    if true the document is embedded in another document

  • :lang (String)

    language

Returns:

  • (String)

    XML



181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# File 'lib/relaton_iso_bib/iso_bibliographic_item.rb', line 181

def to_xml(**opts)
  super(**opts) do |b|
    if block_given? then yield b
    elsif opts[:bibdata] && has_ext_attrs?
      ext = 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
      ext["schema-version"] = ext_schema unless opts[:embedded]
    end
  end
end