psych-shopifork 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +15 -0
  2. data/.autotest +18 -0
  3. data/.gemtest +0 -0
  4. data/.travis.yml +9 -0
  5. data/CHANGELOG.rdoc +414 -0
  6. data/Manifest.txt +113 -0
  7. data/README.rdoc +71 -0
  8. data/Rakefile +72 -0
  9. data/ext/psych/depend +3 -0
  10. data/ext/psych/extconf.rb +36 -0
  11. data/ext/psych/psych.c +34 -0
  12. data/ext/psych/psych.h +20 -0
  13. data/ext/psych/psych_emitter.c +538 -0
  14. data/ext/psych/psych_emitter.h +8 -0
  15. data/ext/psych/psych_parser.c +579 -0
  16. data/ext/psych/psych_parser.h +6 -0
  17. data/ext/psych/psych_to_ruby.c +43 -0
  18. data/ext/psych/psych_to_ruby.h +8 -0
  19. data/ext/psych/psych_yaml_tree.c +24 -0
  20. data/ext/psych/psych_yaml_tree.h +8 -0
  21. data/ext/psych/yaml/LICENSE +19 -0
  22. data/ext/psych/yaml/api.c +1392 -0
  23. data/ext/psych/yaml/config.h +11 -0
  24. data/ext/psych/yaml/dumper.c +394 -0
  25. data/ext/psych/yaml/emitter.c +2335 -0
  26. data/ext/psych/yaml/loader.c +432 -0
  27. data/ext/psych/yaml/parser.c +1374 -0
  28. data/ext/psych/yaml/reader.c +465 -0
  29. data/ext/psych/yaml/scanner.c +3570 -0
  30. data/ext/psych/yaml/writer.c +141 -0
  31. data/ext/psych/yaml/yaml.h +1971 -0
  32. data/ext/psych/yaml/yaml_private.h +643 -0
  33. data/lib/psych.rb +497 -0
  34. data/lib/psych/class_loader.rb +101 -0
  35. data/lib/psych/coder.rb +94 -0
  36. data/lib/psych/core_ext.rb +35 -0
  37. data/lib/psych/deprecated.rb +85 -0
  38. data/lib/psych/exception.rb +13 -0
  39. data/lib/psych/handler.rb +249 -0
  40. data/lib/psych/handlers/document_stream.rb +22 -0
  41. data/lib/psych/handlers/recorder.rb +39 -0
  42. data/lib/psych/json/ruby_events.rb +19 -0
  43. data/lib/psych/json/stream.rb +16 -0
  44. data/lib/psych/json/tree_builder.rb +12 -0
  45. data/lib/psych/json/yaml_events.rb +29 -0
  46. data/lib/psych/nodes.rb +77 -0
  47. data/lib/psych/nodes/alias.rb +18 -0
  48. data/lib/psych/nodes/document.rb +60 -0
  49. data/lib/psych/nodes/mapping.rb +56 -0
  50. data/lib/psych/nodes/node.rb +55 -0
  51. data/lib/psych/nodes/scalar.rb +67 -0
  52. data/lib/psych/nodes/sequence.rb +81 -0
  53. data/lib/psych/nodes/stream.rb +37 -0
  54. data/lib/psych/omap.rb +4 -0
  55. data/lib/psych/parser.rb +51 -0
  56. data/lib/psych/scalar_scanner.rb +149 -0
  57. data/lib/psych/set.rb +4 -0
  58. data/lib/psych/stream.rb +37 -0
  59. data/lib/psych/streaming.rb +27 -0
  60. data/lib/psych/syntax_error.rb +21 -0
  61. data/lib/psych/tree_builder.rb +96 -0
  62. data/lib/psych/visitors.rb +6 -0
  63. data/lib/psych/visitors/depth_first.rb +26 -0
  64. data/lib/psych/visitors/emitter.rb +51 -0
  65. data/lib/psych/visitors/json_tree.rb +24 -0
  66. data/lib/psych/visitors/to_ruby.rb +372 -0
  67. data/lib/psych/visitors/visitor.rb +19 -0
  68. data/lib/psych/visitors/yaml_tree.rb +507 -0
  69. data/lib/psych/y.rb +9 -0
  70. data/test/psych/handlers/test_recorder.rb +25 -0
  71. data/test/psych/helper.rb +114 -0
  72. data/test/psych/json/test_stream.rb +109 -0
  73. data/test/psych/nodes/test_enumerable.rb +43 -0
  74. data/test/psych/test_alias_and_anchor.rb +96 -0
  75. data/test/psych/test_array.rb +57 -0
  76. data/test/psych/test_boolean.rb +36 -0
  77. data/test/psych/test_class.rb +36 -0
  78. data/test/psych/test_coder.rb +184 -0
  79. data/test/psych/test_date_time.rb +25 -0
  80. data/test/psych/test_deprecated.rb +214 -0
  81. data/test/psych/test_document.rb +46 -0
  82. data/test/psych/test_emitter.rb +94 -0
  83. data/test/psych/test_encoding.rb +254 -0
  84. data/test/psych/test_engine_manager.rb +47 -0
  85. data/test/psych/test_exception.rb +151 -0
  86. data/test/psych/test_hash.rb +44 -0
  87. data/test/psych/test_json_tree.rb +65 -0
  88. data/test/psych/test_merge_keys.rb +132 -0
  89. data/test/psych/test_nil.rb +18 -0
  90. data/test/psych/test_null.rb +19 -0
  91. data/test/psych/test_numeric.rb +45 -0
  92. data/test/psych/test_object.rb +44 -0
  93. data/test/psych/test_object_references.rb +67 -0
  94. data/test/psych/test_omap.rb +75 -0
  95. data/test/psych/test_parser.rb +339 -0
  96. data/test/psych/test_psych.rb +168 -0
  97. data/test/psych/test_safe_load.rb +97 -0
  98. data/test/psych/test_scalar.rb +11 -0
  99. data/test/psych/test_scalar_scanner.rb +106 -0
  100. data/test/psych/test_serialize_subclasses.rb +38 -0
  101. data/test/psych/test_set.rb +49 -0
  102. data/test/psych/test_stream.rb +93 -0
  103. data/test/psych/test_string.rb +153 -0
  104. data/test/psych/test_struct.rb +49 -0
  105. data/test/psych/test_symbol.rb +17 -0
  106. data/test/psych/test_tainted.rb +130 -0
  107. data/test/psych/test_to_yaml_properties.rb +63 -0
  108. data/test/psych/test_tree_builder.rb +79 -0
  109. data/test/psych/test_yaml.rb +1289 -0
  110. data/test/psych/test_yamldbm.rb +197 -0
  111. data/test/psych/test_yamlstore.rb +87 -0
  112. data/test/psych/visitors/test_depth_first.rb +49 -0
  113. data/test/psych/visitors/test_emitter.rb +144 -0
  114. data/test/psych/visitors/test_to_ruby.rb +326 -0
  115. data/test/psych/visitors/test_yaml_tree.rb +173 -0
  116. metadata +257 -0
