psych 2.0.9 → 2.0.10

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