Module: RelatonBib::HashConverter
Instance Method Summary collapse
- #abstract_hash_to_bib(ret) ⇒ Object
- #accesslocation_hash_to_bib(ret) ⇒ Object
-
#affiliation_hash_to_bib(person) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength.
- #bib_item(item_hash) ⇒ RelatonBib::BibliographicItem
-
#biblionote_hash_to_bib(ret) ⇒ Object
rubocop:disable Metrics/MethodLength,Metrics/AbcSize.
- #classification_hash_to_bib(ret) ⇒ Object
-
#contacts_hash_to_bib(entity) ⇒ Object
rubocop:disable Metrics/AbcSize,Metrics/MethodLength,Metrics/CyclomaticComplexity.
-
#contributors_hash_to_bib(ret) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength,Metrics/PerceivedComplexity.
- #copyright_hash_to_bib(ret) ⇒ Object
- #create_address(adr) ⇒ Object
- #create_docid(**args) ⇒ Object
- #create_doctype(**args) ⇒ Object
-
#dates_hash_to_bib(ret) ⇒ Object
rubocop:disable Metrics/AbcSize.
-
#docid_hash_to_bib(ret) ⇒ Object
rubocop:disable Metrics/AbcSize.
- #docstatus_hash_to_bib(ret) ⇒ Object
- #doctype_hash_to_bib(ret) ⇒ Object
- #editorialgroup_hash_to_bib(ret) ⇒ Object
- #extent_hash_to_bib(ret) ⇒ Object
- #forename_hash_to_bib(fname) ⇒ Object
- #formattedref(frf) ⇒ RelatonBib::FormattedRef
- #formattedref_hash_to_bib(ret) ⇒ Object
-
#fullname_hash_to_bib(person) ⇒ Object
rubocop:disable Metrics/AbcSize.
- #given_hash_to_bib(given) ⇒ Object
- #hash_to_bib(args) ⇒ Hash
- #ics_hash_to_bib(ret) ⇒ Object
-
#keyword_hash_to_bib(ret) ⇒ Object
rubocop:enable Metrics/MethodLength, Metrics/AbcSize.
- #language_hash_to_bib(ret) ⇒ Object
- #link_hash_to_bib(ret) ⇒ Object
- #locality(loc) ⇒ Object
- #locality_locality_stack(lls) ⇒ Object
- #localizedstring(lst) ⇒ RelatonBib::LocalizedString
- #medium_hash_to_bib(ret) ⇒ Object
-
#org_hash_to_bib(org) ⇒ Object
rubocop:disable Metrics/AbcSize.
- #parse_validity_time(val, period) ⇒ Object
- #person_hash_to_bib(person) ⇒ Object
- #person_identifiers_hash_to_bib(person) ⇒ Object
- #place_hash_to_bib(ret) ⇒ Object
- #relation_bibitem_hash_to_bib(rel) ⇒ Object
- #relation_locality_hash_to_bib(rel) ⇒ RelatonBib::LocalityStack
- #relation_source_locality_hash_to_bib(rel) ⇒ Object
- #relations_hash_to_bib(ret) ⇒ Object
- #script_hash_to_bib(ret) ⇒ Object
- #series_hash_to_bib(ret) ⇒ Object
- #size_hash_to_bib(ret) ⇒ Object
- #stage(stg) ⇒ RelatonBib::DocumentStatus::Stage
- #structuredidentifier_hash_to_bib(ret) ⇒ Object
- #symbolize(obj) ⇒ Hash, ...
- #title_hash_to_bib(ret) ⇒ Object
- #typed_title_strig(title) ⇒ RelatonBib::TypedTitleString
- #validity_hash_to_bib(ret) ⇒ Object
- #version_hash_to_bib(ret) ⇒ Object
Instance Method Details
#abstract_hash_to_bib(ret) ⇒ Object
104 105 106 107 108 109 110 |
# File 'lib/relaton_bib/hash_converter.rb', line 104 def abstract_hash_to_bib(ret) return unless ret[:abstract] ret[:abstract] = RelatonBib.array(ret[:abstract]).map do |a| a.is_a?(String) ? FormattedString.new(content: a) : a end end |
#accesslocation_hash_to_bib(ret) ⇒ Object
126 127 128 129 130 |
# File 'lib/relaton_bib/hash_converter.rb', line 126 def accesslocation_hash_to_bib(ret) return unless ret[:accesslocation] ret[:accesslocation] = RelatonBib.array(ret[:accesslocation]) end |
#affiliation_hash_to_bib(person) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength
283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 |
# File 'lib/relaton_bib/hash_converter.rb', line 283 def affiliation_hash_to_bib(person) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength return [] unless person[:affiliation] RelatonBib.array(person[:affiliation]).map do |a| a[:description] = RelatonBib.array(a[:description]).map do |d| cnt = if d.is_a?(Hash) { content: d[:content], language: d[:language], script: d[:script], format: d[:format] } else { content: d } end FormattedString.new(**cnt) end Affiliation.new( organization: Organization.new(**org_hash_to_bib(a[:organization])), description: a[:description], name: localizedstring(a[:name]) ) end end |
#bib_item(item_hash) ⇒ RelatonBib::BibliographicItem
368 369 370 |
# File 'lib/relaton_bib/hash_converter.rb', line 368 def bib_item(item_hash) BibliographicItem.new(**item_hash) end |
#biblionote_hash_to_bib(ret) ⇒ Object
rubocop:disable Metrics/MethodLength,Metrics/AbcSize
166 167 168 169 170 171 172 173 174 175 |
# File 'lib/relaton_bib/hash_converter.rb', line 166 def biblionote_hash_to_bib(ret) # rubocop:disable Metrics/MethodLength,Metrics/AbcSize return unless ret[:biblionote] ret[:biblionote] = RelatonBib.array(ret[:biblionote]) .reduce(BiblioNoteCollection.new([])) do |mem, n| mem << if n.is_a?(String) then BiblioNote.new content: n else BiblioNote.new(**n) end end end |
#classification_hash_to_bib(ret) ⇒ Object
434 435 436 437 438 439 440 |
# File 'lib/relaton_bib/hash_converter.rb', line 434 def classification_hash_to_bib(ret) if ret[:classification] ret[:classification] = RelatonBib.array(ret[:classification]).map do |cls| Classification.new(**cls) end end end |
#contacts_hash_to_bib(entity) ⇒ Object
rubocop:disable Metrics/AbcSize,Metrics/MethodLength,Metrics/CyclomaticComplexity
302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 |
# File 'lib/relaton_bib/hash_converter.rb', line 302 def contacts_hash_to_bib(entity) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength,Metrics/CyclomaticComplexity return [] unless entity[:contact] RelatonBib.array(entity[:contact]).map do |a| type, value = a.reject { |k, _| k == :type }.flatten case type when :street, :city, :state, :country, :postcode # it's for old version compatibility, should be removed in the future a[:street] = RelatonBib.array(a[:street]) Address.new(**a) when :address then create_address(a[:address]) when :phone, :email, :uri Contact.new(type: type.to_s, value: value, subtype: a[:type]) else # it's for old version compatibility, should be removed in the future Contact.new(**a) end end end |
#contributors_hash_to_bib(ret) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength,Metrics/PerceivedComplexity
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
# File 'lib/relaton_bib/hash_converter.rb', line 199 def contributors_hash_to_bib(ret) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength,Metrics/PerceivedComplexity return unless ret[:contributor] ret[:contributor] = RelatonBib.array(ret[:contributor]) ret[:contributor]&.each_with_index do |c, i| roles = RelatonBib.array(ret[:contributor][i][:role]).map do |r| if r.is_a? Hash desc = RelatonBib.array(r[:description]).map { |d| d.is_a?(String) ? d : d[:content] } { type: r[:type], description: desc } # elsif r.is_a? Array # { type: r[0], description: r.fetch(1) } else { type: r } end end ret[:contributor][i][:role] = roles ret[:contributor][i][:entity] = if c[:person] person_hash_to_bib(c[:person]) else org_hash_to_bib(c[:organization]) end ret[:contributor][i].delete(:person) ret[:contributor][i].delete(:organization) end end |
#copyright_hash_to_bib(ret) ⇒ Object
330 331 332 333 334 335 336 337 338 339 |
# File 'lib/relaton_bib/hash_converter.rb', line 330 def copyright_hash_to_bib(ret) return unless ret[:copyright] ret[:copyright] = RelatonBib.array(ret[:copyright]).map do |c| c[:owner] = RelatonBib.array(c[:owner]).map do |o| org_hash_to_bib(o) end c end end |
#create_address(adr) ⇒ Object
320 321 322 323 324 325 326 327 |
# File 'lib/relaton_bib/hash_converter.rb', line 320 def create_address(adr) if adr.is_a?(Hash) adr[:street] = RelatonBib.array(adr[:street]) Address.new(**adr) else Address.new(formatted_address: adr) end end |
#create_docid(**args) ⇒ Object
154 155 156 |
# File 'lib/relaton_bib/hash_converter.rb', line 154 def create_docid(**args) DocumentIdentifier.new(**args) end |
#create_doctype(**args) ⇒ Object
538 539 540 |
# File 'lib/relaton_bib/hash_converter.rb', line 538 def create_doctype(**args) DocumentType.new(**args) end |
#dates_hash_to_bib(ret) ⇒ Object
rubocop:disable Metrics/AbcSize
132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/relaton_bib/hash_converter.rb', line 132 def dates_hash_to_bib(ret) # rubocop:disable Metrics/AbcSize return unless ret[:date] ret[:date] = RelatonBib.array(ret[:date]) ret[:date].each_with_index do |d, i| # value is synonym of on: it is reserved word in YAML if d[:value] ret[:date][i][:on] ||= d[:value] ret[:date][i].delete(:value) end end end |
#docid_hash_to_bib(ret) ⇒ Object
rubocop:disable Metrics/AbcSize
145 146 147 148 149 150 151 152 |
# File 'lib/relaton_bib/hash_converter.rb', line 145 def docid_hash_to_bib(ret) # rubocop:disable Metrics/AbcSize return unless ret[:docid] ret[:docid] = RelatonBib.array(ret[:docid]).map do |id| id[:type] ||= id[:id].match(/^\w+(?=\s)/)&.to_s create_docid(**id) end end |
#docstatus_hash_to_bib(ret) ⇒ Object
182 183 184 185 186 187 188 |
# File 'lib/relaton_bib/hash_converter.rb', line 182 def docstatus_hash_to_bib(ret) ret[:docstatus] && ret[:docstatus] = DocumentStatus.new( stage: stage(ret[:docstatus][:stage]), substage: stage(ret[:docstatus][:substage]), iteration: ret[:docstatus][:iteration], ) end |
#doctype_hash_to_bib(ret) ⇒ Object
529 530 531 532 533 534 535 536 |
# File 'lib/relaton_bib/hash_converter.rb', line 529 def doctype_hash_to_bib(ret) return unless ret[:doctype] ret[:doctype] = if ret[:doctype].is_a?(String) create_doctype(type: ret[:doctype]) else create_doctype(**ret[:doctype]) end end |
#editorialgroup_hash_to_bib(ret) ⇒ Object
467 468 469 470 471 472 473 474 |
# File 'lib/relaton_bib/hash_converter.rb', line 467 def editorialgroup_hash_to_bib(ret) return unless ret[:editorialgroup] technical_committee = RelatonBib.array(ret[:editorialgroup]).map do |wg| TechnicalCommittee.new WorkGroup.new(**wg) end ret[:editorialgroup] = EditorialGroup.new technical_committee end |
#extent_hash_to_bib(ret) ⇒ Object
51 52 53 54 55 56 57 58 59 |
# File 'lib/relaton_bib/hash_converter.rb', line 51 def extent_hash_to_bib(ret) return unless ret[:extent] ret[:extent] = RelatonBib.array(ret[:extent]).map do |e| locality e # ret[:extent][i] = Locality.new(e[:type], e[:reference_from], # e[:reference_to]) end end |
#forename_hash_to_bib(fname) ⇒ Object
270 271 272 273 274 275 |
# File 'lib/relaton_bib/hash_converter.rb', line 270 def forename_hash_to_bib(fname) case fname when Hash then Forename.new(**fname) when String then Forename.new(content: fname) end end |
#formattedref(frf) ⇒ RelatonBib::FormattedRef
521 522 523 524 525 526 527 |
# File 'lib/relaton_bib/hash_converter.rb', line 521 def formattedref(frf) if frf.is_a?(Hash) RelatonBib::FormattedRef.new(**frf) else RelatonBib::FormattedRef.new(content: frf) end end |
#formattedref_hash_to_bib(ret) ⇒ Object
177 178 179 180 |
# File 'lib/relaton_bib/hash_converter.rb', line 177 def formattedref_hash_to_bib(ret) ret[:formattedref] && ret[:formattedref] = formattedref(ret[:formattedref]) end |
#fullname_hash_to_bib(person) ⇒ Object
rubocop:disable Metrics/AbcSize
249 250 251 252 253 254 255 256 257 258 259 260 |
# File 'lib/relaton_bib/hash_converter.rb', line 249 def fullname_hash_to_bib(person) # rubocop:disable Metrics/AbcSize n = person[:name] fname, inits = given_hash_to_bib n[:given] || n # `n` is for backward compatibility FullName.new( abbreviation: localizedstring(n[:abbreviation]), forename: fname, initials: inits, addition: RelatonBib.array(n[:addition])&.map { |f| localizedstring(f) }, prefix: RelatonBib.array(n[:prefix])&.map { |f| localizedstring(f) }, surname: localizedstring(n[:surname]), completename: localizedstring(n[:completename]) ) end |
#given_hash_to_bib(given) ⇒ Object
262 263 264 265 266 267 268 |
# File 'lib/relaton_bib/hash_converter.rb', line 262 def given_hash_to_bib(given) return [[], nil] unless given fname = RelatonBib.array(given[:forename])&.map { |f| forename_hash_to_bib(f) } inits = localizedstring(given[:formatted_initials]) [fname, inits] end |
#hash_to_bib(args) ⇒ Hash
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/relaton_bib/hash_converter.rb', line 8 def hash_to_bib(args) return nil unless args.is_a?(Hash) ret = Marshal.load(Marshal.dump(symbolize(args))) # deep copy title_hash_to_bib(ret) link_hash_to_bib(ret) language_hash_to_bib(ret) script_hash_to_bib(ret) dates_hash_to_bib(ret) docid_hash_to_bib(ret) version_hash_to_bib(ret) biblionote_hash_to_bib(ret) abstract_hash_to_bib(ret) formattedref_hash_to_bib(ret) docstatus_hash_to_bib(ret) contributors_hash_to_bib(ret) copyright_hash_to_bib(ret) relations_hash_to_bib(ret) series_hash_to_bib(ret) medium_hash_to_bib(ret) place_hash_to_bib(ret) extent_hash_to_bib(ret) size_hash_to_bib(ret) accesslocation_hash_to_bib(ret) classification_hash_to_bib(ret) validity_hash_to_bib(ret) keyword_hash_to_bib(ret) # ret[:keyword] = RelatonBib.array(ret[:keyword]) ret[:license] = RelatonBib.array(ret[:license]) editorialgroup_hash_to_bib ret ics_hash_to_bib ret structuredidentifier_hash_to_bib ret doctype_hash_to_bib ret ret end |
#ics_hash_to_bib(ret) ⇒ Object
477 478 479 480 481 |
# File 'lib/relaton_bib/hash_converter.rb', line 477 def ics_hash_to_bib(ret) return unless ret[:ics] ret[:ics] = RelatonBib.array(ret[:ics]).map { |ics| ICS.new(**ics) } end |
#keyword_hash_to_bib(ret) ⇒ Object
rubocop:enable Metrics/MethodLength, Metrics/AbcSize
45 46 47 48 49 |
# File 'lib/relaton_bib/hash_converter.rb', line 45 def keyword_hash_to_bib(ret) ret[:keyword] = RelatonBib.array(ret[:keyword]).map do |keyword| localizedstring keyword end end |
#language_hash_to_bib(ret) ⇒ Object
92 93 94 95 96 |
# File 'lib/relaton_bib/hash_converter.rb', line 92 def language_hash_to_bib(ret) return unless ret[:language] ret[:language] = RelatonBib.array(ret[:language]) end |
#link_hash_to_bib(ret) ⇒ Object
112 113 114 115 116 |
# File 'lib/relaton_bib/hash_converter.rb', line 112 def link_hash_to_bib(ret) return unless ret[:link] ret[:link] = RelatonBib.array(ret[:link]) end |
#locality(loc) ⇒ Object
61 62 63 64 65 66 67 68 |
# File 'lib/relaton_bib/hash_converter.rb', line 61 def locality(loc) if loc[:locality_stack] LocalityStack.new(loc[:locality_stack].map { |l| locality(l) }) else l = loc[:locality] Locality.new(l[:type], l[:reference_from], l[:reference_to]) end end |
#locality_locality_stack(lls) ⇒ Object
380 381 382 383 384 385 386 387 388 389 |
# File 'lib/relaton_bib/hash_converter.rb', line 380 def locality_locality_stack(lls) if lls[:locality_stack] RelatonBib.array(lls[:locality_stack]).map do |lc| l = lc[:locality] || lc Locality.new(l[:type], l[:reference_from], l[:reference_to]) end else [Locality.new(lls[:type], lls[:reference_from], lls[:reference_to])] end end |
#localizedstring(lst) ⇒ RelatonBib::LocalizedString
510 511 512 513 514 515 516 517 |
# File 'lib/relaton_bib/hash_converter.rb', line 510 def localizedstring(lst) return unless lst if lst.is_a?(Hash) LocalizedString.new(lst[:content], lst[:language], lst[:script]) else LocalizedString.new(lst) end end |
#medium_hash_to_bib(ret) ⇒ Object
429 430 431 |
# File 'lib/relaton_bib/hash_converter.rb', line 429 def medium_hash_to_bib(ret) ret[:medium] = Medium.new(**ret[:medium]) if ret[:medium] end |
#org_hash_to_bib(org) ⇒ Object
rubocop:disable Metrics/AbcSize
225 226 227 228 229 230 231 232 233 234 235 236 237 |
# File 'lib/relaton_bib/hash_converter.rb', line 225 def org_hash_to_bib(org) # rubocop:disable Metrics/AbcSize return nil if org.nil? org[:identifier] = RelatonBib.array(org[:identifier])&.map do |a| OrgIdentifier.new(a[:type], a[:id]) end org[:subdivision] = RelatonBib.array(org[:subdivision]).map do |sd| LocalizedString.new sd end org[:contact] = contacts_hash_to_bib(org) org[:logo] = Image.new(**org[:logo][:image]) if org[:logo] org end |
#parse_validity_time(val, period) ⇒ Object
452 453 454 455 456 457 458 459 460 461 462 463 464 |
# File 'lib/relaton_bib/hash_converter.rb', line 452 def parse_validity_time(val, period) t = val[period]&.to_s return unless t p = period == :ends ? -1 : 1 case t when /^\d{4}$/ Date.new(t.to_i, p, p).to_time when /^(?<year>\d{4})-(?<month>\d{1,2})$/ Date.new($~[:year].to_i, $~[:month].to_i, p).to_time else Time.parse t end end |
#person_hash_to_bib(person) ⇒ Object
239 240 241 242 243 244 245 246 247 |
# File 'lib/relaton_bib/hash_converter.rb', line 239 def person_hash_to_bib(person) Person.new( name: fullname_hash_to_bib(person), credential: RelatonBib.array(person[:credential]), affiliation: affiliation_hash_to_bib(person), contact: contacts_hash_to_bib(person), identifier: person_identifiers_hash_to_bib(person), ) end |
#person_identifiers_hash_to_bib(person) ⇒ Object
277 278 279 280 281 |
# File 'lib/relaton_bib/hash_converter.rb', line 277 def person_identifiers_hash_to_bib(person) RelatonBib.array(person[:identifier])&.map do |a| PersonIdentifier.new(a[:type], a[:id]) end end |
#place_hash_to_bib(ret) ⇒ Object
118 119 120 121 122 123 124 |
# File 'lib/relaton_bib/hash_converter.rb', line 118 def place_hash_to_bib(ret) return unless ret[:place] ret[:place] = RelatonBib.array(ret[:place]).map do |pl| pl.is_a?(String) ? Place.new(name: pl) : Place.new(**pl) end end |
#relation_bibitem_hash_to_bib(rel) ⇒ Object
357 358 359 360 361 362 363 364 |
# File 'lib/relaton_bib/hash_converter.rb', line 357 def relation_bibitem_hash_to_bib(rel) if rel[:bibitem] rel[:bibitem] = bib_item hash_to_bib(rel[:bibitem]) else Util.warn "WARNING: bibitem missing: `#{rel}`" rel[:bibitem] = nil end end |
#relation_locality_hash_to_bib(rel) ⇒ RelatonBib::LocalityStack
374 375 376 377 378 |
# File 'lib/relaton_bib/hash_converter.rb', line 374 def relation_locality_hash_to_bib(rel) rel[:locality] = RelatonBib.array(rel[:locality])&.map do |bl| LocalityStack.new locality_locality_stack(bl) end end |
#relation_source_locality_hash_to_bib(rel) ⇒ Object
392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 |
# File 'lib/relaton_bib/hash_converter.rb', line 392 def relation_source_locality_hash_to_bib(rel) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength rel[:source_locality] = RelatonBib.array(rel[:source_locality])&.map do |sl| sls = if sl[:source_locality_stack] RelatonBib.array(sl[:source_locality_stack]).map do |l| SourceLocality.new(l[:type], l[:reference_from], l[:reference_to]) end else l = SourceLocality.new(sl[:type], sl[:reference_from], sl[:reference_to]) [l] end SourceLocalityStack.new sls end end |
#relations_hash_to_bib(ret) ⇒ Object
342 343 344 345 346 347 348 349 350 351 352 353 354 |
# File 'lib/relaton_bib/hash_converter.rb', line 342 def relations_hash_to_bib(ret) return unless ret[:relation] ret[:relation] = RelatonBib.array(ret[:relation]) ret[:relation]&.each do |r| if r[:description] r[:description] = FormattedString.new(**r[:description]) end relation_bibitem_hash_to_bib(r) relation_locality_hash_to_bib(r) relation_source_locality_hash_to_bib(r) end end |
#script_hash_to_bib(ret) ⇒ Object
98 99 100 101 102 |
# File 'lib/relaton_bib/hash_converter.rb', line 98 def script_hash_to_bib(ret) return unless ret[:script] ret[:script] = RelatonBib.array(ret[:script]) end |
#series_hash_to_bib(ret) ⇒ Object
409 410 411 412 413 414 415 416 417 418 419 420 |
# File 'lib/relaton_bib/hash_converter.rb', line 409 def series_hash_to_bib(ret) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity ret[:series] = RelatonBib.array(ret[:series])&.map do |s| s[:formattedref] && s[:formattedref] = formattedref(s[:formattedref]) if s[:title] s[:title] = { content: s[:title] } unless s[:title].is_a?(Hash) s[:title] = typed_title_strig(s[:title]) end s[:abbreviation] && s[:abbreviation] = localizedstring(s[:abbreviation]) Series.new(**s) end end |
#size_hash_to_bib(ret) ⇒ Object
70 71 72 73 74 75 76 77 78 |
# File 'lib/relaton_bib/hash_converter.rb', line 70 def size_hash_to_bib(ret) return unless ret[:size] ret[:size] = RelatonBib.array(ret[:size]) size = ret[:size]&.map do |val| BibliographicSize::Value.new(**val) end ret[:size] = BibliographicSize.new(size) end |
#stage(stg) ⇒ RelatonBib::DocumentStatus::Stage
192 193 194 195 196 197 |
# File 'lib/relaton_bib/hash_converter.rb', line 192 def stage(stg) return unless stg args = stg.is_a?(String) ? { value: stg } : stg DocumentStatus::Stage.new(**args) end |
#structuredidentifier_hash_to_bib(ret) ⇒ Object
484 485 486 487 488 489 490 491 492 |
# File 'lib/relaton_bib/hash_converter.rb', line 484 def structuredidentifier_hash_to_bib(ret) return unless ret[:structuredidentifier] sids = RelatonBib.array(ret[:structuredidentifier]).map do |si| si[:agency] = RelatonBib.array si[:agency] StructuredIdentifier.new(**si) end ret[:structuredidentifier] = StructuredIdentifierCollection.new sids end |
#symbolize(obj) ⇒ Hash, ...
496 497 498 499 500 501 502 503 504 505 506 |
# File 'lib/relaton_bib/hash_converter.rb', line 496 def symbolize(obj) case obj when Hash obj.reduce({}) do |memo, (k, v)| memo[k.to_sym] = symbolize(v) memo end when Array then obj.reduce([]) { |memo, v| memo << symbolize(v) } else obj end end |
#title_hash_to_bib(ret) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/relaton_bib/hash_converter.rb', line 80 def title_hash_to_bib(ret) return unless ret[:title] ret[:title] = RelatonBib.array(ret[:title]) .reduce(TypedTitleStringCollection.new) do |m, t| if t.is_a?(Hash) then m << TypedTitleString.new(**t) else m + TypedTitleString.from_string(t) end end end |
#typed_title_strig(title) ⇒ RelatonBib::TypedTitleString
424 425 426 |
# File 'lib/relaton_bib/hash_converter.rb', line 424 def typed_title_strig(title) TypedTitleString.new(**title) end |
#validity_hash_to_bib(ret) ⇒ Object
443 444 445 446 447 448 449 450 |
# File 'lib/relaton_bib/hash_converter.rb', line 443 def validity_hash_to_bib(ret) return unless ret[:validity] b = parse_validity_time(ret[:validity], :begins) e = parse_validity_time(ret[:validity], :ends) r = parse_validity_time(ret[:validity], :revision) ret[:validity] = Validity.new(begins: b, ends: e, revision: r) end |
#version_hash_to_bib(ret) ⇒ Object
158 159 160 161 162 163 164 |
# File 'lib/relaton_bib/hash_converter.rb', line 158 def version_hash_to_bib(ret) return unless ret[:version] ret[:version] = RelatonBib.array(ret[:version]).map do |v| BibliographicItem::Version.new(v[:revision_date], v[:draft]) end end |