squib 0.8.0 → 0.9.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 (140) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +14 -0
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.md +201 -175
  5. data/Gemfile +2 -4
  6. data/README.md +650 -645
  7. data/RELEASE TODO.md +18 -18
  8. data/Rakefile +106 -99
  9. data/appveyor.yml +29 -0
  10. data/lib/squib.rb +32 -32
  11. data/lib/squib/api/background.rb +20 -20
  12. data/lib/squib/api/data.rb +131 -131
  13. data/lib/squib/api/image.rb +108 -90
  14. data/lib/squib/api/save.rb +151 -149
  15. data/lib/squib/api/settings.rb +35 -35
  16. data/lib/squib/api/shapes.rb +255 -230
  17. data/lib/squib/api/text.rb +65 -65
  18. data/lib/squib/api/text_embed.rb +96 -96
  19. data/lib/squib/args/arg_loader.rb +138 -138
  20. data/lib/squib/args/box.rb +54 -54
  21. data/lib/squib/args/card_range.rb +32 -32
  22. data/lib/squib/args/color_validator.rb +11 -11
  23. data/lib/squib/args/coords.rb +32 -32
  24. data/lib/squib/args/dir_validator.rb +16 -16
  25. data/lib/squib/args/draw.rb +92 -92
  26. data/lib/squib/args/embed_adjust.rb +25 -25
  27. data/lib/squib/args/embed_key.rb +17 -17
  28. data/lib/squib/args/hand_special.rb +37 -37
  29. data/lib/squib/args/import.rb +39 -39
  30. data/lib/squib/args/input_file.rb +37 -37
  31. data/lib/squib/args/paint.rb +43 -43
  32. data/lib/squib/args/paragraph.rb +116 -115
  33. data/lib/squib/args/save_batch.rb +63 -60
  34. data/lib/squib/args/scale_box.rb +53 -53
  35. data/lib/squib/args/sheet.rb +72 -72
  36. data/lib/squib/args/showcase_special.rb +38 -38
  37. data/lib/squib/args/svg_special.rb +37 -37
  38. data/lib/squib/args/transform.rb +60 -24
  39. data/lib/squib/args/typographer.rb +117 -117
  40. data/lib/squib/card.rb +66 -67
  41. data/lib/squib/conf.rb +131 -117
  42. data/lib/squib/constants.rb +12 -178
  43. data/lib/squib/deck.rb +113 -113
  44. data/lib/squib/graphics/cairo_context_wrapper.rb +113 -99
  45. data/lib/squib/graphics/gradient_regex.rb +46 -46
  46. data/lib/squib/graphics/hand.rb +42 -42
  47. data/lib/squib/graphics/image.rb +103 -76
  48. data/lib/squib/graphics/save_doc.rb +103 -103
  49. data/lib/squib/graphics/save_images.rb +39 -33
  50. data/lib/squib/graphics/shapes.rb +135 -119
  51. data/lib/squib/graphics/showcase.rb +85 -85
  52. data/lib/squib/graphics/text.rb +176 -176
  53. data/lib/squib/layout_parser.rb +91 -91
  54. data/lib/squib/layouts/economy.yml +85 -85
  55. data/lib/squib/layouts/fantasy.yml +101 -101
  56. data/lib/squib/layouts/hand.yml +62 -62
  57. data/lib/squib/layouts/playing-card.yml +35 -35
  58. data/lib/squib/layouts/tuck_box.yml +45 -45
  59. data/lib/squib/project_template/IDEAS.md +22 -0
  60. data/lib/squib/project_template/PLAYTESTING.md +26 -0
  61. data/lib/squib/project_template/RULES.md +21 -0
  62. data/lib/squib/project_template/config.yml +49 -45
  63. data/lib/squib/sample_helpers.rb +34 -0
  64. data/lib/squib/version.rb +10 -10
  65. data/samples/autoscale_font/_autoscale_font.rb +29 -0
  66. data/samples/color_shortcuts.rb +6 -6
  67. data/samples/csv_import.rb +26 -26
  68. data/samples/custom-config.yml +5 -5
  69. data/samples/custom_config.rb +18 -18
  70. data/samples/draw_shapes.rb +48 -45
  71. data/samples/embed_text.rb +88 -88
  72. data/samples/excel.rb +55 -55
  73. data/samples/hand.rb +24 -24
  74. data/samples/images/_images.rb +104 -0
  75. data/samples/intro/01_hello.rb +9 -0
  76. data/samples/intro/02_options.rb +15 -0
  77. data/samples/intro/03_layout.rb +12 -0
  78. data/samples/intro/04_arrays.rb +16 -0
  79. data/samples/intro/05_excel.rb +15 -0
  80. data/samples/layouts.rb +62 -62
  81. data/samples/layouts_builtin.rb +51 -51
  82. data/samples/load_images.rb +99 -78
  83. data/samples/load_images_config.yml +1 -0
  84. data/samples/quantity_explosion.csv +2 -2
  85. data/samples/ranges.rb +64 -64
  86. data/samples/sample.csv +2 -2
  87. data/samples/saves.rb +9 -1
  88. data/samples/sprites.png +0 -0
  89. data/samples/text/_text.rb +46 -0
  90. data/samples/text_options.rb +102 -102
  91. data/spec/api/api_data_spec.rb +117 -117
  92. data/spec/api/api_settings_spec.rb +37 -37
  93. data/spec/args/box_spec.rb +127 -127
  94. data/spec/args/draw_spec.rb +101 -95
  95. data/spec/args/embed_key_spec.rb +13 -13
  96. data/spec/args/input_file_spec.rb +21 -21
  97. data/spec/args/paint_spec.rb +21 -21
  98. data/spec/args/paragraph_spec.rb +152 -152
  99. data/spec/args/range_spec.rb +40 -40
  100. data/spec/args/save_batch_spec.rb +51 -51
  101. data/spec/args/scale_box_spec.rb +71 -71
  102. data/spec/args/sheet_spec.rb +58 -58
  103. data/spec/args/showcase_special_spec.rb +15 -15
  104. data/spec/args/transform_spec.rb +25 -0
  105. data/spec/card_spec.rb +11 -0
  106. data/spec/conf_spec.rb +13 -3
  107. data/spec/data/conf/unrecognized.yml +4 -0
  108. data/spec/data/csv/qty.csv +2 -2
  109. data/spec/data/csv/qty_named.csv +2 -2
  110. data/spec/data/csv/with_spaces.csv +2 -2
  111. data/spec/data/samples/autoscale_font.rb.txt +84 -84
  112. data/spec/data/samples/basic.rb.txt +227 -209
  113. data/spec/data/samples/config_text_markup.rb.txt +72 -72
  114. data/spec/data/samples/csv_import.rb.txt +213 -213
  115. data/spec/data/samples/custom_config.rb.txt +57 -48
  116. data/spec/data/samples/draw_shapes.rb.txt +555 -3
  117. data/spec/data/samples/embed_text.rb.txt +283 -283
  118. data/spec/data/samples/excel.rb.txt +661 -661
  119. data/spec/data/samples/gradients.rb.txt +77 -79
  120. data/spec/data/samples/hand.rb.txt +538 -538
  121. data/spec/data/samples/hello_world.rb.txt +36 -36
  122. data/spec/data/samples/load_images.rb.txt +170 -0
  123. data/spec/data/samples/portrait-landscape.rb.txt +51 -49
  124. data/spec/data/samples/ranges.rb.txt +472 -460
  125. data/spec/data/samples/saves.rb.txt +810 -801
  126. data/spec/data/samples/showcase.rb.txt +5926 -5910
  127. data/spec/data/samples/text_options.rb.txt +1125 -1125
  128. data/spec/data/samples/tgc_proofs.rb.txt +95 -81
  129. data/spec/graphics/cairo_context_wrapper_spec.rb +104 -84
  130. data/spec/graphics/graphics_save_doc_spec.rb +67 -67
  131. data/spec/samples/diff-with-css.example.html +39 -0
  132. data/spec/samples/expected/load_images_00.png +0 -0
  133. data/spec/samples/expected/shape_00.png +0 -0
  134. data/spec/samples/run_samples_spec.rb +17 -0
  135. data/spec/samples/samples_regression_spec.rb +72 -82
  136. data/spec/spec_helper.rb +9 -1
  137. data/squib.gemspec +49 -48
  138. data/squib.sublime-project +42 -42
  139. metadata +94 -48
  140. data/spec/graphics/graphics_images_spec.rb +0 -94
@@ -1,51 +1,51 @@
1
- require 'spec_helper'
2
- require 'squib/args/save_batch'
3
-
4
- describe Squib::Args::SaveBatch do
5
- subject(:save_batch) {Squib::Args::SaveBatch.new}
6
-
7
- context 'dir' do
8
- it 'is created if not exists (and warns)' do
9
- opts = {dir: 'tocreate'}
10
- Dir.chdir(output_dir) do
11
- FileUtils.rm_rf('tocreate', secure: true)
12
- expect(Squib.logger).to receive(:warn).with("Dir 'tocreate' does not exist, creating it.").once
13
- save_batch.load! opts
14
- expect(save_batch).to have_attributes({dir: ['tocreate']})
15
- expect(Dir.exists? 'tocreate').to be true
16
- end
17
- end
18
- end
19
-
20
- context 'rotate' do
21
- it 'does nothing by default' do
22
- opts = {}
23
- save_batch.load! opts
24
- expect(save_batch[0]).to have_attributes({rotate: false, angle: 0})
25
- end
26
-
27
- it 'rotates by pi/2 with true' do
28
- opts = {rotate: true}
29
- save_batch.load! opts
30
- expect(save_batch[0]).to have_attributes({rotate: true, angle: Math::PI / 2})
31
- end
32
-
33
- it 'rotates by pi/2' do
34
- opts = {rotate: :clockwise}
35
- save_batch.load! opts
36
- expect(save_batch[0]).to have_attributes({rotate: true, angle: Math::PI / 2})
37
- end
38
-
39
- it 'rotates by pi/2 with counterclockwise' do
40
- opts = {rotate: :counterclockwise}
41
- save_batch.load! opts
42
- expect(save_batch[0]).to have_attributes({rotate: true, angle: 3 * Math::PI / 2})
43
- end
44
-
45
- it 'raises error on a number' do
46
- opts = {rotate: 5.0}
47
- expect { save_batch.load!(opts) }.to raise_error('invalid option to rotate: only [true, false, :clockwise, :counterclockwise]')
48
- end
49
- end
50
-
51
- end
1
+ require 'spec_helper'
2
+ require 'squib/args/save_batch'
3
+
4
+ describe Squib::Args::SaveBatch do
5
+ subject(:save_batch) {Squib::Args::SaveBatch.new}
6
+
7
+ context 'dir' do
8
+ it 'is created if not exists (and warns)' do
9
+ opts = {dir: 'tocreate'}
10
+ Dir.chdir(output_dir) do
11
+ FileUtils.rm_rf('tocreate', secure: true)
12
+ expect(Squib.logger).to receive(:warn).with("Dir 'tocreate' does not exist, creating it.").once
13
+ save_batch.load! opts
14
+ expect(save_batch).to have_attributes({dir: ['tocreate']})
15
+ expect(Dir.exists? 'tocreate').to be true
16
+ end
17
+ end
18
+ end
19
+
20
+ context 'rotate' do
21
+ it 'does nothing by default' do
22
+ opts = {}
23
+ save_batch.load! opts
24
+ expect(save_batch[0]).to have_attributes({rotate: false, angle: 0})
25
+ end
26
+
27
+ it 'rotates by pi/2 with true' do
28
+ opts = {rotate: true}
29
+ save_batch.load! opts
30
+ expect(save_batch[0]).to have_attributes({rotate: true, angle: Math::PI / 2})
31
+ end
32
+
33
+ it 'rotates by pi/2' do
34
+ opts = {rotate: :clockwise}
35
+ save_batch.load! opts
36
+ expect(save_batch[0]).to have_attributes({rotate: true, angle: Math::PI / 2})
37
+ end
38
+
39
+ it 'rotates by pi/2 with counterclockwise' do
40
+ opts = {rotate: :counterclockwise}
41
+ save_batch.load! opts
42
+ expect(save_batch[0]).to have_attributes({rotate: true, angle: 3 * Math::PI / 2})
43
+ end
44
+
45
+ it 'raises error on a number' do
46
+ opts = {rotate: 5.0}
47
+ expect { save_batch.load!(opts) }.to raise_error('invalid option to rotate: only [true, false, :clockwise, :counterclockwise]')
48
+ end
49
+ end
50
+
51
+ end
@@ -1,71 +1,71 @@
1
- require 'spec_helper'
2
- require 'squib/args/scale_box'
3
-
4
- describe Squib::Args::ScaleBox do
5
- subject(:box) { Squib::Args::ScaleBox.new({}) }
6
-
7
- context 'unit conversion' do
8
- it 'converts units on all args' do
9
- args = {x: ['1in', '2in'], y: 300, width: '1in', height: '1in'}
10
- box.load!(args, expand_by: 2)
11
- expect(box).to have_attributes(
12
- x: [300, 600],
13
- y: [300, 300],
14
- width: [300, 300],
15
- height: [300, 300],
16
- )
17
- end
18
- end
19
-
20
- context 'validation' do
21
- it 'replaces with deck width and height' do
22
- args = {width: :deck, height: :deck}
23
- deck = OpenStruct.new(width: 123, height: 456)
24
- box = Squib::Args::Box.new(deck)
25
- box.load!(args, expand_by: 1)
26
- expect(box).to have_attributes(width: [123], height: [456])
27
- end
28
-
29
- it 'allows :native' do
30
- args = {width: :native, height: :native}
31
- box.load!(args, expand_by: 1)
32
- expect(box).to have_attributes(width: [:native], height: [:native])
33
- end
34
-
35
- it 'allows native to be a string' do
36
- args = {width: 'native'}
37
- box.load!(args, expand_by: 1)
38
- expect(box).to have_attributes(width: [:native], height: [:native])
39
- end
40
-
41
- it 'allows :scale on width if height has to_f' do
42
- args = {width: :scale, height: 75}
43
- box.load!(args, expand_by: 1)
44
- expect(box).to have_attributes(width: [:scale], height: [75])
45
- end
46
-
47
- it 'allows :scale on width if height has to_f' do
48
- args = {width: 75, height: :scale}
49
- box.load!(args, expand_by: 1)
50
- expect(box).to have_attributes(width: [75], height: [:scale])
51
- end
52
-
53
- it 'disallows both :scale' do
54
- args = {width: :scale, height: :scale}
55
- expect { box.load!(args, expand_by: 1) }.to raise_error('if width is :scale, height must be a number')
56
- end
57
-
58
- it 'disallows non-to_f on width' do
59
- args = {width: :foo}
60
- expect { box.load!(args, expand_by: 1) }.to raise_error('width must be a number, :scale, :native, or :deck')
61
- end
62
-
63
- it 'disallows non-to_f on height' do
64
- args = {height: :foo}
65
- expect { box.load!(args, expand_by: 1) }.to raise_error('height must be a number, :scale, :native, or :deck')
66
- end
67
-
68
- end
69
-
70
-
71
- end
1
+ require 'spec_helper'
2
+ require 'squib/args/scale_box'
3
+
4
+ describe Squib::Args::ScaleBox do
5
+ subject(:box) { Squib::Args::ScaleBox.new({}) }
6
+
7
+ context 'unit conversion' do
8
+ it 'converts units on all args' do
9
+ args = {x: ['1in', '2in'], y: 300, width: '1in', height: '1in'}
10
+ box.load!(args, expand_by: 2)
11
+ expect(box).to have_attributes(
12
+ x: [300, 600],
13
+ y: [300, 300],
14
+ width: [300, 300],
15
+ height: [300, 300],
16
+ )
17
+ end
18
+ end
19
+
20
+ context 'validation' do
21
+ it 'replaces with deck width and height' do
22
+ args = {width: :deck, height: :deck}
23
+ deck = OpenStruct.new(width: 123, height: 456)
24
+ box = Squib::Args::Box.new(deck)
25
+ box.load!(args, expand_by: 1)
26
+ expect(box).to have_attributes(width: [123], height: [456])
27
+ end
28
+
29
+ it 'allows :native' do
30
+ args = {width: :native, height: :native}
31
+ box.load!(args, expand_by: 1)
32
+ expect(box).to have_attributes(width: [:native], height: [:native])
33
+ end
34
+
35
+ it 'allows native to be a string' do
36
+ args = {width: 'native'}
37
+ box.load!(args, expand_by: 1)
38
+ expect(box).to have_attributes(width: [:native], height: [:native])
39
+ end
40
+
41
+ it 'allows :scale on width if height has to_f' do
42
+ args = {width: :scale, height: 75}
43
+ box.load!(args, expand_by: 1)
44
+ expect(box).to have_attributes(width: [:scale], height: [75])
45
+ end
46
+
47
+ it 'allows :scale on width if height has to_f' do
48
+ args = {width: 75, height: :scale}
49
+ box.load!(args, expand_by: 1)
50
+ expect(box).to have_attributes(width: [75], height: [:scale])
51
+ end
52
+
53
+ it 'disallows both :scale' do
54
+ args = {width: :scale, height: :scale}
55
+ expect { box.load!(args, expand_by: 1) }.to raise_error('if width is :scale, height must be a number')
56
+ end
57
+
58
+ it 'disallows non-to_f on width' do
59
+ args = {width: :foo}
60
+ expect { box.load!(args, expand_by: 1) }.to raise_error('width must be a number, :scale, :native, or :deck')
61
+ end
62
+
63
+ it 'disallows non-to_f on height' do
64
+ args = {height: :foo}
65
+ expect { box.load!(args, expand_by: 1) }.to raise_error('height must be a number, :scale, :native, or :deck')
66
+ end
67
+
68
+ end
69
+
70
+
71
+ end
@@ -1,58 +1,58 @@
1
- require 'spec_helper'
2
- require 'squib/args/sheet'
3
-
4
- describe Squib::Args::Sheet do
5
-
6
- context 'dsl overrides' do
7
- subject(:sheet) { Squib::Args::Sheet.new({}, {file: 'foo'}) }
8
-
9
- it 'works when specified' do
10
- sheet.load!({}) # go right to defaults
11
- expect(sheet.file).to eq( 'foo' ) # dsl method default override
12
- end
13
-
14
- end
15
-
16
- context 'rows and colums' do
17
- subject(:sheet) { Squib::Args::Sheet.new({}, {}, 4) }
18
-
19
- it 'does nothing on a perfect fit' do
20
- opts = { columns: 2, rows: 2 }
21
- sheet.load! opts
22
- expect(sheet).to have_attributes(columns: 2, rows: 2)
23
- end
24
-
25
- it 'keeps both if specified' do
26
- opts = { columns: 1, rows: 1 }
27
- sheet.load! opts
28
- expect(sheet).to have_attributes(columns: 1, rows: 1)
29
- end
30
-
31
- it 'computes properly on non-integer' do
32
- opts = {columns: 1, rows: :infinite}
33
- sheet.load! opts
34
- expect(sheet).to have_attributes( columns: 1, rows: 4 )
35
- end
36
-
37
- it 'computes properly on unspecified rows' do
38
- opts = {columns: 1}
39
- sheet.load! opts
40
- expect(sheet).to have_attributes( columns: 1, rows: 4 )
41
- end
42
-
43
- it 'computes properly on unspecified, too-big column' do
44
- opts = {}
45
- sheet.load! opts
46
- expect(sheet).to have_attributes( columns: 5, rows: 1 )
47
- end
48
-
49
- it 'fails on a non-integer column' do
50
- opts = {columns: :infinite}
51
- expect { sheet.load!(opts) }.to raise_error('columns must be an integer')
52
- end
53
-
54
-
55
-
56
- end
57
-
58
- end
1
+ require 'spec_helper'
2
+ require 'squib/args/sheet'
3
+
4
+ describe Squib::Args::Sheet do
5
+
6
+ context 'dsl overrides' do
7
+ subject(:sheet) { Squib::Args::Sheet.new({}, {file: 'foo'}) }
8
+
9
+ it 'works when specified' do
10
+ sheet.load!({}) # go right to defaults
11
+ expect(sheet.file).to eq( 'foo' ) # dsl method default override
12
+ end
13
+
14
+ end
15
+
16
+ context 'rows and colums' do
17
+ subject(:sheet) { Squib::Args::Sheet.new({}, {}, 4) }
18
+
19
+ it 'does nothing on a perfect fit' do
20
+ opts = { columns: 2, rows: 2 }
21
+ sheet.load! opts
22
+ expect(sheet).to have_attributes(columns: 2, rows: 2)
23
+ end
24
+
25
+ it 'keeps both if specified' do
26
+ opts = { columns: 1, rows: 1 }
27
+ sheet.load! opts
28
+ expect(sheet).to have_attributes(columns: 1, rows: 1)
29
+ end
30
+
31
+ it 'computes properly on non-integer' do
32
+ opts = {columns: 1, rows: :infinite}
33
+ sheet.load! opts
34
+ expect(sheet).to have_attributes( columns: 1, rows: 4 )
35
+ end
36
+
37
+ it 'computes properly on unspecified rows' do
38
+ opts = {columns: 1}
39
+ sheet.load! opts
40
+ expect(sheet).to have_attributes( columns: 1, rows: 4 )
41
+ end
42
+
43
+ it 'computes properly on unspecified, too-big column' do
44
+ opts = {}
45
+ sheet.load! opts
46
+ expect(sheet).to have_attributes( columns: 5, rows: 1 )
47
+ end
48
+
49
+ it 'fails on a non-integer column' do
50
+ opts = {columns: :infinite}
51
+ expect { sheet.load!(opts) }.to raise_error('columns must be an integer')
52
+ end
53
+
54
+
55
+
56
+ end
57
+
58
+ end
@@ -1,15 +1,15 @@
1
- require 'spec_helper'
2
- require 'squib/args/showcase_special'
3
-
4
- describe Squib::Args::ShowcaseSpecial do
5
- subject(:showcase_special) { Squib::Args::ShowcaseSpecial.new }
6
-
7
- context '#face_right?' do
8
- it 'compares face to right' do
9
- opts = { face: 'LEFT ' }
10
- showcase_special.load! opts
11
- expect(showcase_special.face_right?).to be false
12
- end
13
- end
14
-
15
- end
1
+ require 'spec_helper'
2
+ require 'squib/args/showcase_special'
3
+
4
+ describe Squib::Args::ShowcaseSpecial do
5
+ subject(:showcase_special) { Squib::Args::ShowcaseSpecial.new }
6
+
7
+ context '#face_right?' do
8
+ it 'compares face to right' do
9
+ opts = { face: 'LEFT ' }
10
+ showcase_special.load! opts
11
+ expect(showcase_special.face_right?).to be false
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+ require 'squib/args/transform'
3
+
4
+ describe Squib::Args::Box do
5
+ subject(:trans) { Squib::Args::Transform.new }
6
+ let(:expected_defaults) { {x: [0], y: [0], crop_width: [:native], crop_height: [:native] } }
7
+
8
+ context 'validation' do
9
+ it 'replaces with deck width and height' do
10
+ args = {crop_width: :deck, crop_height: :deck}
11
+ deck = OpenStruct.new(width: 123, height: 456)
12
+ trans = Squib::Args::Transform.new(deck)
13
+ trans.load!(args, expand_by: 1)
14
+ expect(trans).to have_attributes(crop_width: [123], crop_height: [456])
15
+ end
16
+
17
+ it 'has radius override x_radius and y_radius' do
18
+ args = {crop_corner_x_radius: 1, crop_corner_y_radius: 2, crop_corner_radius: 3}
19
+ trans.load!(args, expand_by: 2)
20
+ expect(trans).to have_attributes(crop_corner_x_radius: [3, 3], crop_corner_y_radius: [3, 3])
21
+ end
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+ require 'squib/card'
3
+
4
+ describe Squib::Card do
5
+ it 'logs fatal for unknown backend' do
6
+ deck = OpenStruct.new(dir: '.', prefix: '', count_format: '%02d', backend: 'broken robots')
7
+
8
+ expect(Squib::logger).to receive(:fatal).with("Back end not recognized: 'broken robots'")
9
+ expect { Squib::Card.new(deck, 100, 100, 0) }.to raise_error SystemExit
10
+ end
11
+ end
@@ -4,17 +4,17 @@ require 'spec_helper'
4
4
  describe Squib::Conf do
5
5
 
6
6
  it 'parses the project template file just fine' do
7
- conf = Squib::Conf.load(project_template('config.yml'))
7
+ conf = Squib::Conf.load project_template('config.yml')
8
8
  expect(conf.backend).to eq(Squib::Conf::DEFAULTS['backend'])
9
9
  end
10
10
 
11
11
  it 'parses an empty file' do
12
- conf = Squib::Conf.load(conf('empty.yml'))
12
+ conf = Squib::Conf.load conf('empty.yml')
13
13
  expect(conf.backend).to eq(Squib::Conf::DEFAULTS['backend'])
14
14
  end
15
15
 
16
16
  it 'parses the sample custom config' do
17
- conf = Squib::Conf.load(sample_file('custom-config.yml'))
17
+ conf = Squib::Conf.load sample_file('custom-config.yml')
18
18
  expect(conf.progress_bars).to be true
19
19
  expect(conf.text_hint).to eq '#FF0000'
20
20
  expect(conf.custom_colors).to eq({ 'foo' => '#ccc' })
@@ -26,4 +26,14 @@ describe Squib::Conf do
26
26
  expect(Squib::Conf.new.antialias).to eq 'subpixel'
27
27
  end
28
28
 
29
+ it 'warns when the yml has an unrecognized option' do
30
+ expect(Squib::logger).to receive(:warn).with('Unrecognized configuration option(s): unicorns')
31
+ Squib::Conf.load conf('unrecognized.yml')
32
+ end
33
+
34
+ it 'helps Andy get full coverage with a test on to_s' do
35
+ conf = Squib::Conf.load conf('empty.yml')
36
+ expect(conf.to_s).to start_with 'Conf: '
37
+ end
38
+
29
39
  end