relaton-bib 1.9.4 → 1.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f54471913accf8362c7e96a1679e62e7f73092d12cb24156797837084371f06
4
- data.tar.gz: b9c94af722de0e6fd41064aa1a15a7f604698f525c24bb611ddc3430eea0b4ac
3
+ metadata.gz: 1d329cd83e84f6c8c77e88d4d621b15fcfc51e392b037283ba349a428bf317dd
4
+ data.tar.gz: 5f68269fd3ac149966bca54f1e472d2fd7ef976dbaa567873561013414b1d3e2
5
5
  SHA512:
6
- metadata.gz: 38dccc66a7bf1f7b49b471d1f3dd97e75a925d86dde075a1778b065bcfd6767406e26e5c38a954d17ea824ba06a43ee4eacada09ceeabf91f38615fccd480dc0
7
- data.tar.gz: 8339ccfb65c672dd5f1a3928696cc1ca9e0f055b605c4ec631046a668603f756bd1f7e56547863453cddfdde3950538d48c2e6ad6990cbefbdb459bd6ce31d48
6
+ metadata.gz: 776eed6d08cb7580a04a5949a6bd1bb3c729c9d4331eddd3ad8ec8404da1bc0e5df73e296b673549dba74b3e0aa07048f98f98202f2b5351bbc3db4057f090f0
7
+ data.tar.gz: ee5864e41161f2990861052e299a03d044ab3305df1a3a940621837c5eae52eafe3ca4e5ea1a8d0b61a3ea2d907b4907b9b16cf4dad213de310061364ec7215a
@@ -766,17 +766,48 @@ module RelatonBib
766
766
  #
767
767
  def render_bibxml(builder)
768
768
  target = link.detect { |l| l.type == "src" } || link.detect { |l| l.type == "doi" }
769
- bxml = builder.reference(anchor: id) do |xml|
769
+ bxml = builder.reference(anchor: anchor) do |xml|
770
770
  xml.front do
771
771
  xml.title title[0].title.content if title.any?
772
772
  render_seriesinfo xml
773
773
  render_authors xml
774
774
  render_date xml
775
+ render_workgroup xml
776
+ render_keyword xml
777
+ render_abstract xml
775
778
  end
776
779
  end
777
780
  bxml[:target] = target.content.to_s if target
778
781
  end
779
782
 
783
+ def anchor
784
+ did = docidentifier.detect { |di| di.type == "rfc-anchor" }
785
+ return did.id if did
786
+
787
+ type = docidentifier[0].type
788
+ "#{type}.#{docnumber}"
789
+ end
790
+
791
+ def render_keyword(builder)
792
+ keyword.each do |kw|
793
+ builder.keyword kw.content
794
+ end
795
+ end
796
+
797
+ def render_workgroup(builder)
798
+ editorialgroup&.technical_committee&.each do |tc|
799
+ builder.workgroup tc.workgroup.name
800
+ end
801
+ end
802
+
803
+ # @param [Nokogiri::XML::Builder] builder
804
+ def render_abstract(builder)
805
+ return unless abstract.any?
806
+
807
+ builder.abstract { |xml| xml << abstract[0].content }
808
+ end
809
+
810
+ # @param [Nokogiri::XML::Builder] builder
780
811
  def render_date(builder)
781
812
  dt = date.detect { |d| d.type == "published" }
782
813
  return unless dt
@@ -790,10 +821,10 @@ module RelatonBib
790
821
  elm[:day] = d if d
791
822
  end
792
823
 
824
+ # @param [Nokogiri::XML::Builder] builder
793
825
  def render_seriesinfo(builder)
794
- names = ["DOI", "Internet-Draft"]
795
826
  docidentifier.each do |di|
796
- if names.include? di.type
827
+ if BibXMLParser::SERIESINFONAMES.include? di.type
797
828
  builder.seriesInfo(name: di.type, value: di.id)
798
829
  end
799
830
  end
@@ -806,6 +837,7 @@ module RelatonBib
806
837
  end
807
838
  end
808
839
 
