relaton-oasis 1.14.4 → 1.16.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c3258c1d1302d56309c6e63545e12fb6b8b014b8adbabbfaa3d5ca5c3e282fb3
4
- data.tar.gz: '09380e04f60fcdd7863098c3ea15cc0ac685fbee7d5055aeaab7cd5b34d284bd'
3
+ metadata.gz: 3908ef54f79de05bfa9ee81c64f27b03e923f13fdd68df2c3a78b14bdc137bcf
4
+ data.tar.gz: 8e120eac3b886e8536532747a89b64f3c7fd9e64d098435e3e2135bde6f17acb
5
5
  SHA512:
6
- metadata.gz: dd97e71ec0a28bb367e98566fe49e3b167cfab89f7e2b045873065ad8270cbb6c6b28331ff934b4136ac02b83a112d595db5d477ba2618ea42af22e5db80029f
7
- data.tar.gz: c6c98cdfb711e0464a9bbe51f555625ca53d579190a511055ae4310756a0fc86505c2671c4c029b33a67fbb7fd64eb4083aec124fb488c5f7334073a663fa796
6
+ metadata.gz: 2f97cd29537cce17fa2f3ce144a7074727a277131a1ea5739480efe6adc3c7dfd6b7b2fc913c029e9ade56694f243311b7b30f7c5df878d34a46af6d80437fb3
7
+ data.tar.gz: 7e9373716c8c693c1532c7a0b413dd0d114597baba2c4a95be9d76b3796d76b16a38e2c44255f45b53642428ddbf7cb55c2562a6688c0cf63ca87ceb3f82ade8
@@ -7,7 +7,8 @@ on:
7
7
  inputs:
8
8
  next_version:
9
9
  description: |
10
- Next release version. Possible values: x.y.z, major, minor, patch or pre|rc|etc
10
+ Next release version. Possible values: x.y.z, major, minor, patch (or pre|rc|etc).
11
+ Also, you can pass 'skip' to skip 'git tag' and do 'gem push' for the current version
11
12
  required: true
12
13
  default: 'skip'
13
14
  repository_dispatch:
data/Gemfile CHANGED
@@ -15,5 +15,5 @@ gem "rubocop-performance"
15
15
  gem "rubocop-rails"
16
16
  gem "ruby-jing"
17
17
  gem "simplecov"
18
- gem "vcr", "~> 5.0.0"
18
+ gem "vcr"
19
19
  gem "webmock"
data/README.adoc CHANGED
@@ -51,7 +51,7 @@ item = RelatonOasis::OasisBibliography.get "OASIS amqp-core"
51
51
  [source,ruby]
52
52
  ----
53
53
  item.to_xml
54
- => "<bibitem id="OASISamqp-core" type="standard" schema-version="v1.2.1">
54
+ => "<bibitem id="OASISamqp-core" type="standard" schema-version="v1.2.4">
55
55
  <fetched>2022-12-05</fetched>
56
56
  <title type="main" format="text/plain" language="en" script="Latn">Advanced Message Queueing Protocol (AMQP) v1.0</title>
57
57
  <docidentifier type="OASIS" primary="true">OASIS amqp-core</docidentifier>
@@ -64,12 +64,12 @@ With argument `bibdata: true` it ouputs XML wrapped by `bibdata` element and add
64
64
  [source,ruby]
65
65
  ----
66
66
  item.to_xml bibdata: true
67
- => "<bibdata type="standard" schema-version="v1.2.1">
67
+ => "<bibdata type="standard" schema-version="v1.2.4">
68
68
  <fetched>2022-12-05</fetched>
69
69
  <title type="main" format="text/plain" language="en" script="Latn">Advanced Message Queueing Protocol (AMQP) v1.0</title>
70
70
  <docidentifier type="OASIS" primary="true">OASIS amqp-core</docidentifier>
71
71
  ...
72
- <ext schema-version="v1.0.0">
72
+ <ext schema-version="v1.0.1">
73
73
  <doctype>standard</doctype>
74
74
  <editorialgroup>
