psych 1.2.0 → 1.2.1

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.
@@ -1,3 +1,15 @@
1
+ Thu Aug 25 06:11:35 2011 Aaron Patterson <aaron@tenderlovemaking.com>
2
+
3
+ * ext/psych/lib/psych/nodes/node.rb: default `to_yaml` encoding to be
4
+ UTF-8.
5
+ * test/psych/test_encoding.rb: test yaml dump encoding.
6
+
7
+ Wed Jun 22 03:20:52 2011 Aaron Patterson <aaron@tenderlovemaking.com>
8
+
9
+ * ext/psych/lib/psych/visitors/to_ruby.rb: Fix cyclic references of
10
+ objects. Thanks to CvX for reporting the bug and a test case.
11
+ * test/psych/test_object.rb: test for cyclic object references.
12
+
1
13
  Thu Jun 9 10:57:03 2011 Aaron Patterson <aaron@tenderlovemaking.com>
2
14
 
3
15
  * ext/psych/lib/psych/visitors/to_ruby.rb: Hash subclasses can be read
data/Rakefile CHANGED
@@ -11,10 +11,10 @@ end
11
11
  gem 'rake-compiler', '>= 0.4.1'
12
12
  require "rake/extensiontask"
13
13
 
14
- Hoe.plugin :debugging, :doofus, :git
14
+ Hoe.plugin :debugging, :doofus, :git, :gemspec
15
15
 
16
16
  Hoe.spec 'psych' do
17
- developer 'Aaron Patterson', 'aaronp@rubyforge.org'
17
+ developer 'Aaron Patterson', 'aaron@tenderlovemaking.com'
18
18
 
19
19
  self.extra_rdoc_files = Dir['*.rdoc']
20
20
  self.history_file = 'CHANGELOG.rdoc'
@@ -90,7 +90,7 @@ require 'psych/json'
90
90
 
91
91
  module Psych
92
92
  # The version is Psych you're using
93
- VERSION = '1.2.0'
93
+ VERSION = '1.2.1'
94
94
 
95
95
  # The version of libyaml Psych is using
96
96
  LIBYAML_VERSION = Psych.libyaml_version.join '.'
@@ -98,6 +98,9 @@ module Psych
98
98
  class Exception < RuntimeError
99
99
  end
100
100
 
101
+ class BadAlias < Exception
102
+ end
103
+
101
104
  autoload :Stream, 'psych/stream'
102
105
 
103
106
  ###
@@ -36,4 +36,5 @@ module Kernel
36
36
  end
37
37
  remove_method :y rescue nil
38
38
  alias y psych_y
39
+ private :y
39
40
  end
@@ -76,6 +76,7 @@ module Psych
76
76
  end
77
77
 
78
78
  class Object
79
+ undef :to_yaml_properties rescue nil
79
80
  def to_yaml_properties # :nodoc:
80
81
  instance_variables
81
82
  end
@@ -41,7 +41,7 @@ module Psych
41
41
  #
42
42
  # See also Psych::Visitors::Emitter
43
43
  def to_yaml io = nil, options = {}
44
- real_io = io || StringIO.new
44
+ real_io = io || StringIO.new(''.encode('utf-8'))
45
45
 
46
46
  Visitors::Emitter.new(real_io, options).accept self
47
47
  return real_io.string unless io
@@ -68,8 +68,11 @@ module Psych
68
68
  end
69
69
  i
70
70
  else
71
- return Integer(string.gsub(/[,_]/, '')) rescue ArgumentError
72
- return Float(string.gsub(/[,_]/, '')) rescue ArgumentError
71
+ if string.count('.') < 2
72
+ return Integer(string.gsub(/[,_]/, '')) rescue ArgumentError
73
+ return Float(string.gsub(/[,_]/, '')) rescue ArgumentError
74
+ end
75
+
73
76
  @string_cache[string] = true
74
77
  string
75
78
  end
@@ -182,7 +182,6 @@ module Psych
182
182
  when /^!ruby\/object:?(.*)?$/
183
183
  name = $1 || 'Object'
184
184
  obj = revive((resolve_class(name) || Object), o)
185
- @st[o.anchor] = obj if o.anchor
186
185
  obj
187
186
 
