govuk_tech_docs 2.2.0 → 2.2.1
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.
Potentially problematic release.
This version of govuk_tech_docs might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -1
- data/govuk_tech_docs.gemspec +1 -7
- data/lib/govuk_tech_docs/api_reference/api_reference_extension.rb +0 -1
- data/lib/govuk_tech_docs/api_reference/api_reference_renderer.rb +70 -186
- data/lib/govuk_tech_docs/api_reference/templates/api_reference_full.html.erb +3 -2
- data/lib/govuk_tech_docs/api_reference/templates/operation.html.erb +1 -1
- data/lib/govuk_tech_docs/api_reference/templates/parameters.html.erb +1 -1
- data/lib/govuk_tech_docs/api_reference/templates/responses.html.erb +1 -1
- data/lib/govuk_tech_docs/api_reference/templates/schema.html.erb +12 -12
- data/lib/govuk_tech_docs/version.rb +1 -1
- metadata +4 -74
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61743fbb0930f511a18a3e9640a85d0f7646c0e4ad8f3c0c1007db3ca27ed571
|
4
|
+
data.tar.gz: a5c775c15afb940c17f730f43b571d791aa208b84b8372219fb130b83aae6d4b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 801d7d5ea6af33e7d8921e88c505649c37552da4e46dae3708d928515aa0dae7d8dfeb4785b602134580354c2acd0bd12c6b7338dbff592dc0559414d6fa1032
|
7
|
+
data.tar.gz: 43c8d28ab4a4ebcfb176b164304c6c36310934c0a71bef2cdb3fd18007d8320cfd0d518ab75f12cba3579408420d0ff77d1827a5cb29fe310400159e40c30320
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 2.2.1
|
4
|
+
|
5
|
+
- [#218: Remove unnecessary explicit dependencies: sprockets, activesupport, sass and pry](https://github.com/alphagov/tech-docs-gem/pull/218)
|
6
|
+
- [#125: Fix API docs showing required properties as optional](https://github.com/alphagov/tech-docs-gem/pull/125)
|
7
|
+
|
3
8
|
## 2.2.0
|
4
9
|
|
5
10
|
### Accessibility Fixes
|
@@ -100,7 +105,6 @@ You can look at the [2.0.6 milestone](https://github.com/alphagov/tech-docs-gem/
|
|
100
105
|
|
101
106
|
## 2.0.5
|
102
107
|
|
103
|
-
|
104
108
|
Adds [new global configuration option](https://github.com/alphagov/tech-docs-gem/pull/122) that controls whether review banners appear or not at the bottom of pages when expiry dates are set in the frontmatter.
|
105
109
|
|
106
110
|
[Fixes the hard-coded service link](https://github.com/alphagov/tech-docs-gem/pull/119) in the header.
|
data/govuk_tech_docs.gemspec
CHANGED
@@ -32,7 +32,6 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
33
33
|
spec.require_paths = ["lib"]
|
34
34
|
|
35
|
-
spec.add_dependency "activesupport"
|
36
35
|
spec.add_dependency "chronic", "~> 0.10.2"
|
37
36
|
spec.add_dependency "middleman", "~> 4.0"
|
38
37
|
spec.add_dependency "middleman-autoprefixer", "~> 2.10.0"
|
@@ -42,14 +41,9 @@ Gem::Specification.new do |spec|
|
|
42
41
|
spec.add_dependency "middleman-sprockets", "~> 4.0.0"
|
43
42
|
spec.add_dependency "middleman-syntax", "~> 3.2.0"
|
44
43
|
spec.add_dependency "nokogiri"
|
45
|
-
spec.add_dependency "openapi3_parser", "~> 0.
|
46
|
-
spec.add_dependency "pry"
|
44
|
+
spec.add_dependency "openapi3_parser", "~> 0.9.0"
|
47
45
|
spec.add_dependency "redcarpet", "~> 3.5.0"
|
48
|
-
spec.add_dependency "sass"
|
49
|
-
spec.add_dependency "sprockets", "~> 4.0.0"
|
50
46
|
|
51
|
-
|
52
|
-
spec.add_development_dependency "bundler", "~> 2.2.0"
|
53
47
|
spec.add_development_dependency "byebug"
|
54
48
|
spec.add_development_dependency "capybara", "~> 3.32"
|
55
49
|
spec.add_development_dependency "jasmine", "~> 3.5.0"
|
@@ -18,20 +18,15 @@ module GovukTechDocs
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def api_full(info, servers)
|
21
|
-
paths = ""
|
22
|
-
|
23
|
-
paths_data.each do |path_data|
|
24
|
-
# For some reason paths.each returns an array of arrays [title, object]
|
25
|
-
# instead of an array of objects
|
26
|
-
text = path_data[0]
|
27
|
-
paths += path(text)
|
21
|
+
paths = @document.paths.keys.inject("") do |memo, text|
|
22
|
+
memo + path(text)
|
28
23
|
end
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
schemas += schema(text)
|
24
|
+
|
25
|
+
schema_names = @document.components.schemas.keys
|
26
|
+
schemas = schema_names.inject("") do |memo, schema_name|
|
27
|
+
memo + schema(schema_name)
|
34
28
|
end
|
29
|
+
|
35
30
|
@template_api_full.result(binding)
|
36
31
|
end
|
37
32
|
|
@@ -42,128 +37,78 @@ module GovukTechDocs
|
|
42
37
|
@template_path.result(binding)
|
43
38
|
end
|
44
39
|
|
45
|
-
def schema(
|
46
|
-
|
47
|
-
|
48
|
-
schemas_data.each do |schema_data|
|
49
|
-
all_of = schema_data[1]["allOf"]
|
50
|
-
properties = []
|
51
|
-
if !all_of.blank?
|
52
|
-
all_of.each do |schema_nested|
|
53
|
-
schema_nested.properties.each do |property|
|
54
|
-
properties.push property
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
40
|
+
def schema(title)
|
41
|
+
schema = @document.components.schemas[title]
|
42
|
+
return unless schema
|
58
43
|
|
59
|
-
|
60
|
-
|
61
|
-
|
44
|
+
properties = if schema.all_of
|
45
|
+
schema.all_of.each_with_object({}) do |nested, memo|
|
46
|
+
memo.merge!(nested.properties.to_h)
|
47
|
+
end
|
48
|
+
else
|
49
|
+
{}
|
50
|
+
end
|
62
51
|
|
63
|
-
|
64
|
-
|
65
|
-
schema = schema_data[1]
|
66
|
-
return @template_schema.result(binding)
|
67
|
-
end
|
68
|
-
end
|
52
|
+
properties.merge!(schema.properties.to_h)
|
53
|
+
@template_schema.result(binding)
|
69
54
|
end
|
70
55
|
|
71
56
|
def schemas_from_path(text)
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
if
|
80
|
-
|
81
|
-
schema_name = get_schema_name(schema.node_context.source_location.to_s)
|
82
|
-
if !schema_name.nil?
|
83
|
-
schemas.push schema_name
|
84
|
-
end
|
85
|
-
schemas.concat(schemas_from_schema(schema))
|
86
|
-
end
|
57
|
+
operations = get_operations(@document.paths[text])
|
58
|
+
schemas = operations.flat_map do |_, operation|
|
59
|
+
operation.responses.inject([]) do |memo, (_, response)|
|
60
|
+
next memo unless response.content["application/json"]
|
61
|
+
|
62
|
+
schema = response.content["application/json"].schema
|
63
|
+
|
64
|
+
memo << schema.name if schema.name
|
65
|
+
memo + schemas_from_schema(schema)
|
87
66
|
end
|
88
67
|
end
|
68
|
+
|
89
69
|
# Render all referenced schemas
|
90
|
-
output = ""
|
91
|
-
|
92
|
-
output += schema(schema_name)
|
93
|
-
end
|
94
|
-
if !output.empty?
|
95
|
-
output.prepend('<h2 id="schemas">Schemas</h2>')
|
70
|
+
output = schemas.uniq.inject("") do |memo, schema_name|
|
71
|
+
memo + schema(schema_name)
|
96
72
|
end
|
73
|
+
|
74
|
+
output.prepend('<h2 id="schemas">Schemas</h2>') unless output.empty?
|
97
75
|
output
|
98
76
|
end
|
99
77
|
|
100
78
|
def schemas_from_schema(schema)
|
101
|
-
schemas =
|
102
|
-
|
103
|
-
schema.
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
end
|
109
|
-
all_of = schema["allOf"]
|
110
|
-
if !all_of.blank?
|
111
|
-
all_of.each do |schema_nested|
|
112
|
-
schema_nested.properties.each do |property|
|
113
|
-
properties.push property[1]
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
properties.each do |property|
|
118
|
-
# Must be a schema be referenced by another schema
|
119
|
-
# And not a property of a schema
|
120
|
-
if property.node_context.referenced_by.to_s.include?("#/components/schemas") &&
|
121
|
-
!property.node_context.source_location.to_s.include?("/properties/")
|
122
|
-
schema_name = get_schema_name(property.node_context.source_location.to_s)
|
123
|
-
end
|
124
|
-
if !schema_name.nil?
|
125
|
-
schemas.push schema_name
|
126
|
-
end
|
127
|
-
# Check sub-properties for references
|
128
|
-
schemas.concat(schemas_from_schema(property))
|
79
|
+
schemas = schema.properties.map(&:last)
|
80
|
+
schemas << schema.items if schema.items && schema.type == "array"
|
81
|
+
schemas += schema.all_of.to_a.flat_map { |s| s.properties.map(&:last) }
|
82
|
+
|
83
|
+
schemas.flat_map do |nested|
|
84
|
+
sub_schemas = schemas_from_schema(nested)
|
85
|
+
nested.name ? [nested.name] + sub_schemas : sub_schemas
|
129
86
|
end
|
130
|
-
schemas
|
131
87
|
end
|
132
88
|
|
133
89
|
def operations(path, path_id)
|
134
|
-
|
135
|
-
operations = get_operations(path)
|
136
|
-
operations.compact.each do |key, operation|
|
90
|
+
get_operations(path).inject("") do |memo, (key, operation)|
|
137
91
|
id = "#{path_id}-#{key.parameterize}"
|
138
92
|
parameters = parameters(operation, id)
|
139
93
|
responses = responses(operation, id)
|
140
|
-
|
94
|
+
memo + @template_operation.result(binding)
|
141
95
|
end
|
142
|
-
output
|
143
96
|
end
|
144
97
|
|
145
98
|
def parameters(operation, operation_id)
|
146
99
|
parameters = operation.parameters
|
147
100
|
id = "#{operation_id}-parameters"
|
148
|
-
|
149
|
-
output
|
101
|
+
@template_parameters.result(binding)
|
150
102
|
end
|
151
103
|
|
152
104
|
def responses(operation, operation_id)
|
153
105
|
responses = operation.responses
|
154
106
|
id = "#{operation_id}-responses"
|
155
|
-
|
156
|
-
output
|
157
|
-
end
|
158
|
-
|
159
|
-
def markdown(text)
|
160
|
-
if text
|
161
|
-
Tilt["markdown"].new(context: @app) { text }.render
|
162
|
-
end
|
107
|
+
@template_responses.result(binding)
|
163
108
|
end
|
164
109
|
|
165
110
|
def json_output(schema)
|
166
|
-
properties =
|
111
|
+
properties = schema_properties(schema)
|
167
112
|
JSON.pretty_generate(properties)
|
168
113
|
end
|
169
114
|
|
@@ -172,76 +117,26 @@ module GovukTechDocs
|
|
172
117
|
end
|
173
118
|
|
174
119
|
def schema_properties(schema_data)
|
175
|
-
properties =
|
176
|
-
if defined? schema_data.properties
|
177
|
-
schema_data.properties.each do |key, property|
|
178
|
-
properties[key] = property
|
179
|
-
end
|
180
|
-
end
|
181
|
-
properties.merge! get_all_of_hash(schema_data)
|
182
|
-
properties_hash = Hash.new
|
183
|
-
properties.each do |pkey, property|
|
184
|
-
if property.type == "object"
|
185
|
-
properties_hash[pkey] = Hash.new
|
186
|
-
items = property.items
|
187
|
-
if !items.blank?
|
188
|
-
properties_hash[pkey] = schema_properties(items)
|
189
|
-
end
|
190
|
-
if !property.properties.blank?
|
191
|
-
properties_hash[pkey] = schema_properties(property)
|
192
|
-
end
|
193
|
-
elsif property.type == "array"
|
194
|
-
properties_hash[pkey] = Array.new
|
195
|
-
items = property.items
|
196
|
-
if !items.blank?
|
197
|
-
properties_hash[pkey].push schema_properties(items)
|
198
|
-
end
|
199
|
-
else
|
200
|
-
properties_hash[pkey] = !property.example.nil? ? property.example : property.type
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
properties_hash
|
205
|
-
end
|
206
|
-
|
207
|
-
private
|
120
|
+
properties = schema_data.properties.to_h
|
208
121
|
|
209
|
-
|
210
|
-
|
211
|
-
if schema.is_a?(Array)
|
212
|
-
schema = schema[1]
|
213
|
-
end
|
214
|
-
if schema["allOf"]
|
215
|
-
all_of = schema["allOf"]
|
216
|
-
end
|
217
|
-
if !all_of.blank?
|
218
|
-
all_of.each do |schema_nested|
|
219
|
-
schema_nested.properties.each do |property|
|
220
|
-
if property.is_a?(Array)
|
221
|
-
property = property[1]
|
222
|
-
end
|
223
|
-
properties.push property
|
224
|
-
end
|
225
|
-
end
|
122
|
+
schema_data.all_of.to_a.each do |all_of_schema|
|
123
|
+
properties.merge!(all_of_schema.properties.to_h)
|
226
124
|
end
|
227
|
-
properties
|
228
|
-
end
|
229
125
|
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
end
|
240
|
-
end
|
126
|
+
properties.each_with_object({}) do |(name, schema), memo|
|
127
|
+
memo[name] = case schema.type
|
128
|
+
when "object"
|
129
|
+
schema_properties(schema.items || schema)
|
130
|
+
when "array"
|
131
|
+
schema.items ? [schema_properties(schema.items)] : []
|
132
|
+
else
|
133
|
+
schema.example || schema.type
|
134
|
+
end
|
241
135
|
end
|
242
|
-
properties
|
243
136
|
end
|
244
137
|
|
138
|
+
private
|
139
|
+
|
245
140
|
def get_renderer(file)
|
246
141
|
template_path = File.join(File.dirname(__FILE__), "templates/" + file)
|
247
142
|
template = File.open(template_path, "r").read
|
@@ -249,31 +144,20 @@ module GovukTechDocs
|
|
249
144
|
end
|
250
145
|
|
251
146
|
def get_operations(path)
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
end
|
260
|
-
|
261
|
-
def get_schema_name(text)
|
262
|
-
unless text.is_a?(String)
|
263
|
-
return nil
|
264
|
-
end
|
265
|
-
|
266
|
-
# Schema dictates that it's always components['schemas']
|
267
|
-
text.gsub(/#\/components\/schemas\//, "")
|
147
|
+
{
|
148
|
+
"get" => path.get,
|
149
|
+
"put" => path.put,
|
150
|
+
"post" => path.post,
|
151
|
+
"delete" => path.delete,
|
152
|
+
"patch" => path.patch,
|
153
|
+
}.compact
|
268
154
|
end
|
269
155
|
|
270
156
|
def get_schema_link(schema)
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
output
|
276
|
-
end
|
157
|
+
return unless schema.name
|
158
|
+
|
159
|
+
id = "schema-#{schema.name.parameterize}"
|
160
|
+
"<a href='\##{id}'>#{schema.name}</a>"
|
277
161
|
end
|
278
162
|
end
|
279
163
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
<h1 id="<%= info.title.parameterize %>"><%= info.title %> v<%= info.version %></h1>
|
2
|
-
<%=
|
2
|
+
<%= info.description_html %>
|
3
3
|
|
4
|
-
|
4
|
+
<%# OpenAPI files default to having a single server of URL "/" %>
|
5
|
+
<% if servers.length > 1 || servers[0].url != "/" %>
|
5
6
|
<h2 id="servers">Servers</h2>
|
6
7
|
<div id="server-list">
|
7
8
|
<% servers.each do |server| %>
|
@@ -11,7 +11,7 @@
|
|
11
11
|
<td><%= parameter.in %></td>
|
12
12
|
<td><%= parameter.schema.type %></td>
|
13
13
|
<td><%= parameter.required? %></td>
|
14
|
-
<td><%=
|
14
|
+
<td><%= parameter.description_html %>
|
15
15
|
<% if parameter.schema.enum %>
|
16
16
|
<p>Available items:</p>
|
17
17
|
<ul>
|
@@ -9,7 +9,7 @@
|
|
9
9
|
<tr>
|
10
10
|
<td><%= key %></td>
|
11
11
|
<td>
|
12
|
-
<%=
|
12
|
+
<%= response.description_html %>
|
13
13
|
<% if response.content['application/json']
|
14
14
|
if response.content['application/json']["example"]
|
15
15
|
request_body = json_prettyprint(response.content['application/json']["example"])
|
@@ -1,26 +1,26 @@
|
|
1
1
|
<h3 id="<%= id = 'schema-' + title; id.parameterize %>"><%= title %></h3>
|
2
|
-
<%=
|
2
|
+
<%= schema.description_html %>
|
3
3
|
<% if properties.any? %>
|
4
|
-
<table>
|
4
|
+
<table class='<%= id.parameterize %>'>
|
5
5
|
<thead>
|
6
6
|
<tr><th>Name</th><th>Type</th><th>Required</th><th>Description</th><th>Schema</th></tr>
|
7
7
|
</thead>
|
8
8
|
<tbody>
|
9
|
-
<% properties.each do |
|
9
|
+
<% properties.each do |property_name, property_attributes| %>
|
10
10
|
<tr>
|
11
|
-
<td><%=
|
12
|
-
<td><%=
|
13
|
-
<td><%=
|
14
|
-
<td><%=
|
11
|
+
<td><%= property_name %></td>
|
12
|
+
<td><%= property_attributes.type %></td>
|
13
|
+
<td><%= schema.requires?(property_name) %></td>
|
14
|
+
<td><%= property_attributes.description_html %></td>
|
15
15
|
<td>
|
16
16
|
<%=
|
17
|
-
|
17
|
+
linked_schema = property_attributes
|
18
18
|
# If property is an array, check the items property for a reference.
|
19
|
-
if
|
20
|
-
|
19
|
+
if property_attributes.type == 'array'
|
20
|
+
linked_schema = property_attributes['items']
|
21
21
|
end
|
22
|
-
# Only print a link if it's a
|
23
|
-
get_schema_link(
|
22
|
+
# Only print a link if it's a named schema
|
23
|
+
get_schema_link(linked_schema) if linked_schema.name %>
|
24
24
|
</td>
|
25
25
|
</tr>
|
26
26
|
<% end %>
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_tech_docs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Government Digital Service
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: activesupport
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: chronic
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,28 +142,14 @@ dependencies:
|
|
156
142
|
requirements:
|
157
143
|
- - "~>"
|
158
144
|
- !ruby/object:Gem::Version
|
159
|
-
version: 0.
|
145
|
+
version: 0.9.0
|
160
146
|
type: :runtime
|
161
147
|
prerelease: false
|
162
148
|
version_requirements: !ruby/object:Gem::Requirement
|
163
149
|
requirements:
|
164
150
|
- - "~>"
|
165
151
|
- !ruby/object:Gem::Version
|
166
|
-
version: 0.
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: pry
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - ">="
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
174
|
-
type: :runtime
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - ">="
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
152
|
+
version: 0.9.0
|
181
153
|
- !ruby/object:Gem::Dependency
|
182
154
|
name: redcarpet
|
183
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -192,48 +164,6 @@ dependencies:
|
|
192
164
|
- - "~>"
|
193
165
|
- !ruby/object:Gem::Version
|
194
166
|
version: 3.5.0
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: sass
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - ">="
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '0'
|
202
|
-
type: :runtime
|
203
|
-
prerelease: false
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - ">="
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '0'
|
209
|
-
- !ruby/object:Gem::Dependency
|
210
|
-
name: sprockets
|
211
|
-
requirement: !ruby/object:Gem::Requirement
|
212
|
-
requirements:
|
213
|
-
- - "~>"
|
214
|
-
- !ruby/object:Gem::Version
|
215
|
-
version: 4.0.0
|
216
|
-
type: :runtime
|
217
|
-
prerelease: false
|
218
|
-
version_requirements: !ruby/object:Gem::Requirement
|
219
|
-
requirements:
|
220
|
-
- - "~>"
|
221
|
-
- !ruby/object:Gem::Version
|
222
|
-
version: 4.0.0
|
223
|
-
- !ruby/object:Gem::Dependency
|
224
|
-
name: bundler
|
225
|
-
requirement: !ruby/object:Gem::Requirement
|
226
|
-
requirements:
|
227
|
-
- - "~>"
|
228
|
-
- !ruby/object:Gem::Version
|
229
|
-
version: 2.2.0
|
230
|
-
type: :development
|
231
|
-
prerelease: false
|
232
|
-
version_requirements: !ruby/object:Gem::Requirement
|
233
|
-
requirements:
|
234
|
-
- - "~>"
|
235
|
-
- !ruby/object:Gem::Version
|
236
|
-
version: 2.2.0
|
237
167
|
- !ruby/object:Gem::Dependency
|
238
168
|
name: byebug
|
239
169
|
requirement: !ruby/object:Gem::Requirement
|