Class: IsoBibItem::IsoBibliographicItem

Inherits:
BibliographicItem show all
Defined in:
lib/iso_bib_item/iso_bibliographic_item.rb

Overview

Bibliographic item.

Instance Attribute Summary collapse

Attributes inherited from BibliographicItem

#abstract, #contributors, #copyright, #dates, #formatted_ref, #id, #language, #link, #notes, #relations, #script, #series

Instance Method Summary collapse

Constructor Details

#initialize(**args) ⇒ IsoBibliographicItem

Returns a new instance of IsoBibliographicItem.

Parameters:

  • docid (Hash{project_number=>Integer, part_number=>Integer, prefix=>string}, IsoBibItem::IsoDocumentId)
  • titles (Array<Hash{title_intro=>String, title_main=>String, title_part=>String, language=>String, script=>String}>)
  • edition (String)
  • language (Array<String>)
  • script (Arrra<String>)
  • type (String)
  • docstatus (Hash{status=>String, stage=>String, substage=>String})
  • workgroup (Hash{name=>String, abbreviation=>String, url=>String, technical_committee=>Hash{name=>String, type=>String, number=>Integer}})
  • ics (Array<Hash{field=>Integer, group=>Integer, subgroup=>Integer}>)
  • dates (Array<Hash{type=>String, from=>String, to=>String}>)
  • abstract (Array<Hash{content=>String, language=>String, script=>String, type=>String}>)
  • contributors (Array<Hash{entity=>Hash{name=>String, url=>String, abbreviation=>String}, roles=>Array<String>}>)
  • copyright (Hash{owner=>Hash{name=>String, abbreviation=>String, url=>String}, form=>String, to=>String})
  • link (Array<Hash{type=>String, content=>String}, IsoBibItem::TypedUri>)
  • relations (Array<Hash{type=>String, identifier=>String}>)


158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 158

def initialize(**args)
  super_args = args.select do |k|
    %i[
      id language script dates abstract contributors relations link
    ].include? k
  end
  super(super_args)
  args[:docid] = [args[:docid]] unless args[:docid].is_a?(Array)
  @docidentifier = args[:docid].map do |t|
    t.is_a?(Hash) ?  IsoDocumentId.new(t) : t
  end
  @edition = args[:edition]
  @title   = args[:titles].map do |t|
    t.is_a?(Hash) ? IsoLocalizedTitle.new(t) : t
  end
  @type   = args[:type]
  @status = if args[:docstatus].is_a?(Hash)
              IsoDocumentStatus.new(args[:docstatus])
            else args[:docstatus] end
  if args[:workgroup]
    @workgroup = if args[:workgroup].is_a?(Hash)
                   IsoProjectGroup.new(args[:workgroup])
                 else args[:workgroup] end
  end
  @ics = args[:ics].map { |i| i.is_a?(Hash) ? Ics.new(i) : i }
  if args[:copyright]
    @copyright = if args[:copyright].is_a?(Hash)
                   CopyrightAssociation.new args[:copyright]
                 else args[:copyright] end
  end
  @link = args[:link].map { |s| s.is_a?(Hash) ? TypedUri.new(s) : s }
  @id_attribute = true
end

Instance Attribute Details

#docidentifierIsoBibItem::IsoDocumentId (readonly)



116
117
118
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 116

def docidentifier
  @docidentifier
end

#editionString (readonly)

Returns:

  • (String)


119
120
121
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 119

def edition
  @edition
end

#icsArray<IsoBibItem::Ics> (readonly)

Returns:



134
135
136
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 134

def ics
  @ics
end

#statusIsoBibItem::IsoDocumentStatus (readonly)



128
129
130
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 128

def status
  @status
end

#title(lang: nil) ⇒ IsoBibItem::IsoLocalizedTitle (readonly)

Parameters:

  • lang (String) (defaults to: nil)

    language code Iso639

Returns:



# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 121

#typeIsoBibItem::IsoDocumentType (readonly)

Returns:

  • (IsoBibItem::IsoDocumentType)


125
126
127
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 125

def type
  @type
end

#workgroupIsoBibItem::IsoProjectGroup (readonly)



131
132
133
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 131

def workgroup
  @workgroup
end

Instance Method Details

#disable_id_attributeObject



192
193
194
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 192

def disable_id_attribute
  @id_attribute = false
end

#shortref(identifier, **opts) ⇒ String

Returns:

  • (String)


232
233
234
235
236
237
238
239
240
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 232

def shortref(identifier, **opts)
  pubdate = dates.select { |d| d.type == "published" }
  year = if opts[:no_year] || pubdate.empty? then ""
         else ':' + pubdate&.first&.on&.year&.to_s
         end
  year += ": All Parts" if opts[:all_parts] || @all_parts

  "#{makeid(identifier, false, ' ')}#{year}"
end

#to_all_partsObject

remove title part components and abstract



197
198
199
200
201
202
203
204
205
206
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 197

def to_all_parts
  me = DeepClone.clone(self)
  me.disable_id_attribute
  @relations << DocumentRelation.new(type: "partOf", identifier: nil, url: nil, bibitem: me)
  @title.each(&:remove_part)
  @abstract = []
  @docidentifier.each(&:remove_part)
  @docidentifier.each(&:all_parts)
  @all_parts = true
end

#to_most_recent_referenceObject

convert ISO:yyyy reference to reference to most recent instance of reference, removing date-specific infomration: date of publication, abstracts. Make dated reference Instance relation of the redacated document



212
213
214
215
216
217
218
219
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 212

def to_most_recent_reference
  me = DeepClone.clone(self)
  me.disable_id_attribute
  @relations << DocumentRelation.new(type: "instance", identifier: nil, url: nil, bibitem: me)
  @abstract = []
  @dates = []
  @docidentifier.each(&:remove_date)
end

#to_xml(builder = nil, **opts, &block) ⇒ String

Returns:

  • (String)


249
250
251
252
253
254
255
256
257
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 249

def to_xml(builder = nil, **opts, &block)
  if builder
    render_xml builder, opts, &block
  else
    Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
      render_xml xml, opts, &block
    end.doc.root.to_xml
  end
end

#url(type = :src) ⇒ String

Parameters:

  • type (Symbol) (defaults to: :src)

    type of url, can be :src/:obp/:rss

Returns:

  • (String)


244
245
246
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 244

def url(type = :src)
  @link.find { |s| s.type == type.to_s }.content.to_s
end