psych 1.3.4 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.rdoc +138 -0
  3. data/Manifest.txt +27 -8
  4. data/README.rdoc +23 -2
  5. data/Rakefile +1 -1
  6. data/ext/psych/depend +3 -0
  7. data/ext/psych/extconf.rb +27 -11
  8. data/ext/psych/psych.h +4 -4
  9. data/ext/psych/{emitter.c → psych_emitter.c} +0 -0
  10. data/ext/psych/{emitter.h → psych_emitter.h} +0 -0
  11. data/ext/psych/{parser.c → psych_parser.c} +1 -1
  12. data/ext/psych/{parser.h → psych_parser.h} +0 -0
  13. data/ext/psych/{to_ruby.c → psych_to_ruby.c} +3 -1
  14. data/ext/psych/{to_ruby.h → psych_to_ruby.h} +0 -0
  15. data/ext/psych/{yaml_tree.c → psych_yaml_tree.c} +0 -0
  16. data/ext/psych/{yaml_tree.h → psych_yaml_tree.h} +0 -0
  17. data/ext/psych/yaml/LICENSE +19 -0
  18. data/ext/psych/yaml/api.c +1392 -0
  19. data/ext/psych/yaml/config.h +11 -0
  20. data/ext/psych/yaml/dumper.c +394 -0
  21. data/ext/psych/yaml/emitter.c +2329 -0
  22. data/ext/psych/yaml/loader.c +432 -0
  23. data/ext/psych/yaml/parser.c +1374 -0
  24. data/ext/psych/yaml/reader.c +465 -0
  25. data/ext/psych/yaml/scanner.c +3570 -0
  26. data/ext/psych/yaml/writer.c +141 -0
  27. data/ext/psych/yaml/yaml.h +1971 -0
  28. data/ext/psych/yaml/yaml_private.h +643 -0
  29. data/lib/psych.rb +217 -51
  30. data/lib/psych/class_loader.rb +101 -0
  31. data/lib/psych/core_ext.rb +1 -8
  32. data/lib/psych/deprecated.rb +3 -1
  33. data/lib/psych/exception.rb +13 -0
  34. data/lib/psych/handler.rb +13 -0
  35. data/lib/psych/handlers/recorder.rb +39 -0
  36. data/lib/psych/json/stream.rb +1 -0
  37. data/lib/psych/nodes/node.rb +3 -1
  38. data/lib/psych/scalar_scanner.rb +46 -25
  39. data/lib/psych/stream.rb +1 -0
  40. data/lib/psych/streaming.rb +10 -5
  41. data/lib/psych/syntax_error.rb +3 -1
  42. data/lib/psych/visitors/json_tree.rb +5 -2
  43. data/lib/psych/visitors/to_ruby.rb +123 -75
  44. data/lib/psych/visitors/yaml_tree.rb +59 -17
  45. data/lib/psych/y.rb +9 -0
  46. data/test/psych/handlers/test_recorder.rb +25 -0
  47. data/test/psych/helper.rb +30 -1
  48. data/test/psych/test_alias_and_anchor.rb +1 -1
  49. data/test/psych/test_array.rb +1 -1
  50. data/test/psych/test_boolean.rb +1 -1
  51. data/test/psych/test_class.rb +1 -1
  52. data/test/psych/test_coder.rb +3 -3
  53. data/test/psych/test_date_time.rb +1 -1
  54. data/test/psych/test_deprecated.rb +6 -2
  55. data/test/psych/test_document.rb +1 -1
  56. data/test/psych/test_emitter.rb +1 -1
  57. data/test/psych/test_encoding.rb +51 -65
  58. data/test/psych/test_engine_manager.rb +1 -11
  59. data/test/psych/test_exception.rb +40 -19
  60. data/test/psych/test_hash.rb +1 -1
  61. data/test/psych/test_json_tree.rb +1 -1
  62. data/test/psych/test_merge_keys.rb +52 -1
  63. data/test/psych/test_nil.rb +1 -1
  64. data/test/psych/test_null.rb +1 -1
  65. data/test/psych/test_numeric.rb +21 -1
  66. data/test/psych/test_object.rb +1 -1
  67. data/test/psych/test_object_references.rb +3 -3
  68. data/test/psych/test_omap.rb +1 -1
  69. data/test/psych/test_parser.rb +1 -1
  70. data/test/psych/test_psych.rb +15 -15
  71. data/test/psych/test_safe_load.rb +97 -0
  72. data/test/psych/test_scalar.rb +1 -1
  73. data/test/psych/test_scalar_scanner.rb +17 -2
  74. data/test/psych/test_serialize_subclasses.rb +1 -1
  75. data/test/psych/test_set.rb +1 -1
  76. data/test/psych/test_stream.rb +1 -1
  77. data/test/psych/test_string.rb +51 -3
  78. data/test/psych/test_struct.rb +1 -1
  79. data/test/psych/test_symbol.rb +1 -1
  80. data/test/psych/test_tainted.rb +8 -8
  81. data/test/psych/test_to_yaml_properties.rb +1 -1
  82. data/test/psych/test_tree_builder.rb +1 -1
  83. data/test/psych/test_yaml.rb +22 -2
  84. data/test/psych/test_yamldbm.rb +1 -1
  85. data/test/psych/test_yamlstore.rb +1 -1
  86. data/test/psych/visitors/test_to_ruby.rb +5 -4
  87. data/test/psych/visitors/test_yaml_tree.rb +19 -1
  88. metadata +45 -34
