relaton-3gpp 1.9.0
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 +7 -0
- data/.github/workflows/rake.yml +36 -0
- data/.gitignore +13 -0
- data/.rspec +3 -0
- data/.rubocop.yml +12 -0
- data/Gemfile +12 -0
- data/LICENSE.txt +21 -0
- data/README.adoc +170 -0
- data/Rakefile +12 -0
- data/bin/console +15 -0
- data/bin/rspec +29 -0
- data/bin/setup +8 -0
- data/grammars/3gpp.rng +105 -0
- data/grammars/basicdoc.rng +1131 -0
- data/grammars/biblio.rng +1236 -0
- data/grammars/isodoc.rng +2519 -0
- data/grammars/reqt.rng +205 -0
- data/lib/relaton_3gpp/bibliographic_item.rb +74 -0
- data/lib/relaton_3gpp/bibliography.rb +44 -0
- data/lib/relaton_3gpp/data_fetcher.rb +135 -0
- data/lib/relaton_3gpp/hash_converter.rb +21 -0
- data/lib/relaton_3gpp/parser.rb +244 -0
- data/lib/relaton_3gpp/processor.rb +54 -0
- data/lib/relaton_3gpp/release.rb +65 -0
- data/lib/relaton_3gpp/version.rb +5 -0
- data/lib/relaton_3gpp/xml_parser.rb +58 -0
- data/lib/relaton_3gpp.rb +25 -0
- data/relaton_3gpp.gemspec +50 -0
- metadata +225 -0
@@ -0,0 +1,244 @@
|
|
1
|
+
module Relaton3gpp
|
2
|
+
class Parser
|
3
|
+
#
|
4
|
+
# Document parser initalization
|
5
|
+
#
|
6
|
+
# @param [Hash] row row
|
7
|
+
# @param [Array<Hash>] specrels Spec + Release table
|
8
|
+
# @param [Array<Hash>] relaeases Releases table
|
9
|
+
# @param [Array<Hash>] specs Specs table
|
10
|
+
#
|
11
|
+
def initialize(row, specs, specrels, releases) # rubocop:disable Metrics/AbcSize
|
12
|
+
@row = row
|
13
|
+
@spec = specs.detect { |s| s[:Number] == row[:spec] }
|
14
|
+
if @spec
|
15
|
+
@specrel = specrels.detect do |sr|
|
16
|
+
sr[:Spec] == row[:spec] && sr[:Release] == row[:release]
|
17
|
+
end
|
18
|
+
@rel = releases.detect { |r| r[:Release_code] == row[:release] }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
#
|
23
|
+
# Initialize document parser and run it
|
24
|
+
#
|
25
|
+
# @param [Hash] row row
|
26
|
+
# @param [Array<Hash>] specrels Spec + Release table
|
27
|
+
# @param [Array<Hash>] relaeases Releases table
|
28
|
+
# @param [Array<Hash>] specs Specs table
|
29
|
+
#
|
30
|
+
# @return [RelatonBib:BibliographicItem, nil] bibliographic item
|
31
|
+
#
|
32
|
+
def self.parse(row, specs, specrels, relaeases)
|
33
|
+
new(row, specs, specrels, relaeases).parse
|
34
|
+
end
|
35
|
+
|
36
|
+
#
|
37
|
+
# Parse document
|
38
|
+
#
|
39
|
+
# @return [Relaton3gpp:BibliographicItem, nil] bibliographic item
|
40
|
+
#
|
41
|
+
def parse # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
42
|
+
return unless @spec && @row[:"3guId"]
|
43
|
+
|
44
|
+
Relaton3gpp::BibliographicItem.new(
|
45
|
+
type: "standard",
|
46
|
+
fetched: Date.today.to_s,
|
47
|
+
language: ["en"],
|
48
|
+
script: ["Latn"],
|
49
|
+
title: parse_title,
|
50
|
+
link: parse_link,
|
51
|
+
abstract: parse_abstract,
|
52
|
+
docid: parse_docid,
|
53
|
+
docnumber: number,
|
54
|
+
date: parse_date,
|
55
|
+
doctype: @spec[:Type],
|
56
|
+
editorialgroup: parse_editorialgroup,
|
57
|
+
biblionote: parse_note,
|
58
|
+
docstatus: parse_status,
|
59
|
+
radiotechnology: parse_radiotechnology,
|
60
|
+
common_ims_spec: @spec[:ComIMS] == "1",
|
61
|
+
# internal: @spec[:"For publication"] == "0",
|
62
|
+
release: parse_release,
|
63
|
+
# contributor: contributor,
|
64
|
+
)
|
65
|
+
end
|
66
|
+
|
67
|
+
#
|
68
|
+
# Parse title
|
69
|
+
#
|
70
|
+
# @return [RelatonBib::TypedTitleStringCollection] title
|
71
|
+
#
|
72
|
+
def parse_title
|
73
|
+
t = RelatonBib::TypedTitleString.new content: @spec[:Title], type: "main"
|
74
|
+
RelatonBib::TypedTitleStringCollection.new [t]
|
75
|
+
end
|
76
|
+
|
77
|
+
#
|
78
|
+
# Parse link
|
79
|
+
#
|
80
|
+
# @return [Array<RelatonBib::TypedUri>] link
|
81
|
+
#
|
82
|
+
def parse_link
|
83
|
+
return [] unless @row[:location]
|
84
|
+
|
85
|
+
content = @row[:location].split("#").last
|
86
|
+
[RelatonBib::TypedUri.new(type: "src", content: content)]
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
# Parse abstract
|
91
|
+
#
|
92
|
+
# @return [Array<RelatonBib::FormattedString>]
|
93
|
+
#
|
94
|
+
def parse_abstract
|
95
|
+
return [] unless @spec[:description]
|
96
|
+
|
97
|
+
[RelatonBib::FormattedString.new(content: @spec[:description])]
|
98
|
+
end
|
99
|
+
|
100
|
+
#
|
101
|
+
# Parse docidentifier
|
102
|
+
#
|
103
|
+
# @return [Arra<RelatonBib::DocumentIdentifier>] docidentifier
|
104
|
+
#
|
105
|
+
def parse_docid
|
106
|
+
[
|
107
|
+
RelatonBib::DocumentIdentifier.new(type: "3GPP", id: "3GPP #{number}"),
|
108
|
+
RelatonBib::DocumentIdentifier.new(type: "rapporteurId",
|
109
|
+
id: @spec[:"rapporteur id"]),
|
110
|
+
]
|
111
|
+
end
|
112
|
+
|
113
|
+
#
|
114
|
+
# Generate number
|
115
|
+
#
|
116
|
+
# @return [String] number
|
117
|
+
#
|
118
|
+
def number
|
119
|
+
"#{@spec[:Type]} #{@row[:spec]}:#{@row[:release]}/#{version}"
|
120
|
+
end
|
121
|
+
|
122
|
+
#
|
123
|
+
# Version
|
124
|
+
#
|
125
|
+
# @return [String] version
|
126
|
+
#
|
127
|
+
def version
|
128
|
+
"#{@row[:MAJOR_VERSION_NB]}.#{@row[:TECHNICAL_VERSION_NB]}.#{@row[:EDITORIAL_VERSION_NB]}"
|
129
|
+
end
|
130
|
+
|
131
|
+
#
|
132
|
+
# Parse date
|
133
|
+
#
|
134
|
+
# @return [Array<RelatonBib::BibliographicDate>] date
|
135
|
+
#
|
136
|
+
def parse_date
|
137
|
+
d = []
|
138
|
+
if @row[:completed]
|
139
|
+
cd = Date.parse(@row[:completed]).to_s
|
140
|
+
d << RelatonBib::BibliographicDate.new(type: "created", on: cd)
|
141
|
+
end
|
142
|
+
if @spec[:"title verified"]
|
143
|
+
td = Date.parse(@spec[:"title verified"]).to_s
|
144
|
+
d << RelatonBib::BibliographicDate.new(type: "confirmed", on: td)
|
145
|
+
end
|
146
|
+
d
|
147
|
+
end
|
148
|
+
|
149
|
+
#
|
150
|
+
# Parse editorialgroup
|
151
|
+
#
|
152
|
+
# @return [RelatonBib::EditorialGroup] editorialgroups
|
153
|
+
#
|
154
|
+
def parse_editorialgroup # rubocop:disable Metrics/MethodLength
|
155
|
+
wgp = RelatonBib::WorkGroup.new(name: @spec[:"WG prime"], type: "prime")
|
156
|
+
eg = [RelatonBib::TechnicalCommittee.new(wgp)]
|
157
|
+
if @spec[:"WG other"]
|
158
|
+
wgo = RelatonBib::WorkGroup.new(name: @spec[:"WG other"], type: "other")
|
159
|
+
eg << RelatonBib::TechnicalCommittee.new(wgo)
|
160
|
+
end
|
161
|
+
if @spec[:"former WG"]
|
162
|
+
wgf = RelatonBib::WorkGroup.new(name: @spec[:"former WG"], type: "former")
|
163
|
+
eg << RelatonBib::TechnicalCommittee.new(wgf)
|
164
|
+
end
|
165
|
+
RelatonBib::EditorialGroup.new eg
|
166
|
+
end
|
167
|
+
|
168
|
+
#
|
169
|
+
# Parse note
|
170
|
+
#
|
171
|
+
# @return [RelatonBib::BiblioNoteCollection] notes
|
172
|
+
#
|
173
|
+
def parse_note
|
174
|
+
n = []
|
175
|
+
if @specrel && @specrel[:remarks]
|
176
|
+
n << RelatonBib::BiblioNote.new(type: "remark", content: @specrel[:remarks])
|
177
|
+
end
|
178
|
+
if @row[:comment]
|
179
|
+
n << RelatonBib::BiblioNote.new(type: "comment", content: @row[:comment])
|
180
|
+
end
|
181
|
+
RelatonBib::BiblioNoteCollection.new n
|
182
|
+
end
|
183
|
+
|
184
|
+
#
|
185
|
+
# Prase status
|
186
|
+
#
|
187
|
+
# @return [RelatnoBib::DocumentStatus, nil] status
|
188
|
+
#
|
189
|
+
def parse_status
|
190
|
+
if @specrel && @specrel[:withdrawn] == "1"
|
191
|
+
RelatonBib::DocumentStatus.new stage: "withdrawn"
|
192
|
+
elsif @spec[:"For publication"] == "1"
|
193
|
+
RelatonBib::DocumentStatus.new stage: "published"
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
#
|
198
|
+
# Parse radio technology
|
199
|
+
#
|
200
|
+
# @return [String] radio technology
|
201
|
+
#
|
202
|
+
def parse_radiotechnology
|
203
|
+
if @spec[:"2g"] == "1" then "2G"
|
204
|
+
elsif @spec[:"3g"] == "1" then "3G"
|
205
|
+
elsif @spec[:LTE] == "1" then "LTE"
|
206
|
+
elsif @spec[:"5G"] == "1" then "5G"
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
def parse_release # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
211
|
+
if @rel
|
212
|
+
project_start = Date.parse(@rel[:"rel-proj-start"]).to_s if @rel[:"rel-proj-start"]
|
213
|
+
project_end = Date.parse(@rel[:"rel-proj-end"]).to_s if @rel[:"rel-proj-end"]
|
214
|
+
end
|
215
|
+
Release.new(
|
216
|
+
version2g: @rel[:version_2g],
|
217
|
+
version3g: @rel[:version_3g],
|
218
|
+
defunct: @rel[:defunct] == "1",
|
219
|
+
wpm_code_2g: @rel[:wpm_code_2g],
|
220
|
+
wpm_code_3g: @rel[:wpm_code_3g],
|
221
|
+
freeze_meeting: @rel[:"freeze meeting"],
|
222
|
+
freeze_stage1_meeting: @rel[:Stage1_freeze],
|
223
|
+
freeze_stage2_meeting: @rel[:Stage2_freeze],
|
224
|
+
freeze_stage3_meeting: @rel[:Stage3_freeze],
|
225
|
+
close_meeting: @rel[:Closed],
|
226
|
+
project_start: project_start,
|
227
|
+
project_end: project_end,
|
228
|
+
)
|
229
|
+
end
|
230
|
+
|
231
|
+
#
|
232
|
+
# Create contributor
|
233
|
+
#
|
234
|
+
# @return [Array<RelatonBib::Contribution>] contributor
|
235
|
+
#
|
236
|
+
# def contributor
|
237
|
+
# org = RelatonBib::Organization.new(
|
238
|
+
# name: "Internet Assigned Numbers Authority", abbreviation: "IANA",
|
239
|
+
# )
|
240
|
+
# role = { type: "publisher" }
|
241
|
+
# [RelatonBib::ContributionInfo.new(entity: org, role: [role])]
|
242
|
+
# end
|
243
|
+
end
|
244
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require "relaton/processor"
|
2
|
+
|
3
|
+
module Relaton3gpp
|
4
|
+
class Processor < Relaton::Processor
|
5
|
+
attr_reader :idtype
|
6
|
+
|
7
|
+
def initialize # rubocop:disable Lint/MissingSuper
|
8
|
+
@short = :relaton_3gpp
|
9
|
+
@prefix = "3GPP"
|
10
|
+
@defaultprefix = %r{^3GPP\s}
|
11
|
+
@idtype = "3GPP"
|
12
|
+
@datasets = %w[status-smg-3GPP]
|
13
|
+
end
|
14
|
+
|
15
|
+
# @param code [String]
|
16
|
+
# @param date [String, NilClass] year
|
17
|
+
# @param opts [Hash]
|
18
|
+
# @return [RelatonBib::BibliographicItem]
|
19
|
+
def get(code, date, opts)
|
20
|
+
::Relaton3gpp::Bibliography.get(code, date, opts)
|
21
|
+
end
|
22
|
+
|
23
|
+
#
|
24
|
+
# Fetch all the documents from http://xml2rfc.tools.ietf.org/public/rfc/bibxml-3gpp-new/
|
25
|
+
#
|
26
|
+
# @param [String] _source source name
|
27
|
+
# @param [Hash] opts
|
28
|
+
# @option opts [String] :output directory to output documents
|
29
|
+
# @option opts [String] :format
|
30
|
+
#
|
31
|
+
def fetch_data(_source, opts)
|
32
|
+
DataFetcher.fetch(**opts)
|
33
|
+
end
|
34
|
+
|
35
|
+
# @param xml [String]
|
36
|
+
# @return [RelatonBib::BibliographicItem]
|
37
|
+
def from_xml(xml)
|
38
|
+
::Relaton3gpp::XMLParser.from_xml xml
|
39
|
+
end
|
40
|
+
|
41
|
+
# @param hash [Hash]
|
42
|
+
# @return [RelatonBib::BibliographicItem]
|
43
|
+
def hash_to_bib(hash)
|
44
|
+
item_hash = ::Relaton3gpp::HashConverter.hash_to_bib(hash)
|
45
|
+
::Relaton3gpp::BibliographicItem.new(**item_hash)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns hash of XML grammar
|
49
|
+
# @return [String]
|
50
|
+
def grammar_hash
|
51
|
+
@grammar_hash ||= ::Relaton3gpp.grammar_hash
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Relaton3gpp
|
2
|
+
class Release
|
3
|
+
#
|
4
|
+
# Initialize release.
|
5
|
+
#
|
6
|
+
# @param [String] version2g
|
7
|
+
# @param [String] version3g
|
8
|
+
# @param [Boolean] defunct
|
9
|
+
# @param [String] wpn_code_2g
|
10
|
+
# @param [String] wpn_code_3g
|
11
|
+
# @param [String] freeze_stage1_meeting
|
12
|
+
# @param [String] freeze_stage2_meeting
|
13
|
+
# @param [String] freeze_stage3_meeting
|
14
|
+
# @param [String] close_meeting
|
15
|
+
# @param [String] project_start
|
16
|
+
# @param [String] project_end
|
17
|
+
#
|
18
|
+
def initialize(**args) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
19
|
+
@version2g = args[:version2g]
|
20
|
+
@version3g = args[:version3g]
|
21
|
+
@defunct = args[:defunct]
|
22
|
+
@wpm_code_2g = args[:wpm_code_2g]
|
23
|
+
@wpm_code_3g = args[:wpm_code_3g]
|
24
|
+
@freeze_meeting = args[:freeze_meeting]
|
25
|
+
@freeze_stage1_meeting = args[:freeze_stage1_meeting]
|
26
|
+
@freeze_stage2_meeting = args[:freeze_stage2_meeting]
|
27
|
+
@freeze_stage3_meeting = args[:freeze_stage3_meeting]
|
28
|
+
@close_meeting = args[:close_meeting]
|
29
|
+
@project_start = args[:project_start]
|
30
|
+
@project_end = args[:project_end]
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# Render XML.
|
35
|
+
#
|
36
|
+
# @param [Nokogiri::XML::Builder] builder
|
37
|
+
#
|
38
|
+
def to_xml(builder) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
39
|
+
builder.release do
|
40
|
+
builder.version2G @version2g if @version2g
|
41
|
+
builder.version3G @version3g if @version3g
|
42
|
+
builder.defunct @defunct if @defunct
|
43
|
+
builder.send "wpm-code-2G", @wpm_code_2g if @wpm_code_2g
|
44
|
+
builder.send "wpm-code-3G", @wpm_code_3g if @wpm_code_3g
|
45
|
+
builder.send "freeze-meeting", @freeze_meeting if @freeze_meeting
|
46
|
+
builder.send "freeze-stage1-meeting", @freeze_stage1_meeting if @freeze_stage1_meeting
|
47
|
+
builder.send "freeze-stage2-meeting", @freeze_stage2_meeting if @freeze_stage2_meeting
|
48
|
+
builder.send "freeze-stage3-meeting", @freeze_stage3_meeting if @freeze_stage3_meeting
|
49
|
+
builder.send "close-meeting", @close_meeting if @close_meeting
|
50
|
+
builder.send "project-start", @project_start if @project_start
|
51
|
+
builder.send "project-end", @project_end if @project_end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_hash
|
56
|
+
hash = {}
|
57
|
+
instance_variables.each do |var|
|
58
|
+
unless instance_variable_get(var).nil?
|
59
|
+
hash[var.to_s.delete("@")] = instance_variable_get var
|
60
|
+
end
|
61
|
+
end
|
62
|
+
hash
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Relaton3gpp
|
2
|
+
class XMLParser < RelatonBib::XMLParser
|
3
|
+
class << self
|
4
|
+
private
|
5
|
+
|
6
|
+
#
|
7
|
+
# Parse XML to hash
|
8
|
+
#
|
9
|
+
# @param [Nokofiri::XML::Element] bibitem
|
10
|
+
#
|
11
|
+
# @return [Hash]
|
12
|
+
#
|
13
|
+
def item_data(bibitem)
|
14
|
+
hash = super
|
15
|
+
ext = bibitem.at "./ext"
|
16
|
+
if ext
|
17
|
+
hash[:radiotechnology] = ext.at("./radiotechnology")&.text
|
18
|
+
hash[:common_ims_spec] = ext.at("./common-ims-spec")&.text
|
19
|
+
hash[:release] = fetch_release(ext)
|
20
|
+
end
|
21
|
+
hash
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
# Ftech release information
|
26
|
+
#
|
27
|
+
# @param [Nokogiri::XML::Element] ext
|
28
|
+
#
|
29
|
+
# @return [Relaton3gpp::Release] release
|
30
|
+
#
|
31
|
+
def fetch_release(ext) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
|
32
|
+
release = ext.at("./release")
|
33
|
+
return unless release
|
34
|
+
|
35
|
+
hash = {}
|
36
|
+
hash[:version2g] = release.at("./version2G")&.text
|
37
|
+
hash[:version3g] = release.at("./version3G")&.text
|
38
|
+
hash[:defunct] = release.at("./defunct")&.text
|
39
|
+
hash[:wpm_code_2g] = release.at("./wpm-code-2G")&.text
|
40
|
+
hash[:wpm_code_3g] = release.at("./wpm-code-3G")&.text
|
41
|
+
hash[:freeze_meeting] = release.at("./freeze-meeting")&.text
|
42
|
+
hash[:freeze_stage1_meeting] = release.at("./freeze-stage1-meeting")&.text
|
43
|
+
hash[:freeze_stage2_meeting] = release.at("./freeze-stage2-meeting")&.text
|
44
|
+
hash[:freeze_stage3_meeting] = release.at("./freeze-stage3-meeting")&.text
|
45
|
+
hash[:close_meeting] = release.at("./close-meeting")&.text
|
46
|
+
hash[:project_start] = release.at("./project-start")&.text
|
47
|
+
hash[:project_end] = release.at("./project-end")&.text
|
48
|
+
Release.new(**hash)
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param item_hash [Hash]
|
52
|
+
# @return [RelatonSgpp::BibliographicItem]
|
53
|
+
def bib_item(item_hash)
|
54
|
+
BibliographicItem.new(**item_hash)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/relaton_3gpp.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "net/http"
|
4
|
+
require "relaton_bib"
|
5
|
+
require_relative "relaton_3gpp/version"
|
6
|
+
require_relative "relaton_3gpp/release"
|
7
|
+
require_relative "relaton_3gpp/bibliographic_item"
|
8
|
+
require_relative "relaton_3gpp/hash_converter"
|
9
|
+
require_relative "relaton_3gpp/xml_parser"
|
10
|
+
require_relative "relaton_3gpp/bibliography"
|
11
|
+
require_relative "relaton_3gpp/parser"
|
12
|
+
require_relative "relaton_3gpp/data_fetcher"
|
13
|
+
|
14
|
+
module Relaton3gpp
|
15
|
+
class Error < StandardError; end
|
16
|
+
|
17
|
+
# Returns hash of XML reammar
|
18
|
+
# @return [String]
|
19
|
+
def self.grammar_hash
|
20
|
+
gem_path = File.expand_path "..", __dir__
|
21
|
+
grammars_path = File.join gem_path, "grammars", "*"
|
22
|
+
grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
|
23
|
+
Digest::MD5.hexdigest grammars
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/relaton_3gpp/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "relaton-3gpp"
|
7
|
+
spec.version = Relaton3gpp::VERSION
|
8
|
+
spec.authors = ["Ribose Inc."]
|
9
|
+
spec.email = ["open.source@ribose.com"]
|
10
|
+
|
11
|
+
spec.summary = "RelatonIana: Ruby XMLDOC impementation."
|
12
|
+
spec.description = "RelatonIana: Ruby XMLDOC impementation."
|
13
|
+
spec.homepage = "https://github.com/relaton/relaton-iana"
|
14
|
+
spec.license = "BSD-2-Clause"
|
15
|
+
spec.required_ruby_version = ">= 2.5.0"
|
16
|
+
|
17
|
+
# spec.metadata["allowed_push_host"] = "TODO: Set to 'https://mygemserver.com'"
|
18
|
+
|
19
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
20
|
+
|
21
|
+
# spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
|
22
|
+
# spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
|
23
|
+
|
24
|
+
# Specify which files should be added to the gem when it is released.
|
25
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
26
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
27
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
28
|
+
end
|
29
|
+
spec.bindir = "exe"
|
30
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
31
|
+
spec.require_paths = ["lib"]
|
32
|
+
|
33
|
+
# Uncomment to register a new dependency of your gem
|
34
|
+
# spec.add_dependency "example-gem", "~> 1.0"
|
35
|
+
|
36
|
+
# For more information and examples about making a new gem, checkout our
|
37
|
+
# guide at: https://bundler.io/guides/creating_gem.html
|
38
|
+
spec.add_development_dependency "equivalent-xml", "~> 0.6"
|
39
|
+
spec.add_development_dependency "rubocop", "~> 1.23.0"
|
40
|
+
spec.add_development_dependency "rubocop-performance", "~> 1.12.0"
|
41
|
+
spec.add_development_dependency "rubocop-rails", "~> 2.12.0"
|
42
|
+
spec.add_development_dependency "ruby-jing", "~> 0.0.2"
|
43
|
+
spec.add_development_dependency "simplecov", "~> 0.21.2"
|
44
|
+
spec.add_development_dependency "vcr", "~> 6.0.0"
|
45
|
+
spec.add_development_dependency "webmock", "~> 3.14.0"
|
46
|
+
|
47
|
+
spec.add_dependency "mdb", "~> 0.5.0"
|
48
|
+
spec.add_dependency "relaton-bib", "~> 1.9.0"
|
49
|
+
spec.add_dependency "rubyzip", "~> 2.3.0"
|
50
|
+
end
|