miso 0.2.4 → 0.3.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/README +14 -9
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/miso/processor.rb +5 -4
- data/lib/miso/processor/graphics_magick.rb +20 -0
- data/lib/miso/processor/image_magick.rb +1 -1
- data/miso.gemspec +9 -9
- data/spec/api/processors_spec.rb +28 -0
- data/spec/functional/processor/graphics_magick_spec.rb +15 -0
- data/spec/start.rb +1 -0
- metadata +7 -6
- data/spec/api/processor/core_image_spec.rb +0 -29
- data/spec/api/processor/image_magick_spec.rb +0 -22
data/README
CHANGED
@@ -7,8 +7,8 @@ to plug in your own backend.
|
|
7
7
|
A unified API is helpful when you run your code on a number of different boxes
|
8
8
|
and architectures. For instance, you could develop your web application on your
|
9
9
|
Mac with the Core Image backend [1] and deploy to your Linux server with an
|
10
|
-
ImageMagick backend. You could even have the API talk to your
|
11
|
-
distributed image processing backend.
|
10
|
+
ImageMagick/GraphicsMagick backend. You could even have the API talk to your
|
11
|
+
custom distributed image processing backend.
|
12
12
|
|
13
13
|
[1] Note how this means you will never have to install ImageMagick again (;
|
14
14
|
|
@@ -50,15 +50,20 @@ But wait, there is more! Read the API documentation for more goodies.
|
|
50
50
|
|
51
51
|
: SUPPORTED BACKENDS
|
52
52
|
|
53
|
-
Currently supported backends are: Core Image
|
54
|
-
are the ones we use. If you want to
|
55
|
-
accept patches!
|
53
|
+
Currently supported backends are: Core Image, ImageMagick, and GraphicsMagick,
|
54
|
+
because those are the ones we, and our contributors use. If you want to
|
55
|
+
contribute backends we're happy to accept patches!
|
56
|
+
|
57
|
+
|
58
|
+
: CONTRIBUTORS
|
59
|
+
|
60
|
+
~> GraphicsMagick * Paul Vaillant (> http://github.com/pvaillant <)
|
56
61
|
|
57
62
|
|
58
63
|
: ENDORSEMENTS
|
59
64
|
|
60
|
-
|
61
|
-
|
65
|
+
@garyyuen: ‘miso with indian flavors. seems ok.’
|
66
|
+
@Oracl: ‘@veganza I love miso! :)’
|
62
67
|
@lehudgins: ‘ok fine. Miso totally does go kinda bad after a year.’
|
63
|
-
|
64
|
-
|
68
|
+
Wikipedia: ‘High in protein and rich in vitamins and minerals, miso played
|
69
|
+
an important nutritional role in feudal Japan.’
|
data/Rakefile
CHANGED
@@ -42,7 +42,7 @@ begin
|
|
42
42
|
s.authors = ["Eloy Duran", "Manfred Stienstra"]
|
43
43
|
s.summary = s.description = "Miso is a unified API for simple image operations commonly used on the web."
|
44
44
|
s.files -= %w{ .gitignore .kick }
|
45
|
-
s.add_dependency('executioner', '>= 0.
|
45
|
+
s.add_dependency('executioner', '>= 0.3.0')
|
46
46
|
end
|
47
47
|
rescue LoadError
|
48
48
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lib/miso/processor.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
module Miso
|
2
2
|
class Processor
|
3
|
-
autoload :CoreImage,
|
4
|
-
autoload :
|
3
|
+
autoload :CoreImage, 'miso/processor/core_image'
|
4
|
+
autoload :GraphicsMagick, 'miso/processor/graphics_magick'
|
5
|
+
autoload :ImageMagick, 'miso/processor/image_magick'
|
5
6
|
|
6
7
|
class << self
|
7
8
|
# Sets the default processor class.
|
@@ -26,7 +27,7 @@ module Miso
|
|
26
27
|
# When no explicit processor_class is set this list is iterated, from
|
27
28
|
# first to last, and the first available processor on the machine is used.
|
28
29
|
def processor_classes
|
29
|
-
@processor_classes ||= [CoreImage, ImageMagick]
|
30
|
+
@processor_classes ||= [CoreImage, GraphicsMagick, ImageMagick]
|
30
31
|
end
|
31
32
|
|
32
33
|
def available?
|
@@ -65,4 +66,4 @@ module Miso
|
|
65
66
|
dimensions.last
|
66
67
|
end
|
67
68
|
end
|
68
|
-
end
|
69
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Miso
|
2
|
+
class Processor
|
3
|
+
class GraphicsMagick < ImageMagick
|
4
|
+
def self.available?
|
5
|
+
!find_executable('gm').nil?
|
6
|
+
end
|
7
|
+
|
8
|
+
executable :gm
|
9
|
+
|
10
|
+
def identify(input_file)
|
11
|
+
gm "identify '#{input_file}'"
|
12
|
+
end
|
13
|
+
|
14
|
+
def convert(source_path, output_path, options)
|
15
|
+
ensure_output_directory(output_path)
|
16
|
+
gm "convert '#{source_path}' #{options} '#{output_path}'"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/miso.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{miso}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Eloy Duran", "Manfred Stienstra"]
|
12
|
-
s.date = %q{2009-12-
|
12
|
+
s.date = %q{2009-12-29}
|
13
13
|
s.description = %q{Miso is a unified API for simple image operations commonly used on the web.}
|
14
14
|
s.email = ["eloy@fngtps.com", "manfred@fngtps.com"]
|
15
15
|
s.extra_rdoc_files = [
|
@@ -27,15 +27,16 @@ Gem::Specification.new do |s|
|
|
27
27
|
"lib/miso/image.rb",
|
28
28
|
"lib/miso/processor.rb",
|
29
29
|
"lib/miso/processor/core_image.rb",
|
30
|
+
"lib/miso/processor/graphics_magick.rb",
|
30
31
|
"lib/miso/processor/image_magick.rb",
|
31
32
|
"miso.gemspec",
|
32
33
|
"spec/api/factory_spec.rb",
|
33
34
|
"spec/api/image_spec.rb",
|
34
|
-
"spec/api/processor/core_image_spec.rb",
|
35
|
-
"spec/api/processor/image_magick_spec.rb",
|
36
35
|
"spec/api/processor_spec.rb",
|
36
|
+
"spec/api/processors_spec.rb",
|
37
37
|
"spec/fixtures/120x100.png",
|
38
38
|
"spec/functional/processor/core_image_spec.rb",
|
39
|
+
"spec/functional/processor/graphics_magick_spec.rb",
|
39
40
|
"spec/functional/processor/image_magick_spec.rb",
|
40
41
|
"spec/functional/processor_spec.rb",
|
41
42
|
"spec/start.rb"
|
@@ -48,10 +49,10 @@ Gem::Specification.new do |s|
|
|
48
49
|
s.test_files = [
|
49
50
|
"spec/api/factory_spec.rb",
|
50
51
|
"spec/api/image_spec.rb",
|
51
|
-
"spec/api/processor/core_image_spec.rb",
|
52
|
-
"spec/api/processor/image_magick_spec.rb",
|
53
52
|
"spec/api/processor_spec.rb",
|
53
|
+
"spec/api/processors_spec.rb",
|
54
54
|
"spec/functional/processor/core_image_spec.rb",
|
55
|
+
"spec/functional/processor/graphics_magick_spec.rb",
|
55
56
|
"spec/functional/processor/image_magick_spec.rb",
|
56
57
|
"spec/functional/processor_spec.rb",
|
57
58
|
"spec/start.rb"
|
@@ -70,4 +71,3 @@ Gem::Specification.new do |s|
|
|
70
71
|
s.add_dependency(%q<executioner>, [">= 0.2.0"])
|
71
72
|
end
|
72
73
|
end
|
73
|
-
|
@@ -0,0 +1,28 @@
|
|
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
|
@@ -0,0 +1,15 @@
|
|
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
|
data/spec/start.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: miso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eloy Duran
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-12-
|
13
|
+
date: 2009-12-29 00:00:00 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -45,15 +45,16 @@ files:
|
|
45
45
|
- lib/miso/image.rb
|
46
46
|
- lib/miso/processor.rb
|
47
47
|
- lib/miso/processor/core_image.rb
|
48
|
+
- lib/miso/processor/graphics_magick.rb
|
48
49
|
- lib/miso/processor/image_magick.rb
|
49
50
|
- miso.gemspec
|
50
51
|
- spec/api/factory_spec.rb
|
51
52
|
- spec/api/image_spec.rb
|
52
|
-
- spec/api/processor/core_image_spec.rb
|
53
|
-
- spec/api/processor/image_magick_spec.rb
|
54
53
|
- spec/api/processor_spec.rb
|
54
|
+
- spec/api/processors_spec.rb
|
55
55
|
- spec/fixtures/120x100.png
|
56
56
|
- spec/functional/processor/core_image_spec.rb
|
57
|
+
- spec/functional/processor/graphics_magick_spec.rb
|
57
58
|
- spec/functional/processor/image_magick_spec.rb
|
58
59
|
- spec/functional/processor_spec.rb
|
59
60
|
- spec/start.rb
|
@@ -88,10 +89,10 @@ summary: Miso is a unified API for simple image operations commonly used on the
|
|
88
89
|
test_files:
|
89
90
|
- spec/api/factory_spec.rb
|
90
91
|
- spec/api/image_spec.rb
|
91
|
-
- spec/api/processor/core_image_spec.rb
|
92
|
-
- spec/api/processor/image_magick_spec.rb
|
93
92
|
- spec/api/processor_spec.rb
|
93
|
+
- spec/api/processors_spec.rb
|
94
94
|
- spec/functional/processor/core_image_spec.rb
|
95
|
+
- spec/functional/processor/graphics_magick_spec.rb
|
95
96
|
- spec/functional/processor/image_magick_spec.rb
|
96
97
|
- spec/functional/processor_spec.rb
|
97
98
|
- spec/start.rb
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require File.expand_path('../../../start', __FILE__)
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'osx/cocoa'
|
5
|
-
|
6
|
-
describe "An instance of Miso::Processor::CoreImage" do
|
7
|
-
before do
|
8
|
-
@image_120_x_100 = Miso::Image.new(fixture_file('120x100.png'), Miso::Processor::CoreImage)
|
9
|
-
@output_file = temp_file('temp.png')
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should crop to specified dimensions" do
|
13
|
-
@image_120_x_100.crop(40, 30).write(@output_file).dimensions.should == [40, 30]
|
14
|
-
@image_120_x_100.crop(40, 33).write(@output_file).dimensions.should == [40, 33]
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should fit to specified dimensions, conserving the original aspect ratio" do
|
18
|
-
@image_120_x_100.fit(40, 30).write(@output_file).dimensions.should == [36, 30]
|
19
|
-
@image_120_x_100.fit(40, 34).write(@output_file).dimensions.should == [40, 33]
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should return its dimensions" do
|
23
|
-
@image_120_x_100.dimensions.should == [120, 100]
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
rescue LoadError
|
28
|
-
warn "[!] Skipping Miso::Processor::CoreImage API spec."
|
29
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require File.expand_path('../../../start', __FILE__)
|
2
|
-
|
3
|
-
describe "An instance of Miso::Processor::ImageMagick" do
|
4
|
-
before do
|
5
|
-
@image_120_x_100 = Miso::Image.new(fixture_file('120x100.png'), Miso::Processor::ImageMagick)
|
6
|
-
@output_file = temp_file('temp.png')
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should crop to specified dimensions" do
|
10
|
-
@image_120_x_100.crop(40, 30).write(@output_file).dimensions.should == [40, 30]
|
11
|
-
@image_120_x_100.crop(40, 33).write(@output_file).dimensions.should == [40, 33]
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should fit to specified dimensions, conserving the original aspect ratio" do
|
15
|
-
@image_120_x_100.fit(40, 30).write(@output_file).dimensions.should == [36, 30]
|
16
|
-
@image_120_x_100.fit(40, 34).write(@output_file).dimensions.should == [40, 33]
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should return its dimensions" do
|
20
|
-
@image_120_x_100.dimensions.should == [120, 100]
|
21
|
-
end
|
22
|
-
end
|