@@ -1,4 +1,4 @@
1
- require 'psych/helper'
1
+ require_relative 'helper'
2
2
 
3
3
  module Psych
4
4
  class TestSerializeSubclasses < TestCase
@@ -1,4 +1,4 @@
1
- require 'psych/helper'
1
+ require_relative 'helper'
2
2
 
3
3
  module Psych
4
4
  class TestSet < TestCase
@@ -1,4 +1,4 @@
1
- require 'psych/helper'
1
+ require_relative 'helper'
2
2
 
3
3
  module Psych
4
4
  class TestStream < TestCase
@@ -1,4 +1,4 @@
1
- require 'psych/helper'
1
+ require_relative 'helper'
2
2
 
3
3
  module Psych
4
4
  class TestString < TestCase
@@ -9,6 +9,37 @@ module Psych
9
9
  attr_accessor :val
10
10
  end
11
11
 
12
+ class Z < String
13
+ def initialize
14
+ force_encoding Encoding::US_ASCII
15
+ end
16
+ end
17
+
18
+ def test_string_subclass_with_anchor
19
+ y = Psych.load <<-eoyml
20
+ ---
21
+ body:
22
+ string: &70121654388580 !ruby/string
23
+ str: ! 'foo'
24
+ x:
25
+ body: *70121654388580
26
+ eoyml
27
+ assert_equal({"body"=>{"string"=>"foo", "x"=>{"body"=>"foo"}}}, y)
28
+ end
29
+
30
+ def test_self_referential_string
31
+ y = Psych.load <<-eoyml
32
+ ---
33
+ string: &70121654388580 !ruby/string
34
+ str: ! 'foo'
35
+ body: *70121654388580
36
+ eoyml
37
+
38
+ assert_equal({"string"=>"foo"}, y)
39
+ value = y['string']
40
+ assert_equal value, value.instance_variable_get(:@body)
41
+ end
42
+
12
43
  def test_another_subclass_with_attributes
13
44
  y = Psych.load Psych.dump Y.new("foo").tap {|y| y.val = 1}
14
45
  assert_equal "foo", y
@@ -28,6 +59,12 @@ module Psych
28
59
  assert_equal X, x.class
29
60
  end
30
61
 
62
+ def test_empty_character_subclass
63
+ assert_match "!ruby/string:#{Z}", Psych.dump(Z.new)
64
+ x = Psych.load Psych.dump Z.new
65
+ assert_equal Z, x.class
66
+ end
67
+
31
68
  def test_subclass_with_attributes
32
69
  y = Psych.load Psych.dump Y.new.tap {|y| y.val = 1}
33
70
  assert_equal Y, y.class
@@ -40,8 +77,8 @@ module Psych
40
77
  assert_equal '01:03:05', Psych.load(yaml)
41
78
  end
42
79
 
43
- def test_tagged_binary_should_be_dumped_as_binary
44
- string = "hello world!"
80
+ def test_nonascii_string_as_binary
81
+ string = "hello \x80 world!"
45
82
  string.force_encoding 'ascii-8bit'
46
83
  yml = Psych.dump string
47
84
  assert_match(/binary/, yml)
@@ -69,6 +106,13 @@ module Psych
69
106
  assert_equal string, Psych.load(yml)
