skeptick 0.1.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 (45) hide show
  1. data/.gitignore +18 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +584 -0
  5. data/Rakefile +10 -0
  6. data/foo.rb +1 -0
  7. data/lib/skeptick.rb +2 -0
  8. data/lib/skeptick/chain.rb +55 -0
  9. data/lib/skeptick/chain/dsl_context.rb +21 -0
  10. data/lib/skeptick/command.rb +46 -0
  11. data/lib/skeptick/convert.rb +109 -0
  12. data/lib/skeptick/convert/dsl_context.rb +27 -0
  13. data/lib/skeptick/core.rb +46 -0
  14. data/lib/skeptick/error.rb +4 -0
  15. data/lib/skeptick/helper.rb +26 -0
  16. data/lib/skeptick/image.rb +69 -0
  17. data/lib/skeptick/image/dsl_context.rb +29 -0
  18. data/lib/skeptick/railtie.rb +8 -0
  19. data/lib/skeptick/sugar.rb +8 -0
  20. data/lib/skeptick/sugar/composition.rb +55 -0
  21. data/lib/skeptick/sugar/debugging.rb +12 -0
  22. data/lib/skeptick/sugar/drawing.rb +32 -0
  23. data/lib/skeptick/sugar/edges.rb +70 -0
  24. data/lib/skeptick/sugar/formatting.rb +12 -0
  25. data/lib/skeptick/sugar/geometry.rb +38 -0
  26. data/lib/skeptick/sugar/resizing.rb +16 -0
  27. data/lib/skeptick/sugar/sequence_manipulation.rb +43 -0
  28. data/lib/skeptick/version.rb +3 -0
  29. data/logo.png +0 -0
  30. data/logo.rb +45 -0
  31. data/refresh_preview.scpt +2 -0
  32. data/skeptick.gemspec +21 -0
  33. data/test/chain_test.rb +94 -0
  34. data/test/convert_test.rb +177 -0
  35. data/test/image_test.rb +145 -0
  36. data/test/sugar/composition_test.rb +273 -0
  37. data/test/sugar/debugging_test.rb +24 -0
  38. data/test/sugar/drawing_test.rb +86 -0
  39. data/test/sugar/edges_test.rb +99 -0
  40. data/test/sugar/formatting_test.rb +19 -0
  41. data/test/sugar/geometry_test.rb +92 -0
  42. data/test/sugar/resizing_test.rb +25 -0
  43. data/test/sugar/sequence_manipulation_test.rb +98 -0
  44. data/test/test_helper.rb +11 -0
  45. metadata +117 -0
