squib 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
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