danger-packwerk 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,1418 +0,0 @@
1
- # typed: true
2
-
3
- # DO NOT EDIT MANUALLY
4
- # This is an autogenerated file for types exported from the `json` gem.
5
- # Please instead update this file by running `bin/tapioca gem json`.
6
-
7
- # Extends any Class to include _json_creatable?_ method.
8
- class Class < ::Module
9
- # Returns true if this class can be used to create an instance
10
- # from a serialised JSON string. The class has to implement a class
11
- # method _json_create_ that expects a hash as first parameter. The hash
12
- # should include the required data.
13
- #
14
- # @return [Boolean]
15
- def json_creatable?; end
16
- end
17
-
18
- # = JavaScript \Object Notation (\JSON)
19
- #
20
- # \JSON is a lightweight data-interchange format.
21
- #
22
- # A \JSON value is one of the following:
23
- # - Double-quoted text: <tt>"foo"</tt>.
24
- # - Number: +1+, +1.0+, +2.0e2+.
25
- # - Boolean: +true+, +false+.
26
- # - Null: +null+.
27
- # - \Array: an ordered list of values, enclosed by square brackets:
28
- # ["foo", 1, 1.0, 2.0e2, true, false, null]
29
- #
30
- # - \Object: a collection of name/value pairs, enclosed by curly braces;
31
- # each name is double-quoted text;
32
- # the values may be any \JSON values:
33
- # {"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null}
34
- #
35
- # A \JSON array or object may contain nested arrays, objects, and scalars
36
- # to any depth:
37
- # {"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]}
38
- # [{"foo": 0, "bar": 1}, ["baz", 2]]
39
- #
40
- # == Using \Module \JSON
41
- #
42
- # To make module \JSON available in your code, begin with:
43
- # require 'json'
44
- #
45
- # All examples here assume that this has been done.
46
- #
47
- # === Parsing \JSON
48
- #
49
- # You can parse a \String containing \JSON data using
50
- # either of two methods:
51
- # - <tt>JSON.parse(source, opts)</tt>
52
- # - <tt>JSON.parse!(source, opts)</tt>
53
- #
54
- # where
55
- # - +source+ is a Ruby object.
56
- # - +opts+ is a \Hash object containing options
57
- # that control both input allowed and output formatting.
58
- #
59
- # The difference between the two methods
60
- # is that JSON.parse! omits some checks
61
- # and may not be safe for some +source+ data;
62
- # use it only for data from trusted sources.
63
- # Use the safer method JSON.parse for less trusted sources.
64
- #
65
- # ==== Parsing \JSON Arrays
66
- #
67
- # When +source+ is a \JSON array, JSON.parse by default returns a Ruby \Array:
68
- # json = '["foo", 1, 1.0, 2.0e2, true, false, null]'
69
- # ruby = JSON.parse(json)
70
- # ruby # => ["foo", 1, 1.0, 200.0, true, false, nil]
71
- # ruby.class # => Array
72
- #
73
- # The \JSON array may contain nested arrays, objects, and scalars
74
- # to any depth:
75
- # json = '[{"foo": 0, "bar": 1}, ["baz", 2]]'
76
- # JSON.parse(json) # => [{"foo"=>0, "bar"=>1}, ["baz", 2]]
77
- #
78
- # ==== Parsing \JSON \Objects
79
- #
80
- # When the source is a \JSON object, JSON.parse by default returns a Ruby \Hash:
81
- # json = '{"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null}'
82
- # ruby = JSON.parse(json)
83
- # ruby # => {"a"=>"foo", "b"=>1, "c"=>1.0, "d"=>200.0, "e"=>true, "f"=>false, "g"=>nil}
84
- # ruby.class # => Hash
85
- #
86
- # The \JSON object may contain nested arrays, objects, and scalars
87
- # to any depth:
88
- # json = '{"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]}'
89
- # JSON.parse(json) # => {"foo"=>{"bar"=>1, "baz"=>2}, "bat"=>[0, 1, 2]}
90
- #
91
- # ==== Parsing \JSON Scalars
92
- #
93
- # When the source is a \JSON scalar (not an array or object),
94
- # JSON.parse returns a Ruby scalar.
95
- #
96
- # \String:
97
- # ruby = JSON.parse('"foo"')
98
- # ruby # => 'foo'
99
- # ruby.class # => String
100
- # \Integer:
101
- # ruby = JSON.parse('1')
102
- # ruby # => 1
103
- # ruby.class # => Integer
104
- # \Float:
105
- # ruby = JSON.parse('1.0')
106
- # ruby # => 1.0
107
- # ruby.class # => Float
108
- # ruby = JSON.parse('2.0e2')
109
- # ruby # => 200
110
- # ruby.class # => Float
111
- # Boolean:
112
- # ruby = JSON.parse('true')
113
- # ruby # => true
114
- # ruby.class # => TrueClass
115
- # ruby = JSON.parse('false')
116
- # ruby # => false
117
- # ruby.class # => FalseClass
118
- # Null:
119
- # ruby = JSON.parse('null')
120
- # ruby # => nil
121
- # ruby.class # => NilClass
122
- #
123
- # ==== Parsing Options
124
- #
125
- # ====== Input Options
126
- #
127
- # Option +max_nesting+ (\Integer) specifies the maximum nesting depth allowed;
128
- # defaults to +100+; specify +false+ to disable depth checking.
129
- #
130
- # With the default, +false+:
131
- # source = '[0, [1, [2, [3]]]]'
132
- # ruby = JSON.parse(source)
133
- # ruby # => [0, [1, [2, [3]]]]
134
- # Too deep:
135
- # # Raises JSON::NestingError (nesting of 2 is too deep):
136
- # JSON.parse(source, {max_nesting: 1})
137
- # Bad value:
138
- # # Raises TypeError (wrong argument type Symbol (expected Fixnum)):
139
- # JSON.parse(source, {max_nesting: :foo})
140
- #
141
- # ---
142
- #
143
- # Option +allow_nan+ (boolean) specifies whether to allow
144
- # NaN, Infinity, and MinusInfinity in +source+;
145
- # defaults to +false+.
146
- #
147
- # With the default, +false+:
148
- # # Raises JSON::ParserError (225: unexpected token at '[NaN]'):
149
- # JSON.parse('[NaN]')
150
- # # Raises JSON::ParserError (232: unexpected token at '[Infinity]'):
151
- # JSON.parse('[Infinity]')
152
- # # Raises JSON::ParserError (248: unexpected token at '[-Infinity]'):
153
- # JSON.parse('[-Infinity]')
154
- # Allow:
155
- # source = '[NaN, Infinity, -Infinity]'
156
- # ruby = JSON.parse(source, {allow_nan: true})
157
- # ruby # => [NaN, Infinity, -Infinity]
158
- #
159
- # ====== Output Options
160
- #
161
- # Option +symbolize_names+ (boolean) specifies whether returned \Hash keys
162
- # should be Symbols;
163
- # defaults to +false+ (use Strings).
164
- #
165
- # With the default, +false+:
166
- # source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}'
167
- # ruby = JSON.parse(source)
168
- # ruby # => {"a"=>"foo", "b"=>1.0, "c"=>true, "d"=>false, "e"=>nil}
169
- # Use Symbols:
170
- # ruby = JSON.parse(source, {symbolize_names: true})
171
- # ruby # => {:a=>"foo", :b=>1.0, :c=>true, :d=>false, :e=>nil}
172
- #
173
- # ---
174
- #
175
- # Option +object_class+ (\Class) specifies the Ruby class to be used
176
- # for each \JSON object;
177
- # defaults to \Hash.
178
- #
179
- # With the default, \Hash:
180
- # source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}'
181
- # ruby = JSON.parse(source)
182
- # ruby.class # => Hash
183
- # Use class \OpenStruct:
184
- # ruby = JSON.parse(source, {object_class: OpenStruct})
185
- # ruby # => #<OpenStruct a="foo", b=1.0, c=true, d=false, e=nil>
186
- #
187
- # ---
188
- #
189
- # Option +array_class+ (\Class) specifies the Ruby class to be used
190
- # for each \JSON array;
191
- # defaults to \Array.
192
- #
193
- # With the default, \Array:
194
- # source = '["foo", 1.0, true, false, null]'
195
- # ruby = JSON.parse(source)
196
- # ruby.class # => Array
197
- # Use class \Set:
198
- # ruby = JSON.parse(source, {array_class: Set})
199
- # ruby # => #<Set: {"foo", 1.0, true, false, nil}>
200
- #
201
- # ---
202
- #
203
- # Option +create_additions+ (boolean) specifies whether to use \JSON additions in parsing.
204
- # See {\JSON Additions}[#module-JSON-label-JSON+Additions].
205
- #
206
- # === Generating \JSON
207
- #
208
- # To generate a Ruby \String containing \JSON data,
209
- # use method <tt>JSON.generate(source, opts)</tt>, where
210
- # - +source+ is a Ruby object.
211
- # - +opts+ is a \Hash object containing options
212
- # that control both input allowed and output formatting.
213
- #
214
- # ==== Generating \JSON from Arrays
215
- #
216
- # When the source is a Ruby \Array, JSON.generate returns
217
- # a \String containing a \JSON array:
218
- # ruby = [0, 's', :foo]
219
- # json = JSON.generate(ruby)
220
- # json # => '[0,"s","foo"]'
221
- #
222
- # The Ruby \Array array may contain nested arrays, hashes, and scalars
223
- # to any depth:
224
- # ruby = [0, [1, 2], {foo: 3, bar: 4}]
225
- # json = JSON.generate(ruby)
226
- # json # => '[0,[1,2],{"foo":3,"bar":4}]'
227
- #
228
- # ==== Generating \JSON from Hashes
229
- #
230
- # When the source is a Ruby \Hash, JSON.generate returns
231
- # a \String containing a \JSON object:
232
- # ruby = {foo: 0, bar: 's', baz: :bat}
233
- # json = JSON.generate(ruby)
234
- # json # => '{"foo":0,"bar":"s","baz":"bat"}'
235
- #
236
- # The Ruby \Hash array may contain nested arrays, hashes, and scalars
237
- # to any depth:
238
- # ruby = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad}
239
- # json = JSON.generate(ruby)
240
- # json # => '{"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"}'
241
- #
242
- # ==== Generating \JSON from Other Objects
243
- #
244
- # When the source is neither an \Array nor a \Hash,
245
- # the generated \JSON data depends on the class of the source.
246
- #
247
- # When the source is a Ruby \Integer or \Float, JSON.generate returns
248
- # a \String containing a \JSON number:
249
- # JSON.generate(42) # => '42'
250
- # JSON.generate(0.42) # => '0.42'
251
- #
252
- # When the source is a Ruby \String, JSON.generate returns
253
- # a \String containing a \JSON string (with double-quotes):
254
- # JSON.generate('A string') # => '"A string"'
255
- #
256
- # When the source is +true+, +false+ or +nil+, JSON.generate returns
257
- # a \String containing the corresponding \JSON token:
258
- # JSON.generate(true) # => 'true'
259
- # JSON.generate(false) # => 'false'
260
- # JSON.generate(nil) # => 'null'
261
- #
262
- # When the source is none of the above, JSON.generate returns
263
- # a \String containing a \JSON string representation of the source:
264
- # JSON.generate(:foo) # => '"foo"'
265
- # JSON.generate(Complex(0, 0)) # => '"0+0i"'
266
- # JSON.generate(Dir.new('.')) # => '"#<Dir>"'
267
- #
268
- # ==== Generating Options
269
- #
270
- # ====== Input Options
271
- #
272
- # Option +allow_nan+ (boolean) specifies whether
273
- # +NaN+, +Infinity+, and <tt>-Infinity</tt> may be generated;
274
- # defaults to +false+.
275
- #
276
- # With the default, +false+:
277
- # # Raises JSON::GeneratorError (920: NaN not allowed in JSON):
278
- # JSON.generate(JSON::NaN)
279
- # # Raises JSON::GeneratorError (917: Infinity not allowed in JSON):
280
- # JSON.generate(JSON::Infinity)
281
- # # Raises JSON::GeneratorError (917: -Infinity not allowed in JSON):
282
- # JSON.generate(JSON::MinusInfinity)
283
- #
284
- # Allow:
285
- # ruby = [Float::NaN, Float::Infinity, Float::MinusInfinity]
286
- # JSON.generate(ruby, allow_nan: true) # => '[NaN,Infinity,-Infinity]'
287
- #
288
- # ---
289
- #
290
- # Option +max_nesting+ (\Integer) specifies the maximum nesting depth
291
- # in +obj+; defaults to +100+.
292
- #
293
- # With the default, +100+:
294
- # obj = [[[[[[0]]]]]]
295
- # JSON.generate(obj) # => '[[[[[[0]]]]]]'
296
- #
297
- # Too deep:
298
- # # Raises JSON::NestingError (nesting of 2 is too deep):
299
- # JSON.generate(obj, max_nesting: 2)
300
- #
301
- # ====== Output Options
302
- #
303
- # The default formatting options generate the most compact
304
- # \JSON data, all on one line and with no whitespace.
305
- #
306
- # You can use these formatting options to generate
307
- # \JSON data in a more open format, using whitespace.
308
- # See also JSON.pretty_generate.
309
- #
310
- # - Option +array_nl+ (\String) specifies a string (usually a newline)
311
- # to be inserted after each \JSON array; defaults to the empty \String, <tt>''</tt>.
312
- # - Option +object_nl+ (\String) specifies a string (usually a newline)
313
- # to be inserted after each \JSON object; defaults to the empty \String, <tt>''</tt>.
314
- # - Option +indent+ (\String) specifies the string (usually spaces) to be
315
- # used for indentation; defaults to the empty \String, <tt>''</tt>;
316
- # defaults to the empty \String, <tt>''</tt>;
317
- # has no effect unless options +array_nl+ or +object_nl+ specify newlines.
318
- # - Option +space+ (\String) specifies a string (usually a space) to be
319
- # inserted after the colon in each \JSON object's pair;
320
- # defaults to the empty \String, <tt>''</tt>.
321
- # - Option +space_before+ (\String) specifies a string (usually a space) to be
322
- # inserted before the colon in each \JSON object's pair;
323
- # defaults to the empty \String, <tt>''</tt>.
324
- #
325
- # In this example, +obj+ is used first to generate the shortest
326
- # \JSON data (no whitespace), then again with all formatting options
327
- # specified:
328
- #
329
- # obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}}
330
- # json = JSON.generate(obj)
331
- # puts 'Compact:', json
332
- # opts = {
333
- # array_nl: "\n",
334
- # object_nl: "\n",
335
- # indent: ' ',
336
- # space_before: ' ',
337
- # space: ' '
338
- # }
339
- # puts 'Open:', JSON.generate(obj, opts)
340
- #
341
- # Output:
342
- # Compact:
343
- # {"foo":["bar","baz"],"bat":{"bam":0,"bad":1}}
344
- # Open:
345
- # {
346
- # "foo" : [
347
- # "bar",
348
- # "baz"
349
- # ],
350
- # "bat" : {
351
- # "bam" : 0,
352
- # "bad" : 1
353
- # }
354
- # }
355
- #
356
- # == \JSON Additions
357
- #
358
- # When you "round trip" a non-\String object from Ruby to \JSON and back,
359
- # you have a new \String, instead of the object you began with:
360
- # ruby0 = Range.new(0, 2)
361
- # json = JSON.generate(ruby0)
362
- # json # => '0..2"'
363
- # ruby1 = JSON.parse(json)
364
- # ruby1 # => '0..2'
365
- # ruby1.class # => String
366
- #
367
- # You can use \JSON _additions_ to preserve the original object.
368
- # The addition is an extension of a ruby class, so that:
369
- # - \JSON.generate stores more information in the \JSON string.
370
- # - \JSON.parse, called with option +create_additions+,
371
- # uses that information to create a proper Ruby object.
372
- #
373
- # This example shows a \Range being generated into \JSON
374
- # and parsed back into Ruby, both without and with
375
- # the addition for \Range:
376
- # ruby = Range.new(0, 2)
377
- # # This passage does not use the addition for Range.
378
- # json0 = JSON.generate(ruby)
379
- # ruby0 = JSON.parse(json0)
380
- # # This passage uses the addition for Range.
381
- # require 'json/add/range'
382
- # json1 = JSON.generate(ruby)
383
- # ruby1 = JSON.parse(json1, create_additions: true)
384
- # # Make a nice display.
385
- # display = <<EOT
386
- # Generated JSON:
387
- # Without addition: #{json0} (#{json0.class})
388
- # With addition: #{json1} (#{json1.class})
389
- # Parsed JSON:
390
- # Without addition: #{ruby0.inspect} (#{ruby0.class})
391
- # With addition: #{ruby1.inspect} (#{ruby1.class})
392
- # EOT
393
- # puts display
394
- #
395
- # This output shows the different results:
396
- # Generated JSON:
397
- # Without addition: "0..2" (String)
398
- # With addition: {"json_class":"Range","a":[0,2,false]} (String)
399
- # Parsed JSON:
400
- # Without addition: "0..2" (String)
401
- # With addition: 0..2 (Range)
402
- #
403
- # The \JSON module includes additions for certain classes.
404
- # You can also craft custom additions.
405
- # See {Custom \JSON Additions}[#module-JSON-label-Custom+JSON+Additions].
406
- #
407
- # === Built-in Additions
408
- #
409
- # The \JSON module includes additions for certain classes.
410
- # To use an addition, +require+ its source:
411
- # - BigDecimal: <tt>require 'json/add/bigdecimal'</tt>
412
- # - Complex: <tt>require 'json/add/complex'</tt>
413
- # - Date: <tt>require 'json/add/date'</tt>
414
- # - DateTime: <tt>require 'json/add/date_time'</tt>
415
- # - Exception: <tt>require 'json/add/exception'</tt>
416
- # - OpenStruct: <tt>require 'json/add/ostruct'</tt>
417
- # - Range: <tt>require 'json/add/range'</tt>
418
- # - Rational: <tt>require 'json/add/rational'</tt>
419
- # - Regexp: <tt>require 'json/add/regexp'</tt>
420
- # - Set: <tt>require 'json/add/set'</tt>
421
- # - Struct: <tt>require 'json/add/struct'</tt>
422
- # - Symbol: <tt>require 'json/add/symbol'</tt>
423
- # - Time: <tt>require 'json/add/time'</tt>
424
- #
425
- # To reduce punctuation clutter, the examples below
426
- # show the generated \JSON via +puts+, rather than the usual +inspect+,
427
- #
428
- # \BigDecimal:
429
- # require 'json/add/bigdecimal'
430
- # ruby0 = BigDecimal(0) # 0.0
431
- # json = JSON.generate(ruby0) # {"json_class":"BigDecimal","b":"27:0.0"}
432
- # ruby1 = JSON.parse(json, create_additions: true) # 0.0
433
- # ruby1.class # => BigDecimal
434
- #
435
- # \Complex:
436
- # require 'json/add/complex'
437
- # ruby0 = Complex(1+0i) # 1+0i
438
- # json = JSON.generate(ruby0) # {"json_class":"Complex","r":1,"i":0}
439
- # ruby1 = JSON.parse(json, create_additions: true) # 1+0i
440
- # ruby1.class # Complex
441
- #
442
- # \Date:
443
- # require 'json/add/date'
444
- # ruby0 = Date.today # 2020-05-02
445
- # json = JSON.generate(ruby0) # {"json_class":"Date","y":2020,"m":5,"d":2,"sg":2299161.0}
446
- # ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02
447
- # ruby1.class # Date
448
- #
449
- # \DateTime:
450
- # require 'json/add/date_time'
451
- # ruby0 = DateTime.now # 2020-05-02T10:38:13-05:00
452
- # json = JSON.generate(ruby0) # {"json_class":"DateTime","y":2020,"m":5,"d":2,"H":10,"M":38,"S":13,"of":"-5/24","sg":2299161.0}
453
- # ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02T10:38:13-05:00
454
- # ruby1.class # DateTime
455
- #
456
- # \Exception (and its subclasses including \RuntimeError):
457
- # require 'json/add/exception'
458
- # ruby0 = Exception.new('A message') # A message
459
- # json = JSON.generate(ruby0) # {"json_class":"Exception","m":"A message","b":null}
460
- # ruby1 = JSON.parse(json, create_additions: true) # A message
461
- # ruby1.class # Exception
462
- # ruby0 = RuntimeError.new('Another message') # Another message
463
- # json = JSON.generate(ruby0) # {"json_class":"RuntimeError","m":"Another message","b":null}
464
- # ruby1 = JSON.parse(json, create_additions: true) # Another message
465
- # ruby1.class # RuntimeError
466
- #
467
- # \OpenStruct:
468
- # require 'json/add/ostruct'
469
- # ruby0 = OpenStruct.new(name: 'Matz', language: 'Ruby') # #<OpenStruct name="Matz", language="Ruby">
470
- # json = JSON.generate(ruby0) # {"json_class":"OpenStruct","t":{"name":"Matz","language":"Ruby"}}
471
- # ruby1 = JSON.parse(json, create_additions: true) # #<OpenStruct name="Matz", language="Ruby">
472
- # ruby1.class # OpenStruct
473
- #
474
- # \Range:
475
- # require 'json/add/range'
476
- # ruby0 = Range.new(0, 2) # 0..2
477
- # json = JSON.generate(ruby0) # {"json_class":"Range","a":[0,2,false]}
478
- # ruby1 = JSON.parse(json, create_additions: true) # 0..2
479
- # ruby1.class # Range
480
- #
481
- # \Rational:
482
- # require 'json/add/rational'
483
- # ruby0 = Rational(1, 3) # 1/3
484
- # json = JSON.generate(ruby0) # {"json_class":"Rational","n":1,"d":3}
485
- # ruby1 = JSON.parse(json, create_additions: true) # 1/3
486
- # ruby1.class # Rational
487
- #
488
- # \Regexp:
489
- # require 'json/add/regexp'
490
- # ruby0 = Regexp.new('foo') # (?-mix:foo)
491
- # json = JSON.generate(ruby0) # {"json_class":"Regexp","o":0,"s":"foo"}
492
- # ruby1 = JSON.parse(json, create_additions: true) # (?-mix:foo)
493
- # ruby1.class # Regexp
494
- #
495
- # \Set:
496
- # require 'json/add/set'
497
- # ruby0 = Set.new([0, 1, 2]) # #<Set: {0, 1, 2}>
498
- # json = JSON.generate(ruby0) # {"json_class":"Set","a":[0,1,2]}
499
- # ruby1 = JSON.parse(json, create_additions: true) # #<Set: {0, 1, 2}>
500
- # ruby1.class # Set
501
- #
502
- # \Struct:
503
- # require 'json/add/struct'
504
- # Customer = Struct.new(:name, :address) # Customer
505
- # ruby0 = Customer.new("Dave", "123 Main") # #<struct Customer name="Dave", address="123 Main">
506
- # json = JSON.generate(ruby0) # {"json_class":"Customer","v":["Dave","123 Main"]}
507
- # ruby1 = JSON.parse(json, create_additions: true) # #<struct Customer name="Dave", address="123 Main">
508
- # ruby1.class # Customer
509
- #
510
- # \Symbol:
511
- # require 'json/add/symbol'
512
- # ruby0 = :foo # foo
513
- # json = JSON.generate(ruby0) # {"json_class":"Symbol","s":"foo"}
514
- # ruby1 = JSON.parse(json, create_additions: true) # foo
515
- # ruby1.class # Symbol
516
- #
517
- # \Time:
518
- # require 'json/add/time'
519
- # ruby0 = Time.now # 2020-05-02 11:28:26 -0500
520
- # json = JSON.generate(ruby0) # {"json_class":"Time","s":1588436906,"n":840560000}
521
- # ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02 11:28:26 -0500
522
- # ruby1.class # Time
523
- #
524
- #
525
- # === Custom \JSON Additions
526
- #
527
- # In addition to the \JSON additions provided,
528
- # you can craft \JSON additions of your own,
529
- # either for Ruby built-in classes or for user-defined classes.
530
- #
531
- # Here's a user-defined class +Foo+:
532
- # class Foo
533
- # attr_accessor :bar, :baz
534
- # def initialize(bar, baz)
535
- # self.bar = bar
536
- # self.baz = baz
537
- # end
538
- # end
539
- #
540
- # Here's the \JSON addition for it:
541
- # # Extend class Foo with JSON addition.
542
- # class Foo
543
- # # Serialize Foo object with its class name and arguments
544
- # def to_json(*args)
545
- # {
546
- # JSON.create_id => self.class.name,
547
- # 'a' => [ bar, baz ]
548
- # }.to_json(*args)
549
- # end
550
- # # Deserialize JSON string by constructing new Foo object with arguments.
551
- # def self.json_create(object)
552
- # new(*object['a'])
553
- # end
554
- # end
555
- #
556
- # Demonstration:
557
- # require 'json'
558
- # # This Foo object has no custom addition.
559
- # foo0 = Foo.new(0, 1)
560
- # json0 = JSON.generate(foo0)
561
- # obj0 = JSON.parse(json0)
562
- # # Lood the custom addition.
563
- # require_relative 'foo_addition'
564
- # # This foo has the custom addition.
565
- # foo1 = Foo.new(0, 1)
566
- # json1 = JSON.generate(foo1)
567
- # obj1 = JSON.parse(json1, create_additions: true)
568
- # # Make a nice display.
569
- # display = <<EOT
570
- # Generated JSON:
571
- # Without custom addition: #{json0} (#{json0.class})
572
- # With custom addition: #{json1} (#{json1.class})
573
- # Parsed JSON:
574
- # Without custom addition: #{obj0.inspect} (#{obj0.class})
575
- # With custom addition: #{obj1.inspect} (#{obj1.class})
576
- # EOT
577
- # puts display
578
- #
579
- # Output:
580
- #
581
- # Generated JSON:
582
- # Without custom addition: "#<Foo:0x0000000006534e80>" (String)
583
- # With custom addition: {"json_class":"Foo","a":[0,1]} (String)
584
- # Parsed JSON:
585
- # Without custom addition: "#<Foo:0x0000000006534e80>" (String)
586
- # With custom addition: #<Foo:0x0000000006473bb8 @bar=0, @baz=1> (Foo)
587
- module JSON
588
- private
589
-
590
- # :call-seq:
591
- # JSON.dump(obj, io = nil, limit = nil)
592
- #
593
- # Dumps +obj+ as a \JSON string, i.e. calls generate on the object and returns the result.
594
- #
595
- # The default options can be changed via method JSON.dump_default_options.
596
- #
597
- # - Argument +io+, if given, should respond to method +write+;
598
- # the \JSON \String is written to +io+, and +io+ is returned.
599
- # If +io+ is not given, the \JSON \String is returned.
600
- # - Argument +limit+, if given, is passed to JSON.generate as option +max_nesting+.
601
- #
602
- # ---
603
- #
604
- # When argument +io+ is not given, returns the \JSON \String generated from +obj+:
605
- # obj = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad}
606
- # json = JSON.dump(obj)
607
- # json # => "{\"foo\":[0,1],\"bar\":{\"baz\":2,\"bat\":3},\"bam\":\"bad\"}"
608
- #
609
- # When argument +io+ is given, writes the \JSON \String to +io+ and returns +io+:
610
- # path = 't.json'
611
- # File.open(path, 'w') do |file|
612
- # JSON.dump(obj, file)
613
- # end # => #<File:t.json (closed)>
614
- # puts File.read(path)
615
- # Output:
616
- # {"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"}
617
- def dump(obj, anIO = T.unsafe(nil), limit = T.unsafe(nil)); end
618
-
619
- # :call-seq:
620
- # JSON.fast_generate(obj, opts) -> new_string
621
- #
622
- # Arguments +obj+ and +opts+ here are the same as
623
- # arguments +obj+ and +opts+ in JSON.generate.
624
- #
625
- # By default, generates \JSON data without checking
626
- # for circular references in +obj+ (option +max_nesting+ set to +false+, disabled).
627
- #
628
- # Raises an exception if +obj+ contains circular references:
629
- # a = []; b = []; a.push(b); b.push(a)
630
- # # Raises SystemStackError (stack level too deep):
631
- # JSON.fast_generate(a)
632
- def fast_generate(obj, opts = T.unsafe(nil)); end
633
-
634
- # :stopdoc:
635
- # I want to deprecate these later, so I'll first be silent about them, and later delete them.
636
- def fast_unparse(obj, opts = T.unsafe(nil)); end
637
-
638
- # :call-seq:
639
- # JSON.generate(obj, opts = nil) -> new_string
640
- #
641
- # Returns a \String containing the generated \JSON data.
642
- #
643
- # See also JSON.fast_generate, JSON.pretty_generate.
644
- #
645
- # Argument +obj+ is the Ruby object to be converted to \JSON.
646
- #
647
- # Argument +opts+, if given, contains a \Hash of options for the generation.
648
- # See {Generating Options}[#module-JSON-label-Generating+Options].
649
- #
650
- # ---
651
- #
652
- # When +obj+ is an \Array, returns a \String containing a \JSON array:
653
- # obj = ["foo", 1.0, true, false, nil]
654
- # json = JSON.generate(obj)
655
- # json # => '["foo",1.0,true,false,null]'
656
- #
657
- # When +obj+ is a \Hash, returns a \String containing a \JSON object:
658
- # obj = {foo: 0, bar: 's', baz: :bat}
659
- # json = JSON.generate(obj)
660
- # json # => '{"foo":0,"bar":"s","baz":"bat"}'
661
- #
662
- # For examples of generating from other Ruby objects, see
663
- # {Generating \JSON from Other Objects}[#module-JSON-label-Generating+JSON+from+Other+Objects].
664
- #
665
- # ---
666
- #
667
- # Raises an exception if any formatting option is not a \String.
668
- #
669
- # Raises an exception if +obj+ contains circular references:
670
- # a = []; b = []; a.push(b); b.push(a)
671
- # # Raises JSON::NestingError (nesting of 100 is too deep):
672
- # JSON.generate(a)
673
- def generate(obj, opts = T.unsafe(nil)); end
674
-
675
- # :call-seq:
676
- # JSON.load(source, proc = nil, options = {}) -> object
677
- #
678
- # Returns the Ruby objects created by parsing the given +source+.
679
- #
680
- # - Argument +source+ must be, or be convertible to, a \String:
681
- # - If +source+ responds to instance method +to_str+,
682
- # <tt>source.to_str</tt> becomes the source.
683
- # - If +source+ responds to instance method +to_io+,
684
- # <tt>source.to_io.read</tt> becomes the source.
685
- # - If +source+ responds to instance method +read+,
686
- # <tt>source.read</tt> becomes the source.
687
- # - If both of the following are true, source becomes the \String <tt>'null'</tt>:
688
- # - Option +allow_blank+ specifies a truthy value.
689
- # - The source, as defined above, is +nil+ or the empty \String <tt>''</tt>.
690
- # - Otherwise, +source+ remains the source.
691
- # - Argument +proc+, if given, must be a \Proc that accepts one argument.
692
- # It will be called recursively with each result (depth-first order).
693
- # See details below.
694
- # BEWARE: This method is meant to serialise data from trusted user input,
695
- # like from your own database server or clients under your control, it could
696
- # be dangerous to allow untrusted users to pass JSON sources into it.
697
- # - Argument +opts+, if given, contains a \Hash of options for the parsing.
698
- # See {Parsing Options}[#module-JSON-label-Parsing+Options].
699
- # The default options can be changed via method JSON.load_default_options=.
700
- #
701
- # ---
702
- #
703
- # When no +proc+ is given, modifies +source+ as above and returns the result of
704
- # <tt>parse(source, opts)</tt>; see #parse.
705
- #
706
- # Source for following examples:
707
- # source = <<-EOT
708
- # {
709
- # "name": "Dave",
710
- # "age" :40,
711
- # "hats": [
712
- # "Cattleman's",
713
- # "Panama",
714
- # "Tophat"
715
- # ]
716
- # }
717
- # EOT
718
- #
719
- # Load a \String:
720
- # ruby = JSON.load(source)
721
- # ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
722
- #
723
- # Load an \IO object:
724
- # require 'stringio'
725
- # object = JSON.load(StringIO.new(source))
726
- # object # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
727
- #
728
- # Load a \File object:
729
- # path = 't.json'
730
- # File.write(path, source)
731
- # File.open(path) do |file|
732
- # JSON.load(file)
733
- # end # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
734
- #
735
- # ---
736
- #
737
- # When +proc+ is given:
738
- # - Modifies +source+ as above.
739
- # - Gets the +result+ from calling <tt>parse(source, opts)</tt>.
740
- # - Recursively calls <tt>proc(result)</tt>.
741
- # - Returns the final result.
742
- #
743
- # Example:
744
- # require 'json'
745
- #
746
- # # Some classes for the example.
747
- # class Base
748
- # def initialize(attributes)
749
- # @attributes = attributes
750
- # end
751
- # end
752
- # class User < Base; end
753
- # class Account < Base; end
754
- # class Admin < Base; end
755
- # # The JSON source.
756
- # json = <<-EOF
757
- # {
758
- # "users": [
759
- # {"type": "User", "username": "jane", "email": "jane@example.com"},
760
- # {"type": "User", "username": "john", "email": "john@example.com"}
761
- # ],
762
- # "accounts": [
763
- # {"account": {"type": "Account", "paid": true, "account_id": "1234"}},
764
- # {"account": {"type": "Account", "paid": false, "account_id": "1235"}}
765
- # ],
766
- # "admins": {"type": "Admin", "password": "0wn3d"}
767
- # }
768
- # EOF
769
- # # Deserializer method.
770
- # def deserialize_obj(obj, safe_types = %w(User Account Admin))
771
- # type = obj.is_a?(Hash) && obj["type"]
772
- # safe_types.include?(type) ? Object.const_get(type).new(obj) : obj
773
- # end
774
- # # Call to JSON.load
775
- # ruby = JSON.load(json, proc {|obj|
776
- # case obj
777
- # when Hash
778
- # obj.each {|k, v| obj[k] = deserialize_obj v }
779
- # when Array
780
- # obj.map! {|v| deserialize_obj v }
781
- # end
782
- # })
783
- # pp ruby
784
- # Output:
785
- # {"users"=>
786
- # [#<User:0x00000000064c4c98
787
- # @attributes=
788
- # {"type"=>"User", "username"=>"jane", "email"=>"jane@example.com"}>,
789
- # #<User:0x00000000064c4bd0
790
- # @attributes=
791
- # {"type"=>"User", "username"=>"john", "email"=>"john@example.com"}>],
792
- # "accounts"=>
793
- # [{"account"=>
794
- # #<Account:0x00000000064c4928
795
- # @attributes={"type"=>"Account", "paid"=>true, "account_id"=>"1234"}>},
796
- # {"account"=>
797
- # #<Account:0x00000000064c4680
798
- # @attributes={"type"=>"Account", "paid"=>false, "account_id"=>"1235"}>}],
799
- # "admins"=>
800
- # #<Admin:0x00000000064c41f8
801
- # @attributes={"type"=>"Admin", "password"=>"0wn3d"}>}
802
- def load(source, proc = T.unsafe(nil), options = T.unsafe(nil)); end
803
-
804
- # :call-seq:
805
- # JSON.load_file(path, opts={}) -> object
806
- #
807
- # Calls:
808
- # parse(File.read(path), opts)
809
- #
810
- # See method #parse.
811
- def load_file(filespec, opts = T.unsafe(nil)); end
812
-
813
- # :call-seq:
814
- # JSON.load_file!(path, opts = {})
815
- #
816
- # Calls:
817
- # JSON.parse!(File.read(path, opts))
818
- #
819
- # See method #parse!
820
- def load_file!(filespec, opts = T.unsafe(nil)); end
821
-
822
- # :call-seq:
823
- # JSON.parse(source, opts) -> object
824
- #
825
- # Returns the Ruby objects created by parsing the given +source+.
826
- #
827
- # Argument +source+ contains the \String to be parsed.
828
- #
829
- # Argument +opts+, if given, contains a \Hash of options for the parsing.
830
- # See {Parsing Options}[#module-JSON-label-Parsing+Options].
831
- #
832
- # ---
833
- #
834
- # When +source+ is a \JSON array, returns a Ruby \Array:
835
- # source = '["foo", 1.0, true, false, null]'
836
- # ruby = JSON.parse(source)
837
- # ruby # => ["foo", 1.0, true, false, nil]
838
- # ruby.class # => Array
839
- #
840
- # When +source+ is a \JSON object, returns a Ruby \Hash:
841
- # source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}'
842
- # ruby = JSON.parse(source)
843
- # ruby # => {"a"=>"foo", "b"=>1.0, "c"=>true, "d"=>false, "e"=>nil}
844
- # ruby.class # => Hash
845
- #
846
- # For examples of parsing for all \JSON data types, see
847
- # {Parsing \JSON}[#module-JSON-label-Parsing+JSON].
848
- #
849
- # Parses nested JSON objects:
850
- # source = <<-EOT
851
- # {
852
- # "name": "Dave",
853
- # "age" :40,
854
- # "hats": [
855
- # "Cattleman's",
856
- # "Panama",
857
- # "Tophat"
858
- # ]
859
- # }
860
- # EOT
861
- # ruby = JSON.parse(source)
862
- # ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
863
- #
864
- # ---
865
- #
866
- # Raises an exception if +source+ is not valid JSON:
867
- # # Raises JSON::ParserError (783: unexpected token at ''):
868
- # JSON.parse('')
869
- def parse(source, opts = T.unsafe(nil)); end
870
-
871
- # :call-seq:
872
- # JSON.parse!(source, opts) -> object
873
- #
874
- # Calls
875
- # parse(source, opts)
876
- # with +source+ and possibly modified +opts+.
877
- #
878
- # Differences from JSON.parse:
879
- # - Option +max_nesting+, if not provided, defaults to +false+,
880
- # which disables checking for nesting depth.
881
- # - Option +allow_nan+, if not provided, defaults to +true+.
882
- def parse!(source, opts = T.unsafe(nil)); end
883
-
884
- # :call-seq:
885
- # JSON.pretty_generate(obj, opts = nil) -> new_string
886
- #
887
- # Arguments +obj+ and +opts+ here are the same as
888
- # arguments +obj+ and +opts+ in JSON.generate.
889
- #
890
- # Default options are:
891
- # {
892
- # indent: ' ', # Two spaces
893
- # space: ' ', # One space
894
- # array_nl: "\n", # Newline
895
- # object_nl: "\n" # Newline
896
- # }
897
- #
898
- # Example:
899
- # obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}}
900
- # json = JSON.pretty_generate(obj)
901
- # puts json
902
- # Output:
903
- # {
904
- # "foo": [
905
- # "bar",
906
- # "baz"
907
- # ],
908
- # "bat": {
909
- # "bam": 0,
910
- # "bad": 1
911
- # }
912
- # }
913
- def pretty_generate(obj, opts = T.unsafe(nil)); end
914
-
915
- # :stopdoc:
916
- # I want to deprecate these later, so I'll first be silent about them, and later delete them.
917
- def pretty_unparse(obj, opts = T.unsafe(nil)); end
918
-
919
- # Recursively calls passed _Proc_ if the parsed data structure is an _Array_ or _Hash_
920
- def recurse_proc(result, &proc); end
921
-
922
- def restore(source, proc = T.unsafe(nil), options = T.unsafe(nil)); end
923
-
924
- # :stopdoc:
925
- # I want to deprecate these later, so I'll first be silent about them, and
926
- # later delete them.
927
- def unparse(obj, opts = T.unsafe(nil)); end
928
-
929
- class << self
930
- # :call-seq:
931
- # JSON[object] -> new_array or new_string
932
- #
933
- # If +object+ is a \String,
934
- # calls JSON.parse with +object+ and +opts+ (see method #parse):
935
- # json = '[0, 1, null]'
936
- # JSON[json]# => [0, 1, nil]
937
- #
938
- # Otherwise, calls JSON.generate with +object+ and +opts+ (see method #generate):
939
- # ruby = [0, 1, nil]
940
- # JSON[ruby] # => '[0,1,null]'
941
- def [](object, opts = T.unsafe(nil)); end
942
-
943
- def create_fast_state; end
944
-
945
- # Returns the current create identifier.
946
- # See also JSON.create_id=.
947
- def create_id; end
948
-
949
- # Sets create identifier, which is used to decide if the _json_create_
950
- # hook of a class should be called; initial value is +json_class+:
951
- # JSON.create_id # => 'json_class'
952
- def create_id=(new_value); end
953
-
954
- def create_pretty_state; end
955
-
956
- # Return the constant located at _path_. The format of _path_ has to be
957
- # either ::A::B::C or A::B::C. In any case, A has to be located at the top
958
- # level (absolute namespace path?). If there doesn't exist a constant at
959
- # the given path, an ArgumentError is raised.
960
- def deep_const_get(path); end
961
-
962
- # :call-seq:
963
- # JSON.dump(obj, io = nil, limit = nil)
964
- #
965
- # Dumps +obj+ as a \JSON string, i.e. calls generate on the object and returns the result.
966
- #
967
- # The default options can be changed via method JSON.dump_default_options.
968
- #
969
- # - Argument +io+, if given, should respond to method +write+;
970
- # the \JSON \String is written to +io+, and +io+ is returned.
971
- # If +io+ is not given, the \JSON \String is returned.
972
- # - Argument +limit+, if given, is passed to JSON.generate as option +max_nesting+.
973
- #
974
- # ---
975
- #
976
- # When argument +io+ is not given, returns the \JSON \String generated from +obj+:
977
- # obj = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad}
978
- # json = JSON.dump(obj)
979
- # json # => "{\"foo\":[0,1],\"bar\":{\"baz\":2,\"bat\":3},\"bam\":\"bad\"}"
980
- #
981
- # When argument +io+ is given, writes the \JSON \String to +io+ and returns +io+:
982
- # path = 't.json'
983
- # File.open(path, 'w') do |file|
984
- # JSON.dump(obj, file)
985
- # end # => #<File:t.json (closed)>
986
- # puts File.read(path)
987
- # Output:
988
- # {"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"}
989
- def dump(obj, anIO = T.unsafe(nil), limit = T.unsafe(nil)); end
990
-
991
- # Sets or returns the default options for the JSON.dump method.
992
- # Initially:
993
- # opts = JSON.dump_default_options
994
- # opts # => {:max_nesting=>false, :allow_nan=>true, :escape_slash=>false}
995
- def dump_default_options; end
996
-
997
- # Sets or returns the default options for the JSON.dump method.
998
- # Initially:
999
- # opts = JSON.dump_default_options
1000
- # opts # => {:max_nesting=>false, :allow_nan=>true, :escape_slash=>false}
1001
- def dump_default_options=(_arg0); end
1002
-
1003
- # :call-seq:
1004
- # JSON.fast_generate(obj, opts) -> new_string
1005
- #
1006
- # Arguments +obj+ and +opts+ here are the same as
1007
- # arguments +obj+ and +opts+ in JSON.generate.
1008
- #
1009
- # By default, generates \JSON data without checking
1010
- # for circular references in +obj+ (option +max_nesting+ set to +false+, disabled).
1011
- #
1012
- # Raises an exception if +obj+ contains circular references:
1013
- # a = []; b = []; a.push(b); b.push(a)
1014
- # # Raises SystemStackError (stack level too deep):
1015
- # JSON.fast_generate(a)
1016
- def fast_generate(obj, opts = T.unsafe(nil)); end
1017
-
1018
- # :stopdoc:
1019
- # I want to deprecate these later, so I'll first be silent about them, and later delete them.
1020
- def fast_unparse(obj, opts = T.unsafe(nil)); end
1021
-
1022
- # :call-seq:
1023
- # JSON.generate(obj, opts = nil) -> new_string
1024
- #
1025
- # Returns a \String containing the generated \JSON data.
1026
- #
1027
- # See also JSON.fast_generate, JSON.pretty_generate.
1028
- #
1029
- # Argument +obj+ is the Ruby object to be converted to \JSON.
1030
- #
1031
- # Argument +opts+, if given, contains a \Hash of options for the generation.
1032
- # See {Generating Options}[#module-JSON-label-Generating+Options].
1033
- #
1034
- # ---
1035
- #
1036
- # When +obj+ is an \Array, returns a \String containing a \JSON array:
1037
- # obj = ["foo", 1.0, true, false, nil]
1038
- # json = JSON.generate(obj)
1039
- # json # => '["foo",1.0,true,false,null]'
1040
- #
1041
- # When +obj+ is a \Hash, returns a \String containing a \JSON object:
1042
- # obj = {foo: 0, bar: 's', baz: :bat}
1043
- # json = JSON.generate(obj)
1044
- # json # => '{"foo":0,"bar":"s","baz":"bat"}'
1045
- #
1046
- # For examples of generating from other Ruby objects, see
1047
- # {Generating \JSON from Other Objects}[#module-JSON-label-Generating+JSON+from+Other+Objects].
1048
- #
1049
- # ---
1050
- #
1051
- # Raises an exception if any formatting option is not a \String.
1052
- #
1053
- # Raises an exception if +obj+ contains circular references:
1054
- # a = []; b = []; a.push(b); b.push(a)
1055
- # # Raises JSON::NestingError (nesting of 100 is too deep):
1056
- # JSON.generate(a)
1057
- def generate(obj, opts = T.unsafe(nil)); end
1058
-
1059
- # Returns the JSON generator module that is used by JSON. This is
1060
- # either JSON::Ext::Generator or JSON::Pure::Generator:
1061
- # JSON.generator # => JSON::Ext::Generator
1062
- def generator; end
1063
-
1064
- # Set the module _generator_ to be used by JSON.
1065
- def generator=(generator); end
1066
-
1067
- # Encodes string using String.encode.
1068
- def iconv(to, from, string); end
1069
-
1070
- # :call-seq:
1071
- # JSON.load(source, proc = nil, options = {}) -> object
1072
- #
1073
- # Returns the Ruby objects created by parsing the given +source+.
1074
- #
1075
- # - Argument +source+ must be, or be convertible to, a \String:
1076
- # - If +source+ responds to instance method +to_str+,
1077
- # <tt>source.to_str</tt> becomes the source.
1078
- # - If +source+ responds to instance method +to_io+,
1079
- # <tt>source.to_io.read</tt> becomes the source.
1080
- # - If +source+ responds to instance method +read+,
1081
- # <tt>source.read</tt> becomes the source.
1082
- # - If both of the following are true, source becomes the \String <tt>'null'</tt>:
1083
- # - Option +allow_blank+ specifies a truthy value.
1084
- # - The source, as defined above, is +nil+ or the empty \String <tt>''</tt>.
1085
- # - Otherwise, +source+ remains the source.
1086
- # - Argument +proc+, if given, must be a \Proc that accepts one argument.
1087
- # It will be called recursively with each result (depth-first order).
1088
- # See details below.
1089
- # BEWARE: This method is meant to serialise data from trusted user input,
1090
- # like from your own database server or clients under your control, it could
1091
- # be dangerous to allow untrusted users to pass JSON sources into it.
1092
- # - Argument +opts+, if given, contains a \Hash of options for the parsing.
1093
- # See {Parsing Options}[#module-JSON-label-Parsing+Options].
1094
- # The default options can be changed via method JSON.load_default_options=.
1095
- #
1096
- # ---
1097
- #
1098
- # When no +proc+ is given, modifies +source+ as above and returns the result of
1099
- # <tt>parse(source, opts)</tt>; see #parse.
1100
- #
1101
- # Source for following examples:
1102
- # source = <<-EOT
1103
- # {
1104
- # "name": "Dave",
1105
- # "age" :40,
1106
- # "hats": [
1107
- # "Cattleman's",
1108
- # "Panama",
1109
- # "Tophat"
1110
- # ]
1111
- # }
1112
- # EOT
1113
- #
1114
- # Load a \String:
1115
- # ruby = JSON.load(source)
1116
- # ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
1117
- #
1118
- # Load an \IO object:
1119
- # require 'stringio'
1120
- # object = JSON.load(StringIO.new(source))
1121
- # object # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
1122
- #
1123
- # Load a \File object:
1124
- # path = 't.json'
1125
- # File.write(path, source)
1126
- # File.open(path) do |file|
1127
- # JSON.load(file)
1128
- # end # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
1129
- #
1130
- # ---
1131
- #
1132
- # When +proc+ is given:
1133
- # - Modifies +source+ as above.
1134
- # - Gets the +result+ from calling <tt>parse(source, opts)</tt>.
1135
- # - Recursively calls <tt>proc(result)</tt>.
1136
- # - Returns the final result.
1137
- #
1138
- # Example:
1139
- # require 'json'
1140
- #
1141
- # # Some classes for the example.
1142
- # class Base
1143
- # def initialize(attributes)
1144
- # @attributes = attributes
1145
- # end
1146
- # end
1147
- # class User < Base; end
1148
- # class Account < Base; end
1149
- # class Admin < Base; end
1150
- # # The JSON source.
1151
- # json = <<-EOF
1152
- # {
1153
- # "users": [
1154
- # {"type": "User", "username": "jane", "email": "jane@example.com"},
1155
- # {"type": "User", "username": "john", "email": "john@example.com"}
1156
- # ],
1157
- # "accounts": [
1158
- # {"account": {"type": "Account", "paid": true, "account_id": "1234"}},
1159
- # {"account": {"type": "Account", "paid": false, "account_id": "1235"}}
1160
- # ],
1161
- # "admins": {"type": "Admin", "password": "0wn3d"}
1162
- # }
1163
- # EOF
1164
- # # Deserializer method.
1165
- # def deserialize_obj(obj, safe_types = %w(User Account Admin))
1166
- # type = obj.is_a?(Hash) && obj["type"]
1167
- # safe_types.include?(type) ? Object.const_get(type).new(obj) : obj
1168
- # end
1169
- # # Call to JSON.load
1170
- # ruby = JSON.load(json, proc {|obj|
1171
- # case obj
1172
- # when Hash
1173
- # obj.each {|k, v| obj[k] = deserialize_obj v }
1174
- # when Array
1175
- # obj.map! {|v| deserialize_obj v }
1176
- # end
1177
- # })
1178
- # pp ruby
1179
- # Output:
1180
- # {"users"=>
1181
- # [#<User:0x00000000064c4c98
1182
- # @attributes=
1183
- # {"type"=>"User", "username"=>"jane", "email"=>"jane@example.com"}>,
1184
- # #<User:0x00000000064c4bd0
1185
- # @attributes=
1186
- # {"type"=>"User", "username"=>"john", "email"=>"john@example.com"}>],
1187
- # "accounts"=>
1188
- # [{"account"=>
1189
- # #<Account:0x00000000064c4928
1190
- # @attributes={"type"=>"Account", "paid"=>true, "account_id"=>"1234"}>},
1191
- # {"account"=>
1192
- # #<Account:0x00000000064c4680
1193
- # @attributes={"type"=>"Account", "paid"=>false, "account_id"=>"1235"}>}],
1194
- # "admins"=>
1195
- # #<Admin:0x00000000064c41f8
1196
- # @attributes={"type"=>"Admin", "password"=>"0wn3d"}>}
1197
- def load(source, proc = T.unsafe(nil), options = T.unsafe(nil)); end
1198
-
1199
- # Sets or returns default options for the JSON.load method.
1200
- # Initially:
1201
- # opts = JSON.load_default_options
1202
- # opts # => {:max_nesting=>false, :allow_nan=>true, :allow_blank=>true, :create_additions=>true}
1203
- def load_default_options; end
1204
-
1205
- # Sets or returns default options for the JSON.load method.
1206
- # Initially:
1207
- # opts = JSON.load_default_options
1208
- # opts # => {:max_nesting=>false, :allow_nan=>true, :allow_blank=>true, :create_additions=>true}
1209
- def load_default_options=(_arg0); end
1210
-
1211
- # :call-seq:
1212
- # JSON.load_file(path, opts={}) -> object
1213
- #
1214
- # Calls:
1215
- # parse(File.read(path), opts)
1216
- #
1217
- # See method #parse.
1218
- def load_file(filespec, opts = T.unsafe(nil)); end
1219
-
1220
- # :call-seq:
1221
- # JSON.load_file!(path, opts = {})
1222
- #
1223
- # Calls:
1224
- # JSON.parse!(File.read(path, opts))
1225
- #
1226
- # See method #parse!
1227
- def load_file!(filespec, opts = T.unsafe(nil)); end
1228
-
1229
- # :call-seq:
1230
- # JSON.parse(source, opts) -> object
1231
- #
1232
- # Returns the Ruby objects created by parsing the given +source+.
1233
- #
1234
- # Argument +source+ contains the \String to be parsed.
1235
- #
1236
- # Argument +opts+, if given, contains a \Hash of options for the parsing.
1237
- # See {Parsing Options}[#module-JSON-label-Parsing+Options].
1238
- #
1239
- # ---
1240
- #
1241
- # When +source+ is a \JSON array, returns a Ruby \Array:
1242
- # source = '["foo", 1.0, true, false, null]'
1243
- # ruby = JSON.parse(source)
1244
- # ruby # => ["foo", 1.0, true, false, nil]
1245
- # ruby.class # => Array
1246
- #
1247
- # When +source+ is a \JSON object, returns a Ruby \Hash:
1248
- # source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}'
1249
- # ruby = JSON.parse(source)
1250
- # ruby # => {"a"=>"foo", "b"=>1.0, "c"=>true, "d"=>false, "e"=>nil}
1251
- # ruby.class # => Hash
1252
- #
1253
- # For examples of parsing for all \JSON data types, see
1254
- # {Parsing \JSON}[#module-JSON-label-Parsing+JSON].
1255
- #
1256
- # Parses nested JSON objects:
1257
- # source = <<-EOT
1258
- # {
1259
- # "name": "Dave",
1260
- # "age" :40,
1261
- # "hats": [
1262
- # "Cattleman's",
1263
- # "Panama",
1264
- # "Tophat"
1265
- # ]
1266
- # }
1267
- # EOT
1268
- # ruby = JSON.parse(source)
1269
- # ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
1270
- #
1271
- # ---
1272
- #
1273
- # Raises an exception if +source+ is not valid JSON:
1274
- # # Raises JSON::ParserError (783: unexpected token at ''):
1275
- # JSON.parse('')
1276
- def parse(source, opts = T.unsafe(nil)); end
1277
-
1278
- # :call-seq:
1279
- # JSON.parse!(source, opts) -> object
1280
- #
1281
- # Calls
1282
- # parse(source, opts)
1283
- # with +source+ and possibly modified +opts+.
1284
- #
1285
- # Differences from JSON.parse:
1286
- # - Option +max_nesting+, if not provided, defaults to +false+,
1287
- # which disables checking for nesting depth.
1288
- # - Option +allow_nan+, if not provided, defaults to +true+.
1289
- def parse!(source, opts = T.unsafe(nil)); end
1290
-
1291
- # Returns the JSON parser class that is used by JSON. This is either
1292
- # JSON::Ext::Parser or JSON::Pure::Parser:
1293
- # JSON.parser # => JSON::Ext::Parser
1294
- def parser; end
1295
-
1296
- # Set the JSON parser class _parser_ to be used by JSON.
1297
- def parser=(parser); end
1298
-
1299
- # :call-seq:
1300
- # JSON.pretty_generate(obj, opts = nil) -> new_string
1301
- #
1302
- # Arguments +obj+ and +opts+ here are the same as
1303
- # arguments +obj+ and +opts+ in JSON.generate.
1304
- #
1305
- # Default options are:
1306
- # {
1307
- # indent: ' ', # Two spaces
1308
- # space: ' ', # One space
1309
- # array_nl: "\n", # Newline
1310
- # object_nl: "\n" # Newline
1311
- # }
1312
- #
1313
- # Example:
1314
- # obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}}
1315
- # json = JSON.pretty_generate(obj)
1316
- # puts json
1317
- # Output:
1318
- # {
1319
- # "foo": [
1320
- # "bar",
1321
- # "baz"
1322
- # ],
1323
- # "bat": {
1324
- # "bam": 0,
1325
- # "bad": 1
1326
- # }
1327
- # }
1328
- def pretty_generate(obj, opts = T.unsafe(nil)); end
1329
-
1330
- # :stopdoc:
1331
- # I want to deprecate these later, so I'll first be silent about them, and later delete them.
1332
- def pretty_unparse(obj, opts = T.unsafe(nil)); end
1333
-
1334
- # Recursively calls passed _Proc_ if the parsed data structure is an _Array_ or _Hash_
1335
- def recurse_proc(result, &proc); end
1336
-
1337
- def restore(source, proc = T.unsafe(nil), options = T.unsafe(nil)); end
1338
-
1339
- # Sets or Returns the JSON generator state class that is used by JSON. This is
1340
- # either JSON::Ext::Generator::State or JSON::Pure::Generator::State:
1341
- # JSON.state # => JSON::Ext::Generator::State
1342
- def state; end
1343
-
1344
- # Sets or Returns the JSON generator state class that is used by JSON. This is
1345
- # either JSON::Ext::Generator::State or JSON::Pure::Generator::State:
1346
- # JSON.state # => JSON::Ext::Generator::State
1347
- def state=(_arg0); end
1348
-
1349
- # :stopdoc:
1350
- # I want to deprecate these later, so I'll first be silent about them, and
1351
- # later delete them.
1352
- def unparse(obj, opts = T.unsafe(nil)); end
1353
- end
1354
- end
1355
-
1356
- JSON::CREATE_ID_TLS_KEY = T.let(T.unsafe(nil), String)
1357
- JSON::DEFAULT_CREATE_ID = T.let(T.unsafe(nil), String)
1358
-
1359
- class JSON::GenericObject < ::OpenStruct
1360
- def as_json(*_arg0); end
1361
- def to_hash; end
1362
- def to_json(*a); end
1363
- def |(other); end
1364
-
1365
- class << self
1366
- def dump(obj, *args); end
1367
- def from_hash(object); end
1368
-
1369
- # Sets the attribute json_creatable
1370
- #
1371
- # @param value the value to set the attribute json_creatable to.
1372
- def json_creatable=(_arg0); end
1373
-
1374
- # @return [Boolean]
1375
- def json_creatable?; end
1376
-
1377
- def json_create(data); end
1378
- def load(source, proc = T.unsafe(nil), opts = T.unsafe(nil)); end
1379
- end
1380
- end
1381
-
1382
- # The base exception for JSON errors.
1383
- class JSON::JSONError < ::StandardError
1384
- class << self
1385
- def wrap(exception); end
1386
- end
1387
- end
1388
-
1389
- JSON::Parser = JSON::Ext::Parser
1390
- JSON::State = JSON::Ext::Generator::State
1391
-
1392
- # For backwards compatibility
1393
- JSON::UnparserError = JSON::GeneratorError
1394
-
1395
- # Since Ruby is very dynamic, methods added to the ancestors of
1396
- # BlankSlate <em>after BlankSlate is defined</em> will show up in the
1397
- # list of available BlankSlate methods. We handle this by defining a
1398
- # hook in the Object and Kernel classes that will hide any method
1399
- # defined after BlankSlate has been loaded.
1400
- module Kernel
1401
- private
1402
-
1403
- # If _object_ is string-like, parse the string and return the parsed result as
1404
- # a Ruby data structure. Otherwise, generate a JSON text from the Ruby data
1405
- # structure object and return it.
1406
- #
1407
- # The _opts_ argument is passed through to generate/parse respectively. See
1408
- # generate and parse for their documentation.
1409
- def JSON(object, *args); end
1410
-
1411
- # Outputs _objs_ to STDOUT as JSON strings in the shortest form, that is in
1412
- # one line.
1413
- def j(*objs); end
1414
-
1415
- # Outputs _objs_ to STDOUT as JSON strings in a pretty format, with
1416
- # indentation and over many lines.
1417
- def jj(*objs); end
1418
- end