psych 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 18ab569c52dd4c717aa67c3752008efba6f68f9d
4
- data.tar.gz: 5de13cdc481633c56eb2e1dfb9067f9922d6ad30
3
+ metadata.gz: fe34c7fff6c7f07684a5412a451321413187345f
4
+ data.tar.gz: 5945ad3ed259b7e40a6a29768582499ba7b28f70
5
5
  SHA512:
6
- metadata.gz: 681a0bef521a162525b1b72e538bac13373857f4e2677cf4909fc6f8e90b740b5fb3abaee0f1a480b8db48d18d7d3793141f248fd48acbe78d64747da0784a0c
7
- data.tar.gz: e1281e00a69f1faeaeb15543baf7b588d955b8f2b64915752d4c5ad180d5630da46839c883efd468ba02651d7db882c36f38537ae43d05ae1d2ffa4c864de66e
6
+ metadata.gz: 0630bc4eec665fed10bae438834a519ccb23d0a2ea0a85fb889f3115859b3805f6480829c184d0a3cdd813db6b94bbbff7083772dca74b5243693912181bbd8e
7
+ data.tar.gz: c16d08618c06280e848a535f669f182a145ede5c6f1e1377f13159d33cf352ff49825667b292cbf21fbbef92bd15374f370afddff41bd0f2c144d14ce59bb76e
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,43 @@
1
+ Wed Nov 27 06:40:18 2013 Aaron Patterson <aaron@tenderlovemaking.com>
2
+
3
+ * ext/psych/lib/psych/scalar_scanner.rb: fix support for negative
4
+ years.
5
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: ditto
6
+ * test/psych/test_date_time.rb: test for change.
7
+ Fixes: https://github.com/tenderlove/psych/issues/168
8
+
9
+ Wed Nov 27 04:46:55 2013 Aaron Patterson <aaron@tenderlovemaking.com>
10
+
11
+ * ext/psych/lib/psych/scalar_scanner.rb: fix regexp for matching TIME
12
+ strings.
13
+ * test/psych/test_date_time.rb: test for change.
14
+ Fixes: https://github.com/tenderlove/psych/issues/171
15
+
16
+ Wed Nov 6 04:14:25 2013 Aaron Patterson <aaron@tenderlovemaking.com>
17
+
18
+ * ext/psych/lib/psych/visitors/to_ruby.rb: process merge keys before
19
+ reviving objects. Fixes GH psych #168
20
+ * test/psych/test_merge_keys.rb: test for change
21
+ https://github.com/tenderlove/psych/issues/168
22
+
23
+ Wed Oct 30 03:25:10 2013 Aaron Patterson <aaron@tenderlovemaking.com>
24
+
25
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: make less garbage when
26
+ testing if a string is binary.
27
+
28
+ Wed Oct 30 03:08:24 2013 Aaron Patterson <aaron@tenderlovemaking.com>
29
+
30
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: string subclasses should
31
+ not be considered to be binary. Fixes Psych / GH 166
32
+ https://github.com/tenderlove/psych/issues/166
33
+
34
+ * test/psych/test_string.rb: test for fix
35
+
36
+ Fri Sep 20 23:44:07 2013 Zachary Scott <e@zzak.io>
37
+
38
+ * ext/psych/yaml/yaml.h: [DOC] fix typo by @GreenGeorge [Fixes GH-161]
39
+ https://github.com/tenderlove/psych/pull/161
40
+
1
41
  Fri Sep 6 02:37:22 2013 Aaron Patterson <aaron@tenderlovemaking.com>
2
42
 
3
43
  * ext/psych/lib/psych/visitors/yaml_tree.rb: use double quotes when
data/Rakefile CHANGED
@@ -14,6 +14,7 @@ require "rake/extensiontask"
14
14
  Hoe.plugin :doofus, :git, :gemspec, :isolate
15
15
 
16
16
  $hoe = Hoe.spec 'psych' do
17
+ license 'MIT'
17
18
  developer 'Aaron Patterson', 'aaron@tenderlovemaking.com'
18
19
 
19
20
  self.extra_rdoc_files = Dir['*.rdoc']
@@ -1851,7 +1851,7 @@ YAML_DECLARE(void)
1851
1851
  yaml_emitter_set_canonical(yaml_emitter_t *emitter, int canonical);
1852
1852
 
