amazing_print 1.3.0 → 1.5.0

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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +0 -6
  3. data/CHANGELOG.md +24 -0
  4. data/Gemfile +9 -0
  5. data/Gemfile.lock +51 -47
  6. data/README.md +9 -7
  7. data/lib/amazing_print/colorize.rb +5 -14
  8. data/lib/amazing_print/colors.rb +37 -0
  9. data/lib/amazing_print/core_ext/awesome_method_array.rb +4 -4
  10. data/lib/amazing_print/core_ext/class.rb +1 -1
  11. data/lib/amazing_print/core_ext/logger.rb +1 -3
  12. data/lib/amazing_print/core_ext/object.rb +1 -1
  13. data/lib/amazing_print/custom_defaults.rb +10 -3
  14. data/lib/amazing_print/ext/active_record.rb +5 -9
  15. data/lib/amazing_print/ext/active_support.rb +1 -3
  16. data/lib/amazing_print/ext/mongo_mapper.rb +4 -7
  17. data/lib/amazing_print/ext/mongoid.rb +2 -6
  18. data/lib/amazing_print/ext/nobrainer.rb +3 -5
  19. data/lib/amazing_print/ext/nokogiri.rb +1 -3
  20. data/lib/amazing_print/ext/ostruct.rb +1 -3
  21. data/lib/amazing_print/ext/ripple.rb +4 -5
  22. data/lib/amazing_print/formatter.rb +5 -6
  23. data/lib/amazing_print/formatters/array_formatter.rb +7 -6
  24. data/lib/amazing_print/formatters/base_formatter.rb +20 -25
  25. data/lib/amazing_print/formatters/class_formatter.rb +1 -0
  26. data/lib/amazing_print/formatters/dir_formatter.rb +11 -1
  27. data/lib/amazing_print/formatters/file_formatter.rb +11 -1
  28. data/lib/amazing_print/formatters/hash_formatter.rb +5 -3
  29. data/lib/amazing_print/formatters/method_formatter.rb +1 -0
  30. data/lib/amazing_print/formatters/mswin_helper.rb +63 -0
  31. data/lib/amazing_print/formatters/object_formatter.rb +2 -1
  32. data/lib/amazing_print/formatters/simple_formatter.rb +1 -0
  33. data/lib/amazing_print/formatters/struct_formatter.rb +2 -1
  34. data/lib/amazing_print/inspector.rb +29 -5
  35. data/lib/amazing_print/version.rb +1 -1
  36. data/lib/amazing_print.rb +3 -7
  37. data/spec/active_record_helper.rb +3 -0
  38. data/spec/colors_spec.rb +15 -6
  39. data/spec/core_ext/logger_spec.rb +7 -7
  40. data/spec/ext/action_controller_spec.rb +5 -5
  41. data/spec/ext/active_model_spec.rb +1 -1
  42. data/spec/ext/active_record_spec.rb +39 -73
  43. data/spec/ext/active_support_spec.rb +3 -3
  44. data/spec/ext/mongo_mapper_spec.rb +15 -11
  45. data/spec/ext/mongoid_spec.rb +7 -3
  46. data/spec/ext/nobrainer_spec.rb +6 -2
  47. data/spec/ext/nokogiri_spec.rb +7 -7
  48. data/spec/ext/ripple_spec.rb +6 -2
  49. data/spec/ext/sequel_spec.rb +1 -1
  50. data/spec/formats_spec.rb +101 -90
  51. data/spec/methods_spec.rb +12 -4
  52. data/spec/misc_spec.rb +29 -70
  53. data/spec/objects_spec.rb +4 -0
  54. data/spec/spec_helper.rb +11 -9
  55. metadata +10 -142
  56. data/lib/amazing_print/core_ext/string.rb +0 -45
  57. data/spec/core_ext/string_spec.rb +0 -15
data/spec/formats_spec.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rubocop:disable Lint/ConstantDefinitionInBlock
4
+
3
5
  require 'spec_helper'
4
6
  require 'bigdecimal'
5
7
  require 'set'
