Class: RelatonIeee::IdamsParser

Inherits:
Object
  • Object
show all
Defined in:
lib/relaton_ieee/idams_parser.rb

Constant Summary collapse

ATTRS =
i[
  docnumber title date docid contributor abstract copyright docstatus
  relation link keyword ics editorialgroup standard_status standard_modified
  pubstatus holdstatus doctype
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(doc, fetcher) ⇒ IdamsParser



11
12
13
14
# File 'lib/relaton_ieee/idams_parser.rb', line 11

def initialize(doc, fetcher)
  @doc = doc
  @fetcher = fetcher
end

Instance Method Details

#docnumberString

Parse docnumber



36
37
38
# File 'lib/relaton_ieee/idams_parser.rb', line 36

def docnumber
  @docnumber ||= pubid&.to_id
end

#parseRelatonIeee::IeeeBibliographicItem

Parse IEEE document



21
22
23
24
25
# File 'lib/relaton_ieee/idams_parser.rb', line 21

def parse
  args = { type: "standard", language: ["en"], script: ["Latn"] }
  ATTRS.each { |attr| args[attr] = send("parse_#{attr}") }
  IeeeBibliographicItem.new(**args)
end

#parse_abstractArray<RelatonBib::FormattedString>

Parse abstract



102
103
104
105
106
107
108
# File 'lib/relaton_ieee/idams_parser.rb', line 102

def parse_abstract
  @doc.volume.article..abstract.each_with_object([]) do |abs, acc|
    next unless abs.abstract_type == "Standard"

    acc << RelatonBib::FormattedString.new(content: abs.value, language: "en", script: "Latn")
  end
end

#parse_contributorArray<RelatonBib::ContributionInfo>

Parse contributors



90
91
92
93
94
95
# File 'lib/relaton_ieee/idams_parser.rb', line 90

def parse_contributor
  name, addr = @doc.contrib_name_addr { |args| RelatonBib::Address.new(**args) }

  entity = create_org name, addr
  [RelatonBib::ContributionInfo.new(entity: entity, role: [type: "publisher"])]
end

Parse copyright



115
116
117
118
119
120
# File 'lib/relaton_ieee/idams_parser.rb', line 115

def parse_copyright
  @doc.copyright.map do |owner, year|
    contrib = owner.map { |own| RelatonBib::ContributionInfo.new entity: create_org(own) }
    RelatonBib::CopyrightAssociation.new(owner: contrib, from: year)
  end
end

#parse_dateArray<RelatonBib::BibliographicDate>

Parse date



67
68
69
# File 'lib/relaton_ieee/idams_parser.rb', line 67

def parse_date
  @doc.bdate.map { |args| RelatonBib::BibliographicDate.new(**args) }
end

#parse_docidArray<RelatonBib::DocumentIdentifier>

Parse identifiers



76
77
78
79
80
81
82
83
# File 'lib/relaton_ieee/idams_parser.rb', line 76

def parse_docid # rubocop:disable Metrics/MethodLength
  ids = @doc.isbn_doi

  ids.unshift(id: pubid.to_s(trademark: true), scope: "trademark", type: "IEEE", primary: true)
  ids.unshift(id: pubid.to_s, type: "IEEE", primary: true)

  ids.map { |dcid| RelatonBib::DocumentIdentifier.new(**dcid) }
end

#parse_docnumberObject



27
28
29
# File 'lib/relaton_ieee/idams_parser.rb', line 27

def parse_docnumber
  docnumber
end

#parse_docstatusRelatonIee::DocumentStatus?

Parse status



127
128
129
# File 'lib/relaton_ieee/idams_parser.rb', line 127

def parse_docstatus
  @doc.docstatus { |args| DocumentStatus.new(**args) }
end

#parse_doctypeString

Parse doctype



226
227
228
# File 'lib/relaton_ieee/idams_parser.rb', line 226

def parse_doctype
  DocumentType.new type: @doc.doctype
end

#parse_editorialgroupRelatonIeee::EditorialGroup?

Parse editorialgroup



181
182
183
# File 'lib/relaton_ieee/idams_parser.rb', line 181

def parse_editorialgroup
  @doc.editorialgroup { |committee| EditorialGroup.new committee: committee }
end

#parse_holdstatusString?

Pasrse holdstatus



217
218
219
# File 'lib/relaton_ieee/idams_parser.rb', line 217

def parse_holdstatus
  @doc.publicationinfo.holdstatus
end

#parse_icsArray<RelatonBib::ICS>

Parse ICS



172
173
174
# File 'lib/relaton_ieee/idams_parser.rb', line 172

def parse_ics
  @doc.ics { |ics| RelatonBib::ICS.new(**ics) }
end

#parse_keywordArray<Strign>

Parse keyword



163
164
165
# File 'lib/relaton_ieee/idams_parser.rb', line 163

def parse_keyword
  @doc.keyword
end

Parce link



154
155
156
# File 'lib/relaton_ieee/idams_parser.rb', line 154

def parse_link
  @doc.link { |url| RelatonBib::TypedUri.new(content: url, type: "src") }
end

#parse_pubstatusString?

Parse pubstatus



208
209
210
# File 'lib/relaton_ieee/idams_parser.rb', line 208

def parse_pubstatus
  @doc.publicationinfo.pubstatus
end

#parse_relationRelatonBib::DocRelationCollection

Parse relation



136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/relaton_ieee/idams_parser.rb', line 136

def parse_relation # rubocop:disable Metrics/AbcSize
  rels = []
  @doc.publicationinfo.standard_relationship&.each do |relation|
    if (ref = @fetcher.backrefs[relation.date_string])
      rel = @fetcher.create_relation(relation.type, ref)
      rels << rel if rel
    elsif !relation.date_string.include?("Inactive Date") && docnumber
      @fetcher.add_crossref(docnumber, relation)
    end
  end
  RelatonBib::DocRelationCollection.new rels
end

#parse_standard_modifiedString?

Parse standard modifier



199
200
201
# File 'lib/relaton_ieee/idams_parser.rb', line 199

def parse_standard_modified
  @doc.standard_modifier
end

#parse_standard_statusString?

Parse standard status



190
191
192
# File 'lib/relaton_ieee/idams_parser.rb', line 190

def parse_standard_status
  @doc.publicationinfo.standard_status
end

#parse_titleArray<RelatonBib::TypedTitleString>

Parse title



58
59
60
# File 'lib/relaton_ieee/idams_parser.rb', line 58

def parse_title
  @doc.btitle.map { |args| RelatonBib::TypedTitleString.new(**args) }
end

#pubidRelatonIeee::RawbibIdParser

Create PubID



45
46
47
48
49
50
51
# File 'lib/relaton_ieee/idams_parser.rb', line 45

def pubid
  @pubid ||= begin
    normtitle = @doc.normtitle
    stdnumber = @doc.publicationinfo.stdnumber
    RawbibIdParser.parse(normtitle, stdnumber)
  end
end