70
107
  end
71
108
 
109
+ def test_ascii_only_8bit_string
110
+ string = "abc".encode(Encoding::ASCII_8BIT)
111
+ yml = Psych.dump string
112
+ refute_match(/binary/, yml)
113
+ assert_equal string, Psych.load(yml)
114
+ end
115
+
72
116
  def test_string_with_ivars
73
117
  food = "is delicious"
74
118
  ivar = "on rock and roll"
@@ -83,6 +127,10 @@ module Psych
83
127
  assert_cycle string
84
128
  end
85
129
 
130
+ def test_float_confusion
131
+ assert_cycle '1.'
132
+ end
133
+
86
134
  def binary_string percentage = 0.31, length = 100
87
135
  string = ''
88
136
  (percentage * length).to_i.times do |i|
@@ -1,4 +1,4 @@
1
- require 'psych/helper'
1
+ require_relative 'helper'
2
2
 
3
3
  class PsychStructWithIvar < Struct.new(:foo)
4
4
  attr_reader :bar
@@ -1,4 +1,4 @@
1
- require 'psych/helper'
1
+ require_relative 'helper'
2
2
 
3
3
  module Psych
4
4
  class TestSymbol < TestCase
@@ -1,4 +1,4 @@
1
- require 'psych/helper'
1
+ require_relative 'helper'
2
2
 
3
3
  module Psych
4
4
  class TestStringTainted < TestCase
@@ -117,14 +117,14 @@ module Psych
117
117
 
118
118
  class TestIOTainted < TestStringTainted
119
119
  def assert_taintedness string
