psych 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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