840
+ # @param [Nokogiri::XML::Builder] builder
809
841
  def render_authors(builder)
810
842
  contributor.each do |c|
811
843
  builder.author do |xml|
@@ -818,26 +850,40 @@ module RelatonBib
818
850
  end
819
851
  end
820
852
 
853
+ # @param [Nokogiri::XML::Builder] builder
854
+ # @param [RelatonBib::ContributionInfo] contrib
821
855
  def render_address(builder, contrib)
822
- addr = contrib.entity.contact.reject do |cn|
823
- cn.is_a?(Address) && cn.postcode.nil?
824
- end
825
- if addr.any?
856
+ # addr = contrib.entity.contact.reject do |cn|
857
+ # cn.is_a?(Address) && cn.postcode.nil?
858
+ # end
859
+ if contrib.entity.contact.any?
826
860
  builder.address do |xml|
827
- address = addr.detect { |cn| cn.is_a? Address }
828
- xml.postal address.postcode if address.postcode
829
- render_contact xml, addr
861
+ address = contrib.entity.contact.detect { |cn| cn.is_a? Address }
862
+ if address
863
+ xml.postal do
864
+ xml.city address.city if address.city
865
+ xml.code address.postcode if address.postcode
866
+ xml.country address.country if address.country
867
+ xml.region address.state if address.state
868
+ xml.street address.street[0] if address.street.any?
869
+ end
870
+ end
871
+ render_contact xml, contrib.entity.contact
830
872
  end
831
873
  end
832
874
  end
833
875
 
876
+ # @param [Nokogiri::XML::Builder] builder
877
+ # @param [Array<RelatonBib::Address, RelatonBib::Contact>] addr
834
878
  def render_contact(builder, addr)
835
879
  %w[phone email uri].each do |type|
836
880
  cont = addr.detect { |cn| cn.is_a?(Contact) && cn.type == type }
837
- builder.phone cont.value if cont
881
+ builder.send type, cont.value if cont
838
882
  end
839
883
  end
840
884
 
885
+ # @param [Nokogiri::XML::Builder] builder
886
+ # @param [RelatonBib::Person] person
841
887
  def render_person(builder, person)
842
888
  render_organization builder, person.affiliation.first&.organization
843
889
  if person.name.completename
@@ -851,11 +897,13 @@ module RelatonBib
851
897
  end
852
898
  end
853
899
 
900
+ # @param [Nokogiri::XML::Builder] builder
901
+ # @param [RelatonBib::Organization] org
854
902
  def render_organization(builder, org)
855
903
  return unless org
856
904
 
857
905
  o = builder.organization org.name.first&.content
858
- o[:abbrev] = org.abbreviation if org.abbreviation
906
+ o[:abbrev] = org.abbreviation.content if org.abbreviation
859
907
  end
860
908
  # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
861
909
  # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
