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
data/lib/skeptick/command.rb
CHANGED
@@ -4,26 +4,15 @@ require 'skeptick/error'
|
|
4
4
|
|
5
5
|
module Skeptick
|
6
6
|
class Command
|
7
|
-
|
8
|
-
def command
|
9
|
-
Command.new(self)
|
10
|
-
end
|
11
|
-
|
12
|
-
def execute
|
13
|
-
command.run
|
14
|
-
end
|
15
|
-
alias_method :build, :execute
|
16
|
-
alias_method :run, :execute
|
17
|
-
end
|
7
|
+
attr_reader :shellwords
|
18
8
|
|
19
|
-
def initialize(
|
20
|
-
@
|
9
|
+
def initialize(shellwords)
|
10
|
+
@shellwords = shellwords
|
21
11
|
end
|
22
12
|
|
23
|
-
def
|
24
|
-
|
13
|
+
def to_s
|
14
|
+
shellwords.join(' ')
|
25
15
|
end
|
26
|
-
alias_method :to_s, :command
|
27
16
|
|
28
17
|
def run(spawn_options = {})
|
29
18
|
opts = {}
|
@@ -32,14 +21,14 @@ module Skeptick
|
|
32
21
|
opts.merge(spawn_options)
|
33
22
|
|
34
23
|
if Skeptick.debug_mode?
|
35
|
-
Skeptick.log("Skeptick Command: #{
|
24
|
+
Skeptick.log("Skeptick Command: #{to_s}")
|
36
25
|
end
|
37
26
|
|
38
|
-
im_process = POSIX::Spawn::Child.new(
|
27
|
+
im_process = POSIX::Spawn::Child.new(*shellwords, opts)
|
39
28
|
|
40
29
|
if !im_process.success?
|
41
30
|
raise ImageMagickError,
|
42
|
-
"ImageMagick error\nCommand: #{
|
31
|
+
"ImageMagick error\nCommand: #{to_s}\nSTDERR:\n#{im_process.err}"
|
43
32
|
end
|
44
33
|
|
45
34
|
im_process.status
|
data/lib/skeptick/convert.rb
CHANGED
@@ -1,109 +1,92 @@
|
|
1
|
-
require 'skeptick/
|
2
|
-
require 'skeptick/image'
|
3
|
-
require 'skeptick/chain'
|
4
|
-
require 'skeptick/convert/dsl_context'
|
1
|
+
require 'skeptick/dsl_context'
|
5
2
|
require 'skeptick/command'
|
6
3
|
|
7
4
|
module Skeptick
|
8
5
|
class Convert
|
9
|
-
|
6
|
+
attr_reader :context, :prepends, :subjects, :appends
|
10
7
|
|
11
|
-
|
8
|
+
BINARY_PATH = 'convert'.freeze
|
9
|
+
DEFAULT_OUTPUT = 'miff:-'.freeze
|
12
10
|
|
13
11
|
def initialize(context, *args, &blk)
|
14
12
|
@context = context
|
15
|
-
|
16
|
-
|
17
|
-
@
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
def append(*args)
|
34
|
-
@appends << Helper.process_args(*args)
|
35
|
-
end
|
13
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
14
|
+
|
15
|
+
@objects = [
|
16
|
+
@beginning = BINARY_PATH.dup,
|
17
|
+
@prepends = setup_prepends,
|
18
|
+
@subjects = setup_subjects,
|
19
|
+
@appends = setup_appends,
|
20
|
+
@ending = opts.fetch(:to) { DEFAULT_OUTPUT.dup }
|
21
|
+
]
|
22
|
+
|
23
|
+
args.each do |arg|
|
24
|
+
subjects << if arg.is_a?(Convert)
|
25
|
+
arg
|
26
|
+
else
|
27
|
+
Convert.new(@context).tap{ |c| c.subjects << arg }
|
28
|
+
end
|
29
|
+
end
|
36
30
|
|
37
|
-
|
38
|
-
@objects << Helper.process_args(*args)
|
31
|
+
DslContext.new(self).instance_eval(&blk) if block_given?
|
39
32
|
end
|
40
|
-
alias_method :apply, :set
|
41
|
-
alias_method :with, :set
|
42
33
|
|
34
|
+
def run; command.run end
|
35
|
+
def to_s; shellwords.join(' ') end
|
36
|
+
def inspect; "#{self.class}(\"#{to_s}\")" end
|
37
|
+
def shellwords; tokens.map { |obj| token_to_str(obj) } end
|
38
|
+
def command; Command.new(shellwords) end
|
43
39
|
|
44
|
-
|
45
|
-
Convert.new(@context, *args, &blk).tap do |c_obj|
|
46
|
-
@objects << Image.new(@context, c_obj)
|
47
|
-
end
|
48
|
-
end
|
40
|
+
protected
|
49
41
|
|
50
|
-
def
|
51
|
-
|
52
|
-
|
42
|
+
def nest!
|
43
|
+
add_parenth = (@subjects.size > 1) ||
|
44
|
+
(@subjects.size < 2 && (!appends.empty? || !prepends.empty?))
|
53
45
|
|
54
|
-
|
55
|
-
|
56
|
-
|
46
|
+
if add_parenth
|
47
|
+
@beginning.replace('(')
|
48
|
+
@ending.replace(')')
|
57
49
|
else
|
58
|
-
@
|
50
|
+
@beginning.clear
|
51
|
+
@ending.clear
|
59
52
|
end
|
60
53
|
end
|
61
54
|
|
62
|
-
def
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
[@beginning, *@prepends, *@args, *@objects, *@appends, @ending].compact
|
77
|
-
end
|
78
|
-
|
79
|
-
def to_s
|
80
|
-
parts.join(' ')
|
81
|
-
end
|
82
|
-
|
83
|
-
def inspect
|
84
|
-
"Skeptick::Convert(#{to_s})"
|
85
|
-
end
|
86
|
-
|
87
|
-
def process_method_missing(*args, &blk)
|
88
|
-
@context.send(*args, &blk)
|
55
|
+
def tokens
|
56
|
+
@objects.flatten.reject{ |obj| empty_string?(obj) }.map { |obj|
|
57
|
+
if obj.is_a?(Convert)
|
58
|
+
obj.nest!
|
59
|
+
obj.tokens
|
60
|
+
else
|
61
|
+
obj
|
62
|
+
end
|
63
|
+
}.flatten.tap do |array|
|
64
|
+
if array[1] == '(' && array[-2] == ')'
|
65
|
+
array.delete_at(1)
|
66
|
+
array.delete_at(-2)
|
67
|
+
end
|
68
|
+
end
|
89
69
|
end
|
90
70
|
|
91
71
|
private
|
92
|
-
def reset
|
93
|
-
@objects = []
|
94
|
-
end
|
95
72
|
|
96
|
-
|
97
|
-
|
98
|
-
|
73
|
+
def setup_prepends; [] end
|
74
|
+
def setup_subjects; [] end
|
75
|
+
def setup_appends; [] end
|
99
76
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
end
|
77
|
+
def empty_string?(obj)
|
78
|
+
obj.is_a?(String) && obj.empty?
|
79
|
+
end
|
104
80
|
|
105
|
-
|
106
|
-
|
81
|
+
def token_to_str(obj)
|
82
|
+
case obj
|
83
|
+
when Symbol
|
84
|
+
"-#{obj}"
|
85
|
+
when Range
|
86
|
+
"#{obj.min}-#{obj.max}"
|
87
|
+
else
|
88
|
+
obj.to_s
|
107
89
|
end
|
90
|
+
end
|
108
91
|
end
|
109
92
|
end
|
data/lib/skeptick/core.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
require 'skeptick/version'
|
2
2
|
require 'skeptick/convert'
|
3
|
-
require 'skeptick/image'
|
4
|
-
require 'skeptick/chain'
|
5
3
|
require 'skeptick/railtie' if defined?(Rails)
|
6
4
|
|
7
5
|
module Skeptick
|
@@ -34,10 +32,6 @@ module Skeptick
|
|
34
32
|
end
|
35
33
|
|
36
34
|
def image(*args, &blk)
|
37
|
-
Skeptick::
|
38
|
-
end
|
39
|
-
|
40
|
-
def chain(*args, &blk)
|
41
|
-
Skeptick::Chain.new(self, *args, &blk)
|
35
|
+
Skeptick::Convert.new(self, *args, &blk)
|
42
36
|
end
|
43
37
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Skeptick
|
2
|
+
class DslContext
|
3
|
+
def initialize(convert)
|
4
|
+
@convert = convert
|
5
|
+
end
|
6
|
+
|
7
|
+
def prepend(*args)
|
8
|
+
@convert.prepends.push(*args)
|
9
|
+
end
|
10
|
+
|
11
|
+
def set(*args)
|
12
|
+
@convert.subjects.push(*args)
|
13
|
+
end
|
14
|
+
|
15
|
+
def append(*args)
|
16
|
+
@convert.appends.push(*args)
|
17
|
+
end
|
18
|
+
|
19
|
+
def convert(*args, &blk)
|
20
|
+
@convert.subjects << Convert.new(self, *args, &blk)
|
21
|
+
end
|
22
|
+
alias_method :image, :convert
|
23
|
+
|
24
|
+
def method_missing(*args, &blk)
|
25
|
+
@convert.context.send(*args, &blk)
|
26
|
+
end
|
27
|
+
|
28
|
+
def respond_to_missing?(meth, include_all)
|
29
|
+
@convert.context.respond_to?(meth, include_all)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/skeptick/sugar.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
|
-
require 'skeptick/sugar/
|
2
|
-
require 'skeptick/sugar/
|
3
|
-
require 'skeptick/sugar/
|
1
|
+
require 'skeptick/sugar/compose'
|
2
|
+
require 'skeptick/sugar/write'
|
3
|
+
require 'skeptick/sugar/draw'
|
4
|
+
require 'skeptick/sugar/canvas'
|
5
|
+
require 'skeptick/sugar/font'
|
6
|
+
require 'skeptick/sugar/text'
|
4
7
|
require 'skeptick/sugar/geometry'
|
5
|
-
require 'skeptick/sugar/
|
6
|
-
require 'skeptick/sugar/
|
7
|
-
require 'skeptick/sugar/
|
8
|
-
require 'skeptick/sugar/
|
8
|
+
require 'skeptick/sugar/clone'
|
9
|
+
require 'skeptick/sugar/delete'
|
10
|
+
require 'skeptick/sugar/swap'
|
11
|
+
require 'skeptick/sugar/format'
|
12
|
+
require 'skeptick/sugar/resized_image'
|
13
|
+
require 'skeptick/sugar/rounded_corners_image'
|
14
|
+
require 'skeptick/sugar/torn_paper_image'
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Skeptick
|
2
|
+
class Compose < Convert
|
3
|
+
def initialize(context, *args, &blk)
|
4
|
+
@blending = args.shift.to_s
|
5
|
+
super
|
6
|
+
end
|
7
|
+
|
8
|
+
def setup_appends
|
9
|
+
[:compose, @blending, :composite]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Convert
|
14
|
+
def +(other)
|
15
|
+
Compose.new(@context, :over, self, other)
|
16
|
+
end
|
17
|
+
|
18
|
+
def -(other)
|
19
|
+
Compose.new(@context, :dstout, self, other)
|
20
|
+
end
|
21
|
+
|
22
|
+
def *(other)
|
23
|
+
Compose.new(@context, :multiply, self, other)
|
24
|
+
end
|
25
|
+
|
26
|
+
def /(other)
|
27
|
+
Compose.new(@context, :divide, self, other)
|
28
|
+
end
|
29
|
+
|
30
|
+
def &(other)
|
31
|
+
Compose.new(@context, :dstin, self, other).tap do |c|
|
32
|
+
c.subjects << :alpha << 'Set'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def |(other)
|
37
|
+
Compose.new(@context, :dstover, self, other)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class DslContext
|
42
|
+
def compose(blending, *args, &blk)
|
43
|
+
@convert.subjects << Compose.new(self, blending, *args, &blk)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def compose(blending, *args, &blk)
|
48
|
+
Compose.new(self, blending, *args, &blk)
|
49
|
+
end
|
50
|
+
end
|
@@ -1,38 +1,32 @@
|
|
1
1
|
module Skeptick
|
2
|
-
|
3
|
-
|
4
|
-
def geometry(options = {})
|
5
|
-
result = ''
|
2
|
+
def geometry(options = {})
|
3
|
+
result = ''
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
5
|
+
result << if options[:size]
|
6
|
+
options[:size]
|
7
|
+
else
|
8
|
+
if options[:width] && options[:height]
|
9
|
+
"#{options[:width]}x#{options[:height]}"
|
10
|
+
elsif options[:width]
|
11
|
+
"#{options[:width]}x"
|
12
|
+
elsif options[:height]
|
13
|
+
"x#{options[:height]}"
|
14
|
+
else
|
15
|
+
''
|
16
|
+
end
|
17
|
+
end
|
20
18
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
19
|
+
if options[:left] || options[:top]
|
20
|
+
left = '%+d' % (options[:left] || 0)
|
21
|
+
top = '%+d' % (options[:top] || 0)
|
22
|
+
result << "#{left}#{top}"
|
23
|
+
end
|
26
24
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
result << '%' if options[:percentage]
|
26
|
+
result << '!' if options[:exact]
|
27
|
+
result << '<' if options[:expand_only]
|
28
|
+
result << '>' if options[:shrink_only]
|
31
29
|
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
30
|
+
result
|
35
31
|
end
|
36
|
-
|
37
|
-
include Sugar::Geometry
|
38
32
|
end
|