psych 4.0.0 → 4.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/psych.rb +86 -3
- data/lib/psych/class_loader.rb +2 -2
- data/lib/psych/exception.rb +2 -2
- data/lib/psych/versions.rb +1 -1
- data/lib/psych/visitors/yaml_tree.rb +46 -0
- 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: 2fa803573d39d69c706eec844ab105ce74589c01fd5284340d353e577829c4e1
|
4
|
+
data.tar.gz: f5ec2260e1d0d1f2703d6c4cb672235b71754045a95b6a74cc7d12f5b490d0be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2127235feecf70da3458afd0cf70a916d5f04e0d7bd659f731ec8f18b8d6438ec4f9c81385ba055029825cd4db28df940db4447cff20ca767b9ebe526753e595
|
7
|
+
data.tar.gz: 0d8247f8a1cd7a2f9cb260c2dde98abdf7e7d23c6616209e8d06f7245c0eeeb8c17a289d006ae9bf0c5c674f91292c5014b001dfa85d18c92ce85bfc1907bf12
|
data/lib/psych.rb
CHANGED
@@ -282,7 +282,8 @@ module Psych
|
|
282
282
|
# * TrueClass
|
283
283
|
# * FalseClass
|
284
284
|
# * NilClass
|
285
|
-
# *
|
285
|
+
# * Integer
|
286
|
+
# * Float
|
286
287
|
# * String
|
287
288
|
# * Array
|
288
289
|
# * Hash
|
@@ -512,6 +513,79 @@ module Psych
|
|
512
513
|
visitor.tree.yaml io, options
|
513
514
|
end
|
514
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
|
+
|
515
589
|
###
|
516
590
|
# Dump a list of objects as separate documents to a document stream.
|
517
591
|
#
|
@@ -575,7 +649,6 @@ module Psych
|
|
575
649
|
self.unsafe_load f, filename: filename, **kwargs
|
576
650
|
}
|
577
651
|
end
|
578
|
-
class << self; alias :load_file :unsafe_load_file; end
|
579
652
|
|
580
653
|
###
|
581
654
|
# Safely loads the document contained in +filename+. Returns the yaml contained in
|
@@ -587,7 +660,17 @@ module Psych
|
|
587
660
|
self.safe_load f, filename: filename, **kwargs
|
588
661
|
}
|
589
662
|
end
|
590
|
-
|
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
|
672
|
+
}
|
673
|
+
end
|
591
674
|
|
592
675
|
# :stopdoc:
|
593
676
|
def self.add_domain_type domain, type_tag, &block
|
data/lib/psych/class_loader.rb
CHANGED
@@ -86,7 +86,7 @@ module Psych
|
|
86
86
|
if @symbols.include? sym
|
87
87
|
super
|
88
88
|
else
|
89
|
-
raise DisallowedClass, 'Symbol'
|
89
|
+
raise DisallowedClass.new('load', 'Symbol')
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
@@ -96,7 +96,7 @@ module Psych
|
|
96
96
|
if @classes.include? klassname
|
97
97
|
super
|
98
98
|
else
|
99
|
-
raise DisallowedClass, klassname
|
99
|
+
raise DisallowedClass.new('load', klassname)
|
100
100
|
end
|
101
101
|
end
|
102
102
|
end
|
data/lib/psych/exception.rb
CHANGED
@@ -7,8 +7,8 @@ module Psych
|
|
7
7
|
end
|
8
8
|
|
9
9
|
class DisallowedClass < Exception
|
10
|
-
def initialize klass_name
|
11
|
-
super "Tried to
|
10
|
+
def initialize action, klass_name
|
11
|
+
super "Tried to #{action} unspecified class: #{klass_name}"
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
data/lib/psych/versions.rb
CHANGED
@@ -535,5 +535,51 @@ module Psych
|
|
535
535
|
end
|
536
536
|
end
|
537
537
|
end
|
538
|
+
|
539
|
+
class RestrictedYAMLTree < YAMLTree
|
540
|
+
DEFAULT_PERMITTED_CLASSES = {
|
541
|
+
TrueClass => true,
|
542
|
+
FalseClass => true,
|
543
|
+
NilClass => true,
|
544
|
+
Integer => true,
|
545
|
+
Float => true,
|
546
|
+
String => true,
|
547
|
+
Array => true,
|
548
|
+
Hash => true,
|
549
|
+
}.compare_by_identity.freeze
|
550
|
+
|
551
|
+
def initialize emitter, ss, options
|
552
|
+
super
|
553
|
+
@permitted_classes = DEFAULT_PERMITTED_CLASSES.dup
|
554
|
+
Array(options[:permitted_classes]).each do |klass|
|
555
|
+
@permitted_classes[klass] = true
|
556
|
+
end
|
557
|
+
@permitted_symbols = {}.compare_by_identity
|
558
|
+
Array(options[:permitted_symbols]).each do |symbol|
|
559
|
+
@permitted_symbols[symbol] = true
|
560
|
+
end
|
561
|
+
@aliases = options.fetch(:aliases, false)
|
562
|
+
end
|
563
|
+
|
564
|
+
def accept target
|
565
|
+
if !@aliases && @st.key?(target)
|
566
|
+
raise BadAlias, "Tried to dump an aliased object"
|
567
|
+
end
|
568
|
+
|
569
|
+
unless @permitted_classes[target.class]
|
570
|
+
raise DisallowedClass.new('dump', target.class.name || target.class.inspect)
|
571
|
+
end
|
572
|
+
|
573
|
+
super
|
574
|
+
end
|
575
|
+
|
576
|
+
def visit_Symbol sym
|
577
|
+
unless @permitted_symbols[sym]
|
578
|
+
raise DisallowedClass.new('dump', "Symbol(#{sym.inspect})")
|
579
|
+
end
|
580
|
+
|
581
|
+
super
|
582
|
+
end
|
583
|
+
end
|
538
584
|
end
|
539
585
|
end
|
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: 4.0.
|
4
|
+
version: 4.0.1
|
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: 2021-
|
13
|
+
date: 2021-06-07 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.
|
120
|
+
rubygems_version: 3.2.15
|
121
121
|
signing_key:
|
122
122
|
specification_version: 4
|
123
123
|
summary: Psych is a YAML parser and emitter
|