@@ -0,0 +1,345 @@
1
+ module RelatonBib
2
+ module BibXMLParser
3
+ SERIESINFONAMES = ["DOI", "Internet-Draft"].freeze
4
+ FLAVOR = nil
5
+
6
+ def parse(bibxml, url: nil, is_relation: false, ver: nil)
7
+ doc = Nokogiri::XML bibxml
8
+ fetch_rfc doc.at("/referencegroup", "/reference"), url: url, is_relation: is_relation, ver: ver
9
+ end
10
+
11
+ # @param reference [Nokogiri::XML::Element, nil]
12
+ # @param is_relation [Boolean] don't add fetched date for relation if true
13
+ # @param url [String, nil]
14
+ # @param ver [String, nil] Internet Draft version
15
+ # @return [RelatonBib::BibliographicItem]
16
+ def fetch_rfc(reference, is_relation: false, url: nil, ver: nil) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
17
+ return unless reference
18
+
19
+ hash = {
20
+ is_relation: is_relation,
21
+ docnumber: docnumber(reference),
22
+ type: "standard",
23
+ docid: docids(reference, ver),
24
+ status: status(reference),
25
+ language: [language(reference)],
26
+ script: ["Latn"],
27
+ link: link(reference, url, ver),
28
+ title: titles(reference),
29
+ formattedref: formattedref(reference),
30
+ abstract: abstracts(reference),
31
+ contributor: contributors(reference),
32
+ relation: relations(reference),
33
+ date: dates(reference),
34
+ editorialgroup: editorialgroup(reference),
35
+ series: series(reference),
36
+ keyword: reference.xpath("front/keyword").map(&:text),
37
+ doctype: doctype(reference[:anchor]),
38
+ }
39
+ # hash[:fetched] = Date.today.to_s unless is_relation
40
+ bib_item(**hash)
41
+ end
42
+
43
+ def docnumber(reference)
44
+ reference[:anchor]&.sub(/^\w+\./, "")
45
+ end
46
+
47
+ # @param attrs [Hash]
48
+ # @return [RelatonBib::IetfBibliographicItem]
49
+ def bib_item(**attrs)
50
+ # attrs[:place] = ["Fremont, CA"]
51
+ BibliographicItem.new(**attrs)
52
+ end
53
+
54
+ # @param reference [Nokogiri::XML::Element]
55
+ # @return [String]
56
+ def language(reference)
57
+ reference[:lang] || "en"
58
+ end
59
+
60
+ #
61
+ # Extract document identifiers from reference
62
+ #
63
+ # @param reference [Nokogiri::XML::Element]
64
+ # @param ver [String, nil] Internet Draft version
65
+ #
66
+ # @return [Array<RelatonBib::DocumentIdentifier>]
67
+ #
68
+ def docids(reference, ver) # rubocop:disable Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/AbcSize
69
+ ret = []
70
+ sfid = reference.at("./seriesInfo[@name='#{self::FLAVOR}']", "./front/seriesInfo[@name='#{self::FLAVOR}']")
71
+ if sfid
72
+ ret << DocumentIdentifier.new(type: sfid[:name], id: sfid[:value])
73
+ elsif self::FLAVOR && (id = (reference[:anchor] || reference[:docName] || reference[:number]))
74
+ ret << DocumentIdentifier.new( type: self::FLAVOR, id: id.sub(/^(RFC)/, "\\1 "))
75
+ end
76
+ if (id = reference[:anchor])
77
+ ret << DocumentIdentifier.new(type: "rfc-anchor", id: id)
78
+ end
79
+ ret + reference.xpath("./seriesInfo", "./front/seriesInfo").map do |si|
80
+ next unless SERIESINFONAMES.include? si[:name]
81
+
82
+ id = si[:value]
83
+ id.sub!(/(?<=-)\d{2}$/, ver) if ver && si[:name] == "Internet-Draft"
84
+ DocumentIdentifier.new(id: id, type: si[:name])
85
+ end.compact
86
+ end
87
+
88
+ #
89
+ # extract status
90
+ # @param reference [Nokogiri::XML::Element]
91
+ #
92
+ # @return [RelatonBib::DocumentStatus]
93
+ #
94
+ def status(reference)
95
+ st = reference.at("./seriesinfo[@status]")
96
+ DocumentStatus.new(stage: st[:status]) if st
97
+ end
98
+
99
+ # @param reference [Nokogiri::XML::Element]
100
+ # @param url [String]
101
+ # @param ver [String, nil] Internet Draft version
102
+ # @return [Array<Hash>]
103
+ def link(reference, url, ver)
104
+ l = []
105
+ l << { type: "xml", content: url } if url
106
+ l << { type: "src", content: reference[:target] } if reference[:target]
107
+ if /^I-D/.match? reference[:anchor]
108
+ reference.xpath("format").each do |f|
109
+ c = ver ? f[:target].sub(/(?<=-)\d{2}(?=\.)/, ver) : f[:target]
110
+ l << { type: f[:type], content: c }
111
+ end
112
+ end
113
+ l
114
+ end
115
+
116
+ # @param reference [Nokogiri::XML::Element]
117
+ # @return [Array<Hash>]
118
+ def titles(reference)
119
+ reference.xpath("./front/title").map do |title|
120
+ { content: title.text, language: language(reference), script: "Latn" }
121
+ end
122
+ end
123
+
124
+ # @param reference [Nokogiri::XML::Element]
125
+ # @return [RelatonBib::FormattedRef, nil]
126
+ def formattedref(reference)
127
+ return if reference.at "./front/title"
128
+
129
+ cont = (reference[:anchor] || reference[:docName] || reference[:number])
130
+ if cont
131
+ FormattedRef.new(
132
+ content: cont, language: language(reference), script: "Latn",
133
+ )
134
+ end
135
+ end
136
+
137
+ # @param reference [Nokogiri::XML::Element]
138
+ # @return [Array<RelatonBib::FormattedString>]
139
+ def abstracts(ref)
140
+ ref.xpath("./front/abstract").map do |a|
141
+ FormattedString.new(
142
+ content: a.children.to_s,
143
+ language: language(ref), script: "Latn", format: "text/html"
144
+ )
145
+ end
146
+ end
147
+
148
+ # @param reference [Nokogiri::XML::Element]
149
+ # @return [Array<Hash>]
150
+ def contributors(reference)
151
+ reference.xpath("./front/author").map do |contrib|
152
+ if contrib[:fullname] || contrib[:surname] then person(contrib, reference)
153
+ else organization(contrib)
154
+ end
155
+ end.compact
156
+ # persons(reference) + organizations(reference)
157
+ end
158
+
159
+ # @param author [Nokogiri::XML::Element]
160
+ # @param reference [Nokogiri::XML::Element]
161
+ # @return [Array<Hash{Symbol=>RelatonBib::Person,Symbol=>Array<String>}>]
162
+ def person(author, reference)
163
+ # reference.xpath("./front/author[@surname]|./front/author[@fullname]")
164
+ # .map do |author|
165
+ entity = Person.new(
166
+ name: full_name(author, reference),
167
+ affiliation: affiliation(author),
168
+ contact: contacts(author.at("./address")),
169
+ )
170
+ { entity: entity, role: [contributor_role(author)] }
171
+ # end
172
+ end
173
+
174
+ # @param contrib [Nokogiri::XML::Element]
175
+ # @return [Array<Hash{Symbol=>RelatonBib::Organization,
176
+ # Symbol=>Array<String>}>]
177
+ def organization(contrib)
178
+ # publisher = { entity: new_org, role: [type: "publisher"] }
179
+ # orgs = reference.xpath("./seriesinfo").reduce([]) do |mem, si|
180
+ # next mem unless si[:stream]
181
+
182
+ # mem << { entity: new_org(si[:stream], nil), role: [type: "author"] }
183
+ # end
184
+ # orgs + reference.xpath(
185
+ # "front/author[not(@surname)][not(@fullname)]/organization",
186
+ # ).map do |org|
187
+ org = contrib.at("./organization")
188
+ { entity: new_org(org.text, org[:abbrev]), role: [contributor_role(contrib)] }
189
+ # end
190
+ end
191
+
192
+ # @param author [Nokogiri::XML::Element]
193
+ # @param reference [Nokogiri::XML::Element]
194
+ # @return [RelatonBib::FullName]
195
+ def full_name(author, reference)
196
+ lang = language reference
197
+ FullName.new(
198
+ completename: localized_string(author[:fullname], lang),
199
+ initial: [localized_string(author[:initials], lang)].compact,
200
+ surname: localized_string(author[:surname], lang),
201
+ )
202
+ end
203
+
204
+ # @param author [Nokogiri::XML::Element]
205
+ # @return [Array<RelatonBib::Affiliation>]
206
+ def affiliation(author)
207
+ o = author.at("./organization")
208
+ return [] if o.nil? || o.text.empty?
209
+
210
+ org = new_org o.text, o[:abbrev]
211
+ [Affiliation.new(organization: org)]
212
+ end
213
+
214
+ # @param name [String]
215
+ # @param abbr [String]
216
+ # @return [RelatonBib::Organization]
217
+ def new_org(name, abbr)
218
+ # (name = "Internet Engineering Task Force", abbr = "IETF")
219
+ Organization.new name: name, abbreviation: abbr
220
+ end
221
+
222
+ # @param content [String, nil]
223
+ # @param lang [String, nil]
224
+ # @return [RelatonBib::LocalizedString, nil]
225
+ def localized_string(content, lang)
226
+ LocalizedString.new(content, lang) if content
227
+ end
228
+
229
+ # @param postal [Nokogiri::XML::Element]
230
+ # @return [Array<RelatonBib::Address, RelatonBib::Phone>]
231
+ def contacts(addr)
232
+ conts = []
233
+ return conts unless addr
234
+
235
+ postal = addr.at("./postal")
236
+ conts << address(postal) if postal
237
+ add_contact(conts, "phone", addr.at("./phone"))
238
+ add_contact(conts, "email", addr.at("./email"))
239
+ add_contact(conts, "uri", addr.at("./uri"))
240
+ conts
241
+ end
242
+
243
+ # @param postal [Nokogiri::XML::Element]
244
+ # @rerurn [RelatonBib::Address]
245
+ def address(postal) # rubocop:disable Metrics/CyclomaticComplexity
246
+ street = [
247
+ (postal.at("./postalLine") || postal.at("./street"))&.text
248
+ ].compact
249
+ Address.new(
250
+ street: street,
251
+ city: postal.at("./city")&.text,
252
+ postcode: postal.at("./code")&.text,
253
+ country: postal.at("./country")&.text,
254
+ state: postal.at("./region")&.text,
255
+ )
256
+ end
257
+
258
+ # @param conts [Array<RelatonBib::Address, RelatonBib::Contact>]
259
+ # @param type [String] allowed "phone", "email" or "uri"
260
+ # @param value [String]
261
+ def add_contact(conts, type, value)
262
+ conts << Contact.new(type: type, value: value.text) if value
263
+ end
264
+
265
+ # @param author [Nokogiri::XML::Document]
266
+ # @return [Hash]
267
+ def contributor_role(author)
268
+ { type: author[:role] || "author" }
269
+ end
270
+
271
+ # @param reference [Nokogiri::XML::Element]
272
+ # @return [Hash]
273
+ def relations(reference)
274
+ reference.xpath("reference").map do |ref|
275
+ { type: "includes", bibitem: fetch_rfc(ref, is_relation: true) }
276
+ end
277
+ end
278
+
279
+ #
280
+ # Extract date from reference.
281
+ #
282
+ # @param reference [Nokogiri::XML::Element]
283
+ # @return [Array<RelatonBib::BibliographicDate>] published data.
284
+ #
285
+ def dates(reference)
286
+ return unless (date = reference.at "./front/date")
287
+
288
+ d = [date[:year], month(date[:month]), (date[:day] || 1)].compact.join "-"
289
+ date = Time.parse(d).strftime "%Y-%m-%d"
290
+ [BibliographicDate.new(type: "published", on: date)]
291
+ end
292
+
293
+ # @param reference [Nokogiri::XML::Element]
294
+ # @return [RelatonBib::EditorialGroup, nil]
295
+ def editorialgroup(reference)
296
+ tc = reference.xpath("./front/workgroup").map do |ed|
297
+ wg = WorkGroup.new name: ed.text
298
+ committee wg
299
+ end
300
+ EditorialGroup.new tc if tc.any?
301
+ end
302
+
303
+ # @param [RelatonBib::WorkGroup]
304
+ # @return [RelatonBib::TechnicalCommittee]
305
+ def committee(wgr)
306
+ TechnicalCommittee.new wgr
307
+ end
308
+
309
+ def month(mon)
310
+ return 1 if !mon || mon.empty?
311
+ return mon if /^\d+$/.match? mon
312
+
313
+ Date::MONTHNAMES.index(mon)
314
+ end
315
+
316
+ #
317
+ # Extract series form reference
318
+ # @param reference [Nokogiri::XML::Element]
319
+ #
320
+ # @return [Array<RelatonBib::Series>]
321
+ #
322
+ def series(reference)
323
+ reference.xpath("./seriesInfo", "./front/seriesInfo").map do |si|
324
+ next if si[:name] == "DOI" || si[:stream] || si[:status]
325
+
326
+ t = TypedTitleString.new(
327
+ content: si[:name], language: language(reference), script: "Latn",
328
+ )
329
+ Series.new(title: t, number: si[:value], type: "main")
330
+ end.compact
331
+ end
332
+
333
+ # @param anchor [String]
334
+ # @return [String]
335
+ def doctype(anchor)
336
+ case anchor
337
+ when /I-D/ then "internet-draft"
338
+ when /IEEE/ then "ieee"
339
+ else "rfc"
340
+ end
341
+ end
342
+
343
+ extend BibXMLParser
344
+ end
345
+ end
@@ -138,7 +138,7 @@ module RelatonBib
138
138
  desc = description.select { |d| d.language&.include? opts[:lang] }
