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