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, #fetched, #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}>)


167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 167

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)



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

def docidentifier
  @docidentifier
end

#editionString (readonly)

Returns:

  • (String)


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

def edition
  @edition
end

#icsArray<IsoBibItem::Ics> (readonly)

Returns:



143
144
145
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 143

def ics
  @ics
end

#statusIsoBibItem::IsoDocumentStatus (readonly)



137
138
139
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 137

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 130

#typeIsoBibItem::IsoDocumentType (readonly)

Returns:

  • (IsoBibItem::IsoDocumentType)


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

def type
  @type
end

#workgroupIsoBibItem::IsoProjectGroup (readonly)



140
141
142
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 140

def workgroup
  @workgroup
end

Instance Method Details

#disable_id_attributeObject



201
202
203
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 201

def disable_id_attribute
  @id_attribute = false
end

#shortref(identifier, **opts) ⇒ String

Returns:

  • (String)


241
242
243
244
245
246
247
248
249
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 241

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



206
207
208
209
210
211
212
213
214
215
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 206

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



221
222
223
224
225
226
227
228
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 221

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)


258
259
260
261
262
263
264
265
266
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 258

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)


253
254
255
# File 'lib/iso_bib_item/iso_bibliographic_item.rb', line 253

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