188
187
  when /^!map:(.*)$/, /^!ruby\/hash:(.*)$/
@@ -202,7 +201,7 @@ module Psych
202
201
  end
203
202
 
204
203
  def visit_Psych_Nodes_Alias o
205
- @st[o.anchor]
204
+ @st.fetch(o.anchor) { raise BadAlias, "Unknown alias: #{o.anchor}" }
206
205
  end
207
206
 
208
207
  private
@@ -233,6 +232,7 @@ module Psych
233
232
 
234
233
  def revive klass, node
235
234
  s = klass.allocate
235
+ @st[node.anchor] = s if node.anchor
236
236
  h = Hash[*node.children.map { |c| accept c }]
237
237
  init_with(s, h, node)
238
238
  end
@@ -40,6 +40,22 @@ module Psych
40
40
  assert_match(/alias value/, e.message)
41
41
  end
42
42
 
43
+ def test_to_yaml_is_valid
44
+ ext_before = Encoding.default_external
45
+ int_before = Encoding.default_internal
46
+
47
+ Encoding.default_external = Encoding::US_ASCII
48
+ Encoding.default_internal = nil
49
+
50
+ s = "こんにちは!"
51
+ # If no encoding is specified, use UTF-8
52
+ assert_equal Encoding::UTF_8, Psych.dump(s).encoding
53
+ assert_equal s, Psych.load(Psych.dump(s))
54
+ ensure
55
+ Encoding.default_external = ext_before
56
+ Encoding.default_internal = int_before
57
+ end
58
+
43
59
  def test_start_mapping
44
60
  foo = 'foo'
45
61
  bar = 'バー'
@@ -21,7 +21,7 @@ module Psych
21
21
 
22
22
  def test_set_syck
23
23
  YAML::ENGINE.yamler = 'syck'
24
- assert_equal Syck, YAML
24
+ assert_equal ::Syck, YAML
25
25
  assert_equal 'syck', YAML::ENGINE.yamler
26
26
  end
27
27
 
@@ -2,6 +2,15 @@ require 'psych/helper'
2
2
 
3
3
  module Psych
4
4
  class TestMergeKeys < TestCase
5
+ def test_missing_merge_key
6
+ yaml = <<-eoyml
7
+ bar:
8
+ << : *foo
9
+ eoyml
10
+ exp = assert_raises(Psych::BadAlias) { Psych.load yaml }
11
+ assert_match 'foo', exp.message
12
+ end
13
+
5
14
  # [ruby-core:34679]
6
15
  def test_merge_key
7
16
  yaml = <<-eoyml
@@ -4,8 +4,8 @@ module Psych
4
4
  class TestNil < TestCase
5
5
  def test_nil
6
6
  yml = Psych.dump nil
7
- assert_equal "--- \n...\n", yml
8
- assert_equal nil, Psych.load(yml)
7
+ assert_match(/--- \n(?:\.\.\.\n)?/, yml)
8
+ assert_nil Psych.load(yml)
9
9
  end
10
10
 
11
11
  def test_array_nil
@@ -11,6 +11,14 @@ module Psych
11
11
  end
12
12
  end
13
13
 
14
+ class Foo
15
+ attr_accessor :parent
16
+
17
+ def initialize parent
18
+ @parent = parent
19
+ end
20
+ end
21
+
14
22
  class TestObject < TestCase
15
23
  def test_dump_with_tag
16
24
  tag = Tagged.new
@@ -23,5 +31,14 @@ module Psych
23
31
  assert_equal tag.baz, tag2.baz
24
32
  assert_instance_of(Tagged, tag2)
25
33
  end
34
+
35
+ def test_cyclic_references
36
+ foo = Foo.new(nil)
37
+ foo.parent = foo
38
+ loaded = Psych.load Psych.dump foo
39
+
40
+ assert_instance_of(Foo, loaded)
41
+ assert_equal loaded, loaded.parent
42
+ end
26
43
  end
27
44
  end
@@ -3,6 +3,7 @@
3
3
  # $Id$
4
4
  #
5
5
  require 'psych/helper'
6
+ require 'ostruct'
6
7
 
7
8
  # [ruby-core:01946]
8
9
  module Psych_Tests