120
- t = Tempfile.new(['something', 'yml'])
121
- t.binmode
122
- t.write string
123
- t.close
124
- File.open(t.path, 'r:bom|utf-8') { |f|
125
- @parser.parse f
120
+ Tempfile.create(['something', 'yml']) {|t|
121
+ t.binmode
122
+ t.write string
123
+ t.close
124
+ File.open(t.path, 'r:bom|utf-8') { |f|
125
+ @parser.parse f
126
+ }
126
127
  }
127
- t.close(true)
128
128
  end
129
129
  end
130
130
  end
@@ -1,4 +1,4 @@
1
- require 'psych/helper'
1
+ require_relative 'helper'
2
2
 
3
3
  module Psych
4
4
  class TestToYamlProperties < MiniTest::Unit::TestCase
@@ -1,4 +1,4 @@
1
- require 'psych/helper'
1
+ require_relative 'helper'
2
2
 
3
3
  module Psych
4
4
  class TestTreeBuilder < TestCase
@@ -1,8 +1,8 @@
1
- # -*- mode: ruby; ruby-indent-level: 4; tab-width: 4 -*-
1
+ # -*- coding: us-ascii; mode: ruby; ruby-indent-level: 4; tab-width: 4 -*-
2
2
  # vim:sw=4:ts=4
3
3
  # $Id$
4
4
  #
5
- require 'psych/helper'
5
+ require_relative 'helper'
6
6
  require 'ostruct'
7
7
 
8
8
  # [ruby-core:01946]
@@ -1266,4 +1266,24 @@ EOY
1266
1266
  Psych.load("2000-01-01 00:00:00.#{"0"*1000} +00:00\n")
1267
1267
  # '[ruby-core:13735]'
1268
1268
  end
1269
+
1270
+ def test_multiline_string_uses_literal_style
1271
+ yaml = Psych.dump("multi\nline\nstring")
1272
+ assert_match("|", yaml)
1273
+ end
1274
+
1275
+ def test_string_starting_with_non_word_character_uses_double_quotes_without_exclamation_mark
1276
+ yaml = Psych.dump("@123'abc")
1277
+ refute_match("!", yaml)
1278
+ end
1279
+
1280
+ def test_string_dump_with_colon
1281
+ yaml = Psych.dump 'x: foo'
1282
+ refute_match '!', yaml
1283
+ end
1284
+
1285
+ def test_string_dump_starting_with_star
1286
+ yaml = Psych.dump '*foo'
1287
+ refute_match '!', yaml
1288
+ end
1269
1289
  end
@@ -1,6 +1,6 @@
1
1
  # -*- coding: UTF-8 -*-
2
2
 
3
- require 'psych/helper'
3
+ require_relative 'helper'
4
4
  require 'tmpdir'
5
5
 
6
6
  begin
@@ -1,4 +1,4 @@
1
- require 'psych/helper'
1
+ require_relative 'helper'
2
2
  require 'yaml/store'
3
3
  require 'tmpdir'
4
4
 
@@ -1,3 +1,4 @@
1
+ # coding: US-ASCII
1
2
  require 'psych/helper'
2
3
 
3
4
  module Psych
@@ -5,7 +6,7 @@ module Psych
5
6
  class TestToRuby < TestCase
6
7
  def setup
7
8
  super
8
- @visitor = ToRuby.new
9
+ @visitor = ToRuby.create
9
10
  end
10
11
 
11
12
  def test_object
@@ -17,8 +18,8 @@ module Psych
17
18
  assert_equal 'bar', o.instance_variable_get(:@foo)
18
19
  end
19
20
 
20
- def test_awesome
21
- Psych.load('1900-01-01T00:00:00+00:00')
21
+ def test_tz_00_00_loads_without_error
22
+ assert Psych.load('1900-01-01T00:00:00+00:00')
22
23
  end
23
24
 
24
25
  def test_legacy_struct
@@ -87,7 +88,7 @@ description:
87
88
  end
88
89
 
89
90
  def test_exception
90
- exc = Exception.new 'hello'
91
+ exc = ::Exception.new 'hello'
91
92
 
92
93
  mapping = Nodes::Mapping.new nil, '!ruby/exception'
93
94
  mapping.children << Nodes::Scalar.new('message')
@@ -5,7 +5,25 @@ module Psych
5
5
  class TestYAMLTree < TestCase
6
6
  def setup
7
7
  super
8
- @v = Visitors::YAMLTree.new
8
+ @v = Visitors::YAMLTree.create
9
+ end
10
+
11
+ def test_tree_can_be_called_twice
12
+ @v.start
13
+ @v << Object.new
14
+ t = @v.tree
15
+ assert_equal t, @v.tree
16
+ end
17
+
18
+ def test_yaml_tree_can_take_an_emitter
19
+ io = StringIO.new
20
+ e = Psych::Emitter.new io
21
+ v = Visitors::YAMLTree.create({}, e)
22
+ v.start
23
+ v << "hello world"
24
+ v.finish
25
+
26
+ assert_match "hello world", io.string
9
27
  end
10
28
 
11
29
  def test_binary_formatting
metadata CHANGED
@@ -1,71 +1,62 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: psych
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
5
- prerelease:
4
+ version: 2.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Aaron Patterson
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-07-31 00:00:00.000000000 Z
11
+ date: 2013-06-27 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rdoc
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
21
- version: '3.10'
19
+ version: '4.0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
- version: '3.10'
26
+ version: '4.0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake-compiler
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: 0.4.1
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: 0.4.1
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: hoe
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
53
- version: '3.0'
47
+ version: '3.6'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
61
- version: '3.0'
62
- description: ! 'Psych is a YAML parser and emitter. Psych leverages libyaml[http://pyyaml.org/wiki/LibYAML]
63
-
54
+ version: '3.6'
55
+ description: |-
56
+ Psych is a YAML parser and emitter. Psych leverages libyaml[http://pyyaml.org/wiki/LibYAML]
64
57
  for its YAML parsing and emitting capabilities. In addition to wrapping
65
-
66
58
  libyaml, Psych also knows how to serialize and de-serialize most Ruby objects
67
-
68
- to and from the YAML format.'
59
+ to and from the YAML format.
69
60
  email:
70
61
  - aaron@tenderlovemaking.com
71
62
  executables: []
@@ -82,23 +73,39 @@ files:
82
73
  - Manifest.txt
83
74
  - README.rdoc
84
75
  - Rakefile
85
- - ext/psych/emitter.c
86
- - ext/psych/emitter.h
76
+ - ext/psych/depend
87
77
  - ext/psych/extconf.rb
88
- - ext/psych/parser.c
89
- - ext/psych/parser.h
90
78
  - ext/psych/psych.c
91
79
  - ext/psych/psych.h
92
- - ext/psych/to_ruby.c
93
- - ext/psych/to_ruby.h
94
- - ext/psych/yaml_tree.c
95
- - ext/psych/yaml_tree.h
80
+ - ext/psych/psych_emitter.c
81
+ - ext/psych/psych_emitter.h
82
+ - ext/psych/psych_parser.c
83
+ - ext/psych/psych_parser.h
84
+ - ext/psych/psych_to_ruby.c
85
+ - ext/psych/psych_to_ruby.h
86
+ - ext/psych/psych_yaml_tree.c
87
+ - ext/psych/psych_yaml_tree.h
88
+ - ext/psych/yaml/LICENSE
89
+ - ext/psych/yaml/api.c
90
+ - ext/psych/yaml/config.h
91
+ - ext/psych/yaml/dumper.c
92
+ - ext/psych/yaml/emitter.c
93
+ - ext/psych/yaml/loader.c
94
+ - ext/psych/yaml/parser.c
95
+ - ext/psych/yaml/reader.c
96
+ - ext/psych/yaml/scanner.c
97
+ - ext/psych/yaml/writer.c
98
+ - ext/psych/yaml/yaml.h
99
+ - ext/psych/yaml/yaml_private.h
96
100
  - lib/psych.rb
101
+ - lib/psych/class_loader.rb
97
102
  - lib/psych/coder.rb
98
103
  - lib/psych/core_ext.rb
99
104
  - lib/psych/deprecated.rb
105
+ - lib/psych/exception.rb
100
106
  - lib/psych/handler.rb
101
107
  - lib/psych/handlers/document_stream.rb
108
+ - lib/psych/handlers/recorder.rb
102
109
  - lib/psych/json/ruby_events.rb
103
110
  - lib/psych/json/stream.rb
104
111
  - lib/psych/json/tree_builder.rb
@@ -126,6 +133,8 @@ files:
126
133
  - lib/psych/visitors/to_ruby.rb
127
134
  - lib/psych/visitors/visitor.rb
128
135
  - lib/psych/visitors/yaml_tree.rb
136
+ - lib/psych/y.rb
137
+ - test/psych/handlers/test_recorder.rb
129
138
  - test/psych/helper.rb
130
139
  - test/psych/json/test_stream.rb
131
140
  - test/psych/nodes/test_enumerable.rb
@@ -152,6 +161,7 @@ files:
152
161
  - test/psych/test_omap.rb
153
162
  - test/psych/test_parser.rb
154
163
  - test/psych/test_psych.rb
164
+ - test/psych/test_safe_load.rb
155
165
  - test/psych/test_scalar.rb
156
166
  - test/psych/test_scalar_scanner.rb
157
167
  - test/psych/test_serialize_subclasses.rb
@@ -173,6 +183,7 @@ files:
173
183
  - .gemtest
174
184
  homepage: http://github.com/tenderlove/psych
175
185
  licenses: []
186
+ metadata: {}
176
187
  post_install_message:
177
188
  rdoc_options:
178
189
  - --main
@@ -180,24 +191,23 @@ rdoc_options:
180
191
  require_paths:
181
192
  - lib
182
193
  required_ruby_version: !ruby/object:Gem::Requirement
183
- none: false
184
194
  requirements:
185
- - - ! '>='
195
+ - - '>='
186
196
  - !ruby/object:Gem::Version
187
197
  version: 1.9.2
188
198
  required_rubygems_version: !ruby/object:Gem::Requirement
189
- none: false
190
199
  requirements:
191
- - - ! '>='
200
+ - - '>='
192
201
  - !ruby/object:Gem::Version
193
202
  version: '0'
194
203
  requirements: []
195
204
  rubyforge_project: psych
196
- rubygems_version: 1.8.23
205
+ rubygems_version: 2.0.2
197
206
  signing_key:
198
- specification_version: 3
207
+ specification_version: 4
199
208
  summary: Psych is a YAML parser and emitter
200
209
  test_files:
210
+ - test/psych/handlers/test_recorder.rb
201
211
  - test/psych/json/test_stream.rb
202
212
  - test/psych/nodes/test_enumerable.rb
203
213
  - test/psych/test_alias_and_anchor.rb
@@ -223,6 +233,7 @@ test_files:
223
233
  - test/psych/test_omap.rb
224
234
  - test/psych/test_parser.rb
225
235
  - test/psych/test_psych.rb
236
+ - test/psych/test_safe_load.rb
226
237
  - test/psych/test_scalar.rb
227
238
  - test/psych/test_scalar_scanner.rb
228
239
  - test/psych/test_serialize_subclasses.rb