psych 5.2.4-java → 5.2.5-java
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/ext/psych/psych_to_ruby.c +10 -0
- data/lib/psych/class_loader.rb +1 -0
- data/lib/psych/core_ext.rb +11 -4
- data/lib/psych/versions.rb +1 -1
- data/lib/psych/visitors/to_ruby.rb +43 -3
- data/lib/psych/visitors/yaml_tree.rb +39 -1
- data/lib/psych.jar +0 -0
- data/lib/psych.rb +31 -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: 213ea9d4dc8944f7b1a8ddd0b0258ec3a654d2f965a2f298c880414535ddb827
|
4
|
+
data.tar.gz: 198f07da741e81e8cfa23de6ca3b969045defed9bf4f0406916823c1d3013921
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4bfefb9155ba6c7281c607ed1879a11705d17e22cb436b5de4707046c71306460225b9c1ebca0ca6894417a33adc60939e975ab51e390528e2abe0aa4f25b023
|
7
|
+
data.tar.gz: 534d3aee8a30d4632d4911b11ee158bf624dd219ee2b1ed627dc28230049151f11ef7542f00bc495cfe6ccecf4f6eee7f35bd0b5cd7de17e8110a57dd3c76566
|
data/ext/psych/psych_to_ruby.c
CHANGED
@@ -24,6 +24,15 @@ static VALUE path2class(VALUE self, VALUE path)
|
|
24
24
|
return rb_path_to_class(path);
|
25
25
|
}
|
26
26
|
|
27
|
+
static VALUE init_struct(VALUE self, VALUE data, VALUE attrs)
|
28
|
+
{
|
29
|
+
VALUE args = rb_ary_new2(1);
|
30
|
+
rb_ary_push(args, attrs);
|
31
|
+
rb_struct_initialize(data, args);
|
32
|
+
|
33
|
+
return data;
|
34
|
+
}
|
35
|
+
|
27
36
|
void Init_psych_to_ruby(void)
|
28
37
|
{
|
29
38
|
VALUE psych = rb_define_module("Psych");
|
@@ -33,6 +42,7 @@ void Init_psych_to_ruby(void)
|
|
33
42
|
VALUE visitor = rb_define_class_under(visitors, "Visitor", rb_cObject);
|
34
43
|
cPsychVisitorsToRuby = rb_define_class_under(visitors, "ToRuby", visitor);
|
35
44
|
|
45
|
+
rb_define_private_method(cPsychVisitorsToRuby, "init_struct", init_struct, 2);
|
36
46
|
rb_define_private_method(cPsychVisitorsToRuby, "build_exception", build_exception, 2);
|
37
47
|
rb_define_private_method(class_loader, "path2class", path2class, 1);
|
38
48
|
}
|
data/lib/psych/class_loader.rb
CHANGED
data/lib/psych/core_ext.rb
CHANGED
@@ -18,12 +18,19 @@ if defined?(::IRB)
|
|
18
18
|
require_relative 'y'
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
#
|
23
|
-
|
21
|
+
# Up to Ruby 3.4, Set was a regular object and was dumped as such
|
22
|
+
# by Pysch.
|
23
|
+
# Starting from Ruby 3.5 it's a core class written in C, so we have to implement
|
24
|
+
# #encode_with / #init_with to preserve backward compatibility.
|
25
|
+
if defined?(::Set) && Set.new.instance_variables.empty?
|
24
26
|
class Set
|
25
27
|
def encode_with(coder)
|
26
|
-
|
28
|
+
hash = {}
|
29
|
+
each do |m|
|
30
|
+
hash[m] = true
|
31
|
+
end
|
32
|
+
coder["hash"] = hash
|
33
|
+
coder
|
27
34
|
end
|
28
35
|
|
29
36
|
def init_with(coder)
|
data/lib/psych/versions.rb
CHANGED
@@ -96,11 +96,11 @@ module Psych
|
|
96
96
|
Float(@ss.tokenize(o.value))
|
97
97
|
when "!ruby/regexp"
|
98
98
|
klass = class_loader.regexp
|
99
|
-
|
100
|
-
source =
|
99
|
+
matches = /^\/(?<string>.*)\/(?<options>[mixn]*)$/m.match(o.value)
|
100
|
+
source = matches[:string].gsub('\/', '/')
|
101
101
|
options = 0
|
102
102
|
lang = nil
|
103
|
-
|
103
|
+
matches[:options].each_char do |option|
|
104
104
|
case option
|
105
105
|
when 'x' then options |= Regexp::EXTENDED
|
106
106
|
when 'i' then options |= Regexp::IGNORECASE
|
@@ -197,6 +197,32 @@ module Psych
|
|
197
197
|
s
|
198
198
|
end
|
199
199
|
|
200
|
+
when /^!ruby\/data(-with-ivars)?(?::(.*))?$/
|
201
|
+
data = register(o, resolve_class($2).allocate) if $2
|
202
|
+
members = {}
|
203
|
+
|
204
|
+
if $1 # data-with-ivars
|
205
|
+
ivars = {}
|
206
|
+
o.children.each_slice(2) do |type, vars|
|
207
|
+
case accept(type)
|
208
|
+
when 'members'
|
209
|
+
revive_data_members(members, vars)
|
210
|
+
data ||= allocate_anon_data(o, members)
|
211
|
+
when 'ivars'
|
212
|
+
revive_hash(ivars, vars)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
ivars.each do |ivar, v|
|
216
|
+
data.instance_variable_set ivar, v
|
217
|
+
end
|
218
|
+
else
|
219
|
+
revive_data_members(members, o)
|
220
|
+
end
|
221
|
+
data ||= allocate_anon_data(o, members)
|
222
|
+
init_struct(data, **members)
|
223
|
+
data.freeze
|
224
|
+
data
|
225
|
+
|
200
226
|
when /^!ruby\/object:?(.*)?$/
|
201
227
|
name = $1 || 'Object'
|
202
228
|
|
@@ -340,6 +366,20 @@ module Psych
|
|
340
366
|
list
|
341
367
|
end
|
342
368
|
|
369
|
+
def allocate_anon_data node, members
|
370
|
+
klass = class_loader.data.define(*members.keys)
|
371
|
+
register(node, klass.allocate)
|
372
|
+
end
|
373
|
+
|
374
|
+
def revive_data_members hash, o
|
375
|
+
o.children.each_slice(2) do |k,v|
|
376
|
+
name = accept(k)
|
377
|
+
value = accept(v)
|
378
|
+
hash[class_loader.symbolize(name)] = value
|
379
|
+
end
|
380
|
+
hash
|
381
|
+
end
|
382
|
+
|
343
383
|
def revive_hash hash, o, tagged= false
|
344
384
|
o.children.each_slice(2) { |k,v|
|
345
385
|
key = accept(k)
|
@@ -73,7 +73,7 @@ module Psych
|
|
73
73
|
|
74
74
|
method = respond_to?(method) ? method : h[klass.superclass]
|
75
75
|
|
76
|
-
raise(TypeError, "
|
76
|
+
raise(TypeError, "can't dump #{klass.name}") unless method
|
77
77
|
|
78
78
|
h[klass] = method
|
79
79
|
end.compare_by_identity
|
@@ -162,6 +162,44 @@ module Psych
|
|
162
162
|
|
163
163
|
alias :visit_Delegator :visit_Object
|
164
164
|
|
165
|
+
def visit_Data o
|
166
|
+
ivars = o.instance_variables
|
167
|
+
if ivars.empty?
|
168
|
+
tag = ['!ruby/data', o.class.name].compact.join(':')
|
169
|
+
register o, @emitter.start_mapping(nil, tag, false, Nodes::Mapping::BLOCK)
|
170
|
+
o.members.each do |member|
|
171
|
+
@emitter.scalar member.to_s, nil, nil, true, false, Nodes::Scalar::ANY
|
172
|
+
accept o.send member
|
173
|
+
end
|
174
|
+
@emitter.end_mapping
|
175
|
+
|
176
|
+
else
|
177
|
+
tag = ['!ruby/data-with-ivars', o.class.name].compact.join(':')
|
178
|
+
node = @emitter.start_mapping(nil, tag, false, Psych::Nodes::Mapping::BLOCK)
|
179
|
+
register(o, node)
|
180
|
+
|
181
|
+
# Dump the members
|
182
|
+
accept 'members'
|
183
|
+
@emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
|
184
|
+
o.members.each do |member|
|
185
|
+
@emitter.scalar member.to_s, nil, nil, true, false, Nodes::Scalar::ANY
|
186
|
+
accept o.send member
|
187
|
+
end
|
188
|
+
@emitter.end_mapping
|
189
|
+
|
190
|
+
# Dump the ivars
|
191
|
+
accept 'ivars'
|
192
|
+
@emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
|
193
|
+
ivars.each do |ivar|
|
194
|
+
accept ivar.to_s
|
195
|
+
accept o.instance_variable_get ivar
|
196
|
+
end
|
197
|
+
@emitter.end_mapping
|
198
|
+
|
199
|
+
@emitter.end_mapping
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
165
203
|
def visit_Struct o
|
166
204
|
tag = ['!ruby/struct', o.class.name].compact.join(':')
|
167
205
|
|
data/lib/psych.jar
CHANGED
Binary file
|
data/lib/psych.rb
CHANGED
@@ -23,7 +23,6 @@ require_relative 'psych/parser'
|
|
23
23
|
require_relative 'psych/omap'
|
24
24
|
require_relative 'psych/set'
|
25
25
|
require_relative 'psych/coder'
|
26
|
-
require_relative 'psych/core_ext'
|
27
26
|
require_relative 'psych/stream'
|
28
27
|
require_relative 'psych/json/tree_builder'
|
29
28
|
require_relative 'psych/json/stream'
|
@@ -654,6 +653,35 @@ module Psych
|
|
654
653
|
result
|
655
654
|
end
|
656
655
|
|
656
|
+
###
|
657
|
+
# Load multiple documents given in +yaml+. Returns the parsed documents
|
658
|
+
# as a list.
|
659
|
+
#
|
660
|
+
# Example:
|
661
|
+
#
|
662
|
+
# Psych.safe_load_stream("--- foo\n...\n--- bar\n...") # => ['foo', 'bar']
|
663
|
+
#
|
664
|
+
# list = []
|
665
|
+
# Psych.safe_load_stream("--- foo\n...\n--- bar\n...") do |ruby|
|
666
|
+
# list << ruby
|
667
|
+
# end
|
668
|
+
# list # => ['foo', 'bar']
|
669
|
+
#
|
670
|
+
def self.safe_load_stream yaml, filename: nil, permitted_classes: [], aliases: false
|
671
|
+
documents = parse_stream(yaml, filename: filename).children.map do |child|
|
672
|
+
stream = Psych::Nodes::Stream.new
|
673
|
+
stream.children << child
|
674
|
+
safe_load(stream.to_yaml, permitted_classes: permitted_classes, aliases: aliases)
|
675
|
+
end
|
676
|
+
|
677
|
+
if block_given?
|
678
|
+
documents.each { |doc| yield doc }
|
679
|
+
nil
|
680
|
+
else
|
681
|
+
documents
|
682
|
+
end
|
683
|
+
end
|
684
|
+
|
657
685
|
###
|
658
686
|
# Load the document contained in +filename+. Returns the yaml contained in
|
659
687
|
# +filename+ as a Ruby object, or if the file is empty, it returns
|
@@ -761,3 +789,5 @@ module Psych
|
|
761
789
|
self.domain_types = {}
|
762
790
|
# :startdoc:
|
763
791
|
end
|
792
|
+
|
793
|
+
require_relative 'psych/core_ext'
|
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: 5.2.
|
4
|
+
version: 5.2.5
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
- Charles Oliver Nutter
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: jar-dependencies
|
@@ -133,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
133
|
version: '0'
|
134
134
|
requirements:
|
135
135
|
- jar org.snakeyaml:snakeyaml-engine, 2.9
|
136
|
-
rubygems_version: 3.6.
|
136
|
+
rubygems_version: 3.6.8
|
137
137
|
specification_version: 4
|
138
138
|
summary: Psych is a YAML parser and emitter
|
139
139
|
test_files: []
|