@@ -0,0 +1,197 @@
1
+ # -*- coding: UTF-8 -*-
2
+
3
+ require_relative 'helper'
4
+ require 'tmpdir'
5
+
6
+ begin
7
+ require 'yaml/dbm'
8
+ rescue LoadError
9
+ end
10
+
11
+ module Psych
12
+ ::Psych::DBM = ::YAML::DBM unless defined?(::Psych::DBM)
13
+
14
+ class YAMLDBMTest < TestCase
15
+ def setup
16
+ @engine, YAML::ENGINE.yamler = YAML::ENGINE.yamler, 'psych'
17
+ @dir = Dir.mktmpdir("rubytest-file")
18
+ File.chown(-1, Process.gid, @dir)
19
+ @yamldbm_file = make_tmp_filename("yamldbm")
20
+ @yamldbm = YAML::DBM.new(@yamldbm_file)
21
+ end
22
+
23
+ def teardown
24
+ YAML::ENGINE.yamler = @engine
25
+ @yamldbm.clear
26
+ @yamldbm.close
27
+ FileUtils.remove_entry_secure @dir
28
+ end
29
+
30
+ def make_tmp_filename(prefix)
31
+ @dir + "/" + prefix + File.basename(__FILE__) + ".#{$$}.test"
32
+ end
33
+
34
+ def test_store
35
+ @yamldbm.store('a','b')
36
+ @yamldbm.store('c','d')
37
+ assert_equal 'b', @yamldbm['a']
38
+ assert_equal 'd', @yamldbm['c']
39
+ assert_nil @yamldbm['e']
40
+ end
41
+
42
+ def test_store_using_carret
43
+ @yamldbm['a'] = 'b'
44
+ @yamldbm['c'] = 'd'
45
+ assert_equal 'b', @yamldbm['a']
46
+ assert_equal 'd', @yamldbm['c']
47
+ assert_nil @yamldbm['e']
48
+ end
49
+
50
+ def test_to_a
51
+ @yamldbm['a'] = 'b'
52
+ @yamldbm['c'] = 'd'
53
+ assert_equal([['a','b'],['c','d']], @yamldbm.to_a.sort)
54
+ end
55
+
56
+ def test_to_hash
57
+ @yamldbm['a'] = 'b'
58
+ @yamldbm['c'] = 'd'
59
+ assert_equal({'a'=>'b','c'=>'d'}, @yamldbm.to_hash)
60
+ end
61
+
62
+ def test_has_value?
63
+ @yamldbm['a'] = 'b'
64
+ @yamldbm['c'] = 'd'
65
+ assert_equal true, @yamldbm.has_value?('b')
66
+ assert_equal true, @yamldbm.has_value?('d')
67
+ assert_equal false, @yamldbm.has_value?('f')
68
+ end
69
+
70
+ # Note:
71
+ # YAML::DBM#index makes warning from internal of ::DBM#index.
72
+ # It says 'DBM#index is deprecated; use DBM#key', but DBM#key
73
+ # behaves not same as DBM#index.
74
+ #
75
+ # def test_index
76
+ # @yamldbm['a'] = 'b'
77
+ # @yamldbm['c'] = 'd'
78
+ # assert_equal 'a', @yamldbm.index('b')
79
+ # assert_equal 'c', @yamldbm.index('d')
80
+ # assert_nil @yamldbm.index('f')
81
+ # end
82
+
83
+ def test_key
84
+ skip 'only on ruby 2.0.0' if RUBY_VERSION < '2.0.0'
85
+ @yamldbm['a'] = 'b'
86
+ @yamldbm['c'] = 'd'
87
+ assert_equal 'a', @yamldbm.key('b')
88
+ assert_equal 'c', @yamldbm.key('d')
89
+ assert_nil @yamldbm.key('f')
90
+ end
91
+
92
+ def test_fetch
93
+ assert_equal('bar', @yamldbm['foo']='bar')
94
+ assert_equal('bar', @yamldbm.fetch('foo'))
95
+ assert_nil @yamldbm.fetch('bar')
96
+ assert_equal('baz', @yamldbm.fetch('bar', 'baz'))
97
+ assert_equal('foobar', @yamldbm.fetch('bar') {|key| 'foo' + key })
98
+ end
99
+
100
+ def test_shift
101
+ @yamldbm['a'] = 'b'
102
+ @yamldbm['c'] = 'd'
103
+ assert_equal([['a','b'], ['c','d']],
104
+ [@yamldbm.shift, @yamldbm.shift].sort)
105
+ assert_nil @yamldbm.shift
106
+ end
107
+
108
+ def test_invert
109
+ @yamldbm['a'] = 'b'
110
+ @yamldbm['c'] = 'd'
111
+ assert_equal({'b'=>'a','d'=>'c'}, @yamldbm.invert)
112
+ end
113
+
114
+ def test_update
115
+ @yamldbm['a'] = 'b'
116
+ @yamldbm['c'] = 'd'
117
+ @yamldbm.update({'c'=>'d','e'=>'f'})
118
+ assert_equal 'b', @yamldbm['a']
119
+ assert_equal 'd', @yamldbm['c']
120
+ assert_equal 'f', @yamldbm['e']
121
+ end
122
+
123
+ def test_replace
124
+ @yamldbm['a'] = 'b'
125
+ @yamldbm['c'] = 'd'
126
+ @yamldbm.replace({'c'=>'d','e'=>'f'})
127
+ assert_nil @yamldbm['a']
128
+ assert_equal 'd', @yamldbm['c']
129
+ assert_equal 'f', @yamldbm['e']
130
+ end
131
+
132
+ def test_delete
133
+ @yamldbm['a'] = 'b'
134
+ @yamldbm['c'] = 'd'
135
+ assert_equal 'b', @yamldbm.delete('a')
136
+ assert_nil @yamldbm['a']
137
+ assert_equal 'd', @yamldbm['c']
138
+ assert_nil @yamldbm.delete('e')
139
+ end
140
+
141
+ def test_delete_if
142
+ @yamldbm['a'] = 'b'
143
+ @yamldbm['c'] = 'd'
144
+ @yamldbm['e'] = 'f'
145
+
146
+ @yamldbm.delete_if {|k,v| k == 'a'}
147
+ assert_nil @yamldbm['a']
148
+ assert_equal 'd', @yamldbm['c']
149
+ assert_equal 'f', @yamldbm['e']
150
+
151
+ @yamldbm.delete_if {|k,v| v == 'd'}
152
+ assert_nil @yamldbm['c']
153
+ assert_equal 'f', @yamldbm['e']
154
+
155
+ @yamldbm.delete_if {|k,v| false }
156
+ assert_equal 'f', @yamldbm['e']
157
+ end
158
+
159
+ def test_reject
160
+ @yamldbm['a'] = 'b'
161
+ @yamldbm['c'] = 'd'
162
+ @yamldbm['e'] = 'f'
163
+ assert_equal({'c'=>'d','e'=>'f'}, @yamldbm.reject {|k,v| k == 'a'})
164
+ assert_equal({'a'=>'b','e'=>'f'}, @yamldbm.reject {|k,v| v == 'd'})
165
+ assert_equal({'a'=>'b','c'=>'d','e'=>'f'}, @yamldbm.reject {false})
166
+ end
167
+
168
+ def test_values
169
+ assert_equal [], @yamldbm.values
170
+ @yamldbm['a'] = 'b'
171
+ @yamldbm['c'] = 'd'
172
+ assert_equal ['b','d'], @yamldbm.values.sort
173
+ end
174
+
175
+ def test_values_at
176
+ @yamldbm['a'] = 'b'
177
+ @yamldbm['c'] = 'd'
178
+ assert_equal ['b','d'], @yamldbm.values_at('a','c')
179
+ end
180
+
181
+ def test_selsct
182
+ @yamldbm['a'] = 'b'
183
+ @yamldbm['c'] = 'd'
184
+ @yamldbm['e'] = 'f'
185
+ assert_equal(['b','d'], @yamldbm.select('a','c'))
186
+ end
187
+
188
+ def test_selsct_with_block
189
+ @yamldbm['a'] = 'b'
190
+ @yamldbm['c'] = 'd'
191
+ @yamldbm['e'] = 'f'
192
+ assert_equal([['a','b']], @yamldbm.select {|k,v| k == 'a'})
193
+ assert_equal([['c','d']], @yamldbm.select {|k,v| v == 'd'})
194
+ assert_equal([], @yamldbm.select {false})
195
+ end
196
+ end
197
+ end if defined?(YAML::DBM) && defined?(Psych)
@@ -0,0 +1,87 @@
1
+ require_relative 'helper'
2
+ require 'yaml/store'
3
+ require 'tmpdir'
4
+
5
+ module Psych
6
+ Psych::Store = YAML::Store unless defined?(Psych::Store)
7
+
8
+ class YAMLStoreTest < TestCase
9
+ def setup
10
+ @engine, YAML::ENGINE.yamler = YAML::ENGINE.yamler, 'psych'
11
+ @dir = Dir.mktmpdir("rubytest-file")
12
+ File.chown(-1, Process.gid, @dir)
13
+ @yamlstore_file = make_tmp_filename("yamlstore")
14
+ @yamlstore = YAML::Store.new(@yamlstore_file)
15
+ end
16
+
17
+ def teardown
18
+ YAML::ENGINE.yamler = @engine
19
+ FileUtils.remove_entry_secure @dir
20
+ end
21
+
22
+ def make_tmp_filename(prefix)
23
+ @dir + "/" + prefix + File.basename(__FILE__) + ".#{$$}.test"
24
+ end
25
+
26
+ def test_opening_new_file_in_readonly_mode_should_result_in_empty_values
27
+ @yamlstore.transaction(true) do
28
+ assert_nil @yamlstore[:foo]
29
+ assert_nil @yamlstore[:bar]
30
+ end
31
+ end
32
+
33
+ def test_opening_new_file_in_readwrite_mode_should_result_in_empty_values
34
+ @yamlstore.transaction do
35
+ assert_nil @yamlstore[:foo]
36
+ assert_nil @yamlstore[:bar]
37
+ end
38
+ end
39
+
40
+ def test_data_should_be_loaded_correctly_when_in_readonly_mode
41
+ @yamlstore.transaction do
42
+ @yamlstore[:foo] = "bar"
43
+ end
44
+ @yamlstore.transaction(true) do
45
+ assert_equal "bar", @yamlstore[:foo]
46
+ end
47
+ end
48
+
49
+ def test_data_should_be_loaded_correctly_when_in_readwrite_mode
50
+ @yamlstore.transaction do
51
+ @yamlstore[:foo] = "bar"
52
+ end
53
+ @yamlstore.transaction do
54
+ assert_equal "bar", @yamlstore[:foo]
55
+ end
56
+ end
57
+
58
+ def test_changes_after_commit_are_discarded
59
+ @yamlstore.transaction do
60
+ @yamlstore[:foo] = "bar"
61
+ @yamlstore.commit
62
+ @yamlstore[:foo] = "baz"
63
+ end
64
+ @yamlstore.transaction(true) do
65
+ assert_equal "bar", @yamlstore[:foo]
66
+ end
67
+ end
68
+
69
+ def test_changes_are_not_written_on_abort
70
+ @yamlstore.transaction do
71
+ @yamlstore[:foo] = "bar"
72
+ @yamlstore.abort
73
+ end
74
+ @yamlstore.transaction(true) do
75
+ assert_nil @yamlstore[:foo]
76
+ end
77
+ end
78
+
79
+ def test_writing_inside_readonly_transaction_raises_error
80
+ assert_raises(PStore::Error) do
81
+ @yamlstore.transaction(true) do
82
+ @yamlstore[:foo] = "bar"
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end if defined?(Psych)
@@ -0,0 +1,49 @@
1
+ require 'psych/helper'
2
+
3
+ module Psych
4
+ module Visitors
5
+ class TestDepthFirst < TestCase
6
+ class Collector < Struct.new(:calls)
7
+ def initialize(calls = [])
8
+ super
9
+ end
10
+
11
+ def call obj
12
+ calls << obj
13
+ end
14
+ end
15
+
16
+ def test_scalar
17
+ collector = Collector.new
18
+ visitor = Visitors::DepthFirst.new collector
19
+ visitor.accept Psych.parse_stream '--- hello'
20
+
21
+ assert_equal 3, collector.calls.length
22
+ end
23
+
24
+ def test_sequence
25
+ collector = Collector.new
26
+ visitor = Visitors::DepthFirst.new collector
27
+ visitor.accept Psych.parse_stream "---\n- hello"
28
+
29
+ assert_equal 4, collector.calls.length
30
+ end
31
+
32
+ def test_mapping
33
+ collector = Collector.new
34
+ visitor = Visitors::DepthFirst.new collector
35
+ visitor.accept Psych.parse_stream "---\nhello: world"
36
+
37
+ assert_equal 5, collector.calls.length
38
+ end
39
+
40
+ def test_alias
41
+ collector = Collector.new
42
+ visitor = Visitors::DepthFirst.new collector
43
+ visitor.accept Psych.parse_stream "--- &yay\n- foo\n- *yay\n"
44
+
45
+ assert_equal 5, collector.calls.length
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,144 @@
1
+ require 'psych/helper'
2
+
3
+ module Psych
4
+ module Visitors
5
+ class TestEmitter < TestCase
6
+ def setup
7
+ super
8
+ @io = StringIO.new
9
+ @visitor = Visitors::Emitter.new @io
10
+ end
11
+
12
+ def test_options
13
+ io = StringIO.new
14
+ visitor = Visitors::Emitter.new io, :indentation => 3
15
+
16
+ s = Nodes::Stream.new
17
+ doc = Nodes::Document.new
18
+ mapping = Nodes::Mapping.new
19
+ m2 = Nodes::Mapping.new
20
+ m2.children << Nodes::Scalar.new('a')
21
+ m2.children << Nodes::Scalar.new('b')
22
+
23
+ mapping.children << Nodes::Scalar.new('key')
24
+ mapping.children << m2
25
+ doc.children << mapping
26
+ s.children << doc
27
+
28
+ visitor.accept s
29
+ assert_match(/^[ ]{3}a/, io.string)
30
+ end
31
+
32
+ def test_stream
33
+ s = Nodes::Stream.new
34
+ @visitor.accept s
35
+ assert_equal '', @io.string
36
+ end
37
+
38
+ def test_document
39
+ s = Nodes::Stream.new
40
+ doc = Nodes::Document.new [1,1]
41
+ scalar = Nodes::Scalar.new 'hello world'
42
+
43
+ doc.children << scalar
44
+ s.children << doc
45
+
46
+ @visitor.accept s
47
+
48
+ assert_match(/1.1/, @io.string)
49
+ assert_equal @io.string, s.yaml
50
+ end
51
+
52
+ def test_document_implicit_end
53
+ s = Nodes::Stream.new
54
+ doc = Nodes::Document.new
55
+ mapping = Nodes::Mapping.new
56
+ mapping.children << Nodes::Scalar.new('key')
57
+ mapping.children << Nodes::Scalar.new('value')
58
+ doc.children << mapping
59
+ s.children << doc
60
+
61
+ @visitor.accept s
62
+
63
+ assert_match(/key: value/, @io.string)
64
+ assert_equal @io.string, s.yaml
65
+ assert(/\.\.\./ !~ s.yaml)
66
+ end
67
+
68
+ def test_scalar
69
+ s = Nodes::Stream.new
70
+ doc = Nodes::Document.new
71
+ scalar = Nodes::Scalar.new 'hello world'
72
+
73
+ doc.children << scalar
74
+ s.children << doc
75
+
76
+ @visitor.accept s
77
+
78
+ assert_match(/hello/, @io.string)
79
+ assert_equal @io.string, s.yaml
80
+ end
81
+
82
+ def test_scalar_with_tag
83
+ s = Nodes::Stream.new
84
+ doc = Nodes::Document.new
85
+ scalar = Nodes::Scalar.new 'hello world', nil, '!str', false, false, 5
86
+
87
+ doc.children << scalar
88
+ s.children << doc
89
+
90
+ @visitor.accept s
91
+
92
+ assert_match(/str/, @io.string)
93
+ assert_match(/hello/, @io.string)
94
+ assert_equal @io.string, s.yaml
95
+ end
96
+
97
+ def test_sequence
98
+ s = Nodes::Stream.new
99
+ doc = Nodes::Document.new
100
+ scalar = Nodes::Scalar.new 'hello world'
101
+ seq = Nodes::Sequence.new
102
+
103
+ seq.children << scalar
104
+ doc.children << seq
105
+ s.children << doc
106
+
107
+ @visitor.accept s
108
+
109
+ assert_match(/- hello/, @io.string)
110
+ assert_equal @io.string, s.yaml
111
+ end
112
+
113
+ def test_mapping
114
+ s = Nodes::Stream.new
115
+ doc = Nodes::Document.new
116
+ mapping = Nodes::Mapping.new
117
+ mapping.children << Nodes::Scalar.new('key')
118
+ mapping.children << Nodes::Scalar.new('value')
119
+ doc.children << mapping
120
+ s.children << doc
121
+
122
+ @visitor.accept s
123
+
124
+ assert_match(/key: value/, @io.string)
125
+ assert_equal @io.string, s.yaml
126
+ end
127
+
128
+ def test_alias
129
+ s = Nodes::Stream.new
130
+ doc = Nodes::Document.new
131
+ mapping = Nodes::Mapping.new
132
+ mapping.children << Nodes::Scalar.new('key', 'A')
133
+ mapping.children << Nodes::Alias.new('A')
134
+ doc.children << mapping
135
+ s.children << doc
136
+
137
+ @visitor.accept s
138
+
139
+ assert_match(/&A key: \*A/, @io.string)
140
+ assert_equal @io.string, s.yaml
141
+ end
142
+ end
143
+ end
144
+ end