psych 3.1.0 → 4.0.4
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/Gemfile +6 -0
- data/LICENSE +21 -0
- data/README.md +2 -5
- data/Rakefile +8 -15
- data/ext/psych/depend +2 -0
- data/ext/psych/extconf.rb +6 -2
- data/ext/psych/psych.c +6 -3
- data/ext/psych/psych_parser.c +20 -33
- data/ext/psych/psych_yaml_tree.c +0 -12
- data/ext/psych/yaml/api.c +22 -22
- data/ext/psych/yaml/config.h +76 -6
- data/ext/psych/yaml/dumper.c +1 -1
- data/ext/psych/yaml/emitter.c +44 -10
- data/ext/psych/yaml/loader.c +206 -106
- data/ext/psych/yaml/parser.c +6 -1
- data/ext/psych/yaml/scanner.c +45 -25
- data/ext/psych/yaml/yaml.h +43 -29
- data/ext/psych/yaml/yaml_private.h +4 -4
- data/lib/psych/class_loader.rb +10 -8
- data/lib/psych/core_ext.rb +1 -1
- data/lib/psych/exception.rb +2 -2
- data/lib/psych/handler.rb +1 -1
- data/lib/psych/handlers/document_stream.rb +1 -1
- data/lib/psych/handlers/recorder.rb +1 -1
- data/lib/psych/json/stream.rb +2 -2
- data/lib/psych/json/tree_builder.rb +1 -1
- data/lib/psych/nodes/node.rb +4 -4
- data/lib/psych/nodes/scalar.rb +1 -1
- data/lib/psych/nodes.rb +7 -7
- data/lib/psych/scalar_scanner.rb +36 -43
- data/lib/psych/syntax_error.rb +1 -1
- data/lib/psych/tree_builder.rb +1 -1
- data/lib/psych/versions.rb +3 -3
- data/lib/psych/visitors/json_tree.rb +1 -1
- data/lib/psych/visitors/to_ruby.rb +54 -21
- data/lib/psych/visitors/visitor.rb +17 -3
- data/lib/psych/visitors/yaml_tree.rb +83 -47
- data/lib/psych/visitors.rb +6 -6
- data/lib/psych.rb +223 -123
- data/psych.gemspec +10 -16
- metadata +12 -43
- data/.travis.yml +0 -22
- data/CHANGELOG.rdoc +0 -583
data/lib/psych.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
require_relative 'psych/versions'
|
3
3
|
case RUBY_ENGINE
|
4
4
|
when 'jruby'
|
5
|
-
|
5
|
+
require_relative 'psych_jars'
|
6
6
|
if JRuby::Util.respond_to?(:load_ext)
|
7
7
|
JRuby::Util.load_ext('org.jruby.ext.psych.PsychLibrary')
|
8
8
|
else
|
@@ -10,34 +10,30 @@ when 'jruby'
|
|
10
10
|
org.jruby.ext.psych.PsychLibrary.new.load(JRuby.runtime, false)
|
11
11
|
end
|
12
12
|
else
|
13
|
-
|
14
|
-
require "#{RUBY_VERSION[/\d+\.\d+/]}/psych.so"
|
15
|
-
rescue LoadError
|
16
|
-
require 'psych.so'
|
17
|
-
end
|
13
|
+
require 'psych.so'
|
18
14
|
end
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
15
|
+
require_relative 'psych/nodes'
|
16
|
+
require_relative 'psych/streaming'
|
17
|
+
require_relative 'psych/visitors'
|
18
|
+
require_relative 'psych/handler'
|
19
|
+
require_relative 'psych/tree_builder'
|
20
|
+
require_relative 'psych/parser'
|
21
|
+
require_relative 'psych/omap'
|
22
|
+
require_relative 'psych/set'
|
23
|
+
require_relative 'psych/coder'
|
24
|
+
require_relative 'psych/core_ext'
|
25
|
+
require_relative 'psych/stream'
|
26
|
+
require_relative 'psych/json/tree_builder'
|
27
|
+
require_relative 'psych/json/stream'
|
28
|
+
require_relative 'psych/handlers/document_stream'
|
29
|
+
require_relative 'psych/class_loader'
|
34
30
|
|
35
31
|
###
|
36
32
|
# = Overview
|
37
33
|
#
|
38
34
|
# Psych is a YAML parser and emitter.
|
39
35
|
# Psych leverages libyaml [Home page: https://pyyaml.org/wiki/LibYAML]
|
40
|
-
# or [
|
36
|
+
# or [git repo: https://github.com/yaml/libyaml] for its YAML parsing
|
41
37
|
# and emitting capabilities. In addition to wrapping libyaml, Psych also
|
42
38
|
# knows how to serialize and de-serialize most Ruby objects to and from
|
43
39
|
# the YAML format.
|
@@ -78,12 +74,15 @@ require 'psych/class_loader'
|
|
78
74
|
#
|
79
75
|
# ==== Reading from a string
|
80
76
|
#
|
81
|
-
# Psych.
|
82
|
-
# Psych.
|
77
|
+
# Psych.safe_load("--- a") # => 'a'
|
78
|
+
# Psych.safe_load("---\n - a\n - b") # => ['a', 'b']
|
79
|
+
# # From a trusted string:
|
80
|
+
# Psych.load("--- !ruby/range\nbegin: 0\nend: 42\nexcl: false\n") # => 0..42
|
83
81
|
#
|
84
82
|
# ==== Reading from a file
|
85
83
|
#
|
86
|
-
# Psych.
|
84
|
+
# Psych.safe_load_file("data.yml", permitted_classes: [Date])
|
85
|
+
# Psych.load_file("trusted_database.yml")
|
87
86
|
#
|
88
87
|
# ==== Exception handling
|
89
88
|
#
|
@@ -234,10 +233,7 @@ require 'psych/class_loader'
|
|
234
233
|
|
235
234
|
module Psych
|
236
235
|
# The version of libyaml Psych is using
|
237
|
-
LIBYAML_VERSION = Psych.libyaml_version.join
|
238
|
-
# Deprecation guard
|
239
|
-
NOT_GIVEN = Object.new
|
240
|
-
private_constant :NOT_GIVEN
|
236
|
+
LIBYAML_VERSION = Psych.libyaml_version.join('.').freeze
|
241
237
|
|
242
238
|
###
|
243
239
|
# Load +yaml+ in to a Ruby data structure. If multiple documents are
|
@@ -250,11 +246,11 @@ module Psych
|
|
250
246
|
#
|
251
247
|
# Example:
|
252
248
|
#
|
253
|
-
# Psych.
|
254
|
-
# Psych.
|
249
|
+
# Psych.unsafe_load("--- a") # => 'a'
|
250
|
+
# Psych.unsafe_load("---\n - a\n - b") # => ['a', 'b']
|
255
251
|
#
|
256
252
|
# begin
|
257
|
-
# Psych.
|
253
|
+
# Psych.unsafe_load("--- `", filename: "file.txt")
|
258
254
|
# rescue Psych::SyntaxError => ex
|
259
255
|
# ex.file # => 'file.txt'
|
260
256
|
# ex.message # => "(file.txt): found character that cannot start any token"
|
@@ -263,22 +259,19 @@ module Psych
|
|
263
259
|
# When the optional +symbolize_names+ keyword argument is set to a
|
264
260
|
# true value, returns symbols for keys in Hash objects (default: strings).
|
265
261
|
#
|
266
|
-
# Psych.
|
267
|
-
# Psych.
|
262
|
+
# Psych.unsafe_load("---\n foo: bar") # => {"foo"=>"bar"}
|
263
|
+
# Psych.unsafe_load("---\n foo: bar", symbolize_names: true) # => {:foo=>"bar"}
|
268
264
|
#
|
269
265
|
# Raises a TypeError when `yaml` parameter is NilClass
|
270
266
|
#
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
267
|
+
# NOTE: This method *should not* be used to parse untrusted documents, such as
|
268
|
+
# YAML documents that are supplied via user input. Instead, please use the
|
269
|
+
# load method or the safe_load method.
|
270
|
+
#
|
271
|
+
def self.unsafe_load yaml, filename: nil, fallback: false, symbolize_names: false, freeze: false, strict_integer: false
|
277
272
|
result = parse(yaml, filename: filename)
|
278
273
|
return fallback unless result
|
279
|
-
result
|
280
|
-
symbolize_names!(result) if symbolize_names
|
281
|
-
result
|
274
|
+
result.to_ruby(symbolize_names: symbolize_names, freeze: freeze, strict_integer: strict_integer)
|
282
275
|
end
|
283
276
|
|
284
277
|
###
|
@@ -288,7 +281,8 @@ module Psych
|
|
288
281
|
# * TrueClass
|
289
282
|
# * FalseClass
|
290
283
|
# * NilClass
|
291
|
-
# *
|
284
|
+
# * Integer
|
285
|
+
# * Float
|
292
286
|
# * String
|
293
287
|
# * Array
|
294
288
|
# * Hash
|
@@ -325,43 +319,63 @@ module Psych
|
|
325
319
|
# Psych.safe_load("---\n foo: bar") # => {"foo"=>"bar"}
|
326
320
|
# Psych.safe_load("---\n foo: bar", symbolize_names: true) # => {:foo=>"bar"}
|
327
321
|
#
|
328
|
-
def self.safe_load yaml,
|
329
|
-
if legacy_permitted_classes != NOT_GIVEN
|
330
|
-
warn_with_uplevel 'Passing permitted_classes with the 2nd argument of Psych.safe_load is deprecated. Use keyword argument like Psych.safe_load(yaml, permitted_classes: ...) instead.', uplevel: 1 if $VERBOSE
|
331
|
-
permitted_classes = legacy_permitted_classes
|
332
|
-
end
|
333
|
-
|
334
|
-
if legacy_permitted_symbols != NOT_GIVEN
|
335
|
-
warn_with_uplevel 'Passing permitted_symbols with the 3rd argument of Psych.safe_load is deprecated. Use keyword argument like Psych.safe_load(yaml, permitted_symbols: ...) instead.', uplevel: 1 if $VERBOSE
|
336
|
-
permitted_symbols = legacy_permitted_symbols
|
337
|
-
end
|
338
|
-
|
339
|
-
if legacy_aliases != NOT_GIVEN
|
340
|
-
warn_with_uplevel 'Passing aliases with the 4th argument of Psych.safe_load is deprecated. Use keyword argument like Psych.safe_load(yaml, aliases: ...) instead.', uplevel: 1 if $VERBOSE
|
341
|
-
aliases = legacy_aliases
|
342
|
-
end
|
343
|
-
|
344
|
-
if legacy_filename != NOT_GIVEN
|
345
|
-
warn_with_uplevel 'Passing filename with the 5th argument of Psych.safe_load is deprecated. Use keyword argument like Psych.safe_load(yaml, filename: ...) instead.', uplevel: 1 if $VERBOSE
|
346
|
-
filename = legacy_filename
|
347
|
-
end
|
348
|
-
|
322
|
+
def self.safe_load yaml, permitted_classes: [], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false, strict_integer: false
|
349
323
|
result = parse(yaml, filename: filename)
|
350
324
|
return fallback unless result
|
351
325
|
|
352
326
|
class_loader = ClassLoader::Restricted.new(permitted_classes.map(&:to_s),
|
353
327
|
permitted_symbols.map(&:to_s))
|
354
|
-
scanner = ScalarScanner.new class_loader
|
328
|
+
scanner = ScalarScanner.new class_loader, strict_integer: strict_integer
|
355
329
|
visitor = if aliases
|
356
|
-
Visitors::ToRuby.new scanner, class_loader
|
330
|
+
Visitors::ToRuby.new scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze
|
357
331
|
else
|
358
|
-
Visitors::NoAliasRuby.new scanner, class_loader
|
332
|
+
Visitors::NoAliasRuby.new scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze
|
359
333
|
end
|
360
334
|
result = visitor.accept result
|
361
|
-
symbolize_names!(result) if symbolize_names
|
362
335
|
result
|
363
336
|
end
|
364
337
|
|
338
|
+
###
|
339
|
+
# Load +yaml+ in to a Ruby data structure. If multiple documents are
|
340
|
+
# provided, the object contained in the first document will be returned.
|
341
|
+
# +filename+ will be used in the exception message if any exception
|
342
|
+
# is raised while parsing. If +yaml+ is empty, it returns
|
343
|
+
# the specified +fallback+ return value, which defaults to +false+.
|
344
|
+
#
|
345
|
+
# Raises a Psych::SyntaxError when a YAML syntax error is detected.
|
346
|
+
#
|
347
|
+
# Example:
|
348
|
+
#
|
349
|
+
# Psych.load("--- a") # => 'a'
|
350
|
+
# Psych.load("---\n - a\n - b") # => ['a', 'b']
|
351
|
+
#
|
352
|
+
# begin
|
353
|
+
# Psych.load("--- `", filename: "file.txt")
|
354
|
+
# rescue Psych::SyntaxError => ex
|
355
|
+
# ex.file # => 'file.txt'
|
356
|
+
# ex.message # => "(file.txt): found character that cannot start any token"
|
357
|
+
# end
|
358
|
+
#
|
359
|
+
# When the optional +symbolize_names+ keyword argument is set to a
|
360
|
+
# true value, returns symbols for keys in Hash objects (default: strings).
|
361
|
+
#
|
362
|
+
# Psych.load("---\n foo: bar") # => {"foo"=>"bar"}
|
363
|
+
# Psych.load("---\n foo: bar", symbolize_names: true) # => {:foo=>"bar"}
|
364
|
+
#
|
365
|
+
# Raises a TypeError when `yaml` parameter is NilClass. This method is
|
366
|
+
# similar to `safe_load` except that `Symbol` objects are allowed by default.
|
367
|
+
#
|
368
|
+
def self.load yaml, permitted_classes: [Symbol], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false, strict_integer: false
|
369
|
+
safe_load yaml, permitted_classes: permitted_classes,
|
370
|
+
permitted_symbols: permitted_symbols,
|
371
|
+
aliases: aliases,
|
372
|
+
filename: filename,
|
373
|
+
fallback: fallback,
|
374
|
+
symbolize_names: symbolize_names,
|
375
|
+
freeze: freeze,
|
376
|
+
strict_integer: strict_integer
|
377
|
+
end
|
378
|
+
|
365
379
|
###
|
366
380
|
# Parse a YAML string in +yaml+. Returns the Psych::Nodes::Document.
|
367
381
|
# +filename+ is used in the exception message if a Psych::SyntaxError is
|
@@ -381,22 +395,12 @@ module Psych
|
|
381
395
|
# end
|
382
396
|
#
|
383
397
|
# See Psych::Nodes for more information about YAML AST.
|
384
|
-
def self.parse yaml,
|
385
|
-
if legacy_filename != NOT_GIVEN
|
386
|
-
warn_with_uplevel 'Passing filename with the 2nd argument of Psych.parse is deprecated. Use keyword argument like Psych.parse(yaml, filename: ...) instead.', uplevel: 1 if $VERBOSE
|
387
|
-
filename = legacy_filename
|
388
|
-
end
|
389
|
-
|
398
|
+
def self.parse yaml, filename: nil
|
390
399
|
parse_stream(yaml, filename: filename) do |node|
|
391
400
|
return node
|
392
401
|
end
|
393
402
|
|
394
|
-
|
395
|
-
warn_with_uplevel 'Passing the `fallback` keyword argument of Psych.parse is deprecated.', uplevel: 1 if $VERBOSE
|
396
|
-
fallback
|
397
|
-
else
|
398
|
-
false
|
399
|
-
end
|
403
|
+
false
|
400
404
|
end
|
401
405
|
|
402
406
|
###
|
@@ -445,12 +449,7 @@ module Psych
|
|
445
449
|
# Raises a TypeError when NilClass is passed.
|
446
450
|
#
|
447
451
|
# See Psych::Nodes for more information about YAML AST.
|
448
|
-
def self.parse_stream yaml,
|
449
|
-
if legacy_filename != NOT_GIVEN
|
450
|
-
warn_with_uplevel 'Passing filename with the 2nd argument of Psych.parse_stream is deprecated. Use keyword argument like Psych.parse_stream(yaml, filename: ...) instead.', uplevel: 1 if $VERBOSE
|
451
|
-
filename = legacy_filename
|
452
|
-
end
|
453
|
-
|
452
|
+
def self.parse_stream yaml, filename: nil, &block
|
454
453
|
if block_given?
|
455
454
|
parser = Psych::Parser.new(Handlers::DocumentStream.new(&block))
|
456
455
|
parser.parse yaml, filename
|
@@ -514,6 +513,79 @@ module Psych
|
|
514
513
|
visitor.tree.yaml io, options
|
515
514
|
end
|
516
515
|
|
516
|
+
###
|
517
|
+
# call-seq:
|
518
|
+
# Psych.safe_dump(o) -> string of yaml
|
519
|
+
# Psych.safe_dump(o, options) -> string of yaml
|
520
|
+
# Psych.safe_dump(o, io) -> io object passed in
|
521
|
+
# Psych.safe_dump(o, io, options) -> io object passed in
|
522
|
+
#
|
523
|
+
# Safely dump Ruby object +o+ to a YAML string. Optional +options+ may be passed in
|
524
|
+
# to control the output format. If an IO object is passed in, the YAML will
|
525
|
+
# be dumped to that IO object. By default, only the following
|
526
|
+
# classes are allowed to be serialized:
|
527
|
+
#
|
528
|
+
# * TrueClass
|
529
|
+
# * FalseClass
|
530
|
+
# * NilClass
|
531
|
+
# * Integer
|
532
|
+
# * Float
|
533
|
+
# * String
|
534
|
+
# * Array
|
535
|
+
# * Hash
|
536
|
+
#
|
537
|
+
# Arbitrary classes can be allowed by adding those classes to the +permitted_classes+
|
538
|
+
# keyword argument. They are additive. For example, to allow Date serialization:
|
539
|
+
#
|
540
|
+
# Psych.safe_dump(yaml, permitted_classes: [Date])
|
541
|
+
#
|
542
|
+
# Now the Date class can be dumped in addition to the classes listed above.
|
543
|
+
#
|
544
|
+
# A Psych::DisallowedClass exception will be raised if the object contains a
|
545
|
+
# class that isn't in the +permitted_classes+ list.
|
546
|
+
#
|
547
|
+
# Currently supported options are:
|
548
|
+
#
|
549
|
+
# [<tt>:indentation</tt>] Number of space characters used to indent.
|
550
|
+
# Acceptable value should be in <tt>0..9</tt> range,
|
551
|
+
# otherwise option is ignored.
|
552
|
+
#
|
553
|
+
# Default: <tt>2</tt>.
|
554
|
+
# [<tt>:line_width</tt>] Max character to wrap line at.
|
555
|
+
#
|
556
|
+
# Default: <tt>0</tt> (meaning "wrap at 81").
|
557
|
+
# [<tt>:canonical</tt>] Write "canonical" YAML form (very verbose, yet
|
558
|
+
# strictly formal).
|
559
|
+
#
|
560
|
+
# Default: <tt>false</tt>.
|
561
|
+
# [<tt>:header</tt>] Write <tt>%YAML [version]</tt> at the beginning of document.
|
562
|
+
#
|
563
|
+
# Default: <tt>false</tt>.
|
564
|
+
#
|
565
|
+
# Example:
|
566
|
+
#
|
567
|
+
# # Dump an array, get back a YAML string
|
568
|
+
# Psych.safe_dump(['a', 'b']) # => "---\n- a\n- b\n"
|
569
|
+
#
|
570
|
+
# # Dump an array to an IO object
|
571
|
+
# Psych.safe_dump(['a', 'b'], StringIO.new) # => #<StringIO:0x000001009d0890>
|
572
|
+
#
|
573
|
+
# # Dump an array with indentation set
|
574
|
+
# Psych.safe_dump(['a', ['b']], indentation: 3) # => "---\n- a\n- - b\n"
|
575
|
+
#
|
576
|
+
# # Dump an array to an IO with indentation set
|
577
|
+
# Psych.safe_dump(['a', ['b']], StringIO.new, indentation: 3)
|
578
|
+
def self.safe_dump o, io = nil, options = {}
|
579
|
+
if Hash === io
|
580
|
+
options = io
|
581
|
+
io = nil
|
582
|
+
end
|
583
|
+
|
584
|
+
visitor = Psych::Visitors::RestrictedYAMLTree.create options
|
585
|
+
visitor << o
|
586
|
+
visitor.tree.yaml io, options
|
587
|
+
end
|
588
|
+
|
517
589
|
###
|
518
590
|
# Dump a list of objects as separate documents to a document stream.
|
519
591
|
#
|
@@ -551,18 +623,13 @@ module Psych
|
|
551
623
|
# end
|
552
624
|
# list # => ['foo', 'bar']
|
553
625
|
#
|
554
|
-
def self.load_stream yaml,
|
555
|
-
if legacy_filename != NOT_GIVEN
|
556
|
-
warn_with_uplevel 'Passing filename with the 2nd argument of Psych.load_stream is deprecated. Use keyword argument like Psych.load_stream(yaml, filename: ...) instead.', uplevel: 1 if $VERBOSE
|
557
|
-
filename = legacy_filename
|
558
|
-
end
|
559
|
-
|
626
|
+
def self.load_stream yaml, filename: nil, fallback: [], **kwargs
|
560
627
|
result = if block_given?
|
561
628
|
parse_stream(yaml, filename: filename) do |node|
|
562
|
-
yield node.to_ruby
|
629
|
+
yield node.to_ruby(**kwargs)
|
563
630
|
end
|
564
631
|
else
|
565
|
-
parse_stream(yaml, filename: filename).children.map(
|
632
|
+
parse_stream(yaml, filename: filename).children.map { |node| node.to_ruby(**kwargs) }
|
566
633
|
end
|
567
634
|
|
568
635
|
return fallback if result.is_a?(Array) && result.empty?
|
@@ -573,49 +640,59 @@ module Psych
|
|
573
640
|
# Load the document contained in +filename+. Returns the yaml contained in
|
574
641
|
# +filename+ as a Ruby object, or if the file is empty, it returns
|
575
642
|
# the specified +fallback+ return value, which defaults to +false+.
|
576
|
-
|
643
|
+
#
|
644
|
+
# NOTE: This method *should not* be used to parse untrusted documents, such as
|
645
|
+
# YAML documents that are supplied via user input. Instead, please use the
|
646
|
+
# safe_load_file method.
|
647
|
+
def self.unsafe_load_file filename, **kwargs
|
577
648
|
File.open(filename, 'r:bom|utf-8') { |f|
|
578
|
-
self.
|
649
|
+
self.unsafe_load f, filename: filename, **kwargs
|
650
|
+
}
|
651
|
+
end
|
652
|
+
|
653
|
+
###
|
654
|
+
# Safely loads the document contained in +filename+. Returns the yaml contained in
|
655
|
+
# +filename+ as a Ruby object, or if the file is empty, it returns
|
656
|
+
# the specified +fallback+ return value, which defaults to +false+.
|
657
|
+
# See safe_load for options.
|
658
|
+
def self.safe_load_file filename, **kwargs
|
659
|
+
File.open(filename, 'r:bom|utf-8') { |f|
|
660
|
+
self.safe_load f, filename: filename, **kwargs
|
661
|
+
}
|
662
|
+
end
|
663
|
+
|
664
|
+
###
|
665
|
+
# Loads the document contained in +filename+. Returns the yaml contained in
|
666
|
+
# +filename+ as a Ruby object, or if the file is empty, it returns
|
667
|
+
# the specified +fallback+ return value, which defaults to +false+.
|
668
|
+
# See load for options.
|
669
|
+
def self.load_file filename, **kwargs
|
670
|
+
File.open(filename, 'r:bom|utf-8') { |f|
|
671
|
+
self.load f, filename: filename, **kwargs
|
579
672
|
}
|
580
673
|
end
|
581
674
|
|
582
675
|
# :stopdoc:
|
583
|
-
@domain_types = {}
|
584
676
|
def self.add_domain_type domain, type_tag, &block
|
585
677
|
key = ['tag', domain, type_tag].join ':'
|
586
|
-
|
587
|
-
|
678
|
+
domain_types[key] = [key, block]
|
679
|
+
domain_types["tag:#{type_tag}"] = [key, block]
|
588
680
|
end
|
589
681
|
|
590
682
|
def self.add_builtin_type type_tag, &block
|
591
683
|
domain = 'yaml.org,2002'
|
592
684
|
key = ['tag', domain, type_tag].join ':'
|
593
|
-
|
685
|
+
domain_types[key] = [key, block]
|
594
686
|
end
|
595
687
|
|
596
688
|
def self.remove_type type_tag
|
597
|
-
|
689
|
+
domain_types.delete type_tag
|
598
690
|
end
|
599
691
|
|
600
|
-
@load_tags = {}
|
601
|
-
@dump_tags = {}
|
602
692
|
def self.add_tag tag, klass
|
603
|
-
|
604
|
-
|
605
|
-
end
|
606
|
-
|
607
|
-
def self.symbolize_names!(result)
|
608
|
-
case result
|
609
|
-
when Hash
|
610
|
-
result.keys.each do |key|
|
611
|
-
result[key.to_sym] = symbolize_names!(result.delete(key))
|
612
|
-
end
|
613
|
-
when Array
|
614
|
-
result.map! { |r| symbolize_names!(r) }
|
615
|
-
end
|
616
|
-
result
|
693
|
+
load_tags[tag] = klass.name
|
694
|
+
dump_tags[klass] = tag
|
617
695
|
end
|
618
|
-
private_class_method :symbolize_names!
|
619
696
|
|
620
697
|
# Workaround for emulating `warn '...', uplevel: 1` in Ruby 2.4 or lower.
|
621
698
|
def self.warn_with_uplevel(message, uplevel: 1)
|
@@ -633,9 +710,32 @@ module Psych
|
|
633
710
|
private_class_method :warn_with_uplevel, :parse_caller
|
634
711
|
|
635
712
|
class << self
|
636
|
-
|
637
|
-
|
638
|
-
|
713
|
+
if defined?(Ractor)
|
714
|
+
require 'forwardable'
|
715
|
+
extend Forwardable
|
716
|
+
|
717
|
+
class Config
|
718
|
+
attr_accessor :load_tags, :dump_tags, :domain_types
|
719
|
+
def initialize
|
720
|
+
@load_tags = {}
|
721
|
+
@dump_tags = {}
|
722
|
+
@domain_types = {}
|
723
|
+
end
|
724
|
+
end
|
725
|
+
|
726
|
+
def config
|
727
|
+
Ractor.current[:PsychConfig] ||= Config.new
|
728
|
+
end
|
729
|
+
|
730
|
+
def_delegators :config, :load_tags, :dump_tags, :domain_types, :load_tags=, :dump_tags=, :domain_types=
|
731
|
+
else
|
732
|
+
attr_accessor :load_tags
|
733
|
+
attr_accessor :dump_tags
|
734
|
+
attr_accessor :domain_types
|
735
|
+
end
|
639
736
|
end
|
737
|
+
self.load_tags = {}
|
738
|
+
self.dump_tags = {}
|
739
|
+
self.domain_types = {}
|
640
740
|
# :startdoc:
|
641
741
|
end
|
data/psych.gemspec
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
# for Ruby core repository
|
8
|
-
require_relative 'versions'
|
4
|
+
version_module = Module.new do
|
5
|
+
version_rb = File.join(__dir__, "lib/psych/versions.rb")
|
6
|
+
module_eval(File.read(version_rb), version_rb)
|
9
7
|
end
|
10
8
|
|
11
9
|
Gem::Specification.new do |s|
|
12
10
|
s.name = "psych"
|
13
|
-
s.version = Psych::VERSION
|
11
|
+
s.version = version_module::Psych::VERSION
|
14
12
|
s.authors = ["Aaron Patterson", "SHIBATA Hiroshi", "Charles Oliver Nutter"]
|
15
13
|
s.email = ["aaron@tenderlovemaking.com", "hsbt@ruby-lang.org", "headius@headius.com"]
|
16
14
|
s.summary = "Psych is a YAML parser and emitter"
|
@@ -25,7 +23,7 @@ DESCRIPTION
|
|
25
23
|
|
26
24
|
# for ruby core repository. It was generated by `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
27
25
|
s.files = [
|
28
|
-
".gitignore", "
|
26
|
+
".gitignore", "Gemfile", "LICENSE", "Mavenfile", "README.md", "Rakefile", "bin/console",
|
29
27
|
"bin/setup", "ext/psych/depend", "ext/psych/extconf.rb", "ext/psych/psych.c", "ext/psych/psych.h",
|
30
28
|
"ext/psych/psych_emitter.c", "ext/psych/psych_emitter.h", "ext/psych/psych_parser.c", "ext/psych/psych_parser.h",
|
31
29
|
"ext/psych/psych_to_ruby.c", "ext/psych/psych_to_ruby.h", "ext/psych/psych_yaml_tree.c", "ext/psych/psych_yaml_tree.h",
|
@@ -45,15 +43,11 @@ DESCRIPTION
|
|
45
43
|
]
|
46
44
|
|
47
45
|
s.rdoc_options = ["--main", "README.md"]
|
48
|
-
s.extra_rdoc_files = ["
|
46
|
+
s.extra_rdoc_files = ["README.md"]
|
49
47
|
|
50
|
-
s.required_ruby_version = Gem::Requirement.new(">= 2.
|
51
|
-
s.rubygems_version = "2.5.1"
|
48
|
+
s.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
|
52
49
|
s.required_rubygems_version = Gem::Requirement.new(">= 0")
|
53
50
|
|
54
|
-
s.add_development_dependency 'rake-compiler', ">= 0.4.1"
|
55
|
-
s.add_development_dependency 'minitest', "~> 5.0"
|
56
|
-
|
57
51
|
if RUBY_ENGINE == 'jruby'
|
58
52
|
s.platform = 'java'
|
59
53
|
s.files.concat [
|
@@ -65,11 +59,11 @@ DESCRIPTION
|
|
65
59
|
"lib/psych_jars.rb",
|
66
60
|
"lib/psych.jar"
|
67
61
|
]
|
68
|
-
s.requirements = "jar org.yaml:snakeyaml, #{Psych::DEFAULT_SNAKEYAML_VERSION}"
|
62
|
+
s.requirements = "jar org.yaml:snakeyaml, #{version_module::Psych::DEFAULT_SNAKEYAML_VERSION}"
|
69
63
|
s.add_dependency 'jar-dependencies', '>= 0.1.7'
|
70
|
-
s.add_development_dependency 'ruby-maven'
|
71
64
|
else
|
72
65
|
s.extensions = ["ext/psych/extconf.rb"]
|
73
|
-
s.
|
66
|
+
s.add_dependency 'stringio'
|
74
67
|
end
|
68
|
+
|
75
69
|
end
|
metadata
CHANGED
@@ -1,59 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: psych
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
8
8
|
- SHIBATA Hiroshi
|
9
9
|
- Charles Oliver Nutter
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2022-05-16 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: stringio
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
19
|
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0
|
22
|
-
type: :
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: 0
|
29
|
-
- !ruby/object:Gem::Dependency
|
30
|
-
name: minitest
|
31
|
-
requirement: !ruby/object:Gem::Requirement
|
32
|
-
requirements:
|
33
|
-
- - "~>"
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: '5.0'
|
36
|
-
type: :development
|
37
|
-
prerelease: false
|
38
|
-
version_requirements: !ruby/object:Gem::Requirement
|
39
|
-
requirements:
|
40
|
-
- - "~>"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '5.0'
|
43
|
-
- !ruby/object:Gem::Dependency
|
44
|
-
name: rake-compiler-dock
|
45
|
-
requirement: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - ">="
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: 0.6.3
|
50
|
-
type: :development
|
51
|
-
prerelease: false
|
52
|
-
version_requirements: !ruby/object:Gem::Requirement
|
53
|
-
requirements:
|
54
|
-
- - ">="
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: 0.6.3
|
28
|
+
version: '0'
|
57
29
|
description: |
|
58
30
|
Psych is a YAML parser and emitter. Psych leverages libyaml[https://pyyaml.org/wiki/LibYAML]
|
59
31
|
for its YAML parsing and emitting capabilities. In addition to wrapping libyaml,
|
@@ -66,13 +38,11 @@ executables: []
|
|
66
38
|
extensions:
|
67
39
|
- ext/psych/extconf.rb
|
68
40
|
extra_rdoc_files:
|
69
|
-
- CHANGELOG.rdoc
|
70
41
|
- README.md
|
71
42
|
files:
|
72
43
|
- ".gitignore"
|
73
|
-
- ".travis.yml"
|
74
|
-
- CHANGELOG.rdoc
|
75
44
|
- Gemfile
|
45
|
+
- LICENSE
|
76
46
|
- Mavenfile
|
77
47
|
- README.md
|
78
48
|
- Rakefile
|
@@ -144,7 +114,7 @@ homepage: https://github.com/ruby/psych
|
|
144
114
|
licenses:
|
145
115
|
- MIT
|
146
116
|
metadata: {}
|
147
|
-
post_install_message:
|
117
|
+
post_install_message:
|
148
118
|
rdoc_options:
|
149
119
|
- "--main"
|
150
120
|
- README.md
|
@@ -154,16 +124,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
154
124
|
requirements:
|
155
125
|
- - ">="
|
156
126
|
- !ruby/object:Gem::Version
|
157
|
-
version: 2.
|
127
|
+
version: 2.4.0
|
158
128
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
129
|
requirements:
|
160
130
|
- - ">="
|
161
131
|
- !ruby/object:Gem::Version
|
162
132
|
version: '0'
|
163
133
|
requirements: []
|
164
|
-
|
165
|
-
|
166
|
-
signing_key:
|
134
|
+
rubygems_version: 3.4.0.dev
|
135
|
+
signing_key:
|
167
136
|
specification_version: 4
|
168
137
|
summary: Psych is a YAML parser and emitter
|
169
138
|
test_files: []
|