dragonfly 1.3.0 → 1.4.1
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/.travis.yml +1 -0
- data/History.md +16 -0
- data/README.md +5 -1
- data/dev/test.ru +1 -1
- data/dragonfly.gemspec +2 -1
- data/lib/dragonfly/content.rb +17 -18
- data/lib/dragonfly/image_magick/commands.rb +35 -0
- data/lib/dragonfly/image_magick/generators/plain.rb +13 -7
- data/lib/dragonfly/image_magick/generators/plasma.rb +10 -6
- data/lib/dragonfly/image_magick/generators/text.rb +67 -58
- data/lib/dragonfly/image_magick/plugin.rb +26 -25
- data/lib/dragonfly/image_magick/processors/encode.rb +16 -5
- data/lib/dragonfly/image_magick/processors/thumb.rb +37 -31
- data/lib/dragonfly/middleware.rb +2 -1
- data/lib/dragonfly/param_validators.rb +37 -0
- data/lib/dragonfly/response.rb +11 -11
- data/lib/dragonfly/routed_endpoint.rb +1 -1
- data/lib/dragonfly/server.rb +7 -7
- data/lib/dragonfly/version.rb +1 -1
- data/spec/dragonfly/app_spec.rb +1 -1
- data/spec/dragonfly/configurable_spec.rb +4 -4
- data/spec/dragonfly/content_spec.rb +1 -1
- data/spec/dragonfly/file_data_store_spec.rb +2 -2
- data/spec/dragonfly/image_magick/commands_spec.rb +98 -0
- data/spec/dragonfly/image_magick/generators/plain_spec.rb +39 -13
- data/spec/dragonfly/image_magick/generators/plasma_spec.rb +28 -9
- data/spec/dragonfly/image_magick/generators/text_spec.rb +51 -20
- data/spec/dragonfly/image_magick/plugin_spec.rb +45 -28
- data/spec/dragonfly/image_magick/processors/encode_spec.rb +30 -0
- data/spec/dragonfly/image_magick/processors/thumb_spec.rb +46 -45
- data/spec/dragonfly/job/fetch_url_spec.rb +1 -1
- data/spec/dragonfly/job_endpoint_spec.rb +26 -26
- data/spec/dragonfly/middleware_spec.rb +15 -6
- data/spec/dragonfly/model/active_record_spec.rb +2 -2
- data/spec/dragonfly/model/model_spec.rb +1 -1
- data/spec/dragonfly/param_validators_spec.rb +89 -0
- data/spec/dragonfly/server_spec.rb +4 -4
- data/spec/dragonfly/temp_object_spec.rb +5 -5
- data/spec/functional/shell_commands_spec.rb +6 -9
- data/spec/functional/to_response_spec.rb +2 -2
- data/spec/functional/urls_spec.rb +1 -1
- data/spec/spec_helper.rb +18 -14
- data/spec/support/image_matchers.rb +1 -1
- metadata +27 -12
- data/lib/dragonfly/image_magick/generators/convert.rb +0 -19
- data/lib/dragonfly/image_magick/processors/convert.rb +0 -33
- data/spec/dragonfly/image_magick/generators/convert_spec.rb +0 -19
- data/spec/dragonfly/image_magick/processors/convert_spec.rb +0 -88
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
require 'rack'
|
3
3
|
|
4
4
|
def dummy_rack_app
|
5
|
-
lambda{|env| [200, {"
|
5
|
+
lambda{|env| [200, {"content-type" => "text/html"}, ["dummy_rack_app body"]] }
|
6
6
|
end
|
7
7
|
|
8
8
|
describe Dragonfly::Middleware do
|
@@ -19,9 +19,18 @@ describe Dragonfly::Middleware do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
it "should pass through if the app returns
|
22
|
+
it "should pass through if the app returns x-cascade: pass" do
|
23
23
|
Dragonfly.app.should_receive(:call).and_return(
|
24
|
-
[404, {"
|
24
|
+
[404, {"content-type" => 'text/plain', 'x-cascade' => 'pass'}, ['Not found']]
|
25
|
+
)
|
26
|
+
response = make_request(@stack, '/media/hello.png?howare=you')
|
27
|
+
response.body.should == 'dummy_rack_app body'
|
28
|
+
response.status.should == 200
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should still pass through using deprecated uppercase X-Cascade: pass" do
|
32
|
+
Dragonfly.app.should_receive(:call).and_return(
|
33
|
+
[404, {"content-type" => 'text/plain', 'X-Cascade' => 'pass'}, ['Not found']]
|
25
34
|
)
|
26
35
|
response = make_request(@stack, '/media/hello.png?howare=you')
|
27
36
|
response.body.should == 'dummy_rack_app body'
|
@@ -30,7 +39,7 @@ describe Dragonfly::Middleware do
|
|
30
39
|
|
31
40
|
it "should return a 404 if the app returns a 404" do
|
32
41
|
Dragonfly.app.should_receive(:call).and_return(
|
33
|
-
[404, {"
|
42
|
+
[404, {"content-type" => 'text/plain'}, ['Not found']]
|
34
43
|
)
|
35
44
|
response = make_request(@stack, '/media/hello.png?howare=you')
|
36
45
|
response.status.should == 404
|
@@ -38,7 +47,7 @@ describe Dragonfly::Middleware do
|
|
38
47
|
|
39
48
|
it "should return as per the dragonfly app if the app returns a 200" do
|
40
49
|
Dragonfly.app.should_receive(:call).and_return(
|
41
|
-
[200, {"
|
50
|
+
[200, {"content-type" => 'text/plain'}, ['ABCD']]
|
42
51
|
)
|
43
52
|
response = make_request(@stack, '/media/hello.png?howare=you')
|
44
53
|
response.status.should == 200
|
@@ -57,7 +66,7 @@ describe Dragonfly::Middleware do
|
|
57
66
|
it "should use the specified dragonfly app" do
|
58
67
|
Dragonfly.app.should_not_receive(:call)
|
59
68
|
Dragonfly.app(:images).should_receive(:call).and_return([
|
60
|
-
200, {"
|
69
|
+
200, {"content-type" => 'text/plain'}, ['booboo']
|
61
70
|
])
|
62
71
|
response = make_request(@stack, '/media/hello.png?howare=you')
|
63
72
|
response.body.should == 'booboo'
|
@@ -9,7 +9,7 @@ unless RUBY_PLATFORM == "java"
|
|
9
9
|
let! :dragonfly_app do test_app(:test_ar) end
|
10
10
|
|
11
11
|
before :all do
|
12
|
-
|
12
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
13
13
|
|
14
14
|
ActiveRecord::Migration.verbose = false
|
15
15
|
|
@@ -27,7 +27,7 @@ unless RUBY_PLATFORM == "java"
|
|
27
27
|
|
28
28
|
after :all do
|
29
29
|
Photo.destroy_all
|
30
|
-
ActiveRecord::Base.remove_connection(
|
30
|
+
ActiveRecord::Base.remove_connection()
|
31
31
|
end
|
32
32
|
|
33
33
|
describe "destroying" do
|
@@ -367,7 +367,7 @@ describe "models" do
|
|
367
367
|
describe "remote_url" do
|
368
368
|
it "should give the remote url if the uid is set" do
|
369
369
|
@item.preview_image_uid = 'some/uid'
|
370
|
-
@app.should_receive(:remote_url_for).with('some/uid', :some => 'param').and_return('http://egg.nog')
|
370
|
+
@app.should_receive(:remote_url_for).with('some/uid', {:some => 'param'}).and_return('http://egg.nog')
|
371
371
|
@item.preview_image.remote_url(:some => 'param').should == 'http://egg.nog'
|
372
372
|
end
|
373
373
|
it "should return nil if the content is not yet saved" do
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "dragonfly/param_validators"
|
3
|
+
|
4
|
+
describe Dragonfly::ParamValidators do
|
5
|
+
include Dragonfly::ParamValidators
|
6
|
+
|
7
|
+
describe "validate!" do
|
8
|
+
it "does nothing if the parameter meets the condition" do
|
9
|
+
validate!("thing") { |t| t === "thing" }
|
10
|
+
end
|
11
|
+
|
12
|
+
it "raises if the parameter doesn't meet the condition" do
|
13
|
+
expect {
|
14
|
+
validate!("thing") { |t| t === "ting" }
|
15
|
+
}.to raise_error(Dragonfly::ParamValidators::InvalidParameter)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "does nothing if the parameter is nil" do
|
19
|
+
validate!(nil) { |t| t === "thing" }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "validate_all!" do
|
24
|
+
it "allows passing an array of parameters to validate" do
|
25
|
+
validate_all!(["a", "b"]) { |p| /\w/ === p }
|
26
|
+
expect {
|
27
|
+
validate_all!(["a", " "]) { |p| /\w/ === p }
|
28
|
+
}.to raise_error(Dragonfly::ParamValidators::InvalidParameter)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "validate_all_keys!" do
|
33
|
+
it "allows passing an array of parameters to validate" do
|
34
|
+
obj = { "a" => "A", "b" => "B" }
|
35
|
+
validate_all_keys!(obj, ["a", "b"]) { |p| /\w/ === p }
|
36
|
+
expect {
|
37
|
+
validate_all_keys!(obj, ["a", "b"]) { |p| /[a-z]/ === p }
|
38
|
+
}.to raise_error(Dragonfly::ParamValidators::InvalidParameter)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "is_number" do
|
43
|
+
[3, 3.14, "3", "3.2"].each do |val|
|
44
|
+
it "validates #{val.inspect}" do
|
45
|
+
validate!(val, &is_number)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
["", "3 2", "hello4", {}, []].each do |val|
|
50
|
+
it "validates #{val.inspect}" do
|
51
|
+
expect {
|
52
|
+
validate!(val, &is_number)
|
53
|
+
}.to raise_error(Dragonfly::ParamValidators::InvalidParameter)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "is_word" do
|
59
|
+
["hello", "helLo", "HELLO"].each do |val|
|
60
|
+
it "validates #{val.inspect}" do
|
61
|
+
validate!(val, &is_word)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
["", "hel%$lo", "hel lo", "hel-lo", {}, []].each do |val|
|
66
|
+
it "validates #{val.inspect}" do
|
67
|
+
expect {
|
68
|
+
validate!(val, &is_word)
|
69
|
+
}.to raise_error(Dragonfly::ParamValidators::InvalidParameter)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "is_words" do
|
75
|
+
["hello there", "Hi", " What is Up "].each do |val|
|
76
|
+
it "validates #{val.inspect}" do
|
77
|
+
validate!(val, &is_words)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
["", "hel%$lo", "What's up", "hel-lo", {}, []].each do |val|
|
82
|
+
it "validates #{val.inspect}" do
|
83
|
+
expect {
|
84
|
+
validate!(val, &is_words)
|
85
|
+
}.to raise_error(Dragonfly::ParamValidators::InvalidParameter)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -81,7 +81,7 @@ describe Dragonfly::Server do
|
|
81
81
|
response.status.should == 404
|
82
82
|
response.body.should == 'Not found'
|
83
83
|
response.content_type.should == 'text/plain'
|
84
|
-
response.headers['
|
84
|
+
response.headers['x-cascade'].should == 'pass'
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
@@ -90,7 +90,7 @@ describe Dragonfly::Server do
|
|
90
90
|
response.status.should == 404
|
91
91
|
response.body.should == 'Not found'
|
92
92
|
response.content_type.should == 'text/plain'
|
93
|
-
response.headers['
|
93
|
+
response.headers['x-cascade'].should be_nil
|
94
94
|
end
|
95
95
|
|
96
96
|
it "should return a 404 when the url isn't known at all" do
|
@@ -98,7 +98,7 @@ describe Dragonfly::Server do
|
|
98
98
|
response.status.should == 404
|
99
99
|
response.body.should == 'Not found'
|
100
100
|
response.content_type.should == 'text/plain'
|
101
|
-
response.headers['
|
101
|
+
response.headers['x-cascade'].should == 'pass'
|
102
102
|
end
|
103
103
|
|
104
104
|
it "should return a 404 when the url is a well-encoded but bad array" do
|
@@ -107,7 +107,7 @@ describe Dragonfly::Server do
|
|
107
107
|
response.status.should == 404
|
108
108
|
response.body.should == 'Not found'
|
109
109
|
response.content_type.should == 'text/plain'
|
110
|
-
response.headers['
|
110
|
+
response.headers['x-cascade'].should be_nil
|
111
111
|
end
|
112
112
|
|
113
113
|
it "should return a 403 Forbidden when someone uses fetch_url" do
|
@@ -111,14 +111,14 @@ describe Dragonfly::TempObject do
|
|
111
111
|
describe "to_file" do
|
112
112
|
before(:each) do
|
113
113
|
@filename = 'tmp/eggnog.txt'
|
114
|
-
FileUtils.rm_f(@filename) if File.
|
114
|
+
FileUtils.rm_f(@filename) if File.exist?(@filename)
|
115
115
|
end
|
116
116
|
after(:each) do
|
117
|
-
FileUtils.rm_f(@filename) if File.
|
117
|
+
FileUtils.rm_f(@filename) if File.exist?(@filename)
|
118
118
|
end
|
119
119
|
it "should write to a file" do
|
120
120
|
@temp_object.to_file(@filename)
|
121
|
-
File.
|
121
|
+
File.exist?(@filename).should be_truthy
|
122
122
|
end
|
123
123
|
it "should write the correct data to the file" do
|
124
124
|
@temp_object.to_file(@filename)
|
@@ -140,12 +140,12 @@ describe Dragonfly::TempObject do
|
|
140
140
|
it "should create intermediate subdirs" do
|
141
141
|
filename = 'tmp/gog/mcgee'
|
142
142
|
@temp_object.to_file(filename)
|
143
|
-
File.
|
143
|
+
File.exist?(filename).should be_truthy
|
144
144
|
FileUtils.rm_rf('tmp/gog')
|
145
145
|
end
|
146
146
|
it "should allow not creating intermediate subdirs" do
|
147
147
|
filename = 'tmp/gog/mcgee'
|
148
|
-
expect{ @temp_object.to_file(filename, :mkdirs => false) }.to raise_error()
|
148
|
+
expect{ @temp_object.to_file(filename, :mkdirs => false) }.to raise_error(/No such file or directory/)
|
149
149
|
end
|
150
150
|
end
|
151
151
|
|
@@ -1,33 +1,30 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
3
|
describe "using the shell" do
|
4
|
-
|
5
4
|
let (:app) { test_app }
|
6
5
|
|
7
6
|
describe "shell injection" do
|
8
7
|
it "should not allow it!" do
|
9
8
|
app.configure_with(:imagemagick)
|
10
9
|
begin
|
11
|
-
app.generate(:plain, 10, 10,
|
10
|
+
app.generate(:plain, 10, 10, "white; touch tmp/stuff").apply
|
12
11
|
rescue Dragonfly::Shell::CommandFailed
|
13
12
|
end
|
14
|
-
File.exist?(
|
13
|
+
File.exist?("tmp/stuff").should be_falsey
|
15
14
|
end
|
16
15
|
end
|
17
16
|
|
18
17
|
describe "env variables with imagemagick" do
|
19
18
|
it "allows configuring the convert path" do
|
20
|
-
app.configure_with(:imagemagick, :convert_command =>
|
19
|
+
app.configure_with(:imagemagick, :convert_command => "/bin/convert")
|
21
20
|
app.shell.should_receive(:run).with(%r[/bin/convert], hash_including)
|
22
|
-
app.create("").thumb(
|
21
|
+
app.create("").thumb("30x30").apply
|
23
22
|
end
|
24
23
|
|
25
24
|
it "allows configuring the identify path" do
|
26
|
-
app.configure_with(:imagemagick, :identify_command =>
|
25
|
+
app.configure_with(:imagemagick, :identify_command => "/bin/identify")
|
27
26
|
app.shell.should_receive(:run).with(%r[/bin/identify], hash_including).and_return("JPG 1 1")
|
28
27
|
app.create("").width
|
29
28
|
end
|
30
29
|
end
|
31
|
-
|
32
30
|
end
|
33
|
-
|
@@ -15,7 +15,7 @@ describe "getting rack response directly" do
|
|
15
15
|
response.should be_a(Array)
|
16
16
|
response.length.should == 3
|
17
17
|
response[0].should == 200
|
18
|
-
response[1]['
|
18
|
+
response[1]['content-type'].should == 'application/octet-stream'
|
19
19
|
response[2].data.should == 'bunheads'
|
20
20
|
end
|
21
21
|
|
@@ -24,7 +24,7 @@ describe "getting rack response directly" do
|
|
24
24
|
response.should be_a(Array)
|
25
25
|
response.length.should == 3
|
26
26
|
response[0].should == 405
|
27
|
-
response[1]['
|
27
|
+
response[1]['content-type'].should == 'text/plain'
|
28
28
|
response[2].should == ["method not allowed"]
|
29
29
|
end
|
30
30
|
|
@@ -6,7 +6,7 @@ describe "urls" do
|
|
6
6
|
Dragonfly::Response.should_receive(:new).with(
|
7
7
|
satisfy{|job| job.to_a == array },
|
8
8
|
instance_of(Hash)
|
9
|
-
).and_return(double('response', :to_response => [200, {'
|
9
|
+
).and_return(double('response', :to_response => [200, {'content-type' => 'text/plain'}, ["OK"]]))
|
10
10
|
end
|
11
11
|
|
12
12
|
let (:app) {
|
data/spec/spec_helper.rb
CHANGED
@@ -2,21 +2,27 @@ require "rubygems"
|
|
2
2
|
require "bundler"
|
3
3
|
Bundler.setup(:default, :test)
|
4
4
|
|
5
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__),
|
5
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
6
6
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
7
|
+
require "rspec"
|
8
|
+
require "dragonfly"
|
9
|
+
require "fileutils"
|
10
|
+
require "tempfile"
|
11
|
+
require "webmock/rspec"
|
12
|
+
require "pry"
|
13
13
|
|
14
14
|
# Requires supporting files with custom matchers and macros, etc,
|
15
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
15
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
16
16
|
|
17
|
-
SAMPLES_DIR = Pathname.new(File.expand_path(
|
17
|
+
SAMPLES_DIR = Pathname.new(File.expand_path("../../samples", __FILE__))
|
18
18
|
|
19
19
|
RSpec.configure do |c|
|
20
|
+
c.expect_with(:rspec) do |expectations|
|
21
|
+
expectations.syntax = [:should, :expect]
|
22
|
+
end
|
23
|
+
c.mock_with(:rspec) do |mocks|
|
24
|
+
mocks.syntax = [:should, :expect]
|
25
|
+
end
|
20
26
|
c.include ModelHelpers
|
21
27
|
c.include RackHelpers
|
22
28
|
end
|
@@ -25,8 +31,8 @@ def todo
|
|
25
31
|
raise "TODO"
|
26
32
|
end
|
27
33
|
|
28
|
-
require
|
29
|
-
LOG_FILE =
|
34
|
+
require "logger"
|
35
|
+
LOG_FILE = "tmp/test.log"
|
30
36
|
FileUtils.rm_rf(LOG_FILE)
|
31
37
|
Dragonfly.logger = Logger.new(LOG_FILE)
|
32
38
|
|
@@ -36,7 +42,7 @@ RSpec.configure do |c|
|
|
36
42
|
end
|
37
43
|
end
|
38
44
|
|
39
|
-
def test_app(name=nil)
|
45
|
+
def test_app(name = nil)
|
40
46
|
app = Dragonfly::App.instance(name)
|
41
47
|
app.datastore = Dragonfly::MemoryDataStore.new
|
42
48
|
app.secret = "test secret"
|
@@ -45,8 +51,6 @@ end
|
|
45
51
|
|
46
52
|
def test_imagemagick_app
|
47
53
|
test_app.configure do
|
48
|
-
generator :convert, Dragonfly::ImageMagick::Generators::Convert.new
|
49
|
-
processor :convert, Dragonfly::ImageMagick::Processors::Convert.new
|
50
54
|
analyser :image_properties, Dragonfly::ImageMagick::Analysers::ImageProperties.new
|
51
55
|
end
|
52
56
|
end
|
@@ -22,7 +22,7 @@ end
|
|
22
22
|
match do |actual|
|
23
23
|
value.should === image_properties(actual)[property]
|
24
24
|
end
|
25
|
-
|
25
|
+
failure_message do |actual|
|
26
26
|
"expected image to have #{property} #{value.inspect}, but it had #{image_properties(actual)[property].inspect}"
|
27
27
|
end
|
28
28
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dragonfly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Evans
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -52,20 +52,34 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '2.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: ostruct
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.6.1
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.6.1
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rspec
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
75
|
+
version: '3.0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
82
|
+
version: '3.0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: webmock
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -158,12 +172,11 @@ files:
|
|
158
172
|
- lib/dragonfly/has_filename.rb
|
159
173
|
- lib/dragonfly/hash_with_css_style_keys.rb
|
160
174
|
- lib/dragonfly/image_magick/analysers/image_properties.rb
|
161
|
-
- lib/dragonfly/image_magick/
|
175
|
+
- lib/dragonfly/image_magick/commands.rb
|
162
176
|
- lib/dragonfly/image_magick/generators/plain.rb
|
163
177
|
- lib/dragonfly/image_magick/generators/plasma.rb
|
164
178
|
- lib/dragonfly/image_magick/generators/text.rb
|
165
179
|
- lib/dragonfly/image_magick/plugin.rb
|
166
|
-
- lib/dragonfly/image_magick/processors/convert.rb
|
167
180
|
- lib/dragonfly/image_magick/processors/encode.rb
|
168
181
|
- lib/dragonfly/image_magick/processors/thumb.rb
|
169
182
|
- lib/dragonfly/job.rb
|
@@ -182,6 +195,7 @@ files:
|
|
182
195
|
- lib/dragonfly/model/class_methods.rb
|
183
196
|
- lib/dragonfly/model/instance_methods.rb
|
184
197
|
- lib/dragonfly/model/validations.rb
|
198
|
+
- lib/dragonfly/param_validators.rb
|
185
199
|
- lib/dragonfly/rails/images.rb
|
186
200
|
- lib/dragonfly/railtie.rb
|
187
201
|
- lib/dragonfly/register.rb
|
@@ -220,12 +234,12 @@ files:
|
|
220
234
|
- spec/dragonfly/has_filename_spec.rb
|
221
235
|
- spec/dragonfly/hash_with_css_style_keys_spec.rb
|
222
236
|
- spec/dragonfly/image_magick/analysers/image_properties_spec.rb
|
223
|
-
- spec/dragonfly/image_magick/
|
237
|
+
- spec/dragonfly/image_magick/commands_spec.rb
|
224
238
|
- spec/dragonfly/image_magick/generators/plain_spec.rb
|
225
239
|
- spec/dragonfly/image_magick/generators/plasma_spec.rb
|
226
240
|
- spec/dragonfly/image_magick/generators/text_spec.rb
|
227
241
|
- spec/dragonfly/image_magick/plugin_spec.rb
|
228
|
-
- spec/dragonfly/image_magick/processors/
|
242
|
+
- spec/dragonfly/image_magick/processors/encode_spec.rb
|
229
243
|
- spec/dragonfly/image_magick/processors/thumb_spec.rb
|
230
244
|
- spec/dragonfly/job/fetch_file_spec.rb
|
231
245
|
- spec/dragonfly/job/fetch_spec.rb
|
@@ -239,6 +253,7 @@ files:
|
|
239
253
|
- spec/dragonfly/model/active_record_spec.rb
|
240
254
|
- spec/dragonfly/model/model_spec.rb
|
241
255
|
- spec/dragonfly/model/validations_spec.rb
|
256
|
+
- spec/dragonfly/param_validators_spec.rb
|
242
257
|
- spec/dragonfly/register_spec.rb
|
243
258
|
- spec/dragonfly/routed_endpoint_spec.rb
|
244
259
|
- spec/dragonfly/serializer_spec.rb
|
@@ -285,8 +300,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
285
300
|
- !ruby/object:Gem::Version
|
286
301
|
version: '0'
|
287
302
|
requirements: []
|
288
|
-
|
289
|
-
rubygems_version: 2.7.6
|
303
|
+
rubygems_version: 3.5.11
|
290
304
|
signing_key:
|
291
305
|
specification_version: 4
|
292
306
|
summary: Ideal gem for handling attachments in Rails, Sinatra and Rack applications.
|
@@ -301,12 +315,12 @@ test_files:
|
|
301
315
|
- spec/dragonfly/has_filename_spec.rb
|
302
316
|
- spec/dragonfly/hash_with_css_style_keys_spec.rb
|
303
317
|
- spec/dragonfly/image_magick/analysers/image_properties_spec.rb
|
304
|
-
- spec/dragonfly/image_magick/
|
318
|
+
- spec/dragonfly/image_magick/commands_spec.rb
|
305
319
|
- spec/dragonfly/image_magick/generators/plain_spec.rb
|
306
320
|
- spec/dragonfly/image_magick/generators/plasma_spec.rb
|
307
321
|
- spec/dragonfly/image_magick/generators/text_spec.rb
|
308
322
|
- spec/dragonfly/image_magick/plugin_spec.rb
|
309
|
-
- spec/dragonfly/image_magick/processors/
|
323
|
+
- spec/dragonfly/image_magick/processors/encode_spec.rb
|
310
324
|
- spec/dragonfly/image_magick/processors/thumb_spec.rb
|
311
325
|
- spec/dragonfly/job/fetch_file_spec.rb
|
312
326
|
- spec/dragonfly/job/fetch_spec.rb
|
@@ -320,6 +334,7 @@ test_files:
|
|
320
334
|
- spec/dragonfly/model/active_record_spec.rb
|
321
335
|
- spec/dragonfly/model/model_spec.rb
|
322
336
|
- spec/dragonfly/model/validations_spec.rb
|
337
|
+
- spec/dragonfly/param_validators_spec.rb
|
323
338
|
- spec/dragonfly/register_spec.rb
|
324
339
|
- spec/dragonfly/routed_endpoint_spec.rb
|
325
340
|
- spec/dragonfly/serializer_spec.rb
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Dragonfly
|
2
|
-
module ImageMagick
|
3
|
-
module Generators
|
4
|
-
class Convert
|
5
|
-
|
6
|
-
def call(content, args, format)
|
7
|
-
format = format.to_s
|
8
|
-
convert_command = content.env[:convert_command] || 'convert'
|
9
|
-
content.shell_generate :ext => format do |path|
|
10
|
-
"#{convert_command} #{args} #{path}"
|
11
|
-
end
|
12
|
-
content.add_meta('format' => format)
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Dragonfly
|
2
|
-
module ImageMagick
|
3
|
-
module Processors
|
4
|
-
class Convert
|
5
|
-
|
6
|
-
def call(content, args='', opts={})
|
7
|
-
convert_command = content.env[:convert_command] || 'convert'
|
8
|
-
format = opts['format']
|
9
|
-
|
10
|
-
input_args = opts['input_args'] if opts['input_args']
|
11
|
-
delegate_string = "#{opts['delegate']}:" if opts['delegate']
|
12
|
-
frame_string = "[#{opts['frame']}]" if opts['frame']
|
13
|
-
|
14
|
-
content.shell_update :ext => format do |old_path, new_path|
|
15
|
-
"#{convert_command} #{input_args} #{delegate_string}#{old_path}#{frame_string} #{args} #{new_path}"
|
16
|
-
end
|
17
|
-
|
18
|
-
if format
|
19
|
-
content.meta['format'] = format.to_s
|
20
|
-
content.ext = format
|
21
|
-
content.meta['mime_type'] = nil # don't need it as we have ext now
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def update_url(attrs, args='', opts={})
|
26
|
-
format = opts['format']
|
27
|
-
attrs.ext = format if format
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Dragonfly::ImageMagick::Generators::Convert do
|
4
|
-
let (:generator) { Dragonfly::ImageMagick::Generators::Convert.new }
|
5
|
-
let (:app) { test_app }
|
6
|
-
let (:image) { Dragonfly::Content.new(app) }
|
7
|
-
|
8
|
-
describe "calling convert" do
|
9
|
-
before(:each) do
|
10
|
-
generator.call(image, "-size 1x1 xc:white", 'png')
|
11
|
-
end
|
12
|
-
it {image.should have_width(1)}
|
13
|
-
it {image.should have_height(1)}
|
14
|
-
it {image.should have_format('png')}
|
15
|
-
it {image.meta.should == {'format' => 'png'}}
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|