139
139
  desc = description unless desc.any?
140
140
  desc.each { |d| builder.description { d.to_xml builder } }
141
- organization.to_xml **opts
141
+ organization.to_xml(**opts)
142
142
  end
143
143
  end
144
144
 
@@ -56,7 +56,7 @@ module RelatonBib
56
56
  else
57
57
  builder.parent["language"] = language.join(",") if language&.any?
58
58
  builder.parent["script"] = script.join(",") if script&.any?
59
- builder.text content.encode(xml: :text)
59
+ builder.parent << content # .encode(xml: :text)
60
60
  end
61
61
  end
62
62
 
@@ -1,3 +1,3 @@
1
1
  module RelatonBib
2
- VERSION = "1.9.4".freeze
2
+ VERSION = "1.9.5".freeze
3
3
  end
@@ -320,7 +320,7 @@ module RelatonBib
320
320
  # @return [Array<RelatonBib::FormattedString>]
321
321
  def fetch_abstract(item)
322
322
  item.xpath("./abstract").map do |a|
323
- FormattedString.new(content: a.text, language: a[:language],
323
+ FormattedString.new(content: a.children.to_s, language: a[:language],
324
324
  script: a[:script], format: a[:format])
325
325
  end
326
326
  end
data/lib/relaton_bib.rb CHANGED
@@ -6,6 +6,7 @@ require "relaton_bib/localized_string"
6
6
  require "relaton_bib/bibliographic_item"
7
7
  require "relaton_bib/hit_collection"
8
8
  require "relaton_bib/hit"
9
+ require "relaton_bib/bibxml_parser"
9
10
 
10
11
  module RelatonBib
11
12
  class Error < StandardError; end
data/relaton-bib.gemspec CHANGED
@@ -27,6 +27,9 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "equivalent-xml", "~> 0.6"
28
28
  spec.add_development_dependency "rake", "~> 13.0"
29
29
  spec.add_development_dependency "rspec", "~> 3.0"
30
+ spec.add_development_dependency "rubocop"
31
+ spec.add_development_dependency "rubocop-performance"
32
+ spec.add_development_dependency "rubocop-rails"
30
33
  spec.add_development_dependency "ruby-jing"
31
34
  spec.add_development_dependency "simplecov"
32
35
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-bib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.4
4
+ version: 1.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-08 00:00:00.000000000 Z
11
+ date: 2021-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -66,6 +66,48 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-performance
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
69
111
  - !ruby/object:Gem::Dependency
70
112
  name: ruby-jing
71
113
  requirement: !ruby/object:Gem::Requirement
@@ -182,6 +224,7 @@ files:
182
224
  - lib/relaton_bib/bibliographic_date.rb
183
225
  - lib/relaton_bib/bibliographic_item.rb
184
226
  - lib/relaton_bib/bibtex_parser.rb
227
+ - lib/relaton_bib/bibxml_parser.rb
185
228
  - lib/relaton_bib/classification.rb
186
229
  - lib/relaton_bib/contribution_info.rb
187
230
  - lib/relaton_bib/contributor.rb