@@ -0,0 +1,177 @@
1
+ require_relative 'test_helper'
2
+
3
+ # DISCLAIMER
4
+ # These tests are not examples of proper usage of ImageMagick.
5
+ # In fact, most of them are entirely invalid. The point is to
6
+ # test the logic of building strings.
7
+ class ConvertTest < Skeptick::TestCase
8
+ include Skeptick
9
+
10
+ def test_dsl_method_available
11
+ assert_respond_to self, :convert
12
+ end
13
+
14
+ def test_lvars_from_external_context_are_accessible
15
+ foo = '-test'
16
+ cmd = convert { set foo }
17
+ assert_equal 'convert -test miff:-', cmd.to_s
18
+ end
19
+
20
+ def test_methods_from_external_context_are_accessible
21
+ context = Class.new do
22
+ include Skeptick
23
+ def foo; :foo end
24
+ def cmd; convert { set foo } end
25
+ end
26
+
27
+ assert_equal 'convert -foo miff:-', context.new.cmd.to_s
28
+ end
29
+
30
+ def test_minimal_convert
31
+ cmd = convert
32
+ assert_equal 'convert miff:-', cmd.to_s
33
+ end
34
+
35
+ def test_convert_with_input
36
+ cmd = convert('foo')
37
+ assert_equal 'convert foo miff:-', cmd.to_s
38
+ end
39
+
40
+ def test_convert_with_2_inputs
41
+ cmd = convert('foo', 'bar')
42
+ assert_equal 'convert foo bar miff:-', cmd.to_s
43
+ end
44
+
45
+ def test_convert_with_output
46
+ cmd = convert(to: 'foo')
47
+ assert_equal 'convert foo', cmd.to_s
48
+ end
49
+
50
+ def test_convert_with_input_and_output
51
+ cmd = convert('foo', to: 'bar')
52
+ assert_equal 'convert foo bar', cmd.to_s
53
+ end
54
+
55
+ def test_convert_with_2_inputs_and_output
56
+ cmd = convert('foo', 'bar', to: 'baz')
57
+ assert_equal 'convert foo bar baz', cmd.to_s
58
+ end
59
+
60
+ def test_convert_with_input_in_block
61
+ cmd = convert { image 'foo' }
62
+ assert_equal 'convert foo miff:-', cmd.to_s
63
+ end
64
+
65
+ def test_convert_with_input_in_block_and_output
66
+ cmd = convert(to: 'bar') { image 'foo' }
67
+ assert_equal 'convert foo bar', cmd.to_s
68
+ end
69
+
70
+ def test_convert_with_2_input_styles
71
+ cmd = convert('foo') { image 'bar' }
72
+ assert_equal 'convert foo bar miff:-', cmd.to_s
73
+ end
74
+
75
+ def test_convert_with_2_input_styles_and_output
76
+ cmd = convert('foo', to: 'baz') { image 'bar' }
77
+ assert_equal 'convert foo bar baz', cmd.to_s
78
+ end
79
+
80
+ def test_convert_with_ops
81
+ cmd = convert { with '-foo' }
82
+ assert_equal 'convert -foo miff:-', cmd.to_s
83
+ end
84
+
85
+ def test_convert_with_concatenated_ops
86
+ cmd = convert { with '-foo', 'bar' }
87
+ assert_equal 'convert -foo bar miff:-', cmd.to_s
88
+ end
89
+
90
+ def test_convert_with_multiple_ops
91
+ cmd = convert { with '-foo'; with '+bar' }
92
+ assert_equal 'convert -foo +bar miff:-', cmd.to_s
93
+ end
94
+
95
+ def test_convert_with_multiple_concatenated_ops
96
+ cmd = convert { with '-foo', 'bar'; with '+baz', 'qux' }
97
+ assert_equal 'convert -foo bar +baz qux miff:-', cmd.to_s
98
+ end
99
+
100
+ def test_convert_with_ops_inputs_and_output
101
+ cmd = convert('foo', 'bar', to: 'baz') do
102
+ image 'qux'
103
+ with '+quux'
104
+ with '-corge', 'grault'
105
+ end
106
+
107
+ assert_equal 'convert foo bar qux +quux -corge grault baz', cmd.to_s
108
+ end
109
+
110
+ def test_nested_convert
111
+ cmd = convert(to: 'baz') do
112
+ convert('foo') { with 'bar' }
113
+ end
114
+
115
+ assert_equal 'convert ( foo bar ) baz', cmd.to_s
116
+ end
117
+
118
+ def test_nested_convert_ignores_output
119
+ cmd = convert(to: 'baz') do
120
+ convert('foo', to: 'nowhere') { with 'bar' }
121
+ end
122
+
123
+ assert_equal 'convert ( foo bar ) baz', cmd.to_s
124
+ end
125
+
126
+ def test_multi_image_nested_convert
127
+ cmd = convert('foo', to: 'bar') do
128
+ convert('qux') do
129
+ with '+asdf'
130
+ with '+fdsa'
131
+ end
132
+
133
+ image 'bleh'
134
+ with '-resize'
135
+ end
136
+
137
+ assert_equal 'convert foo ( qux +asdf +fdsa ) bleh -resize bar', cmd.to_s
138
+ end
139
+
140
+ def test_convert_composition
141
+ complex_image = convert('qux') do
142
+ with '+asdf'
143
+ with '+fdsa'
144
+ end
145
+
146
+ cmd = convert('foo', to: 'bar') do
147
+ image complex_image
148
+ image 'bleh'
149
+ with '-resize'
150
+ end
151
+
152
+ assert_equal 'convert foo ( qux +asdf +fdsa ) bleh -resize bar', cmd.to_s
153
+ end
154
+
155
+ def test_convert_double_nesting_with_composition
156
+ complex_image = convert('foo', to: 'nowhere') do
157
+ convert('bar', to: 'nowhere') do
158
+ convert('baz') do
159
+ image 'image1'
160
+ with '-option', 'qux'
161
+ end
162
+
163
+ image 'image2'
164
+ with '+option'
165
+ end
166
+ end
167
+
168
+ cmd = convert('image3') do
169
+ image complex_image
170
+ image 'image4'
171
+ with '-option', 'quux'
172
+ end
173
+
174
+ assert_equal 'convert image3 ( foo ( bar ( baz image1 -option qux ) ' +
175
+ 'image2 +option ) ) image4 -option quux miff:-', cmd.to_s
176
+ end
177
+ end
@@ -0,0 +1,145 @@
1
+ require_relative 'test_helper'
2
+
3
+ class ImageTest < Skeptick::TestCase
4
+ include Skeptick
5
+
6
+ def test_dsl_method_available
7
+ assert_respond_to self, :image
8
+ end
9
+
10
+ def test_set_prepends_to_image_segment
11
+ cmd = convert do
12
+ image do
13
+ image 'bar'
14
+ set '-foo'
15
+ end
16
+ end
17
+
18
+ assert_equal 'convert -foo bar miff:-', cmd.to_s
19
+ end
20
+
21
+ def test_apply_appends_to_image_segment
22
+ cmd = convert do
23
+ image do
24
+ apply '-foo'
25
+ image 'bar'
26
+ end
27
+ end
28
+
29
+ assert_equal 'convert bar -foo miff:-', cmd.to_s
30
+ end
31
+
32
+ def test_lvars_from_external_context_are_accessible
33
+ foo = '-test'
34
+
35
+ cmd = convert do
36
+ image do
37
+ apply foo
38
+ image 'bar'
39
+ end
40
+ end
41
+
42
+ assert_equal 'convert bar -test miff:-', cmd.to_s
43
+ end
44
+
45
+ def test_methods_from_external_context_are_accessible
46
+ context = Class.new do
47
+ include Skeptick
48
+ def foo; :foo end
49
+ def cmd
50
+ convert do
51
+ image do
52
+ apply foo
53
+ image 'bar'
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ assert_equal 'convert bar -foo miff:-', context.new.cmd.to_s
60
+ end
61
+
62
+ def test_inject_image_into_convert
63
+ sample = image do
64
+ set :size, '400x400'
65
+ image 'tile:granite:'
66
+ apply '-brightness-contrast', '38x-33'
67
+ apply :blur, '0x0.5'
68
+ end
69
+
70
+ cmd = convert do
71
+ set '-foo'
72
+ image sample
73
+ set '-bar'
74
+ end
75
+
76
+ assert_equal 'convert -foo -size 400x400 tile:granite: ' +
77
+ '-brightness-contrast 38x-33 -blur 0x0.5 -bar miff:-', cmd.to_s
78
+ end
79
+
80
+ def test_inject_image_into_convert_as_argument
81
+ sample = image do
82
+ set :size, '400x400'
83
+ image 'tile:granite:'
84
+ apply '-brightness-contrast', '38x-33'
85
+ apply :blur, '0x0.5'
86
+ end
87
+
88
+ cmd = convert(sample)
89
+ assert_equal 'convert -size 400x400 tile:granite: -brightness-contrast ' +
90
+ '38x-33 -blur 0x0.5 miff:-', cmd.to_s
91
+ end
92
+
93
+ def test_declare_image_inside_convert
94
+ cmd = convert do
95
+ set '-foo'
96
+ image do
97
+ set :size, '400x400'
98
+ image 'tile:granite:'
99
+ apply '-brightness-contrast', '38x-33'
100
+ apply :blur, '0x0.5'
101
+ end
102
+ set '-bar'
103
+ end
104
+
105
+ assert_equal 'convert -foo -size 400x400 tile:granite: ' +
106
+ '-brightness-contrast 38x-33 -blur 0x0.5 -bar miff:-', cmd.to_s
107
+ end
108
+
109
+ def test_nested_image
110
+ sample = image do
111
+ set :foo
112
+ image 'bar'
113
+ apply :baz
114
+ end
115
+
116
+ cmd = convert do
117
+ image do
118
+ set :size, '400x400'
119
+ image sample
120
+ apply '-brightness-contrast', '38x-33'
121
+ apply :blur, '0x0.5'
122
+ end
123
+ end
124
+
125
+ assert_equal 'convert -size 400x400 -foo bar -baz -brightness-contrast ' +
126
+ '38x-33 -blur 0x0.5 miff:-', cmd.to_s
127
+ end
128
+
129
+ def test_convert_as_image_object
130
+ sample = convert('foo', to: 'bar') do
131
+ set :baz
132
+ end
133
+
134
+ cmd = convert do
135
+ image do
136
+ set '-setting'
137
+ image sample
138
+ apply '-operation'
139
+ end
140
+ end
141
+
142
+ assert_equal 'convert -setting ( foo -baz ) -operation miff:-',
143
+ cmd.to_s
144
+ end
145
+ end
@@ -0,0 +1,273 @@
1
+ require_relative '../test_helper'
2
+ require 'skeptick/sugar/composition'
3
+
4
+ # DISCLAIMER
5
+ # These tests are not examples of proper usage of ImageMagick.
6
+ # In fact, most of them are entirely invalid. The point is to
7
+ # test the logic of building strings.
8
+ class CompositionTest < Skeptick::TestCase
9
+ include Skeptick
10
+
11
+ def test_compose_with_blending
12
+ cmd = compose(:over)
13
+ assert_equal 'convert -compose over -composite miff:-', cmd.to_s
14
+ end
15
+
16
+ def test_compose_with_input
17
+ cmd = compose(:over, 'foo')
18
+ assert_equal 'convert foo -compose over -composite miff:-', cmd.to_s
19
+ end
20
+
21
+ def test_compose_with_2_inputs
22
+ cmd = compose(:over, 'foo', 'bar')
23
+ assert_equal 'convert foo bar -compose over -composite miff:-', cmd.to_s
24
+ end
25
+
26
+ def test_compose_with_output
27
+ cmd = compose(:over, to: 'foo')
28
+ assert_equal 'convert -compose over -composite foo', cmd.to_s
29
+ end
30
+
31
+ def test_compose_with_input_and_output
32
+ cmd = compose(:over, 'foo', to: 'bar')
33
+ assert_equal 'convert foo -compose over -composite bar', cmd.to_s
34
+ end
35
+
36
+ def test_compose_with_2_inputs_and_output
37
+ cmd = compose(:over, 'foo', 'bar', to: 'baz')
38
+ assert_equal 'convert foo bar -compose over -composite baz', cmd.to_s
39
+ end
40
+
41
+ def test_compose_with_input_in_block
42
+ cmd = compose(:over) { image 'foo' }
43
+ assert_equal 'convert foo -compose over -composite miff:-', cmd.to_s
44
+ end
45
+
46
+ def test_compose_with_input_in_block_and_output
47
+ cmd = compose(:over, to: 'bar') { image 'foo' }
48
+ assert_equal 'convert foo -compose over -composite bar', cmd.to_s
49
+ end
50
+
51
+ def test_compose_with_2_input_styles
52
+ cmd = compose(:over, 'foo') { image 'bar' }
53
+ assert_equal 'convert foo bar -compose over -composite miff:-', cmd.to_s
54
+ end
55
+
56
+ def test_compose_with_2_input_styles_and_output
57
+ cmd = compose(:over, 'foo', to: 'baz') { image 'bar' }
58
+ assert_equal 'convert foo bar -compose over -composite baz', cmd.to_s
59
+ end
60
+
61
+ def test_compose_with_ops
62
+ cmd = compose(:over) { with '-foo' }
63
+ assert_equal 'convert -foo -compose over -composite miff:-', cmd.to_s
64
+ end
65
+
66
+ def test_compose_with_concatenated_ops
67
+ cmd = compose(:over) { with '-foo', 'bar' }
68
+ assert_equal 'convert -foo bar -compose over -composite miff:-', cmd.to_s
69
+ end
70
+
71
+ def test_compose_with_multiple_ops
72
+ cmd = compose(:over) { with '-foo'; with '+bar' }
73
+ assert_equal 'convert -foo +bar -compose over -composite miff:-', cmd.to_s
74
+ end
75
+
76
+ def test_compose_with_multiple_concatenated_ops
77
+ cmd = compose(:over) { with '-foo', 'bar'; with '+baz', 'qux' }
78
+ assert_equal 'convert -foo bar +baz qux -compose over -composite miff:-',
79
+ cmd.to_s
80
+ end
81
+
82
+ def test_compose_with_ops_inputs_and_output
83
+ cmd = compose(:over, 'foo', 'bar', to: 'baz') do
84
+ image 'qux'
85
+ with '+quux'
86
+ with '-corge', 'grault'
87
+ end
88
+
89
+ assert_equal 'convert foo bar qux +quux -corge grault -compose over ' +
90
+ '-composite baz', cmd.to_s
91
+ end
92
+
93
+ def test_nested_compose
94
+ cmd = compose(:over, to: 'baz') do
95
+ compose(:multiply, 'foo') { with 'bar' }
96
+ end
97
+
98
+ assert_equal 'convert ( foo bar -compose multiply -composite ) -compose ' +
99
+ 'over -composite baz', cmd.to_s
100
+ end
101
+
102
+ def test_nested_compose_ignores_output
103
+ cmd = compose(:over, to: 'baz') do
104
+ compose(:multiply, 'foo', to: 'nowhere') { with 'bar' }
105
+ end
106
+
107
+ assert_equal 'convert ( foo bar -compose multiply -composite ) -compose ' +
108
+ 'over -composite baz', cmd.to_s
109
+ end
110
+
111
+ def test_multi_image_nested_compose
112
+ cmd = compose(:over, 'foo', to: 'bar') do
113
+ compose(:multiply, 'qux') do
114
+ with '+asdf'
115
+ with '+fdsa'
116
+ end
117
+
118
+ image 'bleh'
119
+ with '-resize'
120
+ end
121
+
122
+ assert_equal 'convert foo ( qux +asdf +fdsa -compose multiply ' +
123
+ '-composite ) bleh -resize -compose over -composite bar', cmd.to_s
124
+ end
125
+
126
+ def test_compose_composition
127
+ complex_image = compose(:over, 'qux') do
128
+ with '+asdf'
129
+ with '+fdsa'
130
+ end
131
+
132
+ cmd = compose(:multiply, 'foo', to: 'bar') do
133
+ image complex_image
134
+ image 'bleh'
135
+ with '-resize'
136
+ end
137
+
138
+ assert_equal 'convert foo ( qux +asdf +fdsa -compose over -composite ) ' +
139
+ 'bleh -resize -compose multiply -composite bar', cmd.to_s
140
+ end
141
+
142
+ def test_compose_double_nesting_with_composition
143
+ complex_image = compose('foo', to: 'nowhere') do
144
+ compose('bar', to: 'nowhere') do
145
+ compose('baz') do
146
+ image 'image1'
147
+ with '-option', 'qux'
148
+ end
149
+
150
+ image 'image2'
151
+ with '+option'
152
+ end
153
+ end
154
+
155
+ cmd = compose('image3') do
156
+ image complex_image
157
+ image 'image4'
158
+ with '-option', 'quux'
159
+ end
160
+
161
+ assert_equal 'convert ( ( ( image1 -option qux -compose baz -composite ' +
162
+ ') image2 +option -compose bar -composite ) -compose foo -composite ) ' +
163
+ 'image4 -option quux -compose image3 -composite miff:-', cmd.to_s
164
+ end
165
+
166
+ def test_plus_operator_on_image
167
+ lhs = image('foo')
168
+ rhs = image('bar')
169
+ result = convert(lhs + rhs)
170
+
171
+ assert_equal 'convert ( foo bar -compose over -composite ) miff:-',
172
+ result.to_s
173
+ end
174
+
175
+ def test_minus_operator_on_image
176
+ lhs = image('foo')
177
+ rhs = image('bar')
178
+ result = convert(lhs - rhs)
179
+
180
+ assert_equal 'convert ( foo bar -compose dstout -composite ) miff:-',
181
+ result.to_s
182
+ end
183
+
184
+ def test_multiply_operator_on_image
185
+ lhs = image('foo')
186
+ rhs = image('bar')
187
+ result = convert(lhs * rhs)
188
+
189
+ assert_equal 'convert ( foo bar -compose multiply -composite ) miff:-',
190
+ result.to_s
191
+ end
192
+
193
+ def test_divide_operator_on_image
194
+ lhs = image('foo')
195
+ rhs = image('bar')
196
+ result = convert(lhs / rhs)
197
+
198
+ assert_equal 'convert ( foo bar -compose divide -composite ) miff:-',
199
+ result.to_s
200
+ end
201
+
202
+ def test_and_operator_on_image
203
+ lhs = image('foo')
204
+ rhs = image('bar')
205
+ result = convert(lhs & rhs)
206
+
207
+ assert_equal 'convert ( foo bar -alpha Set -compose dstin -composite ) ' +
208
+ 'miff:-', result.to_s
209
+ end
210
+
211
+ def test_or_operator_on_image
212
+ lhs = image('foo')
213
+ rhs = image('bar')
214
+ result = convert(lhs | rhs)
215
+
216
+ assert_equal 'convert ( foo bar -compose dstover -composite ) miff:-',
217
+ result.to_s
218
+ end
219
+
220
+ def test_plus_operator_on_convert
221
+ lhs = convert('foo')
222
+ rhs = convert('bar')
223
+ result = lhs + rhs
224
+
225
+ assert_equal 'convert ( foo ) ( bar ) -compose over -composite miff:-',
226
+ result.to_s
227
+ end
228
+
229
+ def test_minus_operator_on_convert
230
+ lhs = convert('foo')
231
+ rhs = convert('bar')
232
+ result = lhs - rhs
233
+
234
+ assert_equal 'convert ( foo ) ( bar ) -compose dstout -composite miff:-',
235
+ result.to_s
236
+ end
237
+
238
+ def test_multiply_operator_on_convert
239
+ lhs = convert('foo')
240
+ rhs = convert('bar')
241
+ result = lhs * rhs
242
+
243
+ assert_equal 'convert ( foo ) ( bar ) -compose multiply -composite miff:-',
244
+ result.to_s
245
+ end
246
+
247
+ def test_divide_operator_on_convert
248
+ lhs = convert('foo')
249
+ rhs = convert('bar')
250
+ result = lhs / rhs
251
+
252
+ assert_equal 'convert ( foo ) ( bar ) -compose divide -composite miff:-',
253
+ result.to_s
254
+ end
255
+
256
+ def test_and_operator_on_convert
257
+ lhs = convert('foo')
258
+ rhs = convert('bar')
259
+ result = lhs & rhs
260
+
261
+ assert_equal 'convert ( foo ) ( bar ) -alpha Set -compose dstin ' +
262
+ '-composite miff:-', result.to_s
263
+ end
264
+
265
+ def test_or_operator_on_convert
266
+ lhs = convert('foo')
267
+ rhs = convert('bar')
268
+ result = lhs | rhs
269
+
270
+ assert_equal 'convert ( foo ) ( bar ) -compose dstover -composite miff:-',
271
+ result.to_s
272
+ end
273
+ end