1853
1853
  /**
1854
- * Set the intendation increment.
1854
+ * Set the indentation increment.
1855
1855
  *
1856
1856
  * @param[in,out] emitter An emitter object.
1857
1857
  * @param[in] indent The indentation increment (1 < . < 10).
@@ -5,7 +5,7 @@ module Psych
5
5
  # Scan scalars for built in types
6
6
  class ScalarScanner
7
7
  # Taken from http://yaml.org/type/timestamp.html
8
- TIME = /^\d{4}-\d{1,2}-\d{1,2}([Tt]|\s+)\d{1,2}:\d\d:\d\d(\.\d*)?(\s*Z|[-+]\d{1,2}(:\d\d)?)?/
8
+ TIME = /^-?\d{4}-\d{1,2}-\d{1,2}(?:[Tt]|\s+)\d{1,2}:\d\d:\d\d(?:\.\d*)?(?:\s*(?:Z|[-+]\d{1,2}:?(?:\d\d)?))?$/
9
9
 
10
10
  # Taken from http://yaml.org/type/float.html
11
11
  FLOAT = /^(?:[-+]?([0-9][0-9_,]*)?\.[0-9]*([eE][-+][0-9]+)?(?# base 10)
@@ -123,7 +123,7 @@ module Psych
123
123
  klass = class_loader.load 'Time'
124
124
 
125
125
  date, time = *(string.split(/[ tT]/, 2))
126
- (yy, m, dd) = date.split('-').map { |x| x.to_i }
126
+ (yy, m, dd) = date.match(/^(-?\d{4})-(\d{1,2})-(\d{1,2})/).captures.map { |x| x.to_i }
127
127
  md = time.match(/(\d+:\d+:\d+)(?:\.(\d*))?\s*(Z|[-+]\d+(:\d\d)?)?/)
128
128
 
129
129
  (hh, mm, ss) = md[1].split(':').map { |x| x.to_i }
@@ -156,7 +156,7 @@ module Psych
156
156
  if Psych.load_tags[o.tag]
157
157
  return revive(resolve_class(Psych.load_tags[o.tag]), o)
158
158
  end
159
- return revive_hash({}, o) unless o.tag
159
+ return revive_hash(register(o, {}), o) unless o.tag
160
160
 
161
161
  case o.tag
162
162
  when /^!ruby\/struct:?(.*)?$/
@@ -256,7 +256,7 @@ module Psych
256
256
  set
257
257
 
258
258
  when /^!map:(.*)$/, /^!ruby\/hash:(.*)$/
259
- revive_hash resolve_class($1).new, o
259
+ revive_hash register(o, resolve_class($1).new), o
260
260
 
261
261
  when '!omap', 'tag:yaml.org,2002:omap'
262
262
  map = register(o, class_loader.psych_omap.new)
@@ -266,7 +266,7 @@ module Psych
266
266
  map
267
267
 
268
268
  else
269
- revive_hash({}, o)
269
+ revive_hash(register(o, {}), o)
270
270
  end
271
271
  end
272
272
 
@@ -295,8 +295,6 @@ module Psych
295
295
  end
296
296
 
297
297
  def revive_hash hash, o
298
- @st[o.anchor] = hash if o.anchor
299
-
300
298
  o.children.each_slice(2) { |k,v|
301
299
  key = accept(k)
302
300
  val = accept(v)
@@ -334,10 +332,8 @@ module Psych
334
332
  end
335
333
 
336
334
  def revive klass, node
337
- s = klass.allocate
338
- @st[node.anchor] = s if node.anchor
339
- h = Hash[*node.children.map { |c| accept c }]
340
- init_with(s, h, node)
335
+ s = register(node, klass.allocate)
336
+ init_with(s, revive_hash({}, node), node)
341
337
  end
342
338
 
343
339
  def init_with o, h, node
@@ -209,7 +209,11 @@ module Psych
209
209
  end
210
210
 
211
211
  def visit_DateTime o
212
- formatted = format_time o.to_time
212
+ formatted = if o.offset.zero?
213
+ o.strftime("%Y-%m-%d %H:%M:%S.%9N Z".freeze)
214
+ else
215
+ o.strftime("%Y-%m-%d %H:%M:%S.%9N %:z".freeze)
216
+ end
213
217
  tag = '!ruby/object:DateTime'
214
218
  register o, @emitter.scalar(formatted, nil, tag, false, false, Nodes::Scalar::ANY)
215
219
  end
@@ -264,14 +268,6 @@ module Psych
264
268
  @emitter.scalar o._dump, nil, '!ruby/object:BigDecimal', false, false, Nodes::Scalar::ANY
265
269
  end
266
270
 
267
- def binary? string
268
- (string.encoding == Encoding::ASCII_8BIT && !string.ascii_only?) ||
269
- string.index("\x00") ||
270
- string.count("\x00-\x7F", "^ -~\t\r\n").fdiv(string.length) > 0.3 ||
271
- string.class != String
272
- end
273
- private :binary?
274
-
275
271
  def visit_String o
276
272
  plain = true
277
273
  quote = true
@@ -301,6 +297,8 @@ module Psych
301
297
  if ivars.empty?
302
298
  unless o.class == ::String
303
299
  tag = "!ruby/string:#{o.class}"
300
+ plain = false
301
+ quote = false
304
302
  end
305
303
  @emitter.scalar str, nil, tag, plain, quote, style
306
304
  else
@@ -379,6 +377,17 @@ module Psych
379
377
  end
380
378
 
381
379
  private
380
+ # FIXME: Remove the index and count checks in Psych 3.0
381
+ NULL = "\x00"
382
+ BINARY_RANGE = "\x00-\x7F"
383
+ WS_RANGE = "^ -~\t\r\n"
384
+
385
+ def binary? string
386
+ (string.encoding == Encoding::ASCII_8BIT && !string.ascii_only?) ||
387
+ string.index(NULL) ||
388
+ string.count(BINARY_RANGE, WS_RANGE).fdiv(string.length) > 0.3
389
+ end
390
+
382
391
  def visit_array_subclass o
383
392
  tag = "!ruby/array:#{o.class}"
384
393
  if o.instance_variables.empty?
data/lib/psych.rb CHANGED
@@ -216,7 +216,7 @@ require 'psych/handlers/document_stream'
216
216
 
217
217
  module Psych
218
218
  # The version is Psych you're using
219
- VERSION = '2.0.1'
219
+ VERSION = '2.0.2'
220
220
 
221
221
  # The version of libyaml Psych is using
222
222
  LIBYAML_VERSION = Psych.libyaml_version.join '.'
@@ -3,6 +3,19 @@ require 'date'
3
3
 
4
4
  module Psych
5
5
  class TestDateTime < TestCase
6
+ def test_negative_year
7
+ time = Time.utc -1, 12, 16
8
+ assert_cycle time
9
+ end
10
+
11
+ def test_new_datetime
12
+ assert_cycle DateTime.new
13
+ end
14
+
15
+ def test_invalid_date
16
+ assert_cycle "2013-10-31T10:40:07-000000000000033"
17
+ end
18
+
6
19
  def test_string_tag
7
20
  dt = DateTime.now
8
21
  yaml = Psych.dump dt
@@ -2,6 +2,24 @@ require_relative 'helper'
2
2
 
3
3
  module Psych
4
4
  class TestMergeKeys < TestCase
5
+ class Product
6
+ attr_reader :bar
7
+ end
8
+
9
+ def test_mergekey_with_object
10
+ s = <<-eoyml
11
+ foo: &foo
12
+ bar: 10
13
+ product:
14
+ !ruby/object:#{Product.name}
15
+ <<: *foo
16
+ eoyml
17
+ hash = Psych.load s
18
+ assert_equal({"bar" => 10}, hash["foo"])
19
+ product = hash["product"]
20
+ assert_equal 10, product.bar
21
+ end
22
+
5
23
  def test_merge_nil
6
24
  yaml = <<-eoyml
7
25
  defaults: &defaults
@@ -20,6 +20,11 @@ module Psych
20
20
  assert_match(/---\s*"/, yaml)
21
21
  end
22
22
 
23
+ def test_cycle_x
24
+ str = X.new 'abc'
25
+ assert_cycle str
26
+ end
27
+
23
28
  def test_dash_dot
24
29
  assert_cycle '-.'
25
30
  assert_cycle '+.'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: psych
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Patterson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-18 00:00:00.000000000 Z
11
+ date: 2013-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
@@ -182,7 +182,8 @@ files:
182
182
  - test/psych/visitors/test_yaml_tree.rb
183
183
  - ".gemtest"
184
184
  homepage: http://github.com/tenderlove/psych
185
- licenses: []
185
+ licenses:
186
+ - MIT
186
187
  metadata: {}
187
188
  post_install_message:
188
189
  rdoc_options: