psych 2.0.9 → 2.0.10

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: ff8cb5130ddeec957e2ea9cb3743aff24dba4dc9
4
- data.tar.gz: 71ee9f61849d041bea7f7e7ffb90f380d315eaab
3
+ metadata.gz: 0e5c90da9dd1e414da2fd88c99a8a54ddec4c086
4
+ data.tar.gz: ffcc4e20b755b2e0beb3747d3606daa8f4cb6819
5
5
  SHA512:
6
- metadata.gz: 9641a5d5820bee5cb15db5c768e094ec5158b3c7f7d2ec4f1e91933f046cb129b6c316339e8293cac73eb34100ca901a90c029341ca5053d47a1d531753d1efc
7
- data.tar.gz: 7e270db26bdd10fef4c1c809f780f23699a2196a16cb3f394d1ee9a7c48f8ef57184fe805c125f30dc89d428eb833c50fbb2935b95dad308cfc990d09b7025d5
6
+ metadata.gz: dfe83058664c3da10a4a42a64967beca000f69ae3fde2857faa997464bfd518221ec864d196b88777f8d20293f6bd8bf814f236bb237f99369562bcd334065e9
7
+ data.tar.gz: 81d19e5195c344ef08dca2aab53d9d13b46327fb937756b6c09211856ab14c1a948a197676b3651fa40a3df3d783292e2488d6632ca959fbd49069f2bf37c366
data/lib/psych.rb CHANGED
@@ -217,7 +217,7 @@ require 'psych/class_loader'
217
217
 
218
218
  module Psych
219
219
  # The version is Psych you're using
220
- VERSION = '2.0.9'
220
+ VERSION = '2.0.10'
221
221
 
222
222
  # The version of libyaml Psych is using
223
223
  LIBYAML_VERSION = Psych.libyaml_version.join '.'
@@ -62,13 +62,14 @@ module Psych
62
62
 
63
63
  def initialize emitter, ss, options
64
64
  super()
65
- @started = false
66
- @finished = false
67
- @emitter = emitter
68
- @st = Registrar.new
69
- @ss = ss
70
- @options = options
71
- @coders = []
65
+ @started = false
66
+ @finished = false
67
+ @emitter = emitter
68
+ @st = Registrar.new
69
+ @ss = ss
70
+ @options = options
71
+ @line_width = options[:line_width]
72
+ @coders = []
72
73
 
73
74
  @dispatch_cache = Hash.new do |h,klass|
74
75
  method = "visit_#{(klass.name || '').split('::').join('_')}"
@@ -301,46 +302,46 @@ module Psych
301
302
  quote = true
302
303
  style = Nodes::Scalar::PLAIN
303
304
  tag = nil
304
- str = o
305
305
 
306
306
  if binary?(o)
307
- str = [o].pack('m').chomp
307
+ o = [o].pack('m').chomp
308
308
  tag = '!binary' # FIXME: change to below when syck is removed
309
309
  #tag = 'tag:yaml.org,2002:binary'
310
310
  style = Nodes::Scalar::LITERAL
311
311
  plain = false
312
312
  quote = false
313
- elsif o =~ /\n/
313
+ elsif o =~ /\n[^\Z]/ # match \n except blank line at the end of string
314
314
  style = Nodes::Scalar::LITERAL
315
315
  elsif o == '<<'
316
316
  style = Nodes::Scalar::SINGLE_QUOTED
317
317
  tag = 'tag:yaml.org,2002:str'
318
318
  plain = false
319
319
  quote = false
320
+ elsif @line_width && o.length > @line_width
321
+ style = Nodes::Scalar::FOLDED
320
322
  elsif o =~ /^[^[:word:]][^"]*$/
321
323
  style = Nodes::Scalar::DOUBLE_QUOTED
322
- else
323
- unless String === @ss.tokenize(o)
324
- style = Nodes::Scalar::SINGLE_QUOTED
325
- end
324
+ elsif not String === @ss.tokenize(o)
325
+ style = Nodes::Scalar::SINGLE_QUOTED
326
326
  end
327
327
 
328
- ivars = find_ivars o
328
+ is_primitive = o.class == ::String
329
+ ivars = find_ivars o, is_primitive
329
330
 
330
331
  if ivars.empty?
331
- unless o.class == ::String
332
+ unless is_primitive
332
333
  tag = "!ruby/string:#{o.class}"
333
334
  plain = false
334
335
  quote = false
335
336
  end
336
- @emitter.scalar str, nil, tag, plain, quote, style
337
+ @emitter.scalar o, nil, tag, plain, quote, style
337
338
  else
338
339
  maptag = '!ruby/string'
339
340
  maptag << ":#{o.class}" unless o.class == ::String
340
341
 
341
342
  register o, @emitter.start_mapping(nil, maptag, false, Nodes::Mapping::BLOCK)
342
343
  @emitter.scalar 'str', nil, nil, true, false, Nodes::Scalar::ANY
343
- @emitter.scalar str, nil, tag, plain, quote, style
344
+ @emitter.scalar o, nil, tag, plain, quote, style
344
345
 
345
346
  dump_ivars o
346
347
 
@@ -367,45 +368,15 @@ module Psych
367
368
  end
368
369
 
369
370
  def visit_Hash o
370
- ivars = o.instance_variables
371
-
372
- if ivars.any?
373
- tag = "!ruby/hash-with-ivars"
374
- tag << ":#{o.class}" unless o.class == ::Hash
375
-
376
- register(o, @emitter.start_mapping(nil, tag, false, Psych::Nodes::Mapping::BLOCK))
377
-
378
- @emitter.scalar 'elements', nil, nil, true, false, Nodes::Scalar::ANY
379
-
380
- @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
371
+ if o.class == ::Hash
372
+ register(o, @emitter.start_mapping(nil, nil, true, Psych::Nodes::Mapping::BLOCK))
381
373
  o.each do |k,v|
382
374
  accept k
383
375
  accept v
384
376
  end
385
377
  @emitter.end_mapping
386
-
387
- @emitter.scalar 'ivars', nil, nil, true, false, Nodes::Scalar::ANY
388
-
389
- @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
390
- o.instance_variables.each do |ivar|
391
- accept ivar
392
- accept o.instance_variable_get ivar
393
- end
394
- @emitter.end_mapping
395
-
396
- @emitter.end_mapping
397
378
  else
398
- tag = o.class == ::Hash ? nil : "!ruby/hash:#{o.class}"
399
- implicit = !tag
400
-
401
- register(o, @emitter.start_mapping(nil, tag, implicit, Psych::Nodes::Mapping::BLOCK))
402
-
403
- o.each do |k,v|
404
- accept k
405
- accept v
406
- end
407
-
408
- @emitter.end_mapping
379
+ visit_hash_subclass o
409
380
  end
410
381
  end
411
382
 
@@ -468,7 +439,8 @@ module Psych
468
439
 
469
440
  def visit_array_subclass o
470
441
  tag = "!ruby/array:#{o.class}"
471
- if o.instance_variables.empty?
442
+ ivars = o.instance_variables
443
+ if ivars.empty?
472
444
  node = @emitter.start_sequence(nil, tag, false, Nodes::Sequence::BLOCK)
473
445
  register o, node
474
446
  o.each { |c| accept c }
@@ -486,12 +458,50 @@ module Psych
486
458
  # Dump the ivars
487
459
  accept 'ivars'
488
460
  @emitter.start_mapping(nil, nil, true, Nodes::Sequence::BLOCK)
461
+ ivars.each do |ivar|
462
+ accept ivar
463
+ accept o.instance_variable_get ivar
464
+ end
465
+ @emitter.end_mapping
466
+
467
+ @emitter.end_mapping
468
+ end
469
+ end
470
+
471
+ def visit_hash_subclass o
472
+ ivars = o.instance_variables
473
+ if ivars.any?
474
+ tag = "!ruby/hash-with-ivars:#{o.class}"
475
+ node = @emitter.start_mapping(nil, tag, false, Psych::Nodes::Mapping::BLOCK)
476
+ register(o, node)
477
+
478
+ # Dump the elements
479
+ accept 'elements'
480
+ @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
481
+ o.each do |k,v|
482
+ accept k
483
+ accept v
484
+ end
485
+ @emitter.end_mapping
486
+
487
+ # Dump the ivars
488
+ accept 'ivars'
489
+ @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
489
490
  o.instance_variables.each do |ivar|
490
491
  accept ivar
491
492
  accept o.instance_variable_get ivar
492
493
  end
493
494
  @emitter.end_mapping
494
495
 
496
+ @emitter.end_mapping
497
+ else
498
+ tag = "!ruby/hash:#{o.class}"
499
+ node = @emitter.start_mapping(nil, tag, false, Psych::Nodes::Mapping::BLOCK)
500
+ register(o, node)
501
+ o.each do |k,v|
502
+ accept k
503
+ accept v
504
+ end
495
505
  @emitter.end_mapping
496
506
  end
497
507
  end
@@ -524,7 +534,7 @@ module Psych
524
534
  end
525
535
 
526
536
  # FIXME: remove this method once "to_yaml_properties" is removed
527
- def find_ivars target
537
+ def find_ivars target, is_primitive=false
528
538
  begin
529
539
  loc = target.method(:to_yaml_properties).source_location.first
530
540
  unless loc.start_with?(Psych::DEPRECATED) || loc.end_with?('rubytypes.rb')
@@ -538,7 +548,7 @@ module Psych
538
548
  # and it's OK to skip it since it's only to emit a warning.
539
549
  end
540
550
 
541
- target.instance_variables
551
+ is_primitive ? [] : target.instance_variables
542
552
  end
543
553
 
544
554
  def register target, yaml_obj
@@ -38,12 +38,6 @@ module Psych
38
38
  assert_cycle t1
39
39
  end
40
40
 
41
- def test_hash_with_ivars
42
- @hash.instance_variable_set :@foo, 'bar'
43
- dup = Psych.load Psych.dump @hash
44
- assert_equal 'bar', dup.instance_variable_get(:@foo)
45
- end
46
-
47
41
  def test_hash_subclass_with_ivars
48
42
  x = X.new
49
43
  x[:a] = 'b'
@@ -30,8 +30,54 @@ module Psych
30
30
  end
31
31
 
32
32
  def test_doublequotes_when_there_is_a_single
33
- yaml = Psych.dump "@123'abc"
34
- assert_match(/---\s*"/, yaml)
33
+ str = "@123'abc"
34
+ yaml = Psych.dump str
35
+ assert_match /---\s*"/, yaml
36
+ assert_equal str, Psych.load(yaml)
37
+ end
38
+
39
+ def test_plain_when_shorten_than_line_width_and_no_final_line_break
40
+ str = "Lorem ipsum"
41
+ yaml = Psych.dump str, line_width: 12
42
+ assert_match /---\s*[^>|]+\n/, yaml
43
+ assert_equal str, Psych.load(yaml)
44
+ end
45
+
46
+ def test_plain_when_shorten_than_line_width_and_with_final_line_break
47
+ str = "Lorem ipsum\n"
48
+ yaml = Psych.dump str, line_width: 12
49
+ assert_match /---\s*[^>|]+\n/, yaml
50
+ assert_equal str, Psych.load(yaml)
51
+ end
52
+
53
+ def test_folded_when_longer_than_line_width_and_with_final_line_break
54
+ str = "Lorem ipsum dolor sit\n"
55
+ yaml = Psych.dump str, line_width: 12
56
+ assert_match /---\s*>\n(.*\n){2}\Z/, yaml
57
+ assert_equal str, Psych.load(yaml)
58
+ end
59
+
60
+ # http://yaml.org/spec/1.2/2009-07-21/spec.html#id2593651
61
+ def test_folded_strip_when_longer_than_line_width_and_no_newlines
62
+ str = "Lorem ipsum dolor sit amet, consectetur"
63
+ yaml = Psych.dump str, line_width: 12
64
+ assert_match /---\s*>-\n(.*\n){3}\Z/, yaml
65
+ assert_equal str, Psych.load(yaml)
66
+ end
67
+
68
+ def test_literal_when_inner_and_final_line_break
69
+ str = "Lorem ipsum\ndolor\n"
70
+ yaml = Psych.dump str, line_width: 12
71
+ assert_match /---\s*|\n(.*\n){2}\Z/, yaml
72
+ assert_equal str, Psych.load(yaml)
73
+ end
74
+
75
+ # http://yaml.org/spec/1.2/2009-07-21/spec.html#id2593651
76
+ def test_literal_strip_when_inner_line_break_and_no_final_line_break
77
+ str = "Lorem ipsum\ndolor"
78
+ yaml = Psych.dump str, line_width: 12
79
+ assert_match /---\s*|-\n(.*\n){2}\Z/, yaml
80
+ assert_equal str, Psych.load(yaml)
35
81
  end
36
82
 
37
83
  def test_cycle_x
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.9
4
+ version: 2.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Patterson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-08 00:00:00.000000000 Z
11
+ date: 2015-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc