squib 0.9.0 → 0.10.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 (230) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.gitmodules +22 -0
  4. data/.travis.yml +4 -5
  5. data/CHANGELOG.md +23 -0
  6. data/CONTRIBUTING.md +40 -0
  7. data/README.md +25 -553
  8. data/RELEASE TODO.md +2 -2
  9. data/Rakefile +6 -64
  10. data/appveyor.yml +0 -4
  11. data/benchmarks/antialias_best.rb +2 -2
  12. data/benchmarks/antialias_fast.rb +2 -2
  13. data/benchmarks/{backend-memory.rb → backend_memory.rb} +2 -2
  14. data/benchmarks/{backend-svg.rb → backend_svg.rb} +2 -2
  15. data/benchmarks/tons_of_png.rb +1 -1
  16. data/benchmarks/tons_of_svg.rb +1 -1
  17. data/benchmarks/tons_of_text.rb +1 -1
  18. data/docs/Makefile +216 -0
  19. data/docs/_static/css/squibdocs.css +18 -0
  20. data/docs/args/draw.rst +36 -0
  21. data/docs/args/expansion.rst +3 -0
  22. data/docs/args/layout.rst +6 -0
  23. data/docs/args/output_dir.rst +6 -0
  24. data/docs/args/range.rst +6 -0
  25. data/docs/args/transform.rst +51 -0
  26. data/docs/args/trim.rst +11 -0
  27. data/docs/args/wh.rst +12 -0
  28. data/docs/args/xy.rst +12 -0
  29. data/docs/arrays.rst +77 -0
  30. data/docs/backends.rst +20 -0
  31. data/docs/bleed.rst +13 -0
  32. data/docs/build_groups.rst +47 -0
  33. data/docs/colors.rst +64 -0
  34. data/docs/conf.py +287 -0
  35. data/docs/config.rst +117 -0
  36. data/docs/data.rst +22 -0
  37. data/docs/dsl/background.rst +20 -0
  38. data/docs/dsl/build.rst +32 -0
  39. data/docs/dsl/build_groups.rst +23 -0
  40. data/docs/dsl/circle.rst +27 -0
  41. data/docs/dsl/cm.rst +19 -0
  42. data/docs/dsl/csv.rst +62 -0
  43. data/docs/dsl/curve.rst +63 -0
  44. data/docs/dsl/deck.rst +45 -0
  45. data/docs/dsl/disable_build.rst +28 -0
  46. data/docs/dsl/ellipse.rst +17 -0
  47. data/docs/dsl/enable_build.rst +25 -0
  48. data/docs/dsl/grid.rst +31 -0
  49. data/docs/dsl/hand.rst +40 -0
  50. data/docs/dsl/hint.rst +15 -0
  51. data/docs/dsl/inches.rst +19 -0
  52. data/docs/dsl/index.rst +9 -0
  53. data/docs/dsl/line.rst +52 -0
  54. data/docs/dsl/png.rst +49 -0
  55. data/docs/dsl/polygon.rst +28 -0
  56. data/docs/dsl/rect.rst +18 -0
  57. data/docs/dsl/save.rst +23 -0
  58. data/docs/dsl/save_pdf.rst +48 -0
  59. data/docs/dsl/save_png.rst +46 -0
  60. data/docs/dsl/save_sheet.rst +55 -0
  61. data/docs/dsl/showcase.rst +65 -0
  62. data/docs/dsl/star.rst +35 -0
  63. data/docs/dsl/svg.rst +119 -0
  64. data/docs/dsl/text.rst +294 -0
  65. data/docs/dsl/triangle.rst +38 -0
  66. data/docs/dsl/use_layout.rst +16 -0
  67. data/docs/dsl/xlsx.rst +50 -0
  68. data/docs/guides/game_icons.rst +2 -0
  69. data/docs/guides/getting-started/index.rst +5 -0
  70. data/docs/guides/getting-started/part_0_learning_ruby.rst +145 -0
  71. data/docs/guides/getting-started/part_1_zero_to_game.rst +216 -0
  72. data/docs/guides/getting-started/part_2_iconography.rst +152 -0
  73. data/docs/guides/getting-started/part_3_workflows.rst +4 -0
  74. data/docs/guides/git.rst +13 -0
  75. data/docs/guides/hello_world.rst +6 -0
  76. data/docs/help.rst +157 -0
  77. data/docs/index.rst +35 -0
  78. data/docs/install.rst +66 -0
  79. data/docs/layouts.rst +235 -0
  80. data/docs/learning.rst +10 -0
  81. data/docs/make.bat +263 -0
  82. data/docs/parameters.rst +26 -0
  83. data/docs/server.bat +1 -0
  84. data/docs/text_feature.rst +86 -0
  85. data/docs/units.rst +6 -0
  86. data/lib/squib.rb +4 -4
  87. data/lib/squib/api/background.rb +5 -10
  88. data/lib/squib/api/data.rb +30 -54
  89. data/lib/squib/api/groups.rb +47 -0
  90. data/lib/squib/api/image.rb +8 -67
  91. data/lib/squib/api/save.rb +15 -105
  92. data/lib/squib/api/settings.rb +8 -22
  93. data/lib/squib/api/shapes.rb +15 -185
  94. data/lib/squib/api/text.rb +9 -49
  95. data/lib/squib/api/text_embed.rb +12 -12
  96. data/lib/squib/api/units.rb +3 -17
  97. data/lib/squib/args/arg_loader.rb +6 -6
  98. data/lib/squib/args/box.rb +2 -2
  99. data/lib/squib/args/card_range.rb +1 -1
  100. data/lib/squib/args/color_validator.rb +2 -2
  101. data/lib/squib/args/coords.rb +2 -2
  102. data/lib/squib/args/csv_opts.rb +25 -0
  103. data/lib/squib/args/dir_validator.rb +1 -1
  104. data/lib/squib/args/draw.rb +2 -2
  105. data/lib/squib/args/embed_adjust.rb +1 -1
  106. data/lib/squib/args/embed_key.rb +1 -1
  107. data/lib/squib/args/hand_special.rb +37 -37
  108. data/lib/squib/args/import.rb +2 -2
  109. data/lib/squib/args/input_file.rb +1 -1
  110. data/lib/squib/args/paint.rb +3 -3
  111. data/lib/squib/args/paragraph.rb +2 -2
  112. data/lib/squib/args/save_batch.rb +2 -2
  113. data/lib/squib/args/scale_box.rb +1 -1
  114. data/lib/squib/args/sheet.rb +3 -3
  115. data/lib/squib/args/showcase_special.rb +2 -2
  116. data/lib/squib/args/svg_special.rb +1 -1
  117. data/lib/squib/args/transform.rb +2 -2
  118. data/lib/squib/args/typographer.rb +5 -4
  119. data/lib/squib/args/unit_conversion.rb +4 -4
  120. data/lib/squib/card.rb +8 -8
  121. data/lib/squib/conf.rb +5 -5
  122. data/lib/squib/deck.rb +20 -18
  123. data/lib/squib/graphics/cairo_context_wrapper.rb +3 -3
  124. data/lib/squib/graphics/gradient_regex.rb +1 -1
  125. data/lib/squib/graphics/hand.rb +2 -2
  126. data/lib/squib/graphics/save_doc.rb +9 -8
  127. data/lib/squib/graphics/save_images.rb +24 -11
  128. data/lib/squib/graphics/shapes.rb +16 -17
  129. data/lib/squib/graphics/showcase.rb +9 -9
  130. data/lib/squib/graphics/text.rb +21 -21
  131. data/lib/squib/layout_parser.rb +9 -9
  132. data/lib/squib/layouts/economy.yml +85 -85
  133. data/lib/squib/layouts/fantasy.yml +101 -101
  134. data/lib/squib/layouts/hand.yml +62 -62
  135. data/lib/squib/layouts/playing-card.yml +35 -35
  136. data/lib/squib/layouts/tuck_box.yml +45 -45
  137. data/lib/squib/sample_helpers.rb +1 -1
  138. data/lib/squib/version.rb +1 -1
  139. data/samples/{backend.rb → backend/_backend.rb} +2 -2
  140. data/samples/basic.rb +3 -3
  141. data/samples/bug134.rb +14 -0
  142. data/samples/build_groups/build_groups.rb +36 -0
  143. data/samples/cairo_access.rb +12 -1
  144. data/samples/{colors.rb → colors/_colors.rb} +12 -12
  145. data/samples/{gradients.rb → colors/_gradients.rb} +1 -1
  146. data/samples/config_text_markup.rb +2 -2
  147. data/samples/custom-config.yml +5 -5
  148. data/samples/custom_config.rb +18 -18
  149. data/samples/{csv_import.rb → data/_csv.rb} +8 -1
  150. data/samples/{excel.rb → data/_excel.rb} +3 -3
  151. data/samples/embed_text.rb +21 -0
  152. data/samples/hello_world.rb +1 -1
  153. data/samples/{load_images.rb → images/_more_load_images.rb} +2 -2
  154. data/samples/layouts.rb +11 -1
  155. data/samples/layouts_builtin.rb +51 -51
  156. data/samples/offset.svg +71 -71
  157. data/samples/ranges.rb +7 -7
  158. data/samples/{hand.rb → saves/_hand.rb} +1 -2
  159. data/samples/{portrait-landscape.rb → saves/_portrait_landscape.rb} +4 -4
  160. data/samples/{saves.rb → saves/_saves.rb} +0 -0
  161. data/samples/{showcase.rb → saves/_showcase.rb} +2 -2
  162. data/samples/{draw_shapes.rb → shapes/_draw_shapes.rb} +1 -1
  163. data/samples/text/_text.rb +4 -3
  164. data/samples/text_options.rb +6 -6
  165. data/samples/unicode.rb +1 -1
  166. data/spec/api/api_data_spec.rb +59 -4
  167. data/spec/api/api_settings_spec.rb +1 -1
  168. data/spec/args/box_spec.rb +7 -7
  169. data/spec/args/draw_spec.rb +19 -19
  170. data/spec/args/embed_key_spec.rb +13 -13
  171. data/spec/args/input_file_spec.rb +2 -2
  172. data/spec/args/paint_spec.rb +5 -5
  173. data/spec/args/paragraph_spec.rb +28 -28
  174. data/spec/args/range_spec.rb +1 -1
  175. data/spec/args/save_batch_spec.rb +10 -10
  176. data/spec/args/scale_box_spec.rb +9 -9
  177. data/spec/args/sheet_spec.rb +8 -8
  178. data/spec/args/showcase_special_spec.rb +15 -15
  179. data/spec/args/transform_spec.rb +4 -4
  180. data/spec/args/typographer_spec.rb +11 -11
  181. data/spec/args/unit_conversion_spec.rb +2 -2
  182. data/spec/card_spec.rb +1 -1
  183. data/spec/commands/new_spec.rb +1 -1
  184. data/spec/data/csv/custom_opts.csv +2 -0
  185. data/spec/data/csv/newline.csv +3 -0
  186. data/spec/data/csv/qty.csv +2 -2
  187. data/spec/data/csv/qty_named.csv +2 -2
  188. data/spec/data/csv/with_spaces.csv +2 -2
  189. data/spec/data/csv/yield.csv +3 -0
  190. data/spec/data/samples/{autoscale_font.rb.txt → autoscale_font/_autoscale_font.rb.txt} +55 -18
  191. data/spec/data/samples/cairo_access.rb.txt +24 -0
  192. data/spec/data/samples/{gradients.rb.txt → colors/_gradients.rb.txt} +0 -0
  193. data/spec/data/samples/config_text_markup.rb.txt +72 -72
  194. data/spec/data/samples/custom_config.rb.txt +1 -0
  195. data/spec/data/samples/{csv_import.rb.txt → data/_csv.rb.txt} +0 -0
  196. data/spec/data/samples/{excel.rb.txt → data/_excel.rb.txt} +0 -0
  197. data/spec/data/samples/embed_text.rb.txt +79 -0
  198. data/spec/data/samples/hello_world.rb.txt +36 -36
  199. data/spec/data/samples/{load_images.rb.txt → images/_more_load_images.rb.txt} +4 -4
  200. data/spec/data/samples/{hand.rb.txt → saves/_hand.rb.txt} +0 -0
  201. data/spec/data/samples/{portrait-landscape.rb.txt → saves/_portrait_landscape.rb.txt} +11 -7
  202. data/spec/data/samples/{save_pdf.rb.txt → saves/_save_pdf.rb.txt} +0 -0
  203. data/spec/data/samples/{saves.rb.txt → saves/_saves.rb.txt} +3 -4
  204. data/spec/data/samples/{showcase.rb.txt → saves/_showcase.rb.txt} +0 -0
  205. data/spec/data/samples/{draw_shapes.rb.txt → shapes/_draw_shapes.rb.txt} +0 -0
  206. data/spec/data/samples/text_options.rb.txt +1125 -1125
  207. data/spec/graphics/cairo_context_wrapper_spec.rb +10 -10
  208. data/spec/graphics/graphics_save_doc_spec.rb +11 -5
  209. data/spec/layout_parser_spec.rb +21 -9
  210. data/spec/logger_spec.rb +2 -2
  211. data/spec/samples/run_samples_spec.rb +1 -1
  212. data/spec/samples/samples_regression_spec.rb +16 -18
  213. data/spec/samples/sanity.rb +9 -9
  214. data/spec/sanity/.gitignore +1 -0
  215. data/spec/sanity/sanity.html.erb +42 -0
  216. data/spec/sanity/sanity_test.rb +42 -0
  217. data/spec/sanity/tests.yml +12 -0
  218. data/spec/spec_helper.rb +22 -20
  219. data/squib.gemspec +3 -4
  220. metadata +143 -81
  221. data/.rspec +0 -1
  222. data/.yardopts +0 -10
  223. data/samples/autoscale_font.rb +0 -27
  224. data/samples/backend-config.yml +0 -5
  225. data/samples/color_shortcuts.rb +0 -6
  226. data/samples/explode_quantities.xlsx +0 -0
  227. data/samples/quantity_explosion.csv +0 -3
  228. data/samples/sample.csv +0 -3
  229. data/samples/sample.xlsx +0 -0
  230. data/squib.sublime-project +0 -42
@@ -7,147 +7,147 @@ describe Squib::Args::Paragraph do
7
7
 
8
8
  context 'str validator' do
9
9
  it 'converts everything to string' do
10
- para.load!( {str: 5} )
10
+ para.load!({ str: 5 })
11
11
  expect(para.str).to eq ['5']
12
12
  end
13
13
  end
14
14
 
15
15
  context 'font validator' do
16
16
  it 'uses deck font by default' do
17
- para.load!( {} )
17
+ para.load!({})
18
18
  expect(para.font).to eq ['FooFont 32']
19
19
  end
20
20
 
21
21
  it 'uses system default font when deck font is :default' do
22
22
  para = Squib::Args::Paragraph.new(:default)
23
- para.load!( {} )
23
+ para.load!({})
24
24
  expect(para.font).to eq [Squib::DEFAULT_FONT]
25
25
  end
26
26
 
27
27
  it 'uses specified font when given' do
28
- para.load!( {font: 'MyFont 8'})
28
+ para.load!({ font: 'MyFont 8' })
29
29
  expect(para.font).to eq ['MyFont 8']
30
30
  end
31
31
  end
32
32
 
33
33
  context 'align validator' do
34
34
  it 'converts to pango left' do
35
- para.load!( { align: :left } )
35
+ para.load!({ align: :left })
36
36
  expect(para.align).to eq [Pango::ALIGN_LEFT]
37
37
  end
38
38
 
39
39
  it 'converts to pango right' do
40
- para.load!( { align: :RIGHT } )
40
+ para.load!({ align: :RIGHT })
41
41
  expect(para.align).to eq [Pango::ALIGN_RIGHT]
42
42
  end
43
43
 
44
44
  it 'converts to pango center' do
45
- para.load!( { align: 'center' } )
45
+ para.load!({ align: 'center' })
46
46
  expect(para.align).to eq [Pango::ALIGN_CENTER]
47
47
  end
48
48
 
49
49
  it 'raises an exception on anything else' do
50
- expect { para.load!( { align: 'foo' } ) }.to raise_error(ArgumentError, 'align must be one of: center, left, right')
50
+ expect { para.load!({ align: 'foo' }) }.to raise_error(ArgumentError, 'align must be one of: center, left, right')
51
51
  end
52
52
  end
53
53
 
54
54
  context 'wrap validator' do
55
55
  it 'converts to pango wrap word' do
56
- para.load!( { wrap: 'word'} )
56
+ para.load!({ wrap: 'word' })
57
57
  expect(para.wrap).to eq [Pango::WRAP_WORD]
58
58
  end
59
59
 
60
60
  it 'converts to pango wrap char' do
61
- para.load!( { wrap: 'WORD_ChAr'} )
61
+ para.load!({ wrap: 'WORD_ChAr' })
62
62
  expect(para.wrap).to eq [Pango::WRAP_WORD_CHAR]
63
63
  end
64
64
 
65
65
  it 'converts to pango wrap char on true' do
66
- para.load!( { wrap: true} )
66
+ para.load!({ wrap: true })
67
67
  expect(para.wrap).to eq [Pango::WRAP_WORD_CHAR]
68
68
  end
69
69
 
70
70
  it 'converts to pango wrap char with false' do
71
- para.load!( { wrap: false} )
71
+ para.load!({ wrap: false })
72
72
  expect(para.wrap).to eq [Pango::WRAP_CHAR]
73
73
  end
74
74
 
75
75
  it 'raises an exception on anything else' do
76
- expect { para.load!( {wrap: 'foo' }) }.to raise_error(ArgumentError, 'wrap must be one of: word, char, word_char, true, or false')
76
+ expect { para.load!({ wrap: 'foo' }) }.to raise_error(ArgumentError, 'wrap must be one of: word, char, word_char, true, or false')
77
77
  end
78
78
  end
79
79
 
80
80
  context 'ellipsize validator' do
81
81
  it 'converts to pango on none and false' do
82
- para.load!( { ellipsize: 'none'} )
82
+ para.load!({ ellipsize: 'none' })
83
83
  expect(para.ellipsize).to eq [Pango::Layout::ELLIPSIZE_NONE]
84
84
  end
85
85
 
86
86
  it 'converts to pango with start' do
87
- para.load!( { ellipsize: :StArt} )
87
+ para.load!({ ellipsize: :StArt })
88
88
  expect(para.ellipsize).to eq [Pango::Layout::ELLIPSIZE_START]
89
89
  end
90
90
 
91
91
  it 'converts to pango middle' do
92
- para.load!( { ellipsize: 'middle'} )
92
+ para.load!({ ellipsize: 'middle' })
93
93
  expect(para.ellipsize).to eq [Pango::Layout::ELLIPSIZE_MIDDLE]
94
94
  end
95
95
 
96
96
  it 'converts to pango end' do
97
- para.load!( { ellipsize: 'END'} )
97
+ para.load!({ ellipsize: 'END' })
98
98
  expect(para.ellipsize).to eq [Pango::Layout::ELLIPSIZE_END]
99
99
  end
100
100
 
101
101
  it 'raises an exception on anything else' do
102
- expect { para.load!( {ellipsize: 'foo' }) }.to raise_error(ArgumentError, 'ellipsize must be one of: none, start, middle, end, true, or false')
102
+ expect { para.load!({ ellipsize: 'foo' }) }.to raise_error(ArgumentError, 'ellipsize must be one of: none, start, middle, end, true, or false')
103
103
  end
104
104
  end
105
105
 
106
106
  context 'justify validator' do
107
107
  it 'allows nil' do
108
- para.load!( { justify: nil} )
108
+ para.load!({ justify: nil })
109
109
  expect(para.justify).to eq [nil]
110
110
  end
111
111
 
112
112
  it 'can be true' do
113
- para.load!( { justify: true} )
113
+ para.load!({ justify: true })
114
114
  expect(para.justify).to eq [true]
115
115
  end
116
116
 
117
117
  it 'can be false' do
118
- para.load!( { justify: false} )
118
+ para.load!({ justify: false })
119
119
  expect(para.justify).to eq [false]
120
120
  end
121
121
 
122
122
  it 'raises an exception on anything else' do
123
- expect { para.load!( {justify: 'false' }) }.to raise_error(ArgumentError, 'justify must be one of: nil, true, or false')
123
+ expect { para.load!({ justify: 'false' }) }.to raise_error(ArgumentError, 'justify must be one of: nil, true, or false')
124
124
  end
125
125
  end
126
126
 
127
127
  context 'spacing validator' do
128
128
  it 'allows nil' do
129
- para.load!( { spacing: nil} )
129
+ para.load!({ spacing: nil })
130
130
  expect(para.spacing).to eq [nil]
131
131
  end
132
132
  it 'is converted to Pango space' do
133
- para.load!( { spacing: 519} )
133
+ para.load!({ spacing: 519 })
134
134
  expect(para.spacing).to eq [Pango::SCALE * 519.0]
135
135
  end
136
136
 
137
137
  it 'raises an exception if not a float' do
138
- expect { para.load!( {spacing: /foo/ }) }.to raise_error(ArgumentError, 'spacing must be a number or nil')
138
+ expect { para.load!({ spacing: /foo/ }) }.to raise_error(ArgumentError, 'spacing must be a number or nil')
139
139
  end
140
140
  end
141
141
 
142
142
  context 'valign validator' do
143
143
  it 'converts top' do
144
- para.load!( { valign: :top} )
144
+ para.load!({ valign: :top })
145
145
  expect(para.valign).to eq ['top']
146
146
  end
147
147
 
148
148
  it 'raises an exception if not one of the three' do
149
- expect { para.load!( {valign: 'foo' }) }.to raise_error(ArgumentError, 'valign must be one of: top, middle, bottom')
149
+ expect { para.load!({ valign: 'foo' }) }.to raise_error(ArgumentError, 'valign must be one of: top, middle, bottom')
150
150
  end
151
151
  end
152
152
 
153
- end
153
+ end
@@ -38,4 +38,4 @@ describe Squib::Args::CardRange do
38
38
  expect(range.to_a).to eq([])
39
39
  end
40
40
 
41
- end
41
+ end
@@ -6,12 +6,12 @@ describe Squib::Args::SaveBatch do
6
6
 
7
7
  context 'dir' do
8
8
  it 'is created if not exists (and warns)' do
9
- opts = {dir: 'tocreate'}
9
+ opts = { dir: 'tocreate' }
10
10
  Dir.chdir(output_dir) do
11
11
  FileUtils.rm_rf('tocreate', secure: true)
12
12
  expect(Squib.logger).to receive(:warn).with("Dir 'tocreate' does not exist, creating it.").once
13
13
  save_batch.load! opts
14
- expect(save_batch).to have_attributes({dir: ['tocreate']})
14
+ expect(save_batch).to have_attributes({ dir: ['tocreate'] })
15
15
  expect(Dir.exists? 'tocreate').to be true
16
16
  end
17
17
  end
@@ -21,29 +21,29 @@ describe Squib::Args::SaveBatch do
21
21
  it 'does nothing by default' do
22
22
  opts = {}
23
23
  save_batch.load! opts
24
- expect(save_batch[0]).to have_attributes({rotate: false, angle: 0})
24
+ expect(save_batch[0]).to have_attributes({ rotate: false, angle: 0 })
25
25
  end
26
26
 
27
27
  it 'rotates by pi/2 with true' do
28
- opts = {rotate: true}
28
+ opts = { rotate: true }
29
29
  save_batch.load! opts
30
- expect(save_batch[0]).to have_attributes({rotate: true, angle: Math::PI / 2})
30
+ expect(save_batch[0]).to have_attributes({ rotate: true, angle: Math::PI / 2 })
31
31
  end
32
32
 
33
33
  it 'rotates by pi/2' do
34
- opts = {rotate: :clockwise}
34
+ opts = { rotate: :clockwise }
35
35
  save_batch.load! opts
36
- expect(save_batch[0]).to have_attributes({rotate: true, angle: Math::PI / 2})
36
+ expect(save_batch[0]).to have_attributes({ rotate: true, angle: Math::PI / 2 })
37
37
  end
38
38
 
39
39
  it 'rotates by pi/2 with counterclockwise' do
40
- opts = {rotate: :counterclockwise}
40
+ opts = { rotate: :counterclockwise }
41
41
  save_batch.load! opts
42
- expect(save_batch[0]).to have_attributes({rotate: true, angle: 3 * Math::PI / 2})
42
+ expect(save_batch[0]).to have_attributes({ rotate: true, angle: 3 * Math::PI / 2 })
43
43
  end
44
44
 
45
45
  it 'raises error on a number' do
46
- opts = {rotate: 5.0}
46
+ opts = { rotate: 5.0 }
47
47
  expect { save_batch.load!(opts) }.to raise_error('invalid option to rotate: only [true, false, :clockwise, :counterclockwise]')
48
48
  end
49
49
  end
@@ -6,7 +6,7 @@ describe Squib::Args::ScaleBox do
6
6
 
7
7
  context 'unit conversion' do
8
8
  it 'converts units on all args' do
9
- args = {x: ['1in', '2in'], y: 300, width: '1in', height: '1in'}
9
+ args = { x: ['1in', '2in'], y: 300, width: '1in', height: '1in' }
10
10
  box.load!(args, expand_by: 2)
11
11
  expect(box).to have_attributes(
12
12
  x: [300, 600],
@@ -19,7 +19,7 @@ describe Squib::Args::ScaleBox do
19
19
 
20
20
  context 'validation' do
21
21
  it 'replaces with deck width and height' do
22
- args = {width: :deck, height: :deck}
22
+ args = { width: :deck, height: :deck }
23
23
  deck = OpenStruct.new(width: 123, height: 456)
24
24
  box = Squib::Args::Box.new(deck)
25
25
  box.load!(args, expand_by: 1)
@@ -27,41 +27,41 @@ describe Squib::Args::ScaleBox do
27
27
  end
28
28
 
29
29
  it 'allows :native' do
30
- args = {width: :native, height: :native}
30
+ args = { width: :native, height: :native }
31
31
  box.load!(args, expand_by: 1)
32
32
  expect(box).to have_attributes(width: [:native], height: [:native])
33
33
  end
34
34
 
35
35
  it 'allows native to be a string' do
36
- args = {width: 'native'}
36
+ args = { width: 'native' }
37
37
  box.load!(args, expand_by: 1)
38
38
  expect(box).to have_attributes(width: [:native], height: [:native])
39
39
  end
40
40
 
41
41
  it 'allows :scale on width if height has to_f' do
42
- args = {width: :scale, height: 75}
42
+ args = { width: :scale, height: 75 }
43
43
  box.load!(args, expand_by: 1)
44
44
  expect(box).to have_attributes(width: [:scale], height: [75])
45
45
  end
46
46
 
47
47
  it 'allows :scale on width if height has to_f' do
48
- args = {width: 75, height: :scale}
48
+ args = { width: 75, height: :scale }
49
49
  box.load!(args, expand_by: 1)
50
50
  expect(box).to have_attributes(width: [75], height: [:scale])
51
51
  end
52
52
 
53
53
  it 'disallows both :scale' do
54
- args = {width: :scale, height: :scale}
54
+ args = { width: :scale, height: :scale }
55
55
  expect { box.load!(args, expand_by: 1) }.to raise_error('if width is :scale, height must be a number')
56
56
  end
57
57
 
58
58
  it 'disallows non-to_f on width' do
59
- args = {width: :foo}
59
+ args = { width: :foo }
60
60
  expect { box.load!(args, expand_by: 1) }.to raise_error('width must be a number, :scale, :native, or :deck')
61
61
  end
62
62
 
63
63
  it 'disallows non-to_f on height' do
64
- args = {height: :foo}
64
+ args = { height: :foo }
65
65
  expect { box.load!(args, expand_by: 1) }.to raise_error('height must be a number, :scale, :native, or :deck')
66
66
  end
67
67
 
@@ -4,11 +4,11 @@ require 'squib/args/sheet'
4
4
  describe Squib::Args::Sheet do
5
5
 
6
6
  context 'dsl overrides' do
7
- subject(:sheet) { Squib::Args::Sheet.new({}, {file: 'foo'}) }
7
+ subject(:sheet) { Squib::Args::Sheet.new({}, { file: 'foo' }) }
8
8
 
9
9
  it 'works when specified' do
10
10
  sheet.load!({}) # go right to defaults
11
- expect(sheet.file).to eq( 'foo' ) # dsl method default override
11
+ expect(sheet.file).to eq('foo') # dsl method default override
12
12
  end
13
13
 
14
14
  end
@@ -29,25 +29,25 @@ describe Squib::Args::Sheet do
29
29
  end
30
30
 
31
31
  it 'computes properly on non-integer' do
32
- opts = {columns: 1, rows: :infinite}
32
+ opts = { columns: 1, rows: :infinite }
33
33
  sheet.load! opts
34
- expect(sheet).to have_attributes( columns: 1, rows: 4 )
34
+ expect(sheet).to have_attributes(columns: 1, rows: 4)
35
35
  end
36
36
 
37
37
  it 'computes properly on unspecified rows' do
38
- opts = {columns: 1}
38
+ opts = { columns: 1 }
39
39
  sheet.load! opts
40
- expect(sheet).to have_attributes( columns: 1, rows: 4 )
40
+ expect(sheet).to have_attributes(columns: 1, rows: 4)
41
41
  end
42
42
 
43
43
  it 'computes properly on unspecified, too-big column' do
44
44
  opts = {}
45
45
  sheet.load! opts
46
- expect(sheet).to have_attributes( columns: 5, rows: 1 )
46
+ expect(sheet).to have_attributes(columns: 5, rows: 1)
47
47
  end
48
48
 
49
49
  it 'fails on a non-integer column' do
50
- opts = {columns: :infinite}
50
+ opts = { columns: :infinite }
51
51
  expect { sheet.load!(opts) }.to raise_error('columns must be an integer')
52
52
  end
53
53
 
@@ -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
@@ -3,11 +3,11 @@ require 'squib/args/transform'
3
3
 
4
4
  describe Squib::Args::Box do
5
5
  subject(:trans) { Squib::Args::Transform.new }
6
- let(:expected_defaults) { {x: [0], y: [0], crop_width: [:native], crop_height: [:native] } }
6
+ let(:expected_defaults) { { x: [0], y: [0], crop_width: [:native], crop_height: [:native] } }
7
7
 
8
8
  context 'validation' do
9
9
  it 'replaces with deck width and height' do
10
- args = {crop_width: :deck, crop_height: :deck}
10
+ args = { crop_width: :deck, crop_height: :deck }
11
11
  deck = OpenStruct.new(width: 123, height: 456)
12
12
  trans = Squib::Args::Transform.new(deck)
13
13
  trans.load!(args, expand_by: 1)
@@ -15,11 +15,11 @@ describe Squib::Args::Box do
15
15
  end
16
16
 
17
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}
18
+ args = { crop_corner_x_radius: 1, crop_corner_y_radius: 2, crop_corner_radius: 3 }
19
19
  trans.load!(args, expand_by: 2)
20
20
  expect(trans).to have_attributes(crop_corner_x_radius: [3, 3], crop_corner_y_radius: [3, 3])
21
21
  end
22
22
 
23
23
  end
24
24
 
25
- end
25
+ end
@@ -24,48 +24,48 @@ describe Squib::Args::Typographer do
24
24
  expect(t.process(%{"foo"})).to eq(%{\u201Cfoo\u201D})
25
25
  end
26
26
 
27
- it "quotes in the middle of the string" do
27
+ it 'quotes in the middle of the string' do
28
28
  expect(t.process(%{hello "foo" world})).to eq(%{hello \u201Cfoo\u201D world})
29
29
  end
30
30
 
31
- it "single left quotes at the beginning" do
31
+ it 'single left quotes at the beginning' do
32
32
  expect(t.process(%{'foo})).to eq(%{\u2018foo})
33
33
  end
34
34
 
35
- it "single right quotes at the end" do
35
+ it 'single right quotes at the end' do
36
36
  expect(t.process(%{foo'})).to eq(%{foo\u2019})
37
37
  end
38
38
 
39
- it "single quotes in the middle" do
39
+ it 'single quotes in the middle' do
40
40
  expect(t.process(%{a 'foo' bar})).to eq(%{a \u2018foo\u2019 bar})
41
41
  end
42
42
 
43
- it "handles apostraphes" do
43
+ it 'handles apostraphes' do
44
44
  expect(t.process(%{can't})).to eq(%{can\u2019t})
45
45
  end
46
46
 
47
- it "single quotes inside double quotes" do
47
+ it 'single quotes inside double quotes' do
48
48
  expect(t.process(%{"'I can't do that', he said"})).to eq(%{\u201C\u2018I can\u2019t do that\u2019, he said\u201D})
49
49
  end
50
50
 
51
- it "replaces the straightforward ones" do
51
+ it 'replaces the straightforward ones' do
52
52
  expect(t.process(%{``hi...'' -- ---})).to eq(%{\u201Chi\u2026\u201D \u2013 \u2014})
53
53
  end
54
54
 
55
- it "does nothing on lone quotes" do
55
+ it 'does nothing on lone quotes' do
56
56
  expect(t.process(%{"})).to eq(%{"})
57
57
  expect(t.process(%{'})).to eq(%{'})
58
58
  end
59
59
 
60
- it "ignores stuff in <tags>" do
60
+ it 'ignores stuff in <tags>' do
61
61
  expect(t.process(%{<span weight="bold">"can't"</span>})).to eq(%{<span weight="bold">\u201Ccan\u2019t\u201D</span>})
62
62
  end
63
63
 
64
64
 
65
65
  context 'configured' do
66
- #TODO
66
+ # TODO
67
67
  end
68
68
 
69
69
 
70
70
 
71
- end
71
+ end