psych 2.0.1 → 2.0.2

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.
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: