fog-dragonfly 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of fog-dragonfly might be problematic. Click here for more details.
- data/.specopts +2 -0
- data/.yardopts +23 -0
- data/Gemfile +23 -0
- data/Gemfile.rails.2.3.5 +14 -0
- data/History.md +266 -0
- data/LICENSE +20 -0
- data/README.md +88 -0
- data/Rakefile +92 -0
- data/VERSION +1 -0
- data/config.ru +13 -0
- data/docs.watchr +1 -0
- data/dragonfly.gemspec +293 -0
- data/extra_docs/Analysers.md +108 -0
- data/extra_docs/Caching.md +23 -0
- data/extra_docs/Configuration.md +138 -0
- data/extra_docs/DataStorage.md +136 -0
- data/extra_docs/Encoding.md +96 -0
- data/extra_docs/GeneralUsage.md +121 -0
- data/extra_docs/Generators.md +102 -0
- data/extra_docs/Heroku.md +50 -0
- data/extra_docs/Index.md +36 -0
- data/extra_docs/MimeTypes.md +40 -0
- data/extra_docs/Models.md +266 -0
- data/extra_docs/Mongo.md +45 -0
- data/extra_docs/Processing.md +130 -0
- data/extra_docs/Rack.md +52 -0
- data/extra_docs/Rails2.md +55 -0
- data/extra_docs/Rails3.md +62 -0
- data/extra_docs/Sinatra.md +25 -0
- data/extra_docs/URLs.md +169 -0
- data/features/3.0.3.feature +8 -0
- data/features/images.feature +47 -0
- data/features/no_processing.feature +14 -0
- data/features/rails_2.3.5.feature +7 -0
- data/features/steps/common_steps.rb +8 -0
- data/features/steps/dragonfly_steps.rb +66 -0
- data/features/steps/rails_steps.rb +39 -0
- data/features/support/env.rb +40 -0
- data/fixtures/files/app/models/album.rb +3 -0
- data/fixtures/files/app/views/albums/new.html.erb +4 -0
- data/fixtures/files/app/views/albums/show.html.erb +4 -0
- data/fixtures/files/config/initializers/dragonfly.rb +4 -0
- data/fixtures/files/features/manage_album_images.feature +12 -0
- data/fixtures/files/features/step_definitions/image_steps.rb +15 -0
- data/fixtures/files/features/support/paths.rb +15 -0
- data/fixtures/files/features/text_images.feature +7 -0
- data/fixtures/rails_2.3.5/template.rb +10 -0
- data/fixtures/rails_3.0.3/template.rb +20 -0
- data/irbrc.rb +17 -0
- data/lib/dragonfly.rb +45 -0
- data/lib/dragonfly/active_model_extensions.rb +13 -0
- data/lib/dragonfly/active_model_extensions/attachment.rb +169 -0
- data/lib/dragonfly/active_model_extensions/class_methods.rb +45 -0
- data/lib/dragonfly/active_model_extensions/instance_methods.rb +28 -0
- data/lib/dragonfly/active_model_extensions/validations.rb +37 -0
- data/lib/dragonfly/analyser.rb +59 -0
- data/lib/dragonfly/analysis/file_command_analyser.rb +32 -0
- data/lib/dragonfly/analysis/image_magick_analyser.rb +47 -0
- data/lib/dragonfly/analysis/r_magick_analyser.rb +63 -0
- data/lib/dragonfly/app.rb +182 -0
- data/lib/dragonfly/config/heroku.rb +19 -0
- data/lib/dragonfly/config/image_magick.rb +41 -0
- data/lib/dragonfly/config/r_magick.rb +46 -0
- data/lib/dragonfly/config/rails.rb +17 -0
- data/lib/dragonfly/configurable.rb +119 -0
- data/lib/dragonfly/core_ext/object.rb +8 -0
- data/lib/dragonfly/core_ext/string.rb +9 -0
- data/lib/dragonfly/core_ext/symbol.rb +9 -0
- data/lib/dragonfly/data_storage.rb +9 -0
- data/lib/dragonfly/data_storage/file_data_store.rb +114 -0
- data/lib/dragonfly/data_storage/mongo_data_store.rb +82 -0
- data/lib/dragonfly/data_storage/s3data_store.rb +115 -0
- data/lib/dragonfly/encoder.rb +13 -0
- data/lib/dragonfly/encoding/image_magick_encoder.rb +57 -0
- data/lib/dragonfly/encoding/r_magick_encoder.rb +61 -0
- data/lib/dragonfly/function_manager.rb +69 -0
- data/lib/dragonfly/generation/hash_with_css_style_keys.rb +23 -0
- data/lib/dragonfly/generation/image_magick_generator.rb +140 -0
- data/lib/dragonfly/generation/r_magick_generator.rb +155 -0
- data/lib/dragonfly/generator.rb +9 -0
- data/lib/dragonfly/image_magick_utils.rb +81 -0
- data/lib/dragonfly/job.rb +371 -0
- data/lib/dragonfly/job_builder.rb +39 -0
- data/lib/dragonfly/job_definitions.rb +26 -0
- data/lib/dragonfly/job_endpoint.rb +15 -0
- data/lib/dragonfly/loggable.rb +28 -0
- data/lib/dragonfly/middleware.rb +34 -0
- data/lib/dragonfly/processing/image_magick_processor.rb +99 -0
- data/lib/dragonfly/processing/r_magick_processor.rb +126 -0
- data/lib/dragonfly/processor.rb +9 -0
- data/lib/dragonfly/r_magick_utils.rb +48 -0
- data/lib/dragonfly/rails/images.rb +22 -0
- data/lib/dragonfly/response.rb +82 -0
- data/lib/dragonfly/routed_endpoint.rb +40 -0
- data/lib/dragonfly/serializer.rb +32 -0
- data/lib/dragonfly/simple_cache.rb +23 -0
- data/lib/dragonfly/simple_endpoint.rb +63 -0
- data/lib/dragonfly/temp_object.rb +220 -0
- data/samples/beach.png +0 -0
- data/samples/egg.png +0 -0
- data/samples/round.gif +0 -0
- data/samples/sample.docx +0 -0
- data/samples/taj.jpg +0 -0
- data/spec/argument_matchers.rb +19 -0
- data/spec/dragonfly/active_model_extensions/active_model_setup.rb +97 -0
- data/spec/dragonfly/active_model_extensions/active_record_setup.rb +85 -0
- data/spec/dragonfly/active_model_extensions/model_spec.rb +723 -0
- data/spec/dragonfly/active_model_extensions/spec_helper.rb +11 -0
- data/spec/dragonfly/analyser_spec.rb +123 -0
- data/spec/dragonfly/analysis/file_command_analyser_spec.rb +57 -0
- data/spec/dragonfly/analysis/image_magick_analyser_spec.rb +15 -0
- data/spec/dragonfly/analysis/r_magick_analyser_spec.rb +27 -0
- data/spec/dragonfly/analysis/shared_analyser_spec.rb +51 -0
- data/spec/dragonfly/app_spec.rb +280 -0
- data/spec/dragonfly/config/r_magick_spec.rb +25 -0
- data/spec/dragonfly/configurable_spec.rb +220 -0
- data/spec/dragonfly/core_ext/string_spec.rb +17 -0
- data/spec/dragonfly/core_ext/symbol_spec.rb +17 -0
- data/spec/dragonfly/data_storage/data_store_spec.rb +76 -0
- data/spec/dragonfly/data_storage/file_data_store_spec.rb +169 -0
- data/spec/dragonfly/data_storage/mongo_data_store_spec.rb +38 -0
- data/spec/dragonfly/data_storage/s3_data_store_spec.rb +94 -0
- data/spec/dragonfly/deprecation_spec.rb +20 -0
- data/spec/dragonfly/encoding/image_magick_encoder_spec.rb +41 -0
- data/spec/dragonfly/encoding/r_magick_encoder_spec.rb +37 -0
- data/spec/dragonfly/function_manager_spec.rb +154 -0
- data/spec/dragonfly/generation/hash_with_css_style_keys_spec.rb +24 -0
- data/spec/dragonfly/generation/image_magick_generator_spec.rb +12 -0
- data/spec/dragonfly/generation/r_magick_generator_spec.rb +24 -0
- data/spec/dragonfly/generation/shared_generator_spec.rb +91 -0
- data/spec/dragonfly/image_magick_utils_spec.rb +16 -0
- data/spec/dragonfly/job_builder_spec.rb +37 -0
- data/spec/dragonfly/job_definitions_spec.rb +35 -0
- data/spec/dragonfly/job_endpoint_spec.rb +120 -0
- data/spec/dragonfly/job_spec.rb +773 -0
- data/spec/dragonfly/loggable_spec.rb +80 -0
- data/spec/dragonfly/middleware_spec.rb +68 -0
- data/spec/dragonfly/processing/image_magick_processor_spec.rb +29 -0
- data/spec/dragonfly/processing/r_magick_processor_spec.rb +26 -0
- data/spec/dragonfly/processing/shared_processing_spec.rb +215 -0
- data/spec/dragonfly/routed_endpoint_spec.rb +48 -0
- data/spec/dragonfly/serializer_spec.rb +61 -0
- data/spec/dragonfly/simple_cache_spec.rb +27 -0
- data/spec/dragonfly/simple_endpoint_spec.rb +89 -0
- data/spec/dragonfly/temp_object_spec.rb +352 -0
- data/spec/image_matchers.rb +47 -0
- data/spec/simple_matchers.rb +44 -0
- data/spec/spec_helper.rb +58 -0
- data/yard/handlers/configurable_attr_handler.rb +38 -0
- data/yard/setup.rb +15 -0
- data/yard/templates/default/fulldoc/html/css/common.css +107 -0
- data/yard/templates/default/layout/html/layout.erb +87 -0
- data/yard/templates/default/module/html/configuration_summary.erb +31 -0
- data/yard/templates/default/module/setup.rb +17 -0
- metadata +550 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
+
require File.dirname(__FILE__) + '/data_store_spec'
|
4
|
+
require 'mongo'
|
5
|
+
|
6
|
+
describe Dragonfly::DataStorage::MongoDataStore do
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
begin
|
10
|
+
Mongo::Connection.new
|
11
|
+
rescue Mongo::ConnectionFailure => e
|
12
|
+
pending "You need to start mongo on localhost:27017 to test the MongoDataStore"
|
13
|
+
end
|
14
|
+
@data_store = Dragonfly::DataStorage::MongoDataStore.new :database => 'dragonfly_test'
|
15
|
+
end
|
16
|
+
|
17
|
+
it_should_behave_like 'data_store'
|
18
|
+
|
19
|
+
describe "authenticating" do
|
20
|
+
before(:each) do
|
21
|
+
@temp_object = Dragonfly::TempObject.new('Feijão verde')
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should not attempt to authenticate if a username is not given" do
|
25
|
+
@data_store.db.should_not_receive(:authenticate)
|
26
|
+
@data_store.store(@temp_object)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should attempt to authenticate once if a username is given" do
|
30
|
+
@data_store.username = 'terry'
|
31
|
+
@data_store.password = 'butcher'
|
32
|
+
@data_store.db.should_receive(:authenticate).exactly(:once).with('terry','butcher').and_return(true)
|
33
|
+
uid = @data_store.store(@temp_object)
|
34
|
+
@data_store.retrieve(uid)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
require File.dirname(__FILE__) + '/data_store_spec'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
describe Dragonfly::DataStorage::S3DataStore do
|
6
|
+
|
7
|
+
# To run these tests, put a file ".s3_spec.yml" in the dragonfly root dir, like this:
|
8
|
+
# key: XXXXXXXXXX
|
9
|
+
# secret: XXXXXXXXXX
|
10
|
+
# enabled: true
|
11
|
+
if File.exist?(file = File.expand_path('../../../../.s3_spec.yml', __FILE__))
|
12
|
+
config = YAML.load_file(file)
|
13
|
+
KEY = config['key']
|
14
|
+
SECRET = config['secret']
|
15
|
+
enabled = config['enabled']
|
16
|
+
else
|
17
|
+
enabled = false
|
18
|
+
end
|
19
|
+
|
20
|
+
if enabled
|
21
|
+
|
22
|
+
describe "common data_store behaviour" do
|
23
|
+
|
24
|
+
before(:each) do
|
25
|
+
@data_store = Dragonfly::DataStorage::S3DataStore.new
|
26
|
+
@data_store.configure do |d|
|
27
|
+
d.bucket_name = 'dragonfly_test'
|
28
|
+
d.access_key_id = KEY
|
29
|
+
d.secret_access_key = SECRET
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
it_should_behave_like 'data_store'
|
34
|
+
|
35
|
+
describe "generate_uid" do
|
36
|
+
context "without a specific_uid" do
|
37
|
+
it 'should the default value' do
|
38
|
+
@data_store.send(:generate_uid, "hello").should =~ /\d+\/\d+\/\d+\/\d+\/\d+\/\d+\/\w+\/hello/
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "with a specific_uid" do
|
43
|
+
before do
|
44
|
+
@data_store.specific_uid = lambda{|name| name}
|
45
|
+
end
|
46
|
+
|
47
|
+
after do
|
48
|
+
@data_store.specific_uid = nil
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should call the specific_uid lambda' do
|
52
|
+
@data_store.send(:generate_uid, "hello").should == 'hello'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "store" do
|
58
|
+
it "should return a unique identifier for each storage" do
|
59
|
+
temp_object = Dragonfly::TempObject.new('gollum')
|
60
|
+
temp_object2 = Dragonfly::TempObject.new('gollum')
|
61
|
+
@data_store.store(temp_object).should_not == @data_store.store(temp_object2)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should work ok with files with funny names" do
|
65
|
+
temp_object = Dragonfly::TempObject.new('eggheads',
|
66
|
+
:name => 'A Picture with many spaces in its name (at 20:00 pm).png'
|
67
|
+
)
|
68
|
+
uid = @data_store.store(temp_object)
|
69
|
+
uid.should =~ /A_Picture_with_many_spaces_in_its_name_at_20_00_pm_\.png$/
|
70
|
+
data, extra = @data_store.retrieve(uid)
|
71
|
+
data.should == 'eggheads'
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should allow for setting the path manually" do
|
75
|
+
temp_object = Dragonfly::TempObject.new('eggheads')
|
76
|
+
uid = @data_store.store(temp_object, :path => 'hello/there')
|
77
|
+
uid.should == 'hello/there'
|
78
|
+
data, extra = @data_store.retrieve(uid)
|
79
|
+
data.should == 'eggheads'
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should work fine when not using the filesystem" do
|
83
|
+
@data_store.use_filesystem = false
|
84
|
+
temp_object = Dragonfly::TempObject.new('gollum')
|
85
|
+
uid = @data_store.store(temp_object)
|
86
|
+
@data_store.retrieve(uid).should == ["gollum", {:meta=>{}, :format=>nil, :name=>nil}]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe "Deprecated stuff" do
|
4
|
+
|
5
|
+
describe "job urls" do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@app = test_app.configure_with(:imagemagick) do |c|
|
9
|
+
# c.log = Logger.new($stdout)
|
10
|
+
end
|
11
|
+
@job = @app.fetch('eggs')
|
12
|
+
end
|
13
|
+
|
14
|
+
it { @job.url(:gif).should == @job.gif.url }
|
15
|
+
it { @job.url('20x20').should == @job.thumb('20x20').url }
|
16
|
+
it { @job.url('20x20', :gif).should == @job.thumb('20x20', :gif).url }
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Dragonfly::Encoding::ImageMagickEncoder do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
sample_file = File.dirname(__FILE__) + '/../../../samples/beach.png' # 280x355, 135KB
|
7
|
+
@image = Dragonfly::TempObject.new(File.new(sample_file))
|
8
|
+
@encoder = Dragonfly::Encoding::ImageMagickEncoder.new
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#encode" do
|
12
|
+
|
13
|
+
it "should encode the image to the correct format" do
|
14
|
+
image = @encoder.encode(@image, :gif)
|
15
|
+
image.should have_format('gif')
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should throw :unable_to_handle if the format is not handleable" do
|
19
|
+
lambda{
|
20
|
+
@encoder.encode(@image, :goofy)
|
21
|
+
}.should throw_symbol(:unable_to_handle)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should do nothing if the image is already in the correct format" do
|
25
|
+
image = @encoder.encode(@image, :png)
|
26
|
+
image.should == @image
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should allow for extra args" do
|
30
|
+
image = @encoder.encode(@image, :jpg, '-quality 1')
|
31
|
+
image.should have_format('jpeg')
|
32
|
+
image.should have_size('1.45KB')
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should still work even if the image is already in the correct format and args are given" do
|
36
|
+
image = @encoder.encode(@image, :png, '-quality 1')
|
37
|
+
image.should_not == @image
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Dragonfly::Encoding::RMagickEncoder do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
sample_file = File.dirname(__FILE__) + '/../../../samples/beach.png' # 280x355
|
7
|
+
@image = Dragonfly::TempObject.new(File.new(sample_file))
|
8
|
+
@encoder = Dragonfly::Encoding::RMagickEncoder.new
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#encode" do
|
12
|
+
|
13
|
+
it "should encode the image to the correct format" do
|
14
|
+
image = @encoder.encode(@image, :gif)
|
15
|
+
image.should have_format('gif')
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should throw :unable_to_handle if the format is not handleable" do
|
19
|
+
lambda{
|
20
|
+
@encoder.encode(@image, :goofy)
|
21
|
+
}.should throw_symbol(:unable_to_handle)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should do nothing if the image is already in the correct format" do
|
25
|
+
image = @encoder.encode(@image, :png)
|
26
|
+
image.should == @image
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should work when not using the filesystem" do
|
30
|
+
@encoder.use_filesystem = false
|
31
|
+
image = @encoder.encode(@image, :gif)
|
32
|
+
image.should have_format('gif')
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
Spec::Matchers.define :have_keys do |*keys|
|
4
|
+
match do |given|
|
5
|
+
given.keys.map{|sym| sym.to_s }.sort == keys.map{|sym| sym.to_s }.sort
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
describe Dragonfly::FunctionManager do
|
10
|
+
|
11
|
+
before(:each) do
|
12
|
+
@fm = Dragonfly::FunctionManager.new
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "registering functions" do
|
16
|
+
|
17
|
+
describe "registering procs" do
|
18
|
+
|
19
|
+
let(:func){ proc{ "HELLO" } }
|
20
|
+
|
21
|
+
it "should allow registering procs" do
|
22
|
+
@fm.add :hello, func
|
23
|
+
@fm.functions.should == {:hello => [func]}
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should allow registering using block syntax" do
|
27
|
+
@fm.add(:hello, &func)
|
28
|
+
@fm.functions.should == {:hello => [func]}
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "registering classes" do
|
34
|
+
|
35
|
+
before(:each) do
|
36
|
+
@class = Class.new do
|
37
|
+
def doogie(buff)
|
38
|
+
"eggheads #{buff}"
|
39
|
+
end
|
40
|
+
def bumfries(smarmey)
|
41
|
+
"sharkboy"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
@fm.register(@class)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should add the methods" do
|
48
|
+
@fm.functions.should have_keys(:doogie, :bumfries)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should record the registered object" do
|
52
|
+
@fm.objects.length.should eql(1)
|
53
|
+
@fm.objects.first.should be_a(@class)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should work when calling" do
|
57
|
+
@fm.call_last(:doogie, 3).should == "eggheads 3"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should return the object when registering" do
|
61
|
+
@fm.register(@class).should be_a(@class)
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "configuring on registration" do
|
69
|
+
|
70
|
+
before(:each) do
|
71
|
+
@class = Class.new do
|
72
|
+
include Dragonfly::Configurable
|
73
|
+
configurable_attr :height, 183
|
74
|
+
def initialize(age=6)
|
75
|
+
@age = age
|
76
|
+
end
|
77
|
+
def height_and_age
|
78
|
+
[height, @age]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
@fm.register(@class)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should pass the args on register to the object initializer" do
|
85
|
+
@fm.register(@class, 43)
|
86
|
+
@fm.call_last(:height_and_age).should == [183, 43]
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should run configure if a block given" do
|
90
|
+
@fm.register(@class){|c| c.height = 180 }
|
91
|
+
@fm.call_last(:height_and_age).should == [180, 6]
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should not include configurable methods in the functions" do
|
95
|
+
@fm.functions.keys.should == [:height_and_age]
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "calling" do
|
100
|
+
|
101
|
+
describe "errors" do
|
102
|
+
it "should raise an error for call_last if the function doesn't exist" do
|
103
|
+
lambda{
|
104
|
+
@fm.call_last(:i_dont_exist)
|
105
|
+
}.should raise_error(Dragonfly::FunctionManager::NotDefined)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should raise an error if the function is defined but unable to handle" do
|
109
|
+
@fm.add(:chicken){ throw :unable_to_handle }
|
110
|
+
lambda{
|
111
|
+
@fm.call_last(:chicken)
|
112
|
+
}.should raise_error(Dragonfly::FunctionManager::UnableToHandle)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "simple" do
|
117
|
+
it "should correctly call a registered block" do
|
118
|
+
@fm.add(:egg){|num| num + 1 }
|
119
|
+
@fm.call_last(:egg, 4).should == 5
|
120
|
+
end
|
121
|
+
it "should correctly call a registered class" do
|
122
|
+
klass = Class.new do
|
123
|
+
def dog(num)
|
124
|
+
num * 2
|
125
|
+
end
|
126
|
+
end
|
127
|
+
@fm.register(klass)
|
128
|
+
@fm.call_last(:dog, 4).should == 8
|
129
|
+
end
|
130
|
+
it "should correctly call an object that responds to 'call'" do
|
131
|
+
obj = Object.new
|
132
|
+
def obj.call(num); num - 3; end
|
133
|
+
@fm.add(:spoon, obj)
|
134
|
+
@fm.call_last(:spoon, 4).should == 1
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe "with more than one implementation of same function" do
|
139
|
+
it "should use the last registered" do
|
140
|
+
@fm.add(:bingo){|num| num + 1 }
|
141
|
+
@fm.add(:bingo){|num| num - 1 }
|
142
|
+
@fm.call_last(:bingo, 4).should == 3
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should skip methods that throw :unable_to_handle" do
|
146
|
+
@fm.add(:bingo){|num| num + 1 }
|
147
|
+
@fm.add(:bingo){|num| throw :unable_to_handle }
|
148
|
+
@fm.call_last(:bingo, 4).should == 5
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Dragonfly::Generation::HashWithCssStyleKeys do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@hash = Dragonfly::Generation::HashWithCssStyleKeys[
|
7
|
+
:font_style => 'normal',
|
8
|
+
:'font-weight' => 'bold',
|
9
|
+
'font_colour' => 'white',
|
10
|
+
'font-size' => 23,
|
11
|
+
:hello => 'there'
|
12
|
+
]
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "accessing using underscore symbol style" do
|
16
|
+
it{ @hash[:font_style].should == 'normal' }
|
17
|
+
it{ @hash[:font_weight].should == 'bold' }
|
18
|
+
it{ @hash[:font_colour].should == 'white' }
|
19
|
+
it{ @hash[:font_size].should == 23 }
|
20
|
+
it{ @hash[:hello].should == 'there' }
|
21
|
+
it{ @hash[:non_existent_key].should be_nil }
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'dragonfly/generation/shared_generator_spec'
|
3
|
+
|
4
|
+
describe Dragonfly::Generation::ImageMagickGenerator do
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
@generator = Dragonfly::Generation::ImageMagickGenerator.new
|
8
|
+
end
|
9
|
+
|
10
|
+
it_should_behave_like 'image generator'
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'dragonfly/generation/shared_generator_spec'
|
3
|
+
|
4
|
+
describe Dragonfly::Generation::RMagickGenerator do
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
@generator = Dragonfly::Generation::RMagickGenerator.new
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "when using the filesystem" do
|
11
|
+
before(:each) do
|
12
|
+
@generator.use_filesystem = true
|
13
|
+
end
|
14
|
+
it_should_behave_like 'image generator'
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "when not using the filesystem" do
|
18
|
+
before(:each) do
|
19
|
+
@generator.use_filesystem = false
|
20
|
+
end
|
21
|
+
it_should_behave_like 'image generator'
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|