psych 3.2.0 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/ext/psych/psych.c +3 -0
- data/ext/psych/yaml/yaml.h +3 -3
- data/lib/psych.rb +61 -24
- data/lib/psych/class_loader.rb +6 -4
- data/lib/psych/versions.rb +1 -1
- data/lib/psych/visitors/visitor.rb +17 -3
- data/lib/psych/visitors/yaml_tree.rb +1 -1
- data/psych.gemspec +0 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb86b57322de81bdd56451df223fe27f61a67b4f85caeb0d28fe9b4cda6cd5ae
|
4
|
+
data.tar.gz: 762106ad2df9213bf93e777513d23df05c9bd25fb0dd511c8275172e5eeef118
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa022cc3afcc02867d9528ac55f9b165011e5555ed37a24eed3116b211bb72247bb5afa73136f42232d649d7c6cab3c7af44e44558719d841edb4ad5f3d6d611
|
7
|
+
data.tar.gz: d2fbc5ff9683197cbc76abbee9fbdec01622fb70f262c72567342f111549ad3686ca1b8e4839705e43c63d64305aa62bb464819a118d83cf3b050ffb652c8ef7
|
data/README.md
CHANGED
@@ -12,8 +12,8 @@ serialize and de-serialize most Ruby objects to and from the YAML format.
|
|
12
12
|
## Examples
|
13
13
|
|
14
14
|
```ruby
|
15
|
-
#
|
16
|
-
Psych.
|
15
|
+
# Safely load YAML in to a Ruby object
|
16
|
+
Psych.safe_load('--- foo') # => 'foo'
|
17
17
|
|
18
18
|
# Emit YAML from a Ruby object
|
19
19
|
Psych.dump("foo") # => "--- foo\n...\n"
|
data/ext/psych/psych.c
CHANGED
data/ext/psych/yaml/yaml.h
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/**
|
2
2
|
* @file yaml.h
|
3
3
|
* @brief Public interface for libyaml.
|
4
|
-
*
|
4
|
+
*
|
5
5
|
* Include the header file with the code:
|
6
6
|
* @code
|
7
7
|
* #include <yaml.h>
|
@@ -390,7 +390,7 @@ typedef struct yaml_event_s {
|
|
390
390
|
|
391
391
|
/** The event data. */
|
392
392
|
union {
|
393
|
-
|
393
|
+
|
394
394
|
/** The stream parameters (for @c YAML_STREAM_START_EVENT). */
|
395
395
|
struct {
|
396
396
|
/** The document encoding. */
|
@@ -726,7 +726,7 @@ struct yaml_node_s {
|
|
726
726
|
|
727
727
|
/** The node data. */
|
728
728
|
union {
|
729
|
-
|
729
|
+
|
730
730
|
/** The scalar parameters (for @c YAML_SCALAR_NODE). */
|
731
731
|
struct {
|
732
732
|
/** The scalar value. */
|
data/lib/psych.rb
CHANGED
@@ -74,12 +74,15 @@ require 'psych/class_loader'
|
|
74
74
|
#
|
75
75
|
# ==== Reading from a string
|
76
76
|
#
|
77
|
-
# Psych.
|
78
|
-
# 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
|
79
81
|
#
|
80
82
|
# ==== Reading from a file
|
81
83
|
#
|
82
|
-
# Psych.
|
84
|
+
# Psych.safe_load_file("data.yml", permitted_classes: [Date])
|
85
|
+
# Psych.load_file("trusted_database.yml")
|
83
86
|
#
|
84
87
|
# ==== Exception handling
|
85
88
|
#
|
@@ -230,9 +233,9 @@ require 'psych/class_loader'
|
|
230
233
|
|
231
234
|
module Psych
|
232
235
|
# The version of libyaml Psych is using
|
233
|
-
LIBYAML_VERSION = Psych.libyaml_version.join
|
236
|
+
LIBYAML_VERSION = Psych.libyaml_version.join('.').freeze
|
234
237
|
# Deprecation guard
|
235
|
-
NOT_GIVEN = Object.new
|
238
|
+
NOT_GIVEN = Object.new.freeze
|
236
239
|
private_constant :NOT_GIVEN
|
237
240
|
|
238
241
|
###
|
@@ -276,8 +279,7 @@ module Psych
|
|
276
279
|
|
277
280
|
result = parse(yaml, filename: filename)
|
278
281
|
return fallback unless result
|
279
|
-
result
|
280
|
-
result
|
282
|
+
result.to_ruby(symbolize_names: symbolize_names, freeze: freeze)
|
281
283
|
end
|
282
284
|
|
283
285
|
###
|
@@ -549,7 +551,7 @@ module Psych
|
|
549
551
|
# end
|
550
552
|
# list # => ['foo', 'bar']
|
551
553
|
#
|
552
|
-
def self.load_stream yaml, legacy_filename = NOT_GIVEN, filename: nil, fallback: []
|
554
|
+
def self.load_stream yaml, legacy_filename = NOT_GIVEN, filename: nil, fallback: [], **kwargs
|
553
555
|
if legacy_filename != NOT_GIVEN
|
554
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
|
555
557
|
filename = legacy_filename
|
@@ -557,10 +559,10 @@ module Psych
|
|
557
559
|
|
558
560
|
result = if block_given?
|
559
561
|
parse_stream(yaml, filename: filename) do |node|
|
560
|
-
yield node.to_ruby
|
562
|
+
yield node.to_ruby(**kwargs)
|
561
563
|
end
|
562
564
|
else
|
563
|
-
parse_stream(yaml, filename: filename).children.map(
|
565
|
+
parse_stream(yaml, filename: filename).children.map { |node| node.to_ruby(**kwargs) }
|
564
566
|
end
|
565
567
|
|
566
568
|
return fallback if result.is_a?(Array) && result.empty?
|
@@ -571,35 +573,47 @@ module Psych
|
|
571
573
|
# Load the document contained in +filename+. Returns the yaml contained in
|
572
574
|
# +filename+ as a Ruby object, or if the file is empty, it returns
|
573
575
|
# the specified +fallback+ return value, which defaults to +false+.
|
574
|
-
|
576
|
+
#
|
577
|
+
# NOTE: This method *should not* be used to parse untrusted documents, such as
|
578
|
+
# YAML documents that are supplied via user input. Instead, please use the
|
579
|
+
# safe_load_file method.
|
580
|
+
def self.load_file filename, **kwargs
|
575
581
|
File.open(filename, 'r:bom|utf-8') { |f|
|
576
|
-
self.load f, filename: filename,
|
582
|
+
self.load f, filename: filename, **kwargs
|
583
|
+
}
|
584
|
+
end
|
585
|
+
|
586
|
+
###
|
587
|
+
# Safely loads the document contained in +filename+. Returns the yaml contained in
|
588
|
+
# +filename+ as a Ruby object, or if the file is empty, it returns
|
589
|
+
# the specified +fallback+ return value, which defaults to +false+.
|
590
|
+
# See safe_load for options.
|
591
|
+
def self.safe_load_file filename, **kwargs
|
592
|
+
File.open(filename, 'r:bom|utf-8') { |f|
|
593
|
+
self.safe_load f, filename: filename, **kwargs
|
577
594
|
}
|
578
595
|
end
|
579
596
|
|
580
597
|
# :stopdoc:
|
581
|
-
@domain_types = {}
|
582
598
|
def self.add_domain_type domain, type_tag, &block
|
583
599
|
key = ['tag', domain, type_tag].join ':'
|
584
|
-
|
585
|
-
|
600
|
+
domain_types[key] = [key, block]
|
601
|
+
domain_types["tag:#{type_tag}"] = [key, block]
|
586
602
|
end
|
587
603
|
|
588
604
|
def self.add_builtin_type type_tag, &block
|
589
605
|
domain = 'yaml.org,2002'
|
590
606
|
key = ['tag', domain, type_tag].join ':'
|
591
|
-
|
607
|
+
domain_types[key] = [key, block]
|
592
608
|
end
|
593
609
|
|
594
610
|
def self.remove_type type_tag
|
595
|
-
|
611
|
+
domain_types.delete type_tag
|
596
612
|
end
|
597
613
|
|
598
|
-
@load_tags = {}
|
599
|
-
@dump_tags = {}
|
600
614
|
def self.add_tag tag, klass
|
601
|
-
|
602
|
-
|
615
|
+
load_tags[tag] = klass.name
|
616
|
+
dump_tags[klass] = tag
|
603
617
|
end
|
604
618
|
|
605
619
|
# Workaround for emulating `warn '...', uplevel: 1` in Ruby 2.4 or lower.
|
@@ -618,9 +632,32 @@ module Psych
|
|
618
632
|
private_class_method :warn_with_uplevel, :parse_caller
|
619
633
|
|
620
634
|
class << self
|
621
|
-
|
622
|
-
|
623
|
-
|
635
|
+
if defined?(Ractor)
|
636
|
+
require 'forwardable'
|
637
|
+
extend Forwardable
|
638
|
+
|
639
|
+
class Config
|
640
|
+
attr_accessor :load_tags, :dump_tags, :domain_types
|
641
|
+
def initialize
|
642
|
+
@load_tags = {}
|
643
|
+
@dump_tags = {}
|
644
|
+
@domain_types = {}
|
645
|
+
end
|
646
|
+
end
|
647
|
+
|
648
|
+
def config
|
649
|
+
Ractor.current[:PsychConfig] ||= Config.new
|
650
|
+
end
|
651
|
+
|
652
|
+
def_delegators :config, :load_tags, :dump_tags, :domain_types, :load_tags=, :dump_tags=, :domain_types=
|
653
|
+
else
|
654
|
+
attr_accessor :load_tags
|
655
|
+
attr_accessor :dump_tags
|
656
|
+
attr_accessor :domain_types
|
657
|
+
end
|
624
658
|
end
|
659
|
+
self.load_tags = {}
|
660
|
+
self.dump_tags = {}
|
661
|
+
self.domain_types = {}
|
625
662
|
# :startdoc:
|
626
663
|
end
|
data/lib/psych/class_loader.rb
CHANGED
@@ -35,9 +35,11 @@ module Psych
|
|
35
35
|
|
36
36
|
constants.each do |const|
|
37
37
|
konst = const_get const
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
class_eval <<~RUBY
|
39
|
+
def #{const.to_s.downcase}
|
40
|
+
load #{konst.inspect}
|
41
|
+
end
|
42
|
+
RUBY
|
41
43
|
end
|
42
44
|
|
43
45
|
private
|
@@ -69,7 +71,7 @@ module Psych
|
|
69
71
|
rescue
|
70
72
|
nil
|
71
73
|
end
|
72
|
-
}.compact]
|
74
|
+
}.compact].freeze
|
73
75
|
|
74
76
|
class Restricted < ClassLoader
|
75
77
|
def initialize classes, symbols
|
data/lib/psych/versions.rb
CHANGED
@@ -8,12 +8,26 @@ module Psych
|
|
8
8
|
|
9
9
|
private
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
# @api private
|
12
|
+
def self.dispatch_cache
|
13
|
+
Hash.new do |hash, klass|
|
14
|
+
hash[klass] = :"visit_#{klass.name.gsub('::', '_')}"
|
15
|
+
end.compare_by_identity
|
16
|
+
end
|
17
|
+
|
18
|
+
if defined?(Ractor)
|
19
|
+
def dispatch
|
20
|
+
Ractor.current[:Psych_Visitors_Visitor] ||= Visitor.dispatch_cache
|
21
|
+
end
|
22
|
+
else
|
23
|
+
DISPATCH = dispatch_cache
|
24
|
+
def dispatch
|
25
|
+
DISPATCH
|
26
|
+
end
|
13
27
|
end
|
14
28
|
|
15
29
|
def visit target
|
16
|
-
send
|
30
|
+
send dispatch[target.class], target
|
17
31
|
end
|
18
32
|
end
|
19
33
|
end
|
data/psych.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: psych
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-
|
13
|
+
date: 2020-12-23 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: |
|
16
16
|
Psych is a YAML parser and emitter. Psych leverages libyaml[https://pyyaml.org/wiki/LibYAML]
|
@@ -117,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '0'
|
119
119
|
requirements: []
|
120
|
-
rubygems_version: 3.2.
|
120
|
+
rubygems_version: 3.2.2
|
121
121
|
signing_key:
|
122
122
|
specification_version: 4
|
123
123
|
summary: Psych is a YAML parser and emitter
|