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.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.gitmodules +22 -0
- data/.travis.yml +4 -5
- data/CHANGELOG.md +23 -0
- data/CONTRIBUTING.md +40 -0
- data/README.md +25 -553
- data/RELEASE TODO.md +2 -2
- data/Rakefile +6 -64
- data/appveyor.yml +0 -4
- data/benchmarks/antialias_best.rb +2 -2
- data/benchmarks/antialias_fast.rb +2 -2
- data/benchmarks/{backend-memory.rb → backend_memory.rb} +2 -2
- data/benchmarks/{backend-svg.rb → backend_svg.rb} +2 -2
- data/benchmarks/tons_of_png.rb +1 -1
- data/benchmarks/tons_of_svg.rb +1 -1
- data/benchmarks/tons_of_text.rb +1 -1
- data/docs/Makefile +216 -0
- data/docs/_static/css/squibdocs.css +18 -0
- data/docs/args/draw.rst +36 -0
- data/docs/args/expansion.rst +3 -0
- data/docs/args/layout.rst +6 -0
- data/docs/args/output_dir.rst +6 -0
- data/docs/args/range.rst +6 -0
- data/docs/args/transform.rst +51 -0
- data/docs/args/trim.rst +11 -0
- data/docs/args/wh.rst +12 -0
- data/docs/args/xy.rst +12 -0
- data/docs/arrays.rst +77 -0
- data/docs/backends.rst +20 -0
- data/docs/bleed.rst +13 -0
- data/docs/build_groups.rst +47 -0
- data/docs/colors.rst +64 -0
- data/docs/conf.py +287 -0
- data/docs/config.rst +117 -0
- data/docs/data.rst +22 -0
- data/docs/dsl/background.rst +20 -0
- data/docs/dsl/build.rst +32 -0
- data/docs/dsl/build_groups.rst +23 -0
- data/docs/dsl/circle.rst +27 -0
- data/docs/dsl/cm.rst +19 -0
- data/docs/dsl/csv.rst +62 -0
- data/docs/dsl/curve.rst +63 -0
- data/docs/dsl/deck.rst +45 -0
- data/docs/dsl/disable_build.rst +28 -0
- data/docs/dsl/ellipse.rst +17 -0
- data/docs/dsl/enable_build.rst +25 -0
- data/docs/dsl/grid.rst +31 -0
- data/docs/dsl/hand.rst +40 -0
- data/docs/dsl/hint.rst +15 -0
- data/docs/dsl/inches.rst +19 -0
- data/docs/dsl/index.rst +9 -0
- data/docs/dsl/line.rst +52 -0
- data/docs/dsl/png.rst +49 -0
- data/docs/dsl/polygon.rst +28 -0
- data/docs/dsl/rect.rst +18 -0
- data/docs/dsl/save.rst +23 -0
- data/docs/dsl/save_pdf.rst +48 -0
- data/docs/dsl/save_png.rst +46 -0
- data/docs/dsl/save_sheet.rst +55 -0
- data/docs/dsl/showcase.rst +65 -0
- data/docs/dsl/star.rst +35 -0
- data/docs/dsl/svg.rst +119 -0
- data/docs/dsl/text.rst +294 -0
- data/docs/dsl/triangle.rst +38 -0
- data/docs/dsl/use_layout.rst +16 -0
- data/docs/dsl/xlsx.rst +50 -0
- data/docs/guides/game_icons.rst +2 -0
- data/docs/guides/getting-started/index.rst +5 -0
- data/docs/guides/getting-started/part_0_learning_ruby.rst +145 -0
- data/docs/guides/getting-started/part_1_zero_to_game.rst +216 -0
- data/docs/guides/getting-started/part_2_iconography.rst +152 -0
- data/docs/guides/getting-started/part_3_workflows.rst +4 -0
- data/docs/guides/git.rst +13 -0
- data/docs/guides/hello_world.rst +6 -0
- data/docs/help.rst +157 -0
- data/docs/index.rst +35 -0
- data/docs/install.rst +66 -0
- data/docs/layouts.rst +235 -0
- data/docs/learning.rst +10 -0
- data/docs/make.bat +263 -0
- data/docs/parameters.rst +26 -0
- data/docs/server.bat +1 -0
- data/docs/text_feature.rst +86 -0
- data/docs/units.rst +6 -0
- data/lib/squib.rb +4 -4
- data/lib/squib/api/background.rb +5 -10
- data/lib/squib/api/data.rb +30 -54
- data/lib/squib/api/groups.rb +47 -0
- data/lib/squib/api/image.rb +8 -67
- data/lib/squib/api/save.rb +15 -105
- data/lib/squib/api/settings.rb +8 -22
- data/lib/squib/api/shapes.rb +15 -185
- data/lib/squib/api/text.rb +9 -49
- data/lib/squib/api/text_embed.rb +12 -12
- data/lib/squib/api/units.rb +3 -17
- data/lib/squib/args/arg_loader.rb +6 -6
- data/lib/squib/args/box.rb +2 -2
- data/lib/squib/args/card_range.rb +1 -1
- data/lib/squib/args/color_validator.rb +2 -2
- data/lib/squib/args/coords.rb +2 -2
- data/lib/squib/args/csv_opts.rb +25 -0
- data/lib/squib/args/dir_validator.rb +1 -1
- data/lib/squib/args/draw.rb +2 -2
- data/lib/squib/args/embed_adjust.rb +1 -1
- data/lib/squib/args/embed_key.rb +1 -1
- data/lib/squib/args/hand_special.rb +37 -37
- data/lib/squib/args/import.rb +2 -2
- data/lib/squib/args/input_file.rb +1 -1
- data/lib/squib/args/paint.rb +3 -3
- data/lib/squib/args/paragraph.rb +2 -2
- data/lib/squib/args/save_batch.rb +2 -2
- data/lib/squib/args/scale_box.rb +1 -1
- data/lib/squib/args/sheet.rb +3 -3
- data/lib/squib/args/showcase_special.rb +2 -2
- data/lib/squib/args/svg_special.rb +1 -1
- data/lib/squib/args/transform.rb +2 -2
- data/lib/squib/args/typographer.rb +5 -4
- data/lib/squib/args/unit_conversion.rb +4 -4
- data/lib/squib/card.rb +8 -8
- data/lib/squib/conf.rb +5 -5
- data/lib/squib/deck.rb +20 -18
- data/lib/squib/graphics/cairo_context_wrapper.rb +3 -3
- data/lib/squib/graphics/gradient_regex.rb +1 -1
- data/lib/squib/graphics/hand.rb +2 -2
- data/lib/squib/graphics/save_doc.rb +9 -8
- data/lib/squib/graphics/save_images.rb +24 -11
- data/lib/squib/graphics/shapes.rb +16 -17
- data/lib/squib/graphics/showcase.rb +9 -9
- data/lib/squib/graphics/text.rb +21 -21
- data/lib/squib/layout_parser.rb +9 -9
- data/lib/squib/layouts/economy.yml +85 -85
- data/lib/squib/layouts/fantasy.yml +101 -101
- data/lib/squib/layouts/hand.yml +62 -62
- data/lib/squib/layouts/playing-card.yml +35 -35
- data/lib/squib/layouts/tuck_box.yml +45 -45
- data/lib/squib/sample_helpers.rb +1 -1
- data/lib/squib/version.rb +1 -1
- data/samples/{backend.rb → backend/_backend.rb} +2 -2
- data/samples/basic.rb +3 -3
- data/samples/bug134.rb +14 -0
- data/samples/build_groups/build_groups.rb +36 -0
- data/samples/cairo_access.rb +12 -1
- data/samples/{colors.rb → colors/_colors.rb} +12 -12
- data/samples/{gradients.rb → colors/_gradients.rb} +1 -1
- data/samples/config_text_markup.rb +2 -2
- data/samples/custom-config.yml +5 -5
- data/samples/custom_config.rb +18 -18
- data/samples/{csv_import.rb → data/_csv.rb} +8 -1
- data/samples/{excel.rb → data/_excel.rb} +3 -3
- data/samples/embed_text.rb +21 -0
- data/samples/hello_world.rb +1 -1
- data/samples/{load_images.rb → images/_more_load_images.rb} +2 -2
- data/samples/layouts.rb +11 -1
- data/samples/layouts_builtin.rb +51 -51
- data/samples/offset.svg +71 -71
- data/samples/ranges.rb +7 -7
- data/samples/{hand.rb → saves/_hand.rb} +1 -2
- data/samples/{portrait-landscape.rb → saves/_portrait_landscape.rb} +4 -4
- data/samples/{saves.rb → saves/_saves.rb} +0 -0
- data/samples/{showcase.rb → saves/_showcase.rb} +2 -2
- data/samples/{draw_shapes.rb → shapes/_draw_shapes.rb} +1 -1
- data/samples/text/_text.rb +4 -3
- data/samples/text_options.rb +6 -6
- data/samples/unicode.rb +1 -1
- data/spec/api/api_data_spec.rb +59 -4
- data/spec/api/api_settings_spec.rb +1 -1
- data/spec/args/box_spec.rb +7 -7
- data/spec/args/draw_spec.rb +19 -19
- data/spec/args/embed_key_spec.rb +13 -13
- data/spec/args/input_file_spec.rb +2 -2
- data/spec/args/paint_spec.rb +5 -5
- data/spec/args/paragraph_spec.rb +28 -28
- data/spec/args/range_spec.rb +1 -1
- data/spec/args/save_batch_spec.rb +10 -10
- data/spec/args/scale_box_spec.rb +9 -9
- data/spec/args/sheet_spec.rb +8 -8
- data/spec/args/showcase_special_spec.rb +15 -15
- data/spec/args/transform_spec.rb +4 -4
- data/spec/args/typographer_spec.rb +11 -11
- data/spec/args/unit_conversion_spec.rb +2 -2
- data/spec/card_spec.rb +1 -1
- data/spec/commands/new_spec.rb +1 -1
- data/spec/data/csv/custom_opts.csv +2 -0
- data/spec/data/csv/newline.csv +3 -0
- data/spec/data/csv/qty.csv +2 -2
- data/spec/data/csv/qty_named.csv +2 -2
- data/spec/data/csv/with_spaces.csv +2 -2
- data/spec/data/csv/yield.csv +3 -0
- data/spec/data/samples/{autoscale_font.rb.txt → autoscale_font/_autoscale_font.rb.txt} +55 -18
- data/spec/data/samples/cairo_access.rb.txt +24 -0
- data/spec/data/samples/{gradients.rb.txt → colors/_gradients.rb.txt} +0 -0
- data/spec/data/samples/config_text_markup.rb.txt +72 -72
- data/spec/data/samples/custom_config.rb.txt +1 -0
- data/spec/data/samples/{csv_import.rb.txt → data/_csv.rb.txt} +0 -0
- data/spec/data/samples/{excel.rb.txt → data/_excel.rb.txt} +0 -0
- data/spec/data/samples/embed_text.rb.txt +79 -0
- data/spec/data/samples/hello_world.rb.txt +36 -36
- data/spec/data/samples/{load_images.rb.txt → images/_more_load_images.rb.txt} +4 -4
- data/spec/data/samples/{hand.rb.txt → saves/_hand.rb.txt} +0 -0
- data/spec/data/samples/{portrait-landscape.rb.txt → saves/_portrait_landscape.rb.txt} +11 -7
- data/spec/data/samples/{save_pdf.rb.txt → saves/_save_pdf.rb.txt} +0 -0
- data/spec/data/samples/{saves.rb.txt → saves/_saves.rb.txt} +3 -4
- data/spec/data/samples/{showcase.rb.txt → saves/_showcase.rb.txt} +0 -0
- data/spec/data/samples/{draw_shapes.rb.txt → shapes/_draw_shapes.rb.txt} +0 -0
- data/spec/data/samples/text_options.rb.txt +1125 -1125
- data/spec/graphics/cairo_context_wrapper_spec.rb +10 -10
- data/spec/graphics/graphics_save_doc_spec.rb +11 -5
- data/spec/layout_parser_spec.rb +21 -9
- data/spec/logger_spec.rb +2 -2
- data/spec/samples/run_samples_spec.rb +1 -1
- data/spec/samples/samples_regression_spec.rb +16 -18
- data/spec/samples/sanity.rb +9 -9
- data/spec/sanity/.gitignore +1 -0
- data/spec/sanity/sanity.html.erb +42 -0
- data/spec/sanity/sanity_test.rb +42 -0
- data/spec/sanity/tests.yml +12 -0
- data/spec/spec_helper.rb +22 -20
- data/squib.gemspec +3 -4
- metadata +143 -81
- data/.rspec +0 -1
- data/.yardopts +0 -10
- data/samples/autoscale_font.rb +0 -27
- data/samples/backend-config.yml +0 -5
- data/samples/color_shortcuts.rb +0 -6
- data/samples/explode_quantities.xlsx +0 -0
- data/samples/quantity_explosion.csv +0 -3
- data/samples/sample.csv +0 -3
- data/samples/sample.xlsx +0 -0
- data/squib.sublime-project +0 -42
data/spec/args/paragraph_spec.rb
CHANGED
|
@@ -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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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!(
|
|
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
|
data/spec/args/range_spec.rb
CHANGED
|
@@ -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
|
data/spec/args/scale_box_spec.rb
CHANGED
|
@@ -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
|
|
data/spec/args/sheet_spec.rb
CHANGED
|
@@ -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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
data/spec/args/transform_spec.rb
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
43
|
+
it 'handles apostraphes' do
|
|
44
44
|
expect(t.process(%{can't})).to eq(%{can\u2019t})
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
it
|
|
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
|
|
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
|
|
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
|
|
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
|