@@ -14,6 +15,12 @@ class Psych_Unit_Tests < Psych::TestCase
14
15
  Psych.domain_types.clear
15
16
  end
16
17
 
18
+ def test_y_method
19
+ assert_raises(NoMethodError) do
20
+ OpenStruct.new.y 1
21
+ end
22
+ end
23
+
17
24
  def test_syck_compat
18
25
  time = Time.utc(2010, 10, 10)
19
26
  yaml = Psych.dump time
metadata CHANGED
@@ -1,55 +1,69 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: psych
3
- version: !ruby/object:Gem::Version
4
- version: 1.2.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
5
  prerelease:
6
+ segments:
7
+ - 1
8
+ - 2
9
+ - 1
10
+ version: 1.2.1
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Aaron Patterson
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2011-06-09 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2011-08-24 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: rake-compiler
16
- requirement: &2152339440 !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
17
24
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 13
29
+ segments:
30
+ - 0
31
+ - 4
32
+ - 1
21
33
  version: 0.4.1
22
34
  type: :development
23
- prerelease: false
24
- version_requirements: *2152339440
25
- - !ruby/object:Gem::Dependency
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
26
37
  name: hoe
27
- requirement: &2152316780 !ruby/object:Gem::Requirement
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
28
40
  none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: 2.9.4
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 27
45
+ segments:
46
+ - 2
47
+ - 12
48
+ version: "2.12"
33
49
  type: :development
34
- prerelease: false
35
- version_requirements: *2152316780
36
- description: ! 'Psych is a YAML parser and emitter. Psych leverages libyaml[http://libyaml.org]
37
-
50
+ version_requirements: *id002
51
+ description: |-
52
+ Psych is a YAML parser and emitter. Psych leverages libyaml[http://libyaml.org]
38
53
  for its YAML parsing and emitting capabilities. In addition to wrapping
39
-
40
54
  libyaml, Psych also knows how to serialize and de-serialize most Ruby objects
41
-
42
- to and from the YAML format.'
43
- email:
44
- - aaronp@rubyforge.org
55
+ to and from the YAML format.
56
+ email:
57
+ - aaron@tenderlovemaking.com
45
58
  executables: []
46
- extensions:
59
+
60
+ extensions:
47
61
  - ext/psych/extconf.rb
48
- extra_rdoc_files:
62
+ extra_rdoc_files:
49
63
  - Manifest.txt
50
64
  - CHANGELOG.rdoc
51
65
  - README.rdoc
52
- files:
66
+ files:
53
67
  - .autotest
54
68
  - CHANGELOG.rdoc
55
69
  - Manifest.txt
@@ -141,31 +155,41 @@ files:
141
155
  - .gemtest
142
156
  homepage: http://github.com/tenderlove/psych
143
157
  licenses: []
158
+
144
159
  post_install_message:
145
- rdoc_options:
160
+ rdoc_options:
146
161
  - --main
147
162
  - README.rdoc
148
- require_paths:
163
+ require_paths:
149
164
  - lib
150
- required_ruby_version: !ruby/object:Gem::Requirement
165
+ required_ruby_version: !ruby/object:Gem::Requirement
151
166
  none: false
152
- requirements:
153
- - - ! '>='
154
- - !ruby/object:Gem::Version
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ hash: 55
171
+ segments:
172
+ - 1
173
+ - 9
174
+ - 2
155
175
  version: 1.9.2
156
- required_rubygems_version: !ruby/object:Gem::Requirement
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
177
  none: false
158
- requirements:
159
- - - ! '>='
160
- - !ruby/object:Gem::Version
161
- version: '0'
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ hash: 3
182
+ segments:
183
+ - 0
184
+ version: "0"
162
185
  requirements: []
186
+
163
187
  rubyforge_project: psych
164
- rubygems_version: 1.8.5
188
+ rubygems_version: 1.8.8
165
189
  signing_key:
166
190
  specification_version: 3
167
191
  summary: Psych is a YAML parser and emitter
168
- test_files:
192
+ test_files:
169
193
  - test/psych/json/test_stream.rb
170
194
  - test/psych/nodes/test_enumerable.rb
171
195
  - test/psych/test_alias_and_anchor.rb