75
75
  <technical-committee>OASIS Advanced Message Queuing Protocol (AMQP) TC</technical-committee>
@@ -110,7 +110,7 @@ RelatonOasis::XMLParser.from_xml File.read("spec/fixtures/oasis_bibdata.xml")
110
110
  [source,ruby]
111
111
  ----
112
112
  hash = YAML.load_file "spec/fixtures/oasis_bibdata.yaml"
113
- => {"schema-version"=>"v1.2.1",
113
+ => {"schema-version"=>"v1.2.4",
114
114
  "id"=>"OASISamqp-core",
115
115
  ...
116
116
 
data/grammars/biblio.rng CHANGED
@@ -1283,7 +1283,7 @@
1283
1283
  <value>mergedInto</value>
1284
1284
  <value>splits</value>
1285
1285
  <value>splitInto</value>
1286
- <value>instance</value>
1286
+ <value>instanceOf</value>
1287
1287
  <value>hasInstance</value>
1288
1288
  <value>exemplarOf</value>
1289
1289
  <value>hasExemplar</value>
@@ -54,6 +54,8 @@
54
54
  <value>Security</value>
55
55
  <value>SOA</value>
56
56
  <value>Web-Services</value>
57
+ <value>Software-Development</value>
58
+ <value>Virtualization</value>
57
59
  </choice>
58
60
  </define>
59
61
  </grammar>
@@ -63,7 +63,7 @@ module RelatonOasis
63
63
  #
64
64
  # Save document to file
65
65
  #
66
- # @param [RelatonOasis::OasisBibliographicItem] doc
66
+ # @param [RelatonOasis::OasisBibliographicItem] doc
67
67
  #
68
68
  def save_doc(doc) # rubocop:disable Metrics/MethodLength
69
69
  c = case @format
@@ -10,10 +10,16 @@ module RelatonOasis
10
10
  #
11
11
  def initialize(node)
12
12
  @node = node
13
- @title = @node.at("./summary/div/h2").text
14
- @text = @node.at(
13
+ end
14
+
15
+ def title
16
+ @title ||= @node.at("./summary/div/h2").text
17
+ end
18
+
19
+ def text
20
+ @text ||= @node.at(
15
21
  "./div/div/div[contains(@class, 'standard__grid--cite-as')]/p[em or i or a or span]",
16
- )&.text
22
+ )&.text&.strip
17
23
  end
18
24
 
19
25
  #
@@ -27,8 +33,10 @@ module RelatonOasis
27
33
  doctype: parse_doctype,
28
34
  title: parse_title,
29
35
  docid: parse_docid,
36
+ link: parse_link,
30
37
  docnumber: parse_docnumber,
31
38
  date: parse_date,
39
+ contributor: parse_contributor,
32
40
  abstract: parse_abstract,
33
41
  language: ["en"],
34
42
  script: ["Latn"],
@@ -44,7 +52,7 @@ module RelatonOasis
44
52
  # @return [Array<RelatonBib::TypedTitleString>] <description>
45
53
  #
46
54
  def parse_title
47
- [RelatonBib::TypedTitleString.new(type: "main", content: @title, language: "en", script: "Latn")]
55
+ [RelatonBib::TypedTitleString.new(type: "main", content: title, language: "en", script: "Latn")]
48
56
  end
49
57
 
50
58
  #
@@ -60,7 +68,7 @@ module RelatonOasis
60
68
  end
61
69
  end
62
70
 
63
- #
71
+ # #
64
72
  # Parse abstract.
65
73
  #
66
74
  # @return [Array<RelatonBib::FormattedString>] abstract
@@ -87,6 +95,19 @@ module RelatonOasis
87
95
  RelatonBib::EditorialGroup.new tc
88
96
  end
89
97
 
98
+ def parse_authorizer
99
+ @node.xpath("./div[@class='standard__details']/a").map do |a|
100
+ cnt = RelatonBib::Contact.new(type: "uri", value: a[:href])
101
+ org = RelatonBib::Organization.new name: a.text.strip, contact: [cnt]
102
+ role = { type: "authorizer", description: ["Committee"] }
103
+ RelatonBib::ContributionInfo.new entity: org, role: [role]
104
+ end
105
+ end
106
+
107
+ def link_node
108
+ @link_node ||= @node.at("./div/div/div[contains(@class, 'standard__grid--cite-as')]/p[strong or span/strong]/a")
109
+ end
110
+
90
111
  #
91
112
  # Parse relation.
92
113
  #
@@ -118,6 +139,30 @@ module RelatonOasis
118
139
  ).map { |p| p.text.gsub(/^\[{1,2}|\]$/, "").strip }
119
140
  end
120
141
 
142
+ def parse_link
143
+ return [] if parts.size > 1
144
+
145
+ links.map do |l|
146
+ type = l[:href].match(/\.(\w+)$/)&.captures&.first
147
+ type ||= "src"
148
+ type.sub!("docx", "doc")
149
+ type.sub!("html", "src")
150
+ RelatonBib::TypedUri.new(type: type, content: l[:href])
151
+ end
152
+ end
153
+
154
+ def parts
155
+ @parts ||= @node.xpath(
156
+ "./div/div/div[contains(@class, 'standard__grid--cite-as')]/p[strong or span/strong]",
157
+ )
158
+ end
159
+
160
+ def links
161
+ l = @node.xpath("./div/div/div[1]/p[1]/a[@href]")
162
+ l = @node.xpath("./div/div/div[1]/p[2]/a[@href]") if l.empty?
163
+ l
164
+ end
165
+
121
166
  #
122
167
  # Parse document number.
123
168
  #
@@ -140,7 +185,7 @@ module RelatonOasis
140
185
  # @return [String] document identifier
141
186
  #
142
187
  def parts_to_docid(parts)
143
- id = parts[1..-1].each_with_object(parts[0].split("-")) do |part, acc|
188
+ id = parts[1..].each_with_object(parts[0].split("-")) do |part, acc|
144
189
  chunks = part.split "-"
145
190
  chunks.each.with_index do |chunk, idx|
146
191
  unless chunk.casecmp(acc[idx])&.zero?
@@ -1,6 +1,93 @@
1
1
  module RelatonOasis
2
2
  # Common methods for document and part parsers.
3
3
  module DataParserUtils
4
+ #
5
+ # Parse contributor.
6
+ #
7
+ # @return [Array<RelatonBib::ContributionInfo>] contributors
8
+ #
9
+ def parse_contributor
10
+ publisher_oasis + parse_authorizer + parse_chairs + parse_editors
11
+ end
12
+
13
+ def publisher_oasis
14
+ cnt = RelatonBib::Contact.new type: "uri", value: "https://www.oasis-open.org/"
15
+ entity = RelatonBib::Organization.new name: "OASIS", contact: [cnt]
16
+ role = [
17
+ { type: "authorizer", description: ["Standards Development Organization"] },
18
+ { type: "publisher" },
19
+ ]
20
+ [RelatonBib::ContributionInfo.new(entity: entity, role: role)]
21
+ end
22
+
23
+ def parse_editors_from_text
24
+ return [] unless text
25
+
26
+ text.match(/(?<=Edited\sby\s)[^.]+/).to_s.split(/,?\sand\s|,\s/).map do |c|
27
+ RelatonBib::ContributionInfo.new(role: [type: "editor"], entity: create_person(c))
28
+ end
29
+ end
30
+
31
+ def page
32
+ return @page if defined? @page
33
+
34
+ if link_node && link_node[:href].match?(/\.html$/)
35
+ agent = Mechanize.new
36
+ agent.agent.allowed_error_codes = [404]
37
+ sleep 1 # to avoid 429 error
38
+ resp = agent.get link_node[:href]
39
+ @page = resp if resp.code == "200"
40
+ end
41
+ end
42
+
43
+ def parse_chairs
44
+ return [] unless page
45
+
46
+ page.xpath(
47
+ "//p[preceding-sibling::p[starts-with(., 'Chair')]][following-sibling::p[starts-with(., 'Editor')]]",
48
+ ).map { |p| create_contribution_info(p, "editor", ["Chair"]) }
49
+ end
50
+
51
+ def parse_editors
52
+ return parse_editors_from_text unless page
53
+
54
+ page.xpath(
55
+ "//p[contains(@class, 'Contributor')][preceding-sibling::p[starts-with(., 'Editor')]]" \
56
+ "[following-sibling::p[contains(@class, 'Title')]]",
57
+ ).map { |p| create_contribution_info(p, "editor") }
58
+ end
59
+
60
+ def create_contribution_info(person, type, description = [])
61
+ name = person.text.match(/^[^(]+/).to_s.strip
62
+ email, org = person.xpath ".//a[@href]"
63
+ entity = create_person name, email, org
64
+ role = { type: type, description: description }
65
+ RelatonBib::ContributionInfo.new(role: [role], entity: entity)
66
+ end
67
+
68
+ def create_person(name, email = nil, org = nil)
69
+ forename, surname = name.split
70
+ fn = RelatonBib::Forename.new(content: forename, language: ["en"], script: ["Latn"])
71
+ sn = RelatonBib::LocalizedString.new(surname, "en", "Latn")
72
+ name = RelatonBib::FullName.new(surname: sn, forename: [fn])
73
+ RelatonBib::Person.new(name: name, contact: contact(email), affiliation: affiliation(org))
74
+ end
75
+
76
+ def contact(email)
77
+ return [] unless email
78
+
79
+ [RelatonBib::Contact.new(type: "email", value: email[:href].split(":")[1])]
80
+ end
81
+
82
+ def affiliation(org)
83
+ return [] unless org
84
+
85
+ cnt = RelatonBib::Contact.new(type: "uri", value: org[:href])
86
+ org_name = org.text.gsub(/[\r\n]+/, " ")
87
+ organization = RelatonBib::Organization.new name: org_name, contact: [cnt]
88
+ [RelatonBib::Affiliation.new(organization: organization)]
89
+ end
90
+
4
91
  #
5
92
  # Parse document identifier specification.
6
93
  #
@@ -9,7 +96,7 @@ module RelatonOasis
9
96
  # @return [String] document identifier with specification if needed
10
97
  #
11
98
  def parse_spec(num)
12
- id = case @text
99
+ id = case text
13
100
  when /OASIS Project Specification (\d+)/ then "#{num}-PS#{$1}"
14
101
  when /Committee Specification (\d+)/ then "#{num}-CS#{$1}"
15
102
  else num
@@ -27,11 +114,10 @@ module RelatonOasis
27
114
  def parse_part(docid)
28
115
  return docid if docid.match?(/(?:Part|Pt)\d+/i)
29
116
 
30
- id = case @title
31
- when /Part\s(\d+)/ then "#{docid}-Pt#{$1}"
32
- else docid
33
- end
34
- parse_errata(id)
117
+ case title
118
+ when /Part\s(\d+)/ then "#{docid}-Pt#{$1}"
119
+ else docid
120
+ end
35
121
  end
36
122
 
37
123
  #
@@ -42,11 +128,11 @@ module RelatonOasis
42
128
  # @return [String] document identifier with errata if needed
43
129
  #
44
130
  def parse_errata(id)
45
- return id if id.match?(/errata\d+/i)
131
+ return id.sub("errata", "Errata") if id.match?(/errata\d+/i)
46
132
 
47
- case @title
48
- when /Plus\sErrata\s(\d+)/ then "#{id}-plus-errata#{$1}"
49
- when /Errata\s(\d+)/ then "#{id}-errata#{$1}"
133
+ case title
134
+ when /Plus\sErrata\s(\d+)/ then "#{id}-plus-Errata#{$1}"
135
+ when /Errata\s(\d+)/ then "#{id}-Errata#{$1}"
50
136
  else id
51
137
  end
52
138
  end
@@ -67,7 +153,7 @@ module RelatonOasis
67
153
  # @return [String] document type
68
154
  #
69
155
  def parse_doctype
70
- case @text
156
+ case text
71
157
  when /OASIS Project Specification/, /Committee Specification/
72
158
  "specification"
73
159
  when /Technical Memorandum/ then "memorandum"
@@ -10,13 +10,21 @@ module RelatonOasis
10
10
  #
11
11
  def initialize(node)
12
12
  @node = node
13
- @text = node.xpath(
13
+ end
14
+
15
+ def text
16
+ @text ||= @node.xpath(
14
17
  "./strong/following-sibling::text()|./span/strong/../following-sibling::text()",
15
18
  ).text.strip
19
+ end
20
+
21
+ def title
22
+ return @title if @title
23
+
16
24
  t = @node.at("./span[@class='citationTitle' or @class='citeTitle']|./em|./i")
17
25
  @title = if t then t.text
18
26
  else
19
- @text.match(/(?<content>.+)\s(?:Edited|\d{2}\s\w+\d{4})/)[:content]
27
+ text.match(/(?<content>.+)\s(?:Edited|\d{2}\s\w+\d{4})/)[:content]
20
28
  end.strip
21
29
  end
22
30
 
@@ -34,10 +42,10 @@ module RelatonOasis
34
42
  link: parse_link,
35
43
  docnumber: parse_docnumber,
36
44
  date: parse_date,
37
- # abstract: parse_abstract,
45
+ abstract: parse_abstract,
38
46
  language: ["en"],
39
47
  script: ["Latn"],
40
- # editorialgroup: parse_editorialgroup,
48
+ editorialgroup: parse_editorialgroup,
41
49
  relation: parse_relation,
42
50
  contributor: parse_contributor,
43
51
  technology_area: parse_technology_area,
@@ -50,7 +58,7 @@ module RelatonOasis
50
58
  # @return [Array<RelatonBib::TypedTitleString>] title
51
59
  #
52
60
  def parse_title
53
- [RelatonBib::TypedTitleString.new(type: "main", content: @title, language: "en", script: "Latn")]
61
+ [RelatonBib::TypedTitleString.new(type: "main", content: title, language: "en", script: "Latn")]
54
62
  end
55
63
 
56
64
  #
@@ -61,9 +69,10 @@ module RelatonOasis
61
69
  def parse_docnumber
62
70
  ref = @node.at("./span[@class='citationLabel']/strong|./strong|b/span")
63
71
  num = ref.text.match(/[^\[\]]+/).to_s
72
+ id = parse_errata(num)
64
73
  # some part references need to be added by "Pt" to be distinguishable from root doc
65
- num += "-Pt" if %w[CMIS-v1.1 DocBook-5.0 XACML-V3.0 mqtt-v3.1.1 OData-JSON-Format-v4.0].include?(num)
66
- parse_spec num
74
+ id += "-Pt" if %w[CMIS-v1.1 DocBook-5.0 XACML-V3.0 mqtt-v3.1.1 OData-JSON-Format-v4.0].include?(id)
75
+ parse_spec id
67
76
  end
68
77
 
69
78
  #
@@ -82,29 +91,28 @@ module RelatonOasis
82
91
  # @return [Array<RelatonBib::BibliographicDate>] bibliographic dates
83
92
  #
84
93
  def parse_date
85
- /(?<on>\d{1,2}\s\w+\s\d{4})/ =~ @text
94
+ /(?<on>\d{1,2}\s\w+\s\d{4})/ =~ text
86
95
  [RelatonBib::BibliographicDate.new(on: Date.parse(on).to_s, type: "issued")]
87
96
  end
88
97
 
89
- # def parse_abstract
90
- # /\d{2}\s\w+\s\d{4}\.\s(?<content>.+)\sLatest\sversion/ =~ @text
91
- # [RelatonBib::FormattedString.new(content: content, language: "en", script: "Latn")]
92
- # end
98
+ def parse_abstract
99
+ page.xpath("//p[preceding-sibling::p[starts-with(., 'Abstract')]][1]").map do |p|
100
+ cnt = p.text.gsub(/[\r\n]+/, " ").strip
101
+ RelatonBib::FormattedString.new(content: cnt, language: "en", script: "Latn")
102
+ end
103
+ end
93
104
 
94
105
  #
95
- # Parse contributor.
106
+ # Parse technical committee.
96
107
  #
97
- # @return [Array<RelatonBib::ContributionInfo>] contributors
108
+ # @return [RelatonBib::EditorialGroup] technical committee
98
109
  #
99
- def parse_contributor
100
- @text.match(/(?<=Edited\sby\s)[^.]+/).to_s.split(/,\s|,?\sand\s/).map do |c|
101
- forename, surname = c.split
102
- fn = RelatonBib::LocalizedString.new(forename, "en", "Latn")
103
- sn = RelatonBib::LocalizedString.new(surname, "en", "Latn")
104
- name = RelatonBib::FullName.new(surname: sn, forename: [fn])
105
- entity = RelatonBib::Person.new(name: name)
106
- RelatonBib::ContributionInfo.new(role: [type: "editor"], entity: entity)
110
+ def parse_editorialgroup
111
+ tc = page.xpath("//p[preceding-sibling::p[starts-with(., 'Technical')]][1]//a").map do |a|
112
+ wg = RelatonBib::WorkGroup.new name: a.text.strip
113
+ RelatonBib::TechnicalCommittee.new wg
107
114
  end
115
+ RelatonBib::EditorialGroup.new tc
108
116
  end
109
117
 
110
118
  #
@@ -119,6 +127,21 @@ module RelatonOasis
119
127
  [RelatonBib::DocumentRelation.new(type: "partOf", bibitem: bib)]
120
128
  end
121
129
 
130
+ def parse_authorizer
131
+ return [] unless page
132
+
133
+ page.xpath("//p[preceding-sibling::p[starts-with(., 'Technical')]][1]//a").map do |a|
134
+ cnt = RelatonBib::Contact.new(type: "uri", value: a[:href])
135
+ org = RelatonBib::Organization.new name: a.text.gsub(/[\r\n]+/, " ").strip, contact: [cnt]
136
+ role = { type: "authorizer", description: ["Committee"] }
137
+ RelatonBib::ContributionInfo.new entity: org, role: [role]
138
+ end
139
+ end
140
+
141
+ def link_node
142
+ @link_node = @node.at("./a")
143
+ end
144
+
122
145
  #
123
146
  # Parse technology area.
124
147
  #
@@ -3,7 +3,7 @@ module RelatonOasis
3
3
  AREAS = %w[Cloud Content-Technologies Cybersecurity e-Business eGov/Legal
4
4
  Emergency-Management Energy Information-Modeling IoT
5
5
  Lifecycle-Integration Localization Messaging Privacy/Identity
6
- Security SOA Web-Services].freeze
6
+ Security SOA Web-Services Software-Development Virtualization].freeze
7
7
 
8
8
  attr_reader :technology_area
9
9
 
@@ -34,7 +34,7 @@ module RelatonOasis
34
34
  # reference is required
35
35
  # @return [RelatonOasis::OasisBibliographicItem, nil]
36
36
  def get(code, year = nil, _opts = {}) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
37
- warn "[relaton-oasis] (#{code} fetching..."
37
+ warn "[relaton-oasis] (#{code}) fetching..."
38
38
  bibitem = search code, year
39
39
  if bibitem
40
40
  docid = bibitem.docidentifier.detect(&:primary).id
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RelatonOasis
4
- VERSION = "1.14.4"
4
+ VERSION = "1.16.0"
5
5
  end
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
33
33
 
34
34
  spec.add_dependency "mechanize", "~> 2.8.0"
35
35
  spec.add_dependency "multi_json", "~> 1.15.0"
36
- spec.add_dependency "relaton-bib", "~> 1.14.0"
36
+ spec.add_dependency "relaton-bib", "~> 1.16.0"
37
37
  spec.add_dependency "relaton-index", "~> 0.2.0"
38
38
 
39
39
  # For more information and examples about making a new gem, checkout our
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-oasis
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.4
4
+ version: 1.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-25 00:00:00.000000000 Z
11
+ date: 2023-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mechanize
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.14.0
47
+ version: 1.16.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.14.0
54
+ version: 1.16.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: relaton-index
57
57
  requirement: !ruby/object:Gem::Requirement