json-schema 2.6.1 → 2.6.2
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 +4 -4
- data/README.md +156 -247
- data/lib/json-schema/attributes/ref.rb +2 -2
- data/lib/json-schema/schema/reader.rb +1 -1
- data/lib/json-schema/util/uri.rb +5 -1
- data/lib/json-schema/validator.rb +1 -1
- metadata +2 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59384ba05ea450b7add4dd65758c55a82615ce5a
|
4
|
+
data.tar.gz: 45388f1bcb2c6a4e9dd9a4479d3cd76627929b65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c27a0a2cec5b072cc964108ae4b331ff7320b906e55d20701eb556d296080cb348e4613d6ae0719d945bc1bafe73cb298c2f9448549b0c612301224bd2dbe2c9
|
7
|
+
data.tar.gz: 135eea52b5d08f17a16a98cbda09136b3846bed948cc3c2ef39b37143ac2c29acb5337a18ccfa609a602fbe01b61e133463d8ab4de663bb3b1c17cc3797af76d
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
](https://travis-ci.org/ruby-json-schema/json-schema)
|
2
|
+
[](https://codeclimate.com/github/ruby-json-schema/json-schema)
|
3
3
|
|
4
4
|
Ruby JSON Schema Validator
|
5
5
|
==========================
|
@@ -42,10 +42,10 @@ $ gem build json-schema.gemspec
|
|
42
42
|
$ gem install json-schema-2.5.2.gem
|
43
43
|
```
|
44
44
|
|
45
|
-
|
45
|
+
Validation
|
46
46
|
-----
|
47
47
|
|
48
|
-
Three base validation methods exist:
|
48
|
+
Three base validation methods exist:
|
49
49
|
|
50
50
|
1. `validate`: returns a boolean on whether a validation attempt passes
|
51
51
|
2. `validate!`: throws a `JSON::Schema::ValidationError` with an appropriate message/trace on where the validation failed
|
@@ -67,15 +67,15 @@ attribute in the schema and referencing the appropriate specification URI. Note
|
|
67
67
|
that the `$schema` attribute takes precedence over the `:version` option during
|
68
68
|
parsing and validation.
|
69
69
|
|
70
|
-
### Validate Ruby objects against a Ruby schema
|
71
|
-
|
72
70
|
For further information on json schema itself refer to <a
|
73
71
|
href="http://spacetelescope.github.io/understanding-json-schema/">Understanding
|
74
72
|
JSON Schema</a>.
|
75
73
|
|
76
|
-
|
77
|
-
|
78
|
-
|
74
|
+
Basic Usage
|
75
|
+
--------------
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
require "json-schema"
|
79
79
|
|
80
80
|
schema = {
|
81
81
|
"type" => "object",
|
@@ -85,279 +85,188 @@ schema = {
|
|
85
85
|
}
|
86
86
|
}
|
87
87
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
JSON::Validator.validate(schema, data)
|
93
|
-
```
|
94
|
-
|
95
|
-
### Validate a JSON string against a JSON schema file
|
88
|
+
#
|
89
|
+
# validate ruby objects against a ruby schema
|
90
|
+
#
|
96
91
|
|
97
|
-
|
98
|
-
|
99
|
-
|
92
|
+
# => true
|
93
|
+
JSON::Validator.validate(schema, { "a" => 5 })
|
94
|
+
# => false
|
95
|
+
JSON::Validator.validate(schema, {})
|
100
96
|
|
101
|
-
|
102
|
-
|
97
|
+
#
|
98
|
+
# validate a json string against a json schema file
|
99
|
+
#
|
103
100
|
|
104
|
-
|
101
|
+
require "json"
|
102
|
+
File.write("schema.json", JSON.dump(schema))
|
105
103
|
|
106
|
-
|
107
|
-
|
108
|
-
require 'json-schema'
|
109
|
-
|
110
|
-
data = ['user','user','user']
|
111
|
-
JSON::Validator.validate('user.json', data, :list => true)
|
112
|
-
```
|
113
|
-
|
114
|
-
### Strictly validate an object's properties
|
115
|
-
|
116
|
-
With the `:strict` option, validation fails when an object contains properties
|
117
|
-
that are not defined in the schema's property list or doesn't match the
|
118
|
-
`additionalProperties` property. Furthermore, all properties are treated as
|
119
|
-
`required` regardless of `required` properties set in the schema.
|
120
|
-
|
121
|
-
```rb
|
122
|
-
require 'rubygems'
|
123
|
-
require 'json-schema'
|
124
|
-
|
125
|
-
schema = {
|
126
|
-
"type" => "object",
|
127
|
-
"properties" => {
|
128
|
-
"a" => {"type" => "integer"},
|
129
|
-
"b" => {"type" => "integer"}
|
130
|
-
}
|
131
|
-
}
|
132
|
-
|
133
|
-
JSON::Validator.validate(schema, {"a" => 1, "b" => 2}, :strict => true) # ==> true
|
134
|
-
JSON::Validator.validate(schema, {"a" => 1, "b" => 2, "c" => 3}, :strict => true) # ==> false
|
135
|
-
JSON::Validator.validate(schema, {"a" => 1}, :strict => true) # ==> false
|
136
|
-
```
|
137
|
-
|
138
|
-
### Catch a validation error and print it out
|
139
|
-
|
140
|
-
```rb
|
141
|
-
require 'rubygems'
|
142
|
-
require 'json-schema'
|
143
|
-
|
144
|
-
schema = {
|
145
|
-
"type" => "object",
|
146
|
-
"required" => ["a"],
|
147
|
-
"properties" => {
|
148
|
-
"a" => {"type" => "integer"}
|
149
|
-
}
|
150
|
-
}
|
104
|
+
# => true
|
105
|
+
JSON::Validator.validate('schema.json', '{ "a": 5 }')
|
151
106
|
|
152
|
-
|
153
|
-
|
154
|
-
|
107
|
+
#
|
108
|
+
# raise an error when validation fails
|
109
|
+
#
|
155
110
|
|
111
|
+
# => "The property '#/a' of type String did not match the following type: integer"
|
156
112
|
begin
|
157
|
-
JSON::Validator.validate!(schema,
|
158
|
-
rescue JSON::Schema::ValidationError
|
159
|
-
|
113
|
+
JSON::Validator.validate!(schema, { "a" => "taco" })
|
114
|
+
rescue JSON::Schema::ValidationError => e
|
115
|
+
e.message
|
160
116
|
end
|
161
|
-
```
|
162
|
-
|
163
|
-
### Fully validate against a schema and catch all errors
|
164
|
-
|
165
|
-
```rb
|
166
|
-
require 'rubygems'
|
167
|
-
require 'json-schema'
|
168
|
-
|
169
|
-
schema = {
|
170
|
-
"type" => "object",
|
171
|
-
"required" => ["a","b"],
|
172
|
-
"properties" => {
|
173
|
-
"a" => {"type" => "integer"},
|
174
|
-
"b" => {"type" => "string"}
|
175
|
-
}
|
176
|
-
}
|
177
|
-
|
178
|
-
data = {
|
179
|
-
"a" => "taco"
|
180
|
-
}
|
181
|
-
|
182
|
-
errors = JSON::Validator.fully_validate(schema, data)
|
183
|
-
|
184
|
-
# ["The property '#/a' of type String did not match the following type: integer in schema 03179a21-197e-5414-9611-e9f63e8324cd#", "The property '#/' did not contain a required property of 'b' in schema 03179a21-197e-5414-9611-e9f63e8324cd#"]
|
185
|
-
```
|
186
|
-
|
187
|
-
### Fully validate against a schema and catch all errors as objects
|
188
|
-
|
189
|
-
```rb
|
190
|
-
require 'rubygems'
|
191
|
-
require 'json-schema'
|
192
|
-
|
193
|
-
schema = {
|
194
|
-
"type" => "object",
|
195
|
-
"required" => ["a","b"],
|
196
|
-
"properties" => {
|
197
|
-
"a" => {"type" => "integer"},
|
198
|
-
"b" => {"type" => "string"}
|
199
|
-
}
|
200
|
-
}
|
201
|
-
|
202
|
-
data = {
|
203
|
-
"a" => "taco"
|
204
|
-
}
|
205
117
|
|
206
|
-
|
118
|
+
#
|
119
|
+
# return an array of error messages when validation fails
|
120
|
+
#
|
207
121
|
|
208
|
-
# [
|
122
|
+
# => ["The property '#/a' of type String did not match the following type: integer in schema 18a1ffbb-4681-5b00-bd15-2c76aee4b28f"]
|
123
|
+
JSON::Validator.fully_validate(schema, { "a" => "taco" })
|
209
124
|
```
|
210
125
|
|
211
|
-
|
126
|
+
Advanced Options
|
127
|
+
-----------------
|
212
128
|
|
213
|
-
```
|
214
|
-
require
|
215
|
-
require 'json-schema'
|
129
|
+
```ruby
|
130
|
+
require "json-schema"
|
216
131
|
|
217
132
|
schema = {
|
218
|
-
"type"
|
219
|
-
"required" => ["a"
|
133
|
+
"type"=>"object",
|
134
|
+
"required" => ["a"],
|
220
135
|
"properties" => {
|
221
|
-
"a" => {
|
222
|
-
|
223
|
-
|
136
|
+
"a" => {
|
137
|
+
"type" => "integer",
|
138
|
+
"default" => 42
|
139
|
+
},
|
140
|
+
"b" => {
|
224
141
|
"type" => "object",
|
225
142
|
"properties" => {
|
226
|
-
"
|
143
|
+
"x" => {
|
144
|
+
"type" => "integer"
|
145
|
+
}
|
227
146
|
}
|
228
147
|
}
|
229
148
|
}
|
230
149
|
}
|
231
150
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
schema
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
}
|
256
|
-
|
257
|
-
JSON::Validator.validate(schema,
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
#
|
282
|
-
|
283
|
-
|
284
|
-
}
|
285
|
-
|
286
|
-
|
287
|
-
#
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
# data = {
|
292
|
-
# "a" => 42,
|
293
|
-
# "b" => 5
|
294
|
-
# }
|
295
|
-
```
|
296
|
-
|
297
|
-
### Validate an object against a JSON Schema Draft 2 schema
|
298
|
-
|
299
|
-
```rb
|
300
|
-
require 'rubygems'
|
301
|
-
require 'json-schema'
|
302
|
-
|
303
|
-
schema = {
|
151
|
+
#
|
152
|
+
# with the `:list` option, a list can be validated against a schema that represents the individual objects
|
153
|
+
#
|
154
|
+
|
155
|
+
# => true
|
156
|
+
JSON::Validator.validate(schema, [{"a" => 1}, {"a" => 2}, {"a" => 3}], :list => true)
|
157
|
+
# => false
|
158
|
+
JSON::Validator.validate(schema, [{"a" => 1}, {"a" => 2}, {"a" => 3}])
|
159
|
+
|
160
|
+
#
|
161
|
+
# with the `:errors_as_objects` option, `#fully_validate` returns errors as hashes instead of strings
|
162
|
+
#
|
163
|
+
|
164
|
+
# => [{:schema=>#<Addressable::URI:0x3ffa69cbeed8 URI:18a1ffbb-4681-5b00-bd15-2c76aee4b28f>, :fragment=>"#/a", :message=>"The property '#/a' of type String did not match the following type: integer in schema 18a1ffbb-4681-5b00-bd15-2c76aee4b28f", :failed_attribute=>"TypeV4"}]
|
165
|
+
JSON::Validator.fully_validate(schema, { "a" => "taco" }, :errors_as_objects => true)
|
166
|
+
|
167
|
+
#
|
168
|
+
# with the `:strict` option, all properties are condisidered to have `"required": true` and all objects `"additionalProperties": false`
|
169
|
+
#
|
170
|
+
|
171
|
+
# => true
|
172
|
+
JSON::Validator.validate(schema, { "a" => 1, "b" => { "x" => 2 } }, :strict => true)
|
173
|
+
# => false
|
174
|
+
JSON::Validator.validate(schema, { "a" => 1, "b" => { "x" => 2 }, "c" => 3 }, :strict => true)
|
175
|
+
# => false
|
176
|
+
JSON::Validator.validate(schema, { "a" => 1 }, :strict => true)
|
177
|
+
|
178
|
+
#
|
179
|
+
# with the `:fragment` option, only a fragment of the schema is used for validation
|
180
|
+
#
|
181
|
+
|
182
|
+
# => true
|
183
|
+
JSON::Validator.validate(schema, { "x" => 1 }, :fragment => "#/properties/b")
|
184
|
+
# => false
|
185
|
+
JSON::Validator.validate(schema, { "x" => 1 })
|
186
|
+
|
187
|
+
#
|
188
|
+
# with the `:validate_schema` option, the schema is validated (against the json schema spec) before the json is validated (against the specified schema)
|
189
|
+
#
|
190
|
+
|
191
|
+
# => true
|
192
|
+
JSON::Validator.validate(schema, { "a" => 1 }, :validate_schema => true)
|
193
|
+
# => false
|
194
|
+
JSON::Validator.validate({ "required" => true }, { "a" => 1 }, :validate_schema => true)
|
195
|
+
|
196
|
+
#
|
197
|
+
# with the `:insert_defaults` option, any undefined values in the json that have a default in the schema are replaced with the default before validation
|
198
|
+
#
|
199
|
+
|
200
|
+
# => true
|
201
|
+
JSON::Validator.validate(schema, {}, :insert_defaults => true)
|
202
|
+
# => false
|
203
|
+
JSON::Validator.validate(schema, {})
|
204
|
+
|
205
|
+
#
|
206
|
+
# with the `:version` option, schemas conforming to older drafts of the json schema spec can be used
|
207
|
+
#
|
208
|
+
|
209
|
+
v2_schema = {
|
304
210
|
"type" => "object",
|
305
211
|
"properties" => {
|
306
|
-
"a" => {
|
212
|
+
"a" => {
|
213
|
+
"type" => "integer"
|
214
|
+
}
|
307
215
|
}
|
308
216
|
}
|
309
217
|
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
JSON::Validator.validate(schema, data, :version => :draft2)
|
315
|
-
```
|
316
|
-
|
317
|
-
### Explicitly specifying the type of the data
|
218
|
+
# => false
|
219
|
+
JSON::Validator.validate(v2_schema, {}, :version => :draft2)
|
220
|
+
# => true
|
221
|
+
JSON::Validator.validate(v2_schema, {})
|
318
222
|
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
before validating), a string of JSON text, or simply a ruby object (such as an
|
323
|
-
array or hash representing parsed json). However, sometimes the nature of the
|
324
|
-
data is ambiguous (for example, is "http://github.com" just a string, or is it a
|
325
|
-
uri?). In other situations, you have already parsed your JSON, and you don't
|
326
|
-
need to re-parse it.
|
223
|
+
#
|
224
|
+
# with the `:parse_data` option set to false, the json must be a parsed ruby object (not a json text, a uri or a file path)
|
225
|
+
#
|
327
226
|
|
328
|
-
|
329
|
-
|
227
|
+
# => true
|
228
|
+
JSON::Validator.validate(schema, { "a" => 1 }, :parse_data => false)
|
229
|
+
# => false
|
230
|
+
JSON::Validator.validate(schema, '{ "a": 1 }', :parse_data => false)
|
330
231
|
|
331
|
-
|
332
|
-
|
333
|
-
|
232
|
+
#
|
233
|
+
# with the `:json` option, the json must be an unparsed json text (not a hash, a uri or a file path)
|
234
|
+
#
|
334
235
|
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
236
|
+
# => true
|
237
|
+
JSON::Validator.validate(schema, '{ "a": 1 }', :json => true)
|
238
|
+
# => "no implicit conversion of Hash into String"
|
239
|
+
begin
|
240
|
+
JSON::Validator.validate(schema, { "a" => 1 }, :json => true)
|
241
|
+
rescue TypeError => e
|
242
|
+
e.message
|
243
|
+
end
|
341
244
|
|
342
|
-
#
|
343
|
-
|
245
|
+
#
|
246
|
+
# with the `:uri` option, the json must be a uri or file path (not a hash or a json text)
|
247
|
+
#
|
344
248
|
|
345
|
-
|
346
|
-
JSON::Validator.validate(schema, '"https://api.github.com"', :json => true) # returns true
|
249
|
+
File.write("data.json", '{ "a": 1 }')
|
347
250
|
|
348
|
-
#
|
349
|
-
JSON::Validator.validate(schema,
|
251
|
+
# => true
|
252
|
+
JSON::Validator.validate(schema, "data.json", :uri => true)
|
253
|
+
# => "Can't convert Hash into String."
|
254
|
+
begin
|
255
|
+
JSON::Validator.validate(schema, { "a" => 1 }, :uri => true)
|
256
|
+
rescue TypeError => e
|
257
|
+
e.message
|
258
|
+
end
|
350
259
|
```
|
351
260
|
|
352
|
-
|
261
|
+
Extending Schemas
|
262
|
+
-----------------
|
353
263
|
|
354
264
|
For this example, we are going to extend the [JSON Schema Draft
|
355
265
|
3](http://tools.ietf.org/html/draft-zyp-json-schema-03) specification by adding
|
356
266
|
a 'bitwise-and' property for validation.
|
357
267
|
|
358
|
-
```
|
359
|
-
require
|
360
|
-
require 'json-schema'
|
268
|
+
```ruby
|
269
|
+
require "json-schema"
|
361
270
|
|
362
271
|
class BitwiseAndAttribute < JSON::Schema::Attribute
|
363
272
|
def self.validate(current_schema, data, fragments, processor, validator, options = {})
|
@@ -403,7 +312,8 @@ data = {"a" => 0, "b" => "taco"}
|
|
403
312
|
JSON::Validator.validate(schema,data) # => false
|
404
313
|
```
|
405
314
|
|
406
|
-
|
315
|
+
Custom format validation
|
316
|
+
------------------------
|
407
317
|
|
408
318
|
The JSON schema standard allows custom formats in schema definitions which
|
409
319
|
should be ignored by validators that do not support them. JSON::Schema allows
|
@@ -412,9 +322,8 @@ checked as parameter and must raise a `JSON::Schema::CustomFormatError` to
|
|
412
322
|
indicate a format violation. The error message will be prepended by the property
|
413
323
|
name, e.g. [The property '#a']()
|
414
324
|
|
415
|
-
```
|
416
|
-
require
|
417
|
-
require 'json-schema'
|
325
|
+
```ruby
|
326
|
+
require "json-schema"
|
418
327
|
|
419
328
|
format_proc = -> value {
|
420
329
|
raise JSON::Schema::CustomFormatError.new("must be 42") unless value == "42"
|
@@ -456,7 +365,7 @@ control all schemas which should be used by validation, this could be
|
|
456
365
|
accomplished by registering all referenced schemas with the validator in
|
457
366
|
advance:
|
458
367
|
|
459
|
-
```
|
368
|
+
```ruby
|
460
369
|
schema = JSON::Schema.new(some_schema_definition, Addressable::URI.parse('http://example.com/my-schema'))
|
461
370
|
JSON::Validator.add_schema(schema)
|
462
371
|
```
|
@@ -464,7 +373,7 @@ JSON::Validator.add_schema(schema)
|
|
464
373
|
If more extensive control is necessary, the `JSON::Schema::Reader` instance used
|
465
374
|
can be configured in a few ways:
|
466
375
|
|
467
|
-
```
|
376
|
+
```ruby
|
468
377
|
# Change the default schema reader used
|
469
378
|
JSON::Validator.schema_reader = JSON::Schema::Reader.new(:accept_uri => true, :accept_file => false)
|
470
379
|
|
@@ -491,7 +400,7 @@ If more than one of the supported JSON backends are installed, the `yajl-ruby`
|
|
491
400
|
parser is used by default. This can be changed by issuing the following before
|
492
401
|
validation:
|
493
402
|
|
494
|
-
```
|
403
|
+
```ruby
|
495
404
|
JSON::Validator.json_backend = :json
|
496
405
|
```
|
497
406
|
|
@@ -48,11 +48,11 @@ module JSON
|
|
48
48
|
if ref_schema
|
49
49
|
# Perform fragment resolution to retrieve the appropriate level for the schema
|
50
50
|
target_schema = ref_schema.schema
|
51
|
-
fragments = temp_uri.fragment.split("/")
|
51
|
+
fragments = JSON::Util::URI.parse(JSON::Util::URI.unescape_uri(temp_uri)).fragment.split("/")
|
52
52
|
fragment_path = ''
|
53
53
|
fragments.each do |fragment|
|
54
54
|
if fragment && fragment != ''
|
55
|
-
fragment =
|
55
|
+
fragment = fragment.gsub('~0', '~').gsub('~1', '/')
|
56
56
|
if target_schema.is_a?(Array)
|
57
57
|
target_schema = target_schema[fragment.to_i]
|
58
58
|
else
|
@@ -102,7 +102,7 @@ module JSON
|
|
102
102
|
|
103
103
|
def read_file(pathname)
|
104
104
|
if accept_file?(pathname)
|
105
|
-
File.read(JSON::Util::URI.
|
105
|
+
File.read(JSON::Util::URI.unescaped_path(pathname.to_s))
|
106
106
|
else
|
107
107
|
raise JSON::Schema::ReadRefused.new(pathname.to_s, :file)
|
108
108
|
end
|
data/lib/json-schema/util/uri.rb
CHANGED
@@ -54,7 +54,11 @@ module JSON
|
|
54
54
|
Addressable::URI.convert_path(parsed_uri.path)
|
55
55
|
end
|
56
56
|
|
57
|
-
def self.
|
57
|
+
def self.unescape_uri(uri)
|
58
|
+
Addressable::URI.unescape(uri)
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.unescaped_path(uri)
|
58
62
|
parsed_uri = parse(uri)
|
59
63
|
|
60
64
|
Addressable::URI.unescape(parsed_uri.path)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.6.
|
4
|
+
version: 2.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kenny Hoxworth
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -174,4 +174,3 @@ signing_key:
|
|
174
174
|
specification_version: 4
|
175
175
|
summary: Ruby JSON Schema Validator
|
176
176
|
test_files: []
|
177
|
-
has_rdoc:
|