skeptick 0.1.1 → 0.2.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/CHANGELOG +14 -0
- data/README.md +63 -289
- data/lib/skeptick/command.rb +8 -19
- data/lib/skeptick/convert.rb +65 -82
- data/lib/skeptick/core.rb +1 -7
- data/lib/skeptick/dsl_context.rb +32 -0
- data/lib/skeptick/sugar.rb +13 -7
- data/lib/skeptick/sugar/canvas.rb +8 -0
- data/lib/skeptick/sugar/clone.rb +9 -0
- data/lib/skeptick/sugar/compose.rb +50 -0
- data/lib/skeptick/sugar/delete.rb +9 -0
- data/lib/skeptick/sugar/draw.rb +7 -0
- data/lib/skeptick/sugar/font.rb +7 -0
- data/lib/skeptick/sugar/format.rb +7 -0
- data/lib/skeptick/sugar/geometry.rb +25 -31
- data/lib/skeptick/sugar/resized_image.rb +15 -0
- data/lib/skeptick/sugar/rounded_corners_image.rb +42 -0
- data/lib/skeptick/sugar/swap.rb +12 -0
- data/lib/skeptick/sugar/text.rb +11 -0
- data/lib/skeptick/sugar/torn_paper_image.rb +32 -0
- data/lib/skeptick/sugar/write.rb +8 -0
- data/lib/skeptick/version.rb +1 -1
- data/logo.rb +12 -11
- data/refresh_preview.scpt +1 -1
- data/skeptick.gemspec +1 -0
- data/test/convert_test.rb +128 -33
- data/test/sugar/canvas_test.rb +16 -0
- data/test/sugar/clone_test.rb +41 -0
- data/test/sugar/{composition_test.rb → compose_test.rb} +35 -87
- data/test/sugar/delete_test.rb +41 -0
- data/test/sugar/draw_test.rb +11 -0
- data/test/sugar/font_test.rb +11 -0
- data/test/sugar/format_test.rb +12 -0
- data/test/sugar/{resizing_test.rb → resized_image_test.rb} +5 -5
- data/test/sugar/rounded_corners_image_test.rb +53 -0
- data/test/sugar/swap_test.rb +28 -0
- data/test/sugar/text_test.rb +22 -0
- data/test/sugar/torn_paper_image_test.rb +53 -0
- data/test/sugar/write_test.rb +14 -0
- metadata +57 -34
- data/lib/skeptick/chain.rb +0 -55
- data/lib/skeptick/chain/dsl_context.rb +0 -21
- data/lib/skeptick/convert/dsl_context.rb +0 -27
- data/lib/skeptick/helper.rb +0 -26
- data/lib/skeptick/image.rb +0 -69
- data/lib/skeptick/image/dsl_context.rb +0 -29
- data/lib/skeptick/sugar/composition.rb +0 -55
- data/lib/skeptick/sugar/debugging.rb +0 -12
- data/lib/skeptick/sugar/drawing.rb +0 -32
- data/lib/skeptick/sugar/edges.rb +0 -70
- data/lib/skeptick/sugar/formatting.rb +0 -12
- data/lib/skeptick/sugar/resizing.rb +0 -16
- data/lib/skeptick/sugar/sequence_manipulation.rb +0 -43
- data/test/chain_test.rb +0 -94
- data/test/image_test.rb +0 -145
- data/test/sugar/debugging_test.rb +0 -24
- data/test/sugar/drawing_test.rb +0 -86
- data/test/sugar/edges_test.rb +0 -99
- data/test/sugar/formatting_test.rb +0 -19
- data/test/sugar/sequence_manipulation_test.rb +0 -98
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'skeptick/sugar/geometry'
|
2
|
+
|
3
|
+
module Skeptick
|
4
|
+
module ResizedImage
|
5
|
+
def resized_image(path, options = {})
|
6
|
+
image("#{path}[#{geometry(options)}]")
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
include ResizedImage
|
11
|
+
|
12
|
+
class DslContext
|
13
|
+
include ResizedImage
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'skeptick/sugar/compose'
|
2
|
+
require 'skeptick/sugar/format'
|
3
|
+
require 'skeptick/sugar/draw'
|
4
|
+
|
5
|
+
module Skeptick
|
6
|
+
module RoundedCornersImage
|
7
|
+
def rounded_corners_image(*args, &blk)
|
8
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
9
|
+
radius = opts[:radius] || 15
|
10
|
+
size = opts[:size]
|
11
|
+
width = opts[:width]
|
12
|
+
height = opts[:height]
|
13
|
+
|
14
|
+
if size
|
15
|
+
width, height = size.split('x').map(&:to_i)
|
16
|
+
end
|
17
|
+
|
18
|
+
border = if width && height
|
19
|
+
"roundrectangle 1,1 #{width},#{height} #{radius},#{radius}"
|
20
|
+
else
|
21
|
+
Convert.new(self, *args, to: 'info:') do
|
22
|
+
format "roundrectangle 1,1 %[fx:w], %[fx:h] #{radius},#{radius}"
|
23
|
+
end.run.strip
|
24
|
+
end
|
25
|
+
|
26
|
+
compose(:dstin, *args) do
|
27
|
+
convert(&blk) if block_given?
|
28
|
+
|
29
|
+
convert do
|
30
|
+
set '+clone'
|
31
|
+
set :draw, border
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class DslContext
|
38
|
+
include RoundedCornersImage
|
39
|
+
end
|
40
|
+
|
41
|
+
include RoundedCornersImage
|
42
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'skeptick/sugar/compose'
|
2
|
+
|
3
|
+
module Skeptick
|
4
|
+
module TornPaperImage
|
5
|
+
def torn_paper_image(*args, &blk)
|
6
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
7
|
+
spread = opts[:spread] || 1
|
8
|
+
blur = opts[:blur] || '0x.7'
|
9
|
+
threshold = opts[:threshold] || 50
|
10
|
+
|
11
|
+
compose(:copy_opacity, *args) do
|
12
|
+
convert(&blk) if block_given?
|
13
|
+
convert do
|
14
|
+
set '+clone'
|
15
|
+
set '-virtual-pixel', 'transparent'
|
16
|
+
set :spread, spread
|
17
|
+
set :channel, 'A'
|
18
|
+
set :blur, blur
|
19
|
+
set :threshold, "#{threshold}%"
|
20
|
+
end
|
21
|
+
|
22
|
+
set :blur, blur
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class DslContext
|
28
|
+
include TornPaperImage
|
29
|
+
end
|
30
|
+
|
31
|
+
include TornPaperImage
|
32
|
+
end
|
data/lib/skeptick/version.rb
CHANGED
data/logo.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
$: << 'lib'
|
2
|
+
require 'skeptick'
|
3
|
+
puts "Skeptick #{Skeptick::VERSION}"
|
2
4
|
|
3
5
|
include Skeptick
|
4
6
|
|
@@ -7,18 +9,17 @@ image_size = '400x120'
|
|
7
9
|
paper = rounded_corners_image(size: image_size, radius: 25) do
|
8
10
|
set :size, image_size
|
9
11
|
image 'tile:granite:'
|
10
|
-
|
11
|
-
|
12
|
+
set '-brightness-contrast', '38x-25'
|
13
|
+
set :blur, '0x0.5'
|
12
14
|
end
|
13
15
|
|
14
16
|
left, top = 8, 80
|
15
17
|
text = image do
|
16
18
|
canvas :none, size: '395x110'
|
17
|
-
font 'Handwriting - Dakota
|
19
|
+
font 'Handwriting - Dakota'
|
18
20
|
set :pointsize, 90
|
19
21
|
set :fill, 'gradient:#37e-#007'
|
20
|
-
|
21
|
-
apply :blur, '0x0.7'
|
22
|
+
text 'Skeptick', left: left, top: top
|
22
23
|
end
|
23
24
|
|
24
25
|
bezier = \
|
@@ -32,14 +33,14 @@ curve = image do
|
|
32
33
|
draw "fill none bezier #{bezier}"
|
33
34
|
end
|
34
35
|
|
35
|
-
result_path = "#{File.dirname(__FILE__)}/
|
36
|
+
result_path = "#{File.dirname(__FILE__)}/logo.png"
|
36
37
|
|
37
|
-
|
38
|
+
final = torn_paper_image \
|
38
39
|
paper * (text + curve),
|
39
40
|
spread: 50,
|
40
41
|
blur: '3x10'
|
41
|
-
)
|
42
42
|
|
43
|
-
|
44
|
-
|
43
|
+
logo_script = convert(final, to: result_path)
|
44
|
+
puts logo_script.to_s
|
45
|
+
logo_script.run
|
45
46
|
# system "osascript refresh_preview.scpt"
|
data/refresh_preview.scpt
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
tell application "Preview" to activate
|
2
|
-
tell application "Sublime Text
|
2
|
+
tell application "Sublime Text" to activate
|
data/skeptick.gemspec
CHANGED
data/test/convert_test.rb
CHANGED
@@ -7,10 +7,34 @@ require_relative 'test_helper'
|
|
7
7
|
class ConvertTest < Skeptick::TestCase
|
8
8
|
include Skeptick
|
9
9
|
|
10
|
-
def
|
10
|
+
def test_dsl_method_convert_available
|
11
11
|
assert_respond_to self, :convert
|
12
12
|
end
|
13
13
|
|
14
|
+
def test_dsl_method_image_available
|
15
|
+
assert_respond_to self, :image
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_set_adds_setting_to_convert_segment
|
19
|
+
cmd = convert do
|
20
|
+
image 'bar'
|
21
|
+
set '-foo'
|
22
|
+
end
|
23
|
+
|
24
|
+
assert_equal 'convert bar -foo miff:-', cmd.to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_append_appends_to_convert_segment
|
28
|
+
cmd = convert do
|
29
|
+
image do
|
30
|
+
append '-foo'
|
31
|
+
image 'bar'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
assert_equal 'convert bar -foo miff:-', cmd.to_s
|
36
|
+
end
|
37
|
+
|
14
38
|
def test_lvars_from_external_context_are_accessible
|
15
39
|
foo = '-test'
|
16
40
|
cmd = convert { set foo }
|
@@ -78,30 +102,30 @@ class ConvertTest < Skeptick::TestCase
|
|
78
102
|
end
|
79
103
|
|
80
104
|
def test_convert_with_ops
|
81
|
-
cmd = convert {
|
105
|
+
cmd = convert { set :foo }
|
82
106
|
assert_equal 'convert -foo miff:-', cmd.to_s
|
83
107
|
end
|
84
108
|
|
85
109
|
def test_convert_with_concatenated_ops
|
86
|
-
cmd = convert {
|
110
|
+
cmd = convert { set '-foo', 'bar' }
|
87
111
|
assert_equal 'convert -foo bar miff:-', cmd.to_s
|
88
112
|
end
|
89
113
|
|
90
114
|
def test_convert_with_multiple_ops
|
91
|
-
cmd = convert {
|
115
|
+
cmd = convert { set '-foo'; set '+bar' }
|
92
116
|
assert_equal 'convert -foo +bar miff:-', cmd.to_s
|
93
117
|
end
|
94
118
|
|
95
119
|
def test_convert_with_multiple_concatenated_ops
|
96
|
-
cmd = convert {
|
120
|
+
cmd = convert { set '-foo', 'bar'; set '+baz', 'qux' }
|
97
121
|
assert_equal 'convert -foo bar +baz qux miff:-', cmd.to_s
|
98
122
|
end
|
99
123
|
|
100
124
|
def test_convert_with_ops_inputs_and_output
|
101
125
|
cmd = convert('foo', 'bar', to: 'baz') do
|
102
126
|
image 'qux'
|
103
|
-
|
104
|
-
|
127
|
+
set '+quux'
|
128
|
+
set :corge, 'grault'
|
105
129
|
end
|
106
130
|
|
107
131
|
assert_equal 'convert foo bar qux +quux -corge grault baz', cmd.to_s
|
@@ -109,69 +133,140 @@ class ConvertTest < Skeptick::TestCase
|
|
109
133
|
|
110
134
|
def test_nested_convert
|
111
135
|
cmd = convert(to: 'baz') do
|
112
|
-
convert('foo') {
|
136
|
+
convert('foo') { set '-bar' }
|
113
137
|
end
|
114
138
|
|
115
|
-
assert_equal 'convert
|
139
|
+
assert_equal 'convert foo -bar baz', cmd.to_s
|
116
140
|
end
|
117
141
|
|
118
142
|
def test_nested_convert_ignores_output
|
119
143
|
cmd = convert(to: 'baz') do
|
120
|
-
convert('foo', to: 'nowhere') {
|
144
|
+
convert('foo', to: 'nowhere') { set :bar }
|
121
145
|
end
|
122
146
|
|
123
|
-
assert_equal 'convert
|
147
|
+
assert_equal 'convert foo -bar baz', cmd.to_s
|
124
148
|
end
|
125
149
|
|
126
150
|
def test_multi_image_nested_convert
|
127
151
|
cmd = convert('foo', to: 'bar') do
|
128
152
|
convert('qux') do
|
129
|
-
|
130
|
-
|
153
|
+
set '+asdf'
|
154
|
+
set '+fdsa'
|
131
155
|
end
|
132
156
|
|
133
157
|
image 'bleh'
|
134
|
-
|
158
|
+
set '-resize'
|
135
159
|
end
|
136
160
|
|
137
161
|
assert_equal 'convert foo ( qux +asdf +fdsa ) bleh -resize bar', cmd.to_s
|
138
162
|
end
|
139
163
|
|
140
164
|
def test_convert_composition
|
141
|
-
complex_image = convert('
|
142
|
-
|
143
|
-
|
165
|
+
complex_image = convert('image1') do
|
166
|
+
set '+image1-x'
|
167
|
+
set '+image1-y'
|
144
168
|
end
|
145
169
|
|
146
|
-
cmd = convert('
|
170
|
+
cmd = convert('image2', to: 'bar') do
|
147
171
|
image complex_image
|
148
|
-
image '
|
149
|
-
|
172
|
+
image 'image3'
|
173
|
+
set '-setting-for-all-images'
|
150
174
|
end
|
151
175
|
|
152
|
-
assert_equal 'convert
|
176
|
+
assert_equal 'convert image2 ( image1 +image1-x +image1-y ) image3 '\
|
177
|
+
'-setting-for-all-images bar', cmd.to_s
|
153
178
|
end
|
154
179
|
|
155
180
|
def test_convert_double_nesting_with_composition
|
156
|
-
complex_image = convert('
|
157
|
-
convert('
|
158
|
-
convert('
|
159
|
-
image '
|
160
|
-
|
181
|
+
complex_image = convert('image1', to: 'nowhere') do
|
182
|
+
convert('image2', to: 'nowhere') do
|
183
|
+
convert('image3') do
|
184
|
+
image 'image4'
|
185
|
+
set :option, 'qux'
|
161
186
|
end
|
162
187
|
|
163
|
-
image '
|
164
|
-
|
188
|
+
image 'image5'
|
189
|
+
set '+option'
|
165
190
|
end
|
166
191
|
end
|
167
192
|
|
168
|
-
cmd = convert('
|
193
|
+
cmd = convert('image6') do
|
169
194
|
image complex_image
|
170
|
-
image '
|
171
|
-
|
195
|
+
image 'image7'
|
196
|
+
set '-option', 'quux'
|
197
|
+
end
|
198
|
+
|
199
|
+
assert_equal 'convert image6 ( image1 ( image2 ( image3 image4 -option '\
|
200
|
+
'qux ) image5 +option ) ) image7 -option quux miff:-', cmd.to_s
|
201
|
+
end
|
202
|
+
|
203
|
+
def test_convert_reusing_variable
|
204
|
+
cmd = 'foo'
|
205
|
+
cmd = convert('bar') { set(:arg); image(cmd) }
|
206
|
+
assert_equal 'convert bar -arg foo miff:-', cmd.to_s
|
207
|
+
end
|
208
|
+
|
209
|
+
def test_inject_image_into_convert
|
210
|
+
sample = image do
|
211
|
+
set :size, '400x400'
|
212
|
+
image 'tile:granite:'
|
213
|
+
set '-brightness-contrast', '38x-33'
|
214
|
+
set :blur, '0x0.5'
|
215
|
+
end
|
216
|
+
|
217
|
+
cmd = convert do
|
218
|
+
set '-foo'
|
219
|
+
image sample
|
220
|
+
set '-bar'
|
221
|
+
end
|
222
|
+
|
223
|
+
assert_equal 'convert -foo ( -size 400x400 tile:granite: ' +
|
224
|
+
'-brightness-contrast 38x-33 -blur 0x0.5 ) -bar miff:-', cmd.to_s
|
225
|
+
end
|
226
|
+
|
227
|
+
def test_inject_image_into_convert_as_argument
|
228
|
+
sample = image do
|
229
|
+
set :size, '400x400'
|
230
|
+
image 'tile:granite:'
|
231
|
+
append '-brightness-contrast', '38x-33'
|
232
|
+
append :blur, '0x0.5'
|
233
|
+
end
|
234
|
+
|
235
|
+
cmd = convert(sample)
|
236
|
+
assert_equal 'convert -size 400x400 tile:granite: -brightness-contrast ' +
|
237
|
+
'38x-33 -blur 0x0.5 miff:-', cmd.to_s
|
238
|
+
end
|
239
|
+
|
240
|
+
def test_declare_image_inside_convert
|
241
|
+
cmd = convert do
|
242
|
+
set '-foo'
|
243
|
+
image do
|
244
|
+
set :size, '400x400'
|
245
|
+
image 'tile:granite:'
|
246
|
+
append '-brightness-contrast', '38x-33'
|
247
|
+
append :blur, '0x0.5'
|
248
|
+
end
|
249
|
+
set '-bar'
|
250
|
+
end
|
251
|
+
|
252
|
+
assert_equal 'convert -foo ( -size 400x400 tile:granite: ' +
|
253
|
+
'-brightness-contrast 38x-33 -blur 0x0.5 ) -bar miff:-', cmd.to_s
|
254
|
+
end
|
255
|
+
|
256
|
+
def test_convert_as_image_object
|
257
|
+
sample = convert('foo', to: 'bar') do
|
258
|
+
set :baz
|
259
|
+
end
|
260
|
+
|
261
|
+
cmd = convert do
|
262
|
+
image do
|
263
|
+
set :setting
|
264
|
+
append :operation
|
265
|
+
image sample
|
266
|
+
end
|
172
267
|
end
|
173
268
|
|
174
|
-
assert_equal 'convert
|
175
|
-
|
269
|
+
assert_equal 'convert -setting ( foo -baz ) -operation miff:-',
|
270
|
+
cmd.to_s
|
176
271
|
end
|
177
272
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'skeptick/sugar/canvas'
|
3
|
+
|
4
|
+
class CanvasTest < Skeptick::TestCase
|
5
|
+
include Skeptick
|
6
|
+
|
7
|
+
def test_canvas_in_convert_with_size
|
8
|
+
cmd = convert { canvas :none, size: '100x200' }
|
9
|
+
assert_equal 'convert -size 100x200 canvas:none miff:-', cmd.to_s
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_canvas_in_convert_without_size
|
13
|
+
cmd = convert { canvas :none }
|
14
|
+
assert_equal 'convert canvas:none miff:-', cmd.to_s
|
15
|
+
end
|
16
|
+
end
|