@@ -91,7 +93,7 @@ RSpec.describe 'AmazingPrint' do
91
93
  [
92
94
  \e[1;37m[0] \e[0m\e[1;34m1\e[0m,
93
95
  \e[1;37m[1] \e[0m\e[0;36m:two\e[0m,
94
- \e[1;37m[2] \e[0m\e[0;33m\"three\"\e[0m,
96
+ \e[1;37m[2] \e[0m\e[0;33m"three"\e[0m,
95
97
  \e[1;37m[3] \e[0m[
96
98
  \e[1;37m[0] \e[0m\e[1;31mnil\e[0m,
97
99
  \e[1;37m[1] \e[0m[
@@ -108,7 +110,7 @@ RSpec.describe 'AmazingPrint' do
108
110
  [
109
111
  \e[1;37m[0] \e[0m\e[1;34m1\e[0m,
110
112
  \e[1;37m[1] \e[0m\e[0;36m:two\e[0m,
111
- \e[1;37m[2] \e[0m\e[0;33m\"three\"\e[0m,
113
+ \e[1;37m[2] \e[0m\e[0;33m"three"\e[0m,
112
114
  \e[1;37m[3] \e[0m[
113
115
  \e[1;37m[0] \e[0m\e[1;31mnil\e[0m,
114
116
  \e[1;37m[1] \e[0m[
@@ -159,7 +161,7 @@ RSpec.describe 'AmazingPrint' do
159
161
 
160
162
  #------------------------------------------------------------------------------
161
163
  describe 'Limited Output Array' do
162
- before(:each) do
164
+ before do
163
165
  @arr = (1..1000).to_a
164
166
  end
165
167
 
@@ -227,7 +229,7 @@ RSpec.describe 'AmazingPrint' do
227
229
 
228
230
  #------------------------------------------------------------------------------
229
231
  describe 'Limited Output Hash' do
230
- before(:each) do
232
+ before do
231
233
  @hash = ('a'..'z').inject({}) { |h, v| h.merge({ v => v.to_sym }) }
232
234
  end
233
235
 
@@ -305,7 +307,8 @@ RSpec.describe 'AmazingPrint' do
305
307
  end
306
308
 
307
309
  it 'plain single line' do
308
- expect(@hash.ai(plain: true, multiline: false)).to eq('{ 1 => { :sym => { "str" => { [ 1, 2, 3 ] => { { :k => :v } => Hash < Object } } } } }')
310
+ expect(@hash.ai(plain: true,
311
+ multiline: false)).to eq('{ 1 => { :sym => { "str" => { [ 1, 2, 3 ] => { { :k => :v } => Hash < Object } } } } }')
309
312
  end
310
313
 
311
314
  it 'colored multiline (default)' do
@@ -313,7 +316,7 @@ RSpec.describe 'AmazingPrint' do
313
316
  {
314
317
  1\e[0;37m => \e[0m{
315
318
  :sym\e[0;37m => \e[0m{
316
- \"str\"\e[0;37m => \e[0m{
319
+ "str"\e[0;37m => \e[0m{
317
320
  [ 1, 2, 3 ]\e[0;37m => \e[0m{
318
321
  { :k => :v }\e[0;37m => \e[0m\e[1;33mHash < Object\e[0m
319
322
  }
@@ -328,8 +331,8 @@ RSpec.describe 'AmazingPrint' do
328
331
  expect(@hash.ai(ruby19_syntax: true)).to eq <<~EOS.strip
329
332
  {
330
333
  1\e[0;37m => \e[0m{
331
- sym\e[0;37m: \e[0m{
332
- \"str\"\e[0;37m => \e[0m{
334
+ sym: {
335
+ "str"\e[0;37m => \e[0m{
333
336
  [ 1, 2, 3 ]\e[0;37m => \e[0m{
334
337
  { k: :v }\e[0;37m => \e[0m\e[1;33mHash < Object\e[0m
335
338
  }
@@ -345,7 +348,7 @@ RSpec.describe 'AmazingPrint' do
345
348
  {
346
349
  1\e[0;37m => \e[0m{
347
350
  :sym\e[0;37m => \e[0m{
348
- \"str\"\e[0;37m => \e[0m{
351
+ "str"\e[0;37m => \e[0m{
349
352
  [ 1, 2, 3 ]\e[0;37m => \e[0m{
350
353
  { :k => :v }\e[0;37m => \e[0m\e[1;33mHash < Object\e[0m
351
354
  }
@@ -389,22 +392,14 @@ RSpec.describe 'AmazingPrint' do
389
392
 
390
393
  it 'plain multiline' do
391
394
  out = @hash.ai(plain: true)
392
- if RUBY_VERSION.to_f < 1.9 # Order of @hash keys is not guaranteed.
393
- expect(out).to match(/^\{[^\}]+\}/m)
394
- expect(out).to match(/ "b" => "b",?/)
395
- expect(out).to match(/ :a => "a",?/)
396
- expect(out).to match(/ :z => "z",?/)
397
- expect(out).to match(/ "alpha" => "alpha",?$/)
398
- else
399
- expect(out).to eq <<~EOS.strip
400
- {
401
- "b" => "b",
402
- :a => "a",
403
- :z => "z",
404
- "alpha" => "alpha"
405
- }
406
- EOS
407
- end
395
+ expect(out).to eq <<~EOS.strip
396
+ {
397
+ "b" => "b",
398
+ :a => "a",
399
+ :z => "z",
400
+ "alpha" => "alpha"
401
+ }
402
+ EOS
408
403
  end
409
404
 
410
405
  it 'plain multiline with sorted keys' do
@@ -476,61 +471,79 @@ RSpec.describe 'AmazingPrint' do
476
471
  end
477
472
  end
478
473
 
474
+ #
475
+ # With Ruby 1.9 syntax
476
+ #
477
+ it 'hash keys must be left aligned' do
478
+ hash = { [0, 0, 255] => :yellow, :bloodiest_red => 'rgb(255, 0, 0)', 'magenta' => 'rgb(255, 0, 255)' }
479
+ out = hash.ai(plain: true, indent: -2, ruby19_syntax: true, sort_keys: true)
480
+ expect(out).to eq <<~EOS.strip
481
+ {
482
+ [ 0, 0, 255 ] => :yellow,
483
+ bloodiest_red: "rgb(255, 0, 0)",
484
+ "magenta" => "rgb(255, 0, 255)"
485
+ }
486
+ EOS
487
+ end
488
+
479
489
  #------------------------------------------------------------------------------
480
490
  describe 'Class' do
481
- it 'should show superclass (plain)' do
491
+ it 'shows superclass (plain)' do
482
492
  expect(self.class.ai(plain: true)).to eq("#{self.class} < #{self.class.superclass}")
483
493
  end
484
494
 
485
- it 'should show superclass (color)' do
486
- expect(self.class.ai).to eq("#{self.class} < #{self.class.superclass}".yellow)
495
+ it 'shows superclass (color)' do
496
+ expect(self.class.ai).to eq(AmazingPrint::Colors.yellow("#{self.class} < #{self.class.superclass}"))
487
497
  end
488
498
  end
489
499
 
490
500
  #------------------------------------------------------------------------------
491
501
  describe 'File' do
492
- it 'should display a file (plain)' do
502
+ it 'displays a file (plain)', unix: true do
493
503
  File.open(__FILE__, 'r') do |f|
494
504
  expect(f.ai(plain: true)).to eq("#{f.inspect}\n" + `ls -alF #{f.path}`.chop)
495
505
  end
496
506
  end
507
+
508
+ it 'displays a file (plain) akin to powershell Get-ChildItem', mswin: true do
509
+ File.open(__FILE__, 'r') do |f|
510
+ expect(f.ai(plain: true)).to eq("#{f.inspect}\n" + AmazingPrint::Formatters::GetChildItem.new(f.path).to_s)
511
+ end
512
+ end
497
513
  end
498
514
 
499
515
  #------------------------------------------------------------------------------
500
516
  describe 'Dir' do
501
- it 'should display a direcory (plain)' do
517
+ it 'displays a direcory (plain)', unix: true do
502
518
  Dir.open(File.dirname(__FILE__)) do |d|
503
519
  expect(d.ai(plain: true)).to eq("#{d.inspect}\n" + `ls -alF #{d.path}`.chop)
504
520
  end
505
521
  end
522
+
523
+ it 'displays a directory (plain) akin to powershell Get-ChildItem', mswin: true do
524
+ Dir.open(File.dirname(__FILE__)) do |d|
525
+ expect(d.ai(plain: true)).to eq("#{d.inspect}\n" + AmazingPrint::Formatters::GetChildItem.new(d.path).to_s)
526
+ end
527
+ end
506
528
  end
507
529
 
508
530
  #------------------------------------------------------------------------------
509
531
  describe 'BigDecimal and Rational' do
510
- it 'should present BigDecimal object with arbitrary precision' do
532
+ it 'presents BigDecimal object with arbitrary precision' do
511
533
  big = BigDecimal('201020102010201020102010201020102010.4')
512
534
  expect(big.ai(plain: true)).to eq('201020102010201020102010201020102010.4')
513
535
  end
514
536
 
515
- it 'should present Rational object with arbitrary precision' do
537
+ it 'presents Rational object with arbitrary precision' do
516
538
  rat = Rational(201_020_102_010_201_020_102_010_201_020_102_010, 2)
517
539
  out = rat.ai(plain: true)
518
- #
519
- # Ruby 1.9 slightly changed the format of Rational#to_s, see
520
- # http://techtime.getharvest.com/blog/harvest-is-now-on-ruby-1-dot-9-3 and
521
- # http://www.ruby-forum.com/topic/189397
522
- #
523
- if RUBY_VERSION < '1.9'
524
- expect(out).to eq('100510051005100510051005100510051005')
525
- else
526
- expect(out).to eq('100510051005100510051005100510051005/1')
527
- end
540
+ expect(out).to eq('100510051005100510051005100510051005/1')
528
541
  end
529
542
  end
530
543
 
531
544
  #------------------------------------------------------------------------------
532
545
  describe 'Utility methods' do
533
- it 'should merge options' do
546
+ it 'merges options' do
534
547
  ap = AmazingPrint::Inspector.new
535
548
  ap.send(:merge_options!, { color: { array: :black }, indent: 0 })
536
549
  options = ap.instance_variable_get('@options')
@@ -550,38 +563,20 @@ RSpec.describe 'AmazingPrint' do
550
563
  expect(Set.new.ai).to eq([].ai)
551
564
  end
552
565
 
553
- if RUBY_VERSION > '1.9'
554
- it 'plain multiline' do
555
- expect(@set.ai(plain: true)).to eq(@arr.ai(plain: true))
556
- end
557
-
558
- it 'plain multiline indented' do
559
- expect(@set.ai(plain: true, indent: 1)).to eq(@arr.ai(plain: true, indent: 1))
560
- end
561
-
562
- it 'plain single line' do
563
- expect(@set.ai(plain: true, multiline: false)).to eq(@arr.ai(plain: true, multiline: false))
564
- end
565
-
566
- it 'colored multiline (default)' do
567
- expect(@set.ai).to eq(@arr.ai)
568
- end
569
- else # Prior to Ruby 1.9 the order of set values is unpredicatble.
570
- it 'plain multiline' do
571
- expect(@set.sort_by(&:to_s).ai(plain: true)).to eq(@arr.sort_by(&:to_s).ai(plain: true))
572
- end
566
+ it 'plain multiline' do
567
+ expect(@set.ai(plain: true)).to eq(@arr.ai(plain: true))
568
+ end
573
569
 
574
- it 'plain multiline indented' do
575
- expect(@set.sort_by(&:to_s).ai(plain: true, indent: 1)).to eq(@arr.sort_by(&:to_s).ai(plain: true, indent: 1))
576
- end
570
+ it 'plain multiline indented' do
571
+ expect(@set.ai(plain: true, indent: 1)).to eq(@arr.ai(plain: true, indent: 1))
572
+ end
577
573
 
578
- it 'plain single line' do
579
- expect(@set.sort_by(&:to_s).ai(plain: true, multiline: false)).to eq(@arr.sort_by(&:to_s).ai(plain: true, multiline: false))
580
- end
574
+ it 'plain single line' do
575
+ expect(@set.ai(plain: true, multiline: false)).to eq(@arr.ai(plain: true, multiline: false))
576
+ end
581
577
 
582
- it 'colored multiline (default)' do
583
- expect(@set.sort_by(&:to_s).ai).to eq(@arr.sort_by(&:to_s).ai)
584
- end
578
+ it 'colored multiline (default)' do
579
+ expect(@set.ai).to eq(@arr.ai)
585
580
  end
586
581
  end
587
582
 
@@ -603,12 +598,12 @@ RSpec.describe 'AmazingPrint' do
603
598
 
604
599
  it 'plain multiline' do
605
600
  s1 = <<-EOS.strip
606
- address = \"1313 Mockingbird Lane\",
607
- name = \"Herman Munster\"
601
+ address = "1313 Mockingbird Lane",
602
+ name = "Herman Munster"
608
603
  EOS
609
604
  s2 = <<-EOS.strip
610
- name = \"Herman Munster\",
611
- address = \"1313 Mockingbird Lane\"
605
+ name = "Herman Munster",
606
+ address = "1313 Mockingbird Lane"
612
607
  EOS
613
608
  expect(@struct.ai(plain: true)).to satisfy { |out| out.match(s1) || out.match(s2) }
614
609
  end
@@ -633,12 +628,12 @@ RSpec.describe 'AmazingPrint' do
633
628
 
634
629
  it 'colored multiline (default)' do
635
630
  s1 = <<-EOS.strip
636
- address\e[0;37m = \e[0m\e[0;33m\"1313 Mockingbird Lane\"\e[0m,
637
- name\e[0;37m = \e[0m\e[0;33m\"Herman Munster\"\e[0m
631
+ address\e[0;37m = \e[0m\e[0;33m"1313 Mockingbird Lane"\e[0m,
632
+ name\e[0;37m = \e[0m\e[0;33m"Herman Munster"\e[0m
638
633
  EOS
639
634
  s2 = <<-EOS.strip
640
- name\e[0;37m = \e[0m\e[0;33m\"Herman Munster\"\e[0m,
641
- address\e[0;37m = \e[0m\e[0;33m\"1313 Mockingbird Lane\"\e[0m
635
+ name\e[0;37m = \e[0m\e[0;33m"Herman Munster"\e[0m,
636
+ address\e[0;37m = \e[0m\e[0;33m"1313 Mockingbird Lane"\e[0m
642
637
  EOS
643
638
  expect(@struct.ai).to satisfy { |out| out.include?(s1) || out.include?(s2) }
644
639
  end
@@ -689,18 +684,24 @@ RSpec.describe 'AmazingPrint' do
689
684
  EOS
690
685
  end
691
686
 
692
- it 'inherited from File should be displayed as File' do
687
+ it 'inherited from File should be displayed as File', unix: true do
693
688
  class My < File; end
694
689
 
695
690
  my = begin
696
- File.new('/dev/null')
697
- rescue StandardError
698
- File.new('nul')
699
- end
691
+ File.new('/dev/null')
692
+ rescue StandardError
693
+ File.new('nul')
694
+ end
700
695
  expect(my.ai(plain: true)).to eq("#{my.inspect}\n" + `ls -alF #{my.path}`.chop)
701
696
  end
702
697
 
703
- it 'inherited from Dir should be displayed as Dir' do
698
+ it 'inherited from File should be displayed as File', mswin: true do
699
+ class My < File; end
700
+ my = My.new('nul') # it's /dev/null in Windows
701
+ expect(my.ai(plain: true)).to eq("#{my.inspect}\n" + AmazingPrint::Formatters::GetChildItem.new(my.path).to_s)
702
+ end
703
+
704
+ it 'inherited from Dir should be displayed as Dir', unix: true do
704
705
  class My < Dir; end
705
706
 
706
707
  require 'tmpdir'
@@ -708,7 +709,15 @@ RSpec.describe 'AmazingPrint' do
708
709
  expect(my.ai(plain: true)).to eq("#{my.inspect}\n" + `ls -alF #{my.path}`.chop)
709
710
  end
710
711
 
711
- it 'should handle a class that defines its own #send method' do
712
+ it 'inherited from Dir are displayed as Dir', mswin: true do
713
+ class My < Dir; end
714
+
715
+ require 'tmpdir'
716
+ my = My.new(Dir.tmpdir)
717
+ expect(my.ai(plain: true)).to eq("#{my.inspect}\n" + AmazingPrint::Formatters::GetChildItem.new(my.path).to_s)
718
+ end
719
+
720
+ it 'handles a class that defines its own #send method' do
712
721
  class My
713
722
  def send(arg1, arg2, arg3); end
714
723
  end
@@ -717,7 +726,7 @@ RSpec.describe 'AmazingPrint' do
717
726
  expect { my.methods.ai(plain: true) }.not_to raise_error
718
727
  end
719
728
 
720
- it 'should handle a class defines its own #method method (ex. request.method)' do
729
+ it 'handles a class defines its own #method method (ex. request.method)' do
721
730
  class My
722
731
  def method
723
732
  'POST'
@@ -753,7 +762,7 @@ RSpec.describe 'AmazingPrint' do
753
762
  class My
754
763
  def to_hash
755
764
  object = Object.new
756
- object.define_singleton_method('[]') { return nil }
765
+ object.define_singleton_method('[]') { nil }
757
766
 
758
767
  object
759
768
  end
@@ -767,7 +776,7 @@ RSpec.describe 'AmazingPrint' do
767
776
  class My
768
777
  def to_hash
769
778
  object = Object.new
770
- object.define_singleton_method(:keys) { return [:foo] }
779
+ object.define_singleton_method(:keys) { [:foo] }
771
780
 
772
781
  object
773
782
  end
@@ -779,3 +788,5 @@ RSpec.describe 'AmazingPrint' do
779
788
  end
780
789
  end
781
790
  end
791
+
792
+ # rubocop:enable Lint/ConstantDefinitionInBlock
data/spec/methods_spec.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rubocop:disable Lint/ConstantDefinitionInBlock
4
+
3
5
  require 'spec_helper'
4
6
 
5
7
  RSpec.describe 'Single method' do
@@ -385,7 +387,8 @@ if RUBY_VERSION >= '1.9.2'
385
387
 
386
388
  it ':opt' do
387
389
  class Hello
388
- def m1(a, b = 1, c = 2); end # m1(a, *b, *c)
390
+ # m1(a, *b, *c)
391
+ def m1(a, b = 1, c = 2); end
389
392
  end
390
393
  out = Hello.new.methods.ai(plain: true).split("\n").grep(/m1/)
391
394
  expect(out.first).to match(/^\s+\[\s*\d+\]\s+m1\(a, \*b, \*c\)\s+Hello$/)
@@ -393,7 +396,8 @@ if RUBY_VERSION >= '1.9.2'
393
396
 
394
397
  it ':rest' do
395
398
  class Hello
396
- def m1(*a); end # m1(*a)
399
+ # m1(*a)
400
+ def m1(*a); end
397
401
  end
398
402
  out = Hello.new.methods.ai(plain: true).split("\n").grep(/m1/)
399
403
  expect(out.first).to match(/^\s+\[\s*\d+\]\s+m1\(\*a\)\s+Hello$/)
@@ -401,7 +405,8 @@ if RUBY_VERSION >= '1.9.2'
401
405
 
402
406
  it ':block' do
403
407
  class Hello
404
- def m1(a, b = nil, &blk); end # m1(a, *b, &blk)
408
+ # m1(a, *b, &blk)
409
+ def m1(a, b = nil, &blk); end
405
410
  end
406
411
  out = Hello.new.methods.ai(plain: true).split("\n").grep(/m1/)
407
412
  expect(out.first).to match(/^\s+\[\s*\d+\]\s+m1\(a, \*b, &blk\)\s+Hello$/)
@@ -431,10 +436,11 @@ RSpec.describe 'Methods arrays' do
431
436
 
432
437
  def self.m2; end
433
438
  end
439
+
434
440
  class World
435
441
  def self.m1; end
436
442
  end
437
- out = (Hello.methods & World.methods - Class.methods).ai(plain: true)
443
+ out = (Hello.methods & (World.methods - Class.methods)).ai(plain: true)
438
444
  expect(out).to eq("[\n [0] m1() Hello\n]")
439
445
  end
440
446
 
@@ -510,3 +516,5 @@ RSpec.describe 'Methods arrays' do
510
516
  end
511
517
  end
512
518
  end
519
+
520
+ # rubocop:enable Lint/ConstantDefinitionInBlock
data/spec/misc_spec.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rubocop:disable Lint/ConstantDefinitionInBlock, Lint/EmptyClass
4
+
3
5
  require 'spec_helper'
4
6
 
5
7
  RSpec.describe 'AmazingPrint' do
@@ -24,18 +26,16 @@ RSpec.describe 'AmazingPrint' do
24
26
 
25
27
  # See https://github.com/awesome-print/awesome_print/issues/35
26
28
  it 'handle array grep when pattern contains / chapacter' do
27
- hash = { '1/x' => 1, '2//x' => :"2" }
29
+ hash = { '1/x' => 1, '2//x' => :'2' }
28
30
  grepped = hash.keys.sort.grep(%r{^(\d+)/}) { Regexp.last_match(1) }
29
31
  expect(grepped.ai(plain: true, multiline: false)).to eq('[ "1", "2" ]')
30
32
  end
31
33
 
32
34
  # See https://github.com/awesome-print/awesome_print/issues/85
33
- if RUBY_VERSION >= '1.8.7'
34
- it "handle array grep when a method is defined in C and thus doesn't have a binding" do
35
- arr = (0..6).to_a
36
- grepped = arr.grep(1..4, &:succ)
37
- expect(grepped.ai(plain: true, multiline: false)).to eq('[ 2, 3, 4, 5 ]')
38
- end
35
+ it "handle array grep when a method is defined in C and thus doesn't have a binding" do
36
+ arr = (0..6).to_a
37
+ grepped = arr.grep(1..4, &:succ)
38
+ expect(grepped.ai(plain: true, multiline: false)).to eq('[ 2, 3, 4, 5 ]')
39
39
  end
40
40
 
41
41
  it 'returns value passed as a parameter' do
@@ -46,7 +46,7 @@ RSpec.describe 'AmazingPrint' do
46
46
 
47
47
  # Require different file name this time (lib/ap.rb vs. lib/amazing_print).
48
48
  it "several require 'amazing_print' should do no harm" do
49
- require File.expand_path(File.dirname(__FILE__) + '/../lib/ap')
49
+ require File.expand_path("#{File.dirname(__FILE__)}/../lib/ap")
50
50
  expect { rand.ai }.not_to raise_error
51
51
  end
52
52
 
@@ -127,7 +127,7 @@ RSpec.describe 'AmazingPrint' do
127
127
  end
128
128
 
129
129
  # See https://github.com/awesome-print/awesome_print/issues/98
130
- it 'should properly merge the defaults' do
130
+ it 'properlies merge the defaults' do
131
131
  AmazingPrint.defaults = { indent: -2, sort_keys: true }
132
132
  hash = { [0, 0, 255] => :yellow, :red => 'rgb(255, 0, 0)', 'magenta' => 'rgb(255, 0, 255)' }
133
133
  out = hash.ai(plain: true)
@@ -141,94 +141,51 @@ RSpec.describe 'AmazingPrint' do
141
141
  end
142
142
  end
143
143
 
144
- #------------------------------------------------------------------------------
145
- describe 'Coexistence with the colorize gem' do
146
- before do # Redefine String#red just like colorize gem does it.
147
- @awesome_method = ''.method(:red)
148
-
149
- String.instance_eval do
150
- define_method :red do # Method arity is now 0 in Ruby 1.9+.
151
- "[red]#{self}[/red]"
152
- end
153
- end
154
- end
155
-
156
- after do # Restore String#red method.
157
- awesome_method = @awesome_method
158
- String.instance_eval do
159
- define_method :red, awesome_method
160
- end
161
- end
162
-
163
- it 'shoud not raise ArgumentError when formatting HTML' do
164
- out = 'hello'.ai(color: { string: :red }, html: true)
165
- if RUBY_VERSION >= '1.9'
166
- expect(out).to eq(%(<pre>[red]<kbd style="color:red">&quot;hello&quot;</kbd>[/red]</pre>))
167
- else
168
- expect(out).to eq(%(<pre>[red]&quot;hello&quot;[/red]</pre>))
169
- end
170
- end
171
-
172
- it 'shoud not raise ArgumentError when formatting HTML (shade color)' do
173
- out = 'hello'.ai(color: { string: :redish }, html: true)
174
- expect(out).to eq(%(<pre><kbd style="color:darkred">&quot;hello&quot;</kbd></pre>))
175
- end
176
-
177
- it 'shoud not raise ArgumentError when formatting non-HTML' do
178
- out = 'hello'.ai(color: { string: :red }, html: false)
179
- expect(out).to eq(%([red]"hello"[/red]))
180
- end
181
-
182
- it 'shoud not raise ArgumentError when formatting non-HTML (shade color)' do
183
- out = 'hello'.ai(color: { string: :redish }, html: false)
184
- expect(out).to eq(%(\e[0;31m"hello"\e[0m))
185
- end
186
- end
187
-
188
144
  #------------------------------------------------------------------------------
189
145
  describe 'Console' do
190
- it 'should detect IRB' do
146
+ it 'detects IRB' do
191
147
  class IRB; end
192
148
  ENV.delete('RAILS_ENV')
193
- expect(AmazingPrint.console?).to eq(true)
194
- expect(AmazingPrint.rails_console?).to eq(false)
149
+ expect(AmazingPrint.console?).to be(true)
150
+ expect(AmazingPrint.rails_console?).to be(false)
195
151
  Object.instance_eval { remove_const :IRB }
196
152
  end
197
153
 
198
- it 'should detect Pry' do
154
+ it 'detects Pry' do
199
155
  class Pry; end
200
156
  ENV.delete('RAILS_ENV')
201
- expect(AmazingPrint.console?).to eq(true)
202
- expect(AmazingPrint.rails_console?).to eq(false)
157
+ expect(AmazingPrint.console?).to be(true)
158
+ expect(AmazingPrint.rails_console?).to be(false)
203
159
  Object.instance_eval { remove_const :Pry }
204
160
  end
205
161
 
206
- it 'should detect Rails::Console' do
162
+ it 'detects Rails::Console' do
207
163
  class IRB; end
164
+
208
165
  module Rails; class Console; end; end
209
- expect(AmazingPrint.console?).to eq(true)
210
- expect(AmazingPrint.rails_console?).to eq(true)
166
+ expect(AmazingPrint.console?).to be(true)
167
+ expect(AmazingPrint.rails_console?).to be(true)
211
168
  Object.instance_eval { remove_const :IRB }
212
169
  Object.instance_eval { remove_const :Rails }
213
170
  end
214
171
 
215
- it "should detect ENV['RAILS_ENV']" do
172
+ it "detects ENV['RAILS_ENV']" do
216
173
  class Pry; end
217
174
  ENV['RAILS_ENV'] = 'development'
218
- expect(AmazingPrint.console?).to eq(true)
219
- expect(AmazingPrint.rails_console?).to eq(true)
175
+ expect(AmazingPrint.console?).to be(true)
176
+ expect(AmazingPrint.rails_console?).to be(true)
220
177
  Object.instance_eval { remove_const :Pry }
221
178
  end
222
179
 
223
- it 'should return the actual object when *not* running under console' do
180
+ it 'returns the actual object when *not* running under console' do
224
181
  expect(capture! { ap([1, 2, 3]) }).to eq([1, 2, 3])
225
182
  expect(capture! { ap({ a: 1 }) }).to eq({ a: 1 })
226
183
  end
227
184
 
228
- it 'should return nil when running under console' do
185
+ it 'returns nil when running under console' do
229
186
  class IRB; end
230
- expect(capture! { ap([1, 2, 3]) }).to eq(nil)
231
- expect(capture! { ap({ a: 1 }) }).to eq(nil)
187
+ expect(capture! { ap([1, 2, 3]) }).to be_nil
188
+ expect(capture! { ap({ a: 1 }) }).to be_nil
232
189
  Object.instance_eval { remove_const :IRB }
233
190
  end
234
191
 
@@ -240,8 +197,10 @@ RSpec.describe 'AmazingPrint' do
240
197
  irb.instance_eval { @context = irb_context }
241
198
  AmazingPrint.irb!
242
199
  expect(irb).to receive(:puts).with("(Object doesn't support #ai)")
243
- expect { irb.output_value }.to_not raise_error
200
+ expect { irb.output_value }.not_to raise_error
244
201
  Object.instance_eval { remove_const :IRB }
245
202
  end
246
203
  end
247
204
  end
205
+
206
+ # rubocop:enable Lint/ConstantDefinitionInBlock, Lint/EmptyClass
data/spec/objects_spec.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rubocop:disable Lint/ConstantDefinitionInBlock
4
+
3
5
  require 'spec_helper'
4
6
 
5
7
  RSpec.describe 'Objects' do
@@ -219,3 +221,5 @@ RSpec.describe 'Objects' do
219
221
  end
220
222
  end
221
223
  end
224
+
225
+ # rubocop:enable Lint/ConstantDefinitionInBlock
data/spec/spec_helper.rb CHANGED
@@ -23,7 +23,7 @@
23
23
  $LOAD_PATH.unshift(File.dirname(__FILE__))
24
24
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
25
25
 
26
- Dir[File.dirname(__FILE__) + '/support/**/*.rb'].sort.each do |file|
26
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].sort.each do |file|
27
27
  require file
28
28
  end
29
29
 
@@ -41,7 +41,7 @@ ExtVerifier.require_dependencies!(
41
41
  sequel
42
42
  ]
43
43
  )
44
- require 'nokogiri'
44
+ require 'nokogiri' unless RUBY_PLATFORM.include?('mswin')
45
45
  require 'amazing_print'
46
46
 
47
47
  RSpec.configure do |config|
@@ -63,9 +63,15 @@ RSpec.configure do |config|
63
63
 
64
64
  # Run before all examples. Using suite or all will not work as stubs are
65
65
  # killed after each example ends.
66
- config.before(:each) do |_example|
66
+ config.before do |_example|
67
67
  stub_dotfile!
68
68
  end
69
+
70
+ if RUBY_PLATFORM.include?('mswin')
71
+ config.filter_run_excluding unix: true
72
+ else
73
+ config.filter_run_excluding mswin: true
74
+ end
69
75
  end
70
76
 
71
77
  # This matcher handles the normalization of objects to replace non deterministic
@@ -86,12 +92,8 @@ end
86
92
  # that an ID is present and not that it matches a certain value. This is
87
93
  # necessary as the Object IDs are not deterministic.
88
94
  def normalize_object_id_strings(str, options)
89
- unless options[:skip_standard]
90
- str = str.gsub(/#<(.*?):0x[a-f\d]+/, '#<\1:placeholder_id')
91
- end
92
- unless options[:skip_bson]
93
- str = str.gsub(/BSON::ObjectId\('[a-f\d]{24}'\)/, 'placeholder_bson_id')
94
- end
95
+ str = str.gsub(/#<(.*?):0x[a-f\d]+/, '#<\1:placeholder_id') unless options[:skip_standard]
96
+ str = str.gsub(/BSON::ObjectId\('[a-f\d]{24}'\)/, 'placeholder_bson_id') unless options[:skip_bson]
95
97
  str
96
98
  end
97
99