miso 0.3.3 → 0.4.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.
- data/lib/miso/factory.rb +5 -0
- data/lib/miso/image.rb +9 -0
- data/lib/miso/processor.rb +4 -0
- data/lib/miso/processor/image_magick.rb +4 -0
- metadata +12 -33
- data/Rakefile +0 -56
- data/VERSION +0 -1
- data/miso.gemspec +0 -75
- data/spec/api/factory_spec.rb +0 -31
- data/spec/api/image_spec.rb +0 -129
- data/spec/api/processor_spec.rb +0 -49
- data/spec/api/processors_spec.rb +0 -28
- data/spec/fixtures/120x100.png +0 -0
- data/spec/functional/processor/core_image_spec.rb +0 -55
- data/spec/functional/processor/graphics_magick_spec.rb +0 -15
- data/spec/functional/processor/image_magick_spec.rb +0 -15
- data/spec/functional/processor_spec.rb +0 -14
- data/spec/start.rb +0 -45
data/lib/miso/factory.rb
CHANGED
@@ -44,6 +44,11 @@ module Miso
|
|
44
44
|
self
|
45
45
|
end
|
46
46
|
|
47
|
+
def auto_orient
|
48
|
+
@operations << [:auto_orient, []]
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
47
52
|
def apply(input_file, output_file)
|
48
53
|
image = Image.new(input_file, @processor_class)
|
49
54
|
@operations.each { |method, args| image.send(method, *args) }
|
data/lib/miso/image.rb
CHANGED
@@ -19,6 +19,11 @@ module Miso
|
|
19
19
|
return self
|
20
20
|
end
|
21
21
|
|
22
|
+
def auto_orient
|
23
|
+
@processor.auto_orient
|
24
|
+
return self
|
25
|
+
end
|
26
|
+
|
22
27
|
def dimensions
|
23
28
|
@processor.dimensions
|
24
29
|
end
|
@@ -52,6 +57,10 @@ module Miso
|
|
52
57
|
new(input_file, processor_class).fit(width, height).write(output_file)
|
53
58
|
end
|
54
59
|
|
60
|
+
def self.auto_orient(input_file, output_file, processor_class = nil)
|
61
|
+
new(input_file, processor_class).auto_orient.write(output_file)
|
62
|
+
end
|
63
|
+
|
55
64
|
def self.dimensions(input_file, processor_class = nil)
|
56
65
|
new(input_file, processor_class).dimensions
|
57
66
|
end
|
data/lib/miso/processor.rb
CHANGED
@@ -50,6 +50,10 @@ module Miso
|
|
50
50
|
raise NotImplementedError, "The class `#{self.class.name}' does not implement #fit."
|
51
51
|
end
|
52
52
|
|
53
|
+
def auto_orient
|
54
|
+
raise NotImplementedError, "The class `#{self.class.name}' does not implement #auto_orient."
|
55
|
+
end
|
56
|
+
|
53
57
|
def dimensions
|
54
58
|
raise NotImplementedError, "The class `#{self.class.name}' does not implement #dimensions."
|
55
59
|
end
|
@@ -22,6 +22,10 @@ module Miso
|
|
22
22
|
operations << "-resize #{width}x#{height}"
|
23
23
|
end
|
24
24
|
|
25
|
+
def auto_orient
|
26
|
+
operations << "-auto-orient"
|
27
|
+
end
|
28
|
+
|
25
29
|
def dimensions
|
26
30
|
if info = identify(input_file) and match = /\s(\d+)x(\d+)\+/.match(info)
|
27
31
|
match.to_a[1..2].map { |d| d.to_i }
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: miso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 15
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Eloy Duran
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date:
|
19
|
+
date: 2011-10-26 00:00:00 +02:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -50,9 +50,6 @@ extra_rdoc_files:
|
|
50
50
|
files:
|
51
51
|
- LICENSE
|
52
52
|
- README
|
53
|
-
- Rakefile
|
54
|
-
- TODO
|
55
|
-
- VERSION
|
56
53
|
- lib/miso.rb
|
57
54
|
- lib/miso/factory.rb
|
58
55
|
- lib/miso/image.rb
|
@@ -60,24 +57,14 @@ files:
|
|
60
57
|
- lib/miso/processor/core_image.rb
|
61
58
|
- lib/miso/processor/graphics_magick.rb
|
62
59
|
- lib/miso/processor/image_magick.rb
|
63
|
-
-
|
64
|
-
- spec/api/factory_spec.rb
|
65
|
-
- spec/api/image_spec.rb
|
66
|
-
- spec/api/processor_spec.rb
|
67
|
-
- spec/api/processors_spec.rb
|
68
|
-
- spec/fixtures/120x100.png
|
69
|
-
- spec/functional/processor/core_image_spec.rb
|
70
|
-
- spec/functional/processor/graphics_magick_spec.rb
|
71
|
-
- spec/functional/processor/image_magick_spec.rb
|
72
|
-
- spec/functional/processor_spec.rb
|
73
|
-
- spec/start.rb
|
60
|
+
- TODO
|
74
61
|
has_rdoc: true
|
75
62
|
homepage: http://github.com/Fingertips/miso
|
76
63
|
licenses: []
|
77
64
|
|
78
65
|
post_install_message:
|
79
|
-
rdoc_options:
|
80
|
-
|
66
|
+
rdoc_options: []
|
67
|
+
|
81
68
|
require_paths:
|
82
69
|
- lib
|
83
70
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -101,17 +88,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
88
|
requirements: []
|
102
89
|
|
103
90
|
rubyforge_project:
|
104
|
-
rubygems_version: 1.
|
91
|
+
rubygems_version: 1.6.2
|
105
92
|
signing_key:
|
106
93
|
specification_version: 3
|
107
94
|
summary: Miso is a unified API for simple image operations commonly used on the web.
|
108
|
-
test_files:
|
109
|
-
|
110
|
-
- spec/api/image_spec.rb
|
111
|
-
- spec/api/processor_spec.rb
|
112
|
-
- spec/api/processors_spec.rb
|
113
|
-
- spec/functional/processor/core_image_spec.rb
|
114
|
-
- spec/functional/processor/graphics_magick_spec.rb
|
115
|
-
- spec/functional/processor/image_magick_spec.rb
|
116
|
-
- spec/functional/processor_spec.rb
|
117
|
-
- spec/start.rb
|
95
|
+
test_files: []
|
96
|
+
|
data/Rakefile
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rake/rdoctask'
|
3
|
-
|
4
|
-
desc "Run all specs by default"
|
5
|
-
task :default => :spec
|
6
|
-
|
7
|
-
namespace :spec do
|
8
|
-
desc "Run all API specs"
|
9
|
-
task :api do
|
10
|
-
Dir[File.dirname(__FILE__) + '/spec/api/**/*_spec.rb'].each do |file|
|
11
|
-
load file
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
desc "Run all functional specs"
|
16
|
-
task :functional do
|
17
|
-
Dir[File.dirname(__FILE__) + '/spec/functional/*_spec.rb'].each do |file|
|
18
|
-
load file
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
desc "Run all specs"
|
24
|
-
task :spec do
|
25
|
-
sh "ruby -r #{Dir.glob('spec/**/*_spec.rb').join(' -r ')} -e ''"
|
26
|
-
end
|
27
|
-
|
28
|
-
namespace :docs do
|
29
|
-
Rake::RDocTask.new(:generate) do |rd|
|
30
|
-
rd.main = "README"
|
31
|
-
rd.rdoc_files.include("README", "LICENSE", "lib/**/*.rb")
|
32
|
-
rd.options << "--all" << "--charset" << "utf-8"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
begin
|
37
|
-
require 'jeweler'
|
38
|
-
Jeweler::Tasks.new do |s|
|
39
|
-
s.name = "miso"
|
40
|
-
s.homepage = "http://github.com/Fingertips/miso"
|
41
|
-
s.email = ["eloy@fngtps.com", "manfred@fngtps.com"]
|
42
|
-
s.authors = ["Eloy Duran", "Manfred Stienstra"]
|
43
|
-
s.summary = s.description = "Miso is a unified API for simple image operations commonly used on the web."
|
44
|
-
s.files -= %w{ .gitignore .kick }
|
45
|
-
s.add_dependency('executioner', '>= 0.3.0')
|
46
|
-
end
|
47
|
-
rescue LoadError
|
48
|
-
end
|
49
|
-
|
50
|
-
begin
|
51
|
-
require 'jewelry_portfolio/tasks'
|
52
|
-
JewelryPortfolio::Tasks.new do |p|
|
53
|
-
p.account = 'Fingertips'
|
54
|
-
end
|
55
|
-
rescue LoadError
|
56
|
-
end
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.3.3
|
data/miso.gemspec
DELETED
@@ -1,75 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{miso}
|
8
|
-
s.version = "0.3.3"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Eloy Duran", "Manfred Stienstra"]
|
12
|
-
s.date = %q{2010-08-17}
|
13
|
-
s.description = %q{Miso is a unified API for simple image operations commonly used on the web.}
|
14
|
-
s.email = ["eloy@fngtps.com", "manfred@fngtps.com"]
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"LICENSE",
|
17
|
-
"README",
|
18
|
-
"TODO"
|
19
|
-
]
|
20
|
-
s.files = [
|
21
|
-
"LICENSE",
|
22
|
-
"README",
|
23
|
-
"Rakefile",
|
24
|
-
"TODO",
|
25
|
-
"VERSION",
|
26
|
-
"lib/miso.rb",
|
27
|
-
"lib/miso/factory.rb",
|
28
|
-
"lib/miso/image.rb",
|
29
|
-
"lib/miso/processor.rb",
|
30
|
-
"lib/miso/processor/core_image.rb",
|
31
|
-
"lib/miso/processor/graphics_magick.rb",
|
32
|
-
"lib/miso/processor/image_magick.rb",
|
33
|
-
"miso.gemspec",
|
34
|
-
"spec/api/factory_spec.rb",
|
35
|
-
"spec/api/image_spec.rb",
|
36
|
-
"spec/api/processor_spec.rb",
|
37
|
-
"spec/api/processors_spec.rb",
|
38
|
-
"spec/fixtures/120x100.png",
|
39
|
-
"spec/functional/processor/core_image_spec.rb",
|
40
|
-
"spec/functional/processor/graphics_magick_spec.rb",
|
41
|
-
"spec/functional/processor/image_magick_spec.rb",
|
42
|
-
"spec/functional/processor_spec.rb",
|
43
|
-
"spec/start.rb"
|
44
|
-
]
|
45
|
-
s.homepage = %q{http://github.com/Fingertips/miso}
|
46
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
47
|
-
s.require_paths = ["lib"]
|
48
|
-
s.rubygems_version = %q{1.3.7}
|
49
|
-
s.summary = %q{Miso is a unified API for simple image operations commonly used on the web.}
|
50
|
-
s.test_files = [
|
51
|
-
"spec/api/factory_spec.rb",
|
52
|
-
"spec/api/image_spec.rb",
|
53
|
-
"spec/api/processor_spec.rb",
|
54
|
-
"spec/api/processors_spec.rb",
|
55
|
-
"spec/functional/processor/core_image_spec.rb",
|
56
|
-
"spec/functional/processor/graphics_magick_spec.rb",
|
57
|
-
"spec/functional/processor/image_magick_spec.rb",
|
58
|
-
"spec/functional/processor_spec.rb",
|
59
|
-
"spec/start.rb"
|
60
|
-
]
|
61
|
-
|
62
|
-
if s.respond_to? :specification_version then
|
63
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
64
|
-
s.specification_version = 3
|
65
|
-
|
66
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
67
|
-
s.add_runtime_dependency(%q<executioner>, [">= 0.3.0"])
|
68
|
-
else
|
69
|
-
s.add_dependency(%q<executioner>, [">= 0.3.0"])
|
70
|
-
end
|
71
|
-
else
|
72
|
-
s.add_dependency(%q<executioner>, [">= 0.3.0"])
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
data/spec/api/factory_spec.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require File.expand_path('../../start', __FILE__)
|
2
|
-
|
3
|
-
describe "A Miso::Factory instance" do
|
4
|
-
before do
|
5
|
-
Miso::Processor.processor_class = Miso::Processor
|
6
|
-
|
7
|
-
Miso::Processor.any_instance.stubs(:write)
|
8
|
-
|
9
|
-
@input_file = fixture_file('120x100.png')
|
10
|
-
@output_file = '/output_image.png'
|
11
|
-
@image = Miso::Image.new(@input_file)
|
12
|
-
|
13
|
-
Miso::Image.stubs(:new).with(@input_file, Miso::Processor).returns(@image)
|
14
|
-
Miso::Image.stubs(:new).with(@output_file, Miso::Processor)
|
15
|
-
|
16
|
-
@factory = Miso::Factory.new
|
17
|
-
end
|
18
|
-
|
19
|
-
after do
|
20
|
-
Miso::Processor.processor_class = nil
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should store operations that are to be applied later on" do
|
24
|
-
@factory.crop(123, 456).fit(123, 456)
|
25
|
-
|
26
|
-
@image.expects(:crop).with(123, 456)
|
27
|
-
@image.expects(:fit).with(123, 456)
|
28
|
-
|
29
|
-
@factory.apply(@input_file, @output_file)
|
30
|
-
end
|
31
|
-
end
|
data/spec/api/image_spec.rb
DELETED
@@ -1,129 +0,0 @@
|
|
1
|
-
require File.expand_path('../../start', __FILE__)
|
2
|
-
|
3
|
-
describe "Miso::Image, concerning initialization" do
|
4
|
-
class FakeProcessor; end
|
5
|
-
|
6
|
-
before do
|
7
|
-
Miso::Processor.processor_class = nil
|
8
|
-
end
|
9
|
-
|
10
|
-
after do
|
11
|
-
Miso::Processor.processor_class = nil
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should initialize with only a file argument and use the default processor class" do
|
15
|
-
Miso::Processor.processor_class = Miso::Processor::ImageMagick
|
16
|
-
image = Miso::Image.new(fixture_file('120x100.png'))
|
17
|
-
|
18
|
-
image.processor.input_file.should == fixture_file('120x100.png')
|
19
|
-
image.processor.class.should == Miso::Processor::ImageMagick
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should initialize with a file and processor class" do
|
23
|
-
image = Miso::Image.new(fixture_file('120x100.png'), Miso::Processor::ImageMagick)
|
24
|
-
|
25
|
-
image.processor.input_file.should == fixture_file('120x100.png')
|
26
|
-
image.processor.class.should == Miso::Processor::ImageMagick
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "An instance of Miso::Image, concerning forwarding calls to the processor" do
|
31
|
-
before do
|
32
|
-
Miso::Processor.any_instance.stubs(:fit)
|
33
|
-
Miso::Processor.any_instance.stubs(:crop)
|
34
|
-
|
35
|
-
@image = Miso::Image.new(fixture_file('120x100.png'), Miso::Processor)
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should forward #crop to the processor" do
|
39
|
-
@image.processor.expects(:crop).with(123, 456)
|
40
|
-
@image.crop(123, 456)
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should return self when calling #crop" do
|
44
|
-
@image.crop(123, 456).should.be @image
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should forward #fit to the processor" do
|
48
|
-
@image.processor.expects(:fit).with(123, 456)
|
49
|
-
@image.fit(123, 456)
|
50
|
-
end
|
51
|
-
|
52
|
-
it "should return self instance when calling #fit" do
|
53
|
-
@image.fit(123, 456).should.be @image
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should forward #dimensions to the processor and return the result" do
|
57
|
-
@image.processor.expects(:dimensions).returns([123, 456])
|
58
|
-
@image.dimensions.should == [123, 456]
|
59
|
-
end
|
60
|
-
|
61
|
-
it "should forward #width and #height to the processor and return the result" do
|
62
|
-
@image.processor.expects(:width).returns(123)
|
63
|
-
@image.width.should == 123
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should forward #height to the processor and return the result" do
|
67
|
-
@image.processor.expects(:height).returns(456)
|
68
|
-
@image.height.should == 456
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should forward #write to the processor and forward its output file to the new instance of Miso::Image" do
|
72
|
-
@image.processor.expects(:write).with(fixture_file('120x100.png'))
|
73
|
-
output_image = @image.write(fixture_file('120x100.png'))
|
74
|
-
output_image.processor.input_file.should == fixture_file('120x100.png')
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe "An instance of Miso::Image, concerning combined methods" do
|
79
|
-
before do
|
80
|
-
Miso::Processor.any_instance.stubs(:fit)
|
81
|
-
Miso::Processor.any_instance.stubs(:crop)
|
82
|
-
|
83
|
-
@image = Miso::Image.new(fixture_file('120x100.png'), Miso::Processor)
|
84
|
-
end
|
85
|
-
|
86
|
-
it "should call #fit to scale and preserve aspect ratio, then call #crop" do
|
87
|
-
@image.expects(:fit).with(123, 456).returns(@image)
|
88
|
-
@image.expects(:crop).with(123, 456).returns(@image)
|
89
|
-
|
90
|
-
@image.crop_fitting(123, 456)
|
91
|
-
end
|
92
|
-
|
93
|
-
it "should return self when calling #crop_fitting" do
|
94
|
-
@image.crop_fitting(123, 456).should.be @image
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
describe "Miso::Image, concerning shortcut class methods" do
|
99
|
-
before do
|
100
|
-
@input_file = fixture_file('120x100.png')
|
101
|
-
@output_file = temp_file('cropped_to_40x30.png')
|
102
|
-
@image = Miso::Image.new(@input_file, Miso::Processor)
|
103
|
-
|
104
|
-
Miso::Image.stubs(:new).with(@input_file, nil).returns(@image)
|
105
|
-
end
|
106
|
-
|
107
|
-
it "should crop to specified dimensions" do
|
108
|
-
@image.expects(:crop).with(40, 30).returns(@image)
|
109
|
-
@image.expects(:write).with(@output_file)
|
110
|
-
|
111
|
-
Miso::Image.crop(@input_file, @output_file, 40, 30)
|
112
|
-
end
|
113
|
-
|
114
|
-
it "should fit to specified dimensions, conserving the original aspect ratio" do
|
115
|
-
@image.expects(:fit).with(40, 30).returns(@image)
|
116
|
-
@image.expects(:write).with(@output_file)
|
117
|
-
|
118
|
-
Miso::Image.fit(@input_file, @output_file, 40, 30)
|
119
|
-
end
|
120
|
-
|
121
|
-
it "should return its dimensions" do
|
122
|
-
@image.expects(:dimensions).returns([120, 100])
|
123
|
-
Miso::Image.dimensions(@input_file).should == [120, 100]
|
124
|
-
end
|
125
|
-
|
126
|
-
it "should make a factory" do
|
127
|
-
Miso::Image.factory.should.be.a.kind_of(Miso::Factory)
|
128
|
-
end
|
129
|
-
end
|
data/spec/api/processor_spec.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
require File.expand_path('../../start', __FILE__)
|
2
|
-
|
3
|
-
describe "Miso::Processor" do
|
4
|
-
before do
|
5
|
-
Miso::Processor.processor_class = nil
|
6
|
-
end
|
7
|
-
|
8
|
-
after do
|
9
|
-
Miso::Processor.processor_class = nil
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should assign the processor class to use" do
|
13
|
-
Miso::Processor.processor_class = Miso::Processor::ImageMagick
|
14
|
-
Miso::Processor.processor_class.should.be Miso::Processor::ImageMagick
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should find the first available processor class" do
|
18
|
-
Miso::Processor.processor_classes = [
|
19
|
-
stub(:available? => false),
|
20
|
-
stub(:available? => true),
|
21
|
-
stub(:available? => false)
|
22
|
-
]
|
23
|
-
|
24
|
-
Miso::Processor.processor_class.should.be Miso::Processor.processor_classes[1]
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should raise if no available processor class is found" do
|
28
|
-
Miso::Processor.processor_classes = [
|
29
|
-
stub(:available? => false),
|
30
|
-
stub(:available? => false)
|
31
|
-
]
|
32
|
-
|
33
|
-
lambda {
|
34
|
-
Miso::Processor.processor_class
|
35
|
-
}.should.raise
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should initialize with an input file path" do
|
39
|
-
processor = Miso::Processor.new(fixture_file('120x100.png'))
|
40
|
-
processor.input_file.should == fixture_file('120x100.png')
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should returns the width and height" do
|
44
|
-
processor = Miso::Processor.new(fixture_file('120x100.png'))
|
45
|
-
processor.stubs(:dimensions).returns([120, 100])
|
46
|
-
processor.width.should == 120
|
47
|
-
processor.height.should == 100
|
48
|
-
end
|
49
|
-
end
|
data/spec/api/processors_spec.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require File.expand_path('../../start', __FILE__)
|
2
|
-
|
3
|
-
Miso::Processor.processor_classes.each do |processor|
|
4
|
-
if processor.available?
|
5
|
-
describe "An instance of #{processor.name}" do
|
6
|
-
before do
|
7
|
-
@image_120_x_100 = Miso::Image.new(fixture_file('120x100.png'), processor)
|
8
|
-
@output_file = temp_file('temp.png')
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should crop to specified dimensions" do
|
12
|
-
@image_120_x_100.crop(40, 30).write(@output_file).dimensions.should == [40, 30]
|
13
|
-
@image_120_x_100.crop(40, 33).write(@output_file).dimensions.should == [40, 33]
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should fit to specified dimensions, conserving the original aspect ratio" do
|
17
|
-
@image_120_x_100.fit(40, 30).write(@output_file).dimensions.should == [36, 30]
|
18
|
-
@image_120_x_100.fit(40, 34).write(@output_file).dimensions.should == [40, 33]
|
19
|
-
end
|
20
|
-
|
21
|
-
it "should return its dimensions" do
|
22
|
-
@image_120_x_100.dimensions.should == [120, 100]
|
23
|
-
end
|
24
|
-
end
|
25
|
-
else
|
26
|
-
warn "[!] Skipping #{processor.name} api spec."
|
27
|
-
end
|
28
|
-
end
|
data/spec/fixtures/120x100.png
DELETED
Binary file
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require File.expand_path('../../../start', __FILE__)
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'osx/cocoa'
|
5
|
-
|
6
|
-
describe "Miso::Processor::CoreImage" do
|
7
|
-
it "should check the load paths to see if RubyCocoa is available" do
|
8
|
-
Miso::Processor::CoreImage.should.be.available
|
9
|
-
with_load_path '/tmp', '~/' do
|
10
|
-
Miso::Processor::CoreImage.should.not.be.available
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should require osx/cocoa on initialization" do
|
15
|
-
Miso::Processor::CoreImage.any_instance.expects(:require).with('osx/cocoa')
|
16
|
-
Miso::Processor::CoreImage.new(fixture_file('120x100.png'))
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe "An instance of Miso::Processor::CoreImage" do
|
21
|
-
it "should write the output file with the type inflected from the extension" do
|
22
|
-
ext_and_type = {
|
23
|
-
'png' => 'PNG' ,
|
24
|
-
'jpg' => 'JPEG',
|
25
|
-
'jpeg' => 'JPEG',
|
26
|
-
'gif' => 'GIF' ,
|
27
|
-
'tif' => 'TIFF',
|
28
|
-
'tiff' => 'TIFF',
|
29
|
-
'bmp' => 'bitmap'
|
30
|
-
}
|
31
|
-
|
32
|
-
ext_and_type.each { |k, v| ext_and_type[k.upcase] = v }
|
33
|
-
|
34
|
-
ext_and_type.each do |ext, type|
|
35
|
-
Miso::Image.crop(input, output(ext), 100, 100, processor)
|
36
|
-
file_info(output(ext)).should.include type
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should raise if it can't inflect the type from the extension" do
|
41
|
-
lambda {
|
42
|
-
Miso::Image.crop(input, output('foo'), 100, 100, processor)
|
43
|
-
}.should.raise Miso::UnsupportedFileType
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def processor; Miso::Processor::CoreImage end
|
49
|
-
def input; fixture_file('120x100.png') end
|
50
|
-
def output(ext); temp_file("temp.#{ext}") end
|
51
|
-
end
|
52
|
-
|
53
|
-
rescue LoadError
|
54
|
-
warn "[!] Skipping Miso::Processor::CoreImage functional spec."
|
55
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require File.expand_path('../../../start', __FILE__)
|
2
|
-
|
3
|
-
if Executioner::ClassMethods.find_executable('gm')
|
4
|
-
describe "Miso::Processor::GraphicsMagick" do
|
5
|
-
it "should check the load paths to see if GraphicsMagick is available" do
|
6
|
-
Miso::Processor::GraphicsMagick.should.be.available
|
7
|
-
|
8
|
-
Miso::Processor::GraphicsMagick.stubs(:find_executable).returns(nil)
|
9
|
-
Miso::Processor::GraphicsMagick.should.not.be.available
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
else
|
14
|
-
warn "[!] Skipping Miso::Processor::GraphicsMagick functional spec."
|
15
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require File.expand_path('../../../start', __FILE__)
|
2
|
-
|
3
|
-
if Executioner::ClassMethods.find_executable('convert')
|
4
|
-
describe "Miso::Processor::ImageMagick" do
|
5
|
-
it "should check the load paths to see if ImageMagick is available" do
|
6
|
-
Miso::Processor::ImageMagick.should.be.available
|
7
|
-
|
8
|
-
Miso::Processor::ImageMagick.stubs(:find_executable).returns(nil)
|
9
|
-
Miso::Processor::ImageMagick.should.not.be.available
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
else
|
14
|
-
warn "[!] Skipping Miso::Processor::ImageMagick functional spec."
|
15
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require File.expand_path('../../start', __FILE__)
|
2
|
-
|
3
|
-
describe "Miso::Processor" do
|
4
|
-
it "should expand and verify the input file path" do
|
5
|
-
raised = false
|
6
|
-
begin
|
7
|
-
Miso::Processor.new('~/image.png')
|
8
|
-
rescue Errno::ENOENT => e
|
9
|
-
raised = true
|
10
|
-
e.message.should.include File.expand_path('~/image.png')
|
11
|
-
end
|
12
|
-
raised.should.be true
|
13
|
-
end
|
14
|
-
end
|
data/spec/start.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'rubygems' rescue LoadError
|
2
|
-
require 'test/spec'
|
3
|
-
require 'mocha'
|
4
|
-
|
5
|
-
require 'fileutils'
|
6
|
-
|
7
|
-
$:.unshift(File.expand_path('../../lib', __FILE__))
|
8
|
-
|
9
|
-
require 'miso'
|
10
|
-
require 'miso/processor'
|
11
|
-
require 'miso/processor/core_image'
|
12
|
-
require 'miso/processor/image_magick'
|
13
|
-
require 'miso/processor/graphics_magick'
|
14
|
-
|
15
|
-
class Test::Unit::TestCase
|
16
|
-
TMP_DIR = File.expand_path('../tmp', __FILE__)
|
17
|
-
|
18
|
-
def setup
|
19
|
-
FileUtils.mkdir_p(TMP_DIR)
|
20
|
-
end
|
21
|
-
|
22
|
-
def teardown
|
23
|
-
FileUtils.rm_rf(TMP_DIR)
|
24
|
-
end
|
25
|
-
|
26
|
-
def fixture_file(name)
|
27
|
-
File.expand_path("../fixtures/#{name}", __FILE__)
|
28
|
-
end
|
29
|
-
|
30
|
-
def temp_file(filename)
|
31
|
-
File.join(TMP_DIR, filename)
|
32
|
-
end
|
33
|
-
|
34
|
-
def with_load_path(*load_path)
|
35
|
-
before = $:.dup
|
36
|
-
$:.replace load_path
|
37
|
-
yield
|
38
|
-
ensure
|
39
|
-
$:.replace before
|
40
|
-
end
|
41
|
-
|
42
|
-
def file_info(path)
|
43
|
-
`/usr/bin/env file '#{path}'`.split(':').last.strip
|
44
|
-
end
|
45
|
-
end
|