dragonfly 0.9.10 → 0.9.11

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of dragonfly might be problematic. Click here for more details.

data/.yardopts CHANGED
@@ -1,5 +1,7 @@
1
1
  --main extra_docs/Index.md
2
2
  -e ./yard/setup.rb
3
+ --markup-provider=redcarpet
4
+ --markup=markdown
3
5
  -
4
6
  README.md
5
7
  extra_docs/GeneralUsage.md
data/Gemfile CHANGED
@@ -10,10 +10,12 @@ group :development, :test, :cucumber do
10
10
  gem 'database_cleaner'
11
11
  gem 'jeweler', '~> 1.5.2'
12
12
  gem 'fog'
13
+ gem 'github-markup'
13
14
  gem 'mongo'
14
15
  gem 'couchrest', '~> 1.0'
15
16
  gem 'rack-cache'
16
17
  gem 'rails', '~>3.1.0', :require => nil
18
+ gem 'redcarpet', '~>1.0'
17
19
  gem 'rspec', '~> 2.5'
18
20
  gem 'webmock'
19
21
  gem 'yard'
@@ -23,7 +25,7 @@ group :development, :test, :cucumber do
23
25
  gem "jruby-openssl"
24
26
  else
25
27
  gem 'bluecloth'
26
- gem 'bson_ext', '~>1.3.1'
28
+ gem 'bson_ext'
27
29
  gem 'sqlite3-ruby'
28
30
  end
29
31
  end
data/History.md CHANGED
@@ -1,3 +1,22 @@
1
+ 0.9.11 (2012-03-12)
2
+ ===================
3
+ Features
4
+ -------
5
+ - Allow the S3 base URL to be customised with `url_host` (or per-request)
6
+ - Added App#name (name as per `Dragonfly[:app_name]`)
7
+
8
+ Changes
9
+ -------
10
+ - Better inspect for App, Processor, Analyser, Encoder, Generator, Job, TempObject, RoutedEndpoint, JobEndpoint
11
+
12
+ Fixes
13
+ -----
14
+ - Rescue from Excon::Errors::Conflict which apparently gets raised sometimes (don't know why - see https://github.com/markevans/dragonfly/issues/167)
15
+ - Alias portrait and landscape without question marks, so magic_attributes can be used with them
16
+ - Fixed stack error when using `define_macro_on_include` twice
17
+ - Use fog's `sync_clock` to overcome potential S3 time skew problems
18
+ - Using :name in urls was causing problems when filenames had dashes in them
19
+
1
20
  0.9.10 (2012-01-11)
2
21
  ===================
3
22
  Fixes
data/README.md CHANGED
@@ -13,7 +13,7 @@ For the lazy Rails user...
13
13
 
14
14
  ```ruby
15
15
  gem 'rack-cache', :require => 'rack/cache'
16
- gem 'dragonfly', '~>0.9.10'
16
+ gem 'dragonfly', '~>0.9.11'
17
17
  ```
18
18
 
19
19
  **Initializer** (e.g. config/initializers/dragonfly.rb):
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.10
1
+ 0.9.11
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "dragonfly"
8
- s.version = "0.9.10"
8
+ s.version = "0.9.11"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Mark Evans"]
12
- s.date = "2012-01-11"
12
+ s.date = "2012-03-12"
13
13
  s.description = "Dragonfly is a framework that enables on-the-fly processing for any content type.\n It is especially suited to image handling. Its uses range from image thumbnails to standard attachments to on-demand text generation."
14
14
  s.email = "mark@new-bamboo.co.uk"
15
15
  s.extra_rdoc_files = [
@@ -192,7 +192,7 @@ Gem::Specification.new do |s|
192
192
  s.homepage = "http://github.com/markevans/dragonfly"
193
193
  s.licenses = ["MIT"]
194
194
  s.require_paths = ["lib"]
195
- s.rubygems_version = "1.8.10"
195
+ s.rubygems_version = "1.8.11"
196
196
  s.summary = "Ideal gem for handling attachments in Rails, Sinatra and Rack applications."
197
197
  s.test_files = [
198
198
  "spec/dragonfly/active_model_extensions/model_spec.rb",
@@ -253,15 +253,17 @@ Gem::Specification.new do |s|
253
253
  s.add_development_dependency(%q<database_cleaner>, [">= 0"])
254
254
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
255
255
  s.add_development_dependency(%q<fog>, [">= 0"])
256
+ s.add_development_dependency(%q<github-markup>, [">= 0"])
256
257
  s.add_development_dependency(%q<mongo>, [">= 0"])
257
258
  s.add_development_dependency(%q<couchrest>, ["~> 1.0"])
258
259
  s.add_development_dependency(%q<rack-cache>, [">= 0"])
259
260
  s.add_development_dependency(%q<rails>, ["~> 3.1.0"])
261
+ s.add_development_dependency(%q<redcarpet>, ["~> 1.0"])
260
262
  s.add_development_dependency(%q<rspec>, ["~> 2.5"])
261
263
  s.add_development_dependency(%q<webmock>, [">= 0"])
262
264
  s.add_development_dependency(%q<yard>, [">= 0"])
263
265
  s.add_development_dependency(%q<bluecloth>, [">= 0"])
264
- s.add_development_dependency(%q<bson_ext>, ["~> 1.3.1"])
266
+ s.add_development_dependency(%q<bson_ext>, [">= 0"])
265
267
  s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
266
268
  else
267
269
  s.add_dependency(%q<rack>, [">= 0"])
@@ -271,15 +273,17 @@ Gem::Specification.new do |s|
271
273
  s.add_dependency(%q<database_cleaner>, [">= 0"])
272
274
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
273
275
  s.add_dependency(%q<fog>, [">= 0"])
276
+ s.add_dependency(%q<github-markup>, [">= 0"])
274
277
  s.add_dependency(%q<mongo>, [">= 0"])
275
278
  s.add_dependency(%q<couchrest>, ["~> 1.0"])
276
279
  s.add_dependency(%q<rack-cache>, [">= 0"])
277
280
  s.add_dependency(%q<rails>, ["~> 3.1.0"])
281
+ s.add_dependency(%q<redcarpet>, ["~> 1.0"])
278
282
  s.add_dependency(%q<rspec>, ["~> 2.5"])
279
283
  s.add_dependency(%q<webmock>, [">= 0"])
280
284
  s.add_dependency(%q<yard>, [">= 0"])
281
285
  s.add_dependency(%q<bluecloth>, [">= 0"])
282
- s.add_dependency(%q<bson_ext>, ["~> 1.3.1"])
286
+ s.add_dependency(%q<bson_ext>, [">= 0"])
283
287
  s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
284
288
  end
285
289
  else
@@ -290,15 +294,17 @@ Gem::Specification.new do |s|
290
294
  s.add_dependency(%q<database_cleaner>, [">= 0"])
291
295
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
292
296
  s.add_dependency(%q<fog>, [">= 0"])
297
+ s.add_dependency(%q<github-markup>, [">= 0"])
293
298
  s.add_dependency(%q<mongo>, [">= 0"])
294
299
  s.add_dependency(%q<couchrest>, ["~> 1.0"])
295
300
  s.add_dependency(%q<rack-cache>, [">= 0"])
296
301
  s.add_dependency(%q<rails>, ["~> 3.1.0"])
302
+ s.add_dependency(%q<redcarpet>, ["~> 1.0"])
297
303
  s.add_dependency(%q<rspec>, ["~> 2.5"])
298
304
  s.add_dependency(%q<webmock>, [">= 0"])
299
305
  s.add_dependency(%q<yard>, [">= 0"])
300
306
  s.add_dependency(%q<bluecloth>, [">= 0"])
301
- s.add_dependency(%q<bson_ext>, ["~> 1.3.1"])
307
+ s.add_dependency(%q<bson_ext>, [">= 0"])
302
308
  s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
303
309
  end
304
310
  end
@@ -72,7 +72,7 @@ Here is an example of an app with all attributes configured:
72
72
 
73
73
  # When using ImageMagick only...
74
74
  c.convert_command = "/opt/local/bin/convert" # defaults to "convert"
75
- c.identify_command = "/opt/local/bin/convert" # defaults to "convert"
75
+ c.identify_command = "/opt/local/bin/identify" # defaults to "identify"
76
76
  c.log_commands = true # defaults to false
77
77
  end
78
78
 
@@ -90,6 +90,7 @@ To configure with the {Dragonfly::DataStorage::S3DataStore S3DataStore}:
90
90
  c.region = 'eu-west-1' # defaults to 'us-east-1'
91
91
  c.storage_headers = {'some' => 'thing'} # defaults to {'x-amz-acl' => 'public-read'}
92
92
  c.url_scheme = 'https' # defaults to 'http'
93
+ c.url_host = 'some.custom.host' # defaults to "<bucket_name>.s3.amazonaws.com"
93
94
  end
94
95
 
95
96
  You can also pass these options to `S3DataStore.new` as an options hash.
@@ -106,6 +107,10 @@ or with an https url:
106
107
 
107
108
  my_model.attachment.remote_url(:scheme => 'https') # also configurable for all urls with 'url_scheme'
108
109
 
110
+ or with a custom host:
111
+
112
+ my_model.attachment.remote_url(:host => 'custom.domain') # also configurable for all urls with 'url_host'
113
+
109
114
  Extra options you can use on store are `:path` and `:headers`
110
115
 
111
116
  app.store("SOME CONTENT", :path => 'some/path.txt', :headers => {'x-amz-acl' => 'public-read-write'})
@@ -131,6 +131,6 @@ There are some options that can be set, e.g. if the imagemagick convert command
131
131
 
132
132
  app.configure do |c|
133
133
  c.convert_command = "/opt/local/bin/convert" # defaults to "convert"
134
- c.identify_command = "/opt/local/bin/convert" # defaults to "convert"
134
+ c.identify_command = "/opt/local/bin/identify" # defaults to "identify"
135
135
  c.log_commands = true # defaults to false
136
136
  end
@@ -35,7 +35,7 @@ application.rb:
35
35
  Gemfile
36
36
  -------
37
37
 
38
- gem 'dragonfly', '~>0.9.10'
38
+ gem 'dragonfly', '~>0.9.11'
39
39
  gem 'rack-cache', :require => 'rack/cache'
40
40
 
41
41
  Capistrano
@@ -158,7 +158,7 @@ module Dragonfly
158
158
  end
159
159
 
160
160
  def inspect
161
- "<Dragonfly Attachment uid=#{uid.inspect}, app=#{app.inspect}>"
161
+ "<Dragonfly Attachment uid=#{uid.inspect}, app=#{app.name.inspect}>"
162
162
  end
163
163
 
164
164
  protected
@@ -182,7 +182,7 @@ module Dragonfly
182
182
 
183
183
  def destroy_content(uid)
184
184
  app.datastore.destroy(uid)
185
- rescue DataStorage::DataNotFound => e
185
+ rescue DataStorage::DataNotFound, DataStorage::DestroyError => e
186
186
  app.log.warn("*** WARNING ***: tried to destroy data with uid #{uid}, but got error: #{e}")
187
187
  end
188
188
 
@@ -10,7 +10,8 @@ module Dragonfly
10
10
  private :new # Hide 'new' - need to use 'instance'
11
11
 
12
12
  def instance(name)
13
- apps[name] ||= new
13
+ name = name.to_sym
14
+ apps[name] ||= new(name)
14
15
  end
15
16
 
16
17
  alias [] instance
@@ -23,7 +24,8 @@ module Dragonfly
23
24
 
24
25
  end
25
26
 
26
- def initialize
27
+ def initialize(name)
28
+ @name = name
27
29
  @analyser, @processor, @encoder, @generator = Analyser.new, Processor.new, Encoder.new, Generator.new
28
30
  [@analyser, @processor, @encoder, @generator].each do |obj|
29
31
  obj.use_same_log_as(self)
@@ -33,6 +35,8 @@ module Dragonfly
33
35
  @job_definitions = JobDefinitions.new
34
36
  end
35
37
 
38
+ attr_reader :name
39
+
36
40
  include Configurable
37
41
 
38
42
  extend Forwardable
@@ -135,13 +139,14 @@ module Dragonfly
135
139
 
136
140
  def define_macro_on_include(mod, macro_name)
137
141
  app = self
142
+ name = self.name
138
143
  (class << mod; self; end).class_eval do
139
- alias included_without_dragonfly included
140
- define_method :included_with_dragonfly do |mod|
141
- included_without_dragonfly(mod)
144
+ alias_method "included_without_dragonfly_#{name}", :included
145
+ define_method "included_with_dragonfly_#{name}" do |mod|
146
+ send "included_without_dragonfly_#{name}", mod
142
147
  app.define_macro(mod, macro_name)
143
148
  end
144
- alias included included_with_dragonfly
149
+ alias_method :included, "included_with_dragonfly_#{name}"
145
150
  end
146
151
  end
147
152
 
@@ -162,6 +167,10 @@ module Dragonfly
162
167
  job_definitions.definition_names
163
168
  end
164
169
 
170
+ def inspect
171
+ "<#{self.class.name} name=#{name.inspect} >"
172
+ end
173
+
165
174
  # Deprecated methods
166
175
  def url_path_prefix=(thing)
167
176
  raise NoMethodError, "url_path_prefix is deprecated - please use url_format, e.g. url_format = '/media/:job/:basename.:format' - see docs for more details"
@@ -5,6 +5,7 @@ module Dragonfly
5
5
  class BadUID < RuntimeError; end
6
6
  class DataNotFound < RuntimeError; end
7
7
  class UnableToStore < RuntimeError; end
8
+ class DestroyError < RuntimeError; end
8
9
 
9
10
  end
10
11
  end
@@ -15,6 +15,7 @@ module Dragonfly
15
15
  configurable_attr :use_filesystem, true
16
16
  configurable_attr :storage_headers, {'x-amz-acl' => 'public-read'}
17
17
  configurable_attr :url_scheme, 'http'
18
+ configurable_attr :url_host
18
19
 
19
20
  REGIONS = {
20
21
  'us-east-1' => 's3.amazonaws.com', #default
@@ -71,6 +72,8 @@ module Dragonfly
71
72
  rescuing_socket_errors{ storage.delete_object(bucket_name, uid) }
72
73
  rescue Excon::Errors::NotFound => e
73
74
  raise DataNotFound, "#{e} - #{uid}"
75
+ rescue Excon::Errors::Conflict => e
76
+ raise DestroyError, "#{e} - #{uid}"
74
77
  end
75
78
 
76
79
  def url_for(uid, opts={})
@@ -82,7 +85,8 @@ module Dragonfly
82
85
  end
83
86
  else
84
87
  scheme = opts[:scheme] || url_scheme
85
- "#{scheme}://#{bucket_name}.s3.amazonaws.com/#{uid}"
88
+ host = opts[:host] || url_host || "#{bucket_name}.s3.amazonaws.com"
89
+ "#{scheme}://#{host}/#{uid}"
86
90
  end
87
91
  end
88
92
 
@@ -91,12 +95,16 @@ module Dragonfly
91
95
  end
92
96
 
93
97
  def storage
94
- @storage ||= Fog::Storage.new(
95
- :provider => 'AWS',
96
- :aws_access_key_id => access_key_id,
97
- :aws_secret_access_key => secret_access_key,
98
- :region => region
99
- )
98
+ @storage ||= begin
99
+ storage = Fog::Storage.new(
100
+ :provider => 'AWS',
101
+ :aws_access_key_id => access_key_id,
102
+ :aws_secret_access_key => secret_access_key,
103
+ :region => region
104
+ )
105
+ storage.sync_clock
106
+ storage
107
+ end
100
108
  end
101
109
 
102
110
  def bucket_exists?
@@ -52,7 +52,7 @@ module Dragonfly
52
52
  end
53
53
 
54
54
  def inspect
55
- to_s.sub(/>$/, " with functions: #{functions.keys.map{|k| k.to_s }.sort.join(', ')} >")
55
+ "<#{self.class.name} with functions: #{functions.keys.map{|k| k.to_s }.sort.join(', ')} >"
56
56
  end
57
57
 
58
58
  private
@@ -22,11 +22,13 @@ module Dragonfly
22
22
  attrs = identify(temp_object)
23
23
  attrs[:width] <= attrs[:height]
24
24
  end
25
+ alias portrait portrait?
25
26
 
26
27
  def landscape?(temp_object)
27
28
  attrs = identify(temp_object)
28
29
  attrs[:width] >= attrs[:height]
29
30
  end
31
+ alias landscape landscape?
30
32
 
31
33
  def depth(temp_object)
32
34
  identify(temp_object)[:depth]
@@ -378,7 +378,7 @@ module Dragonfly
378
378
  end
379
379
 
380
380
  def inspect
381
- to_s.sub(/>$/, " app=#{app}, steps=#{steps.inspect}, temp_object=#{temp_object.inspect}, steps applied:#{applied_steps.length}/#{steps.length} >")
381
+ "<Dragonfly::Job app=#{app.name.inspect}, steps=#{steps.inspect}, temp_object=#{temp_object.inspect}, steps applied:#{applied_steps.length}/#{steps.length} >"
382
382
  end
383
383
 
384
384
  def update(content, new_meta)
@@ -11,5 +11,9 @@ module Dragonfly
11
11
 
12
12
  attr_reader :job
13
13
 
14
+ def inspect
15
+ "<#{self.class.name} steps=#{job.steps} >"
16
+ end
17
+
14
18
  end
15
19
  end
@@ -18,6 +18,10 @@ module Dragonfly
18
18
  [400, {"Content-Type" => 'text/plain'}, ["The SHA parameter you gave (#{e}) is incorrect"]]
19
19
  end
20
20
 
21
+ def inspect
22
+ "<#{self.class.name} for app #{@app.name.inspect} >"
23
+ end
24
+
21
25
  private
22
26
 
23
27
  def routing_params(env)
@@ -76,6 +76,7 @@ module Dragonfly
76
76
  @url_mapper ||= UrlMapper.new(url_format,
77
77
  :job => '[\w+~]',
78
78
  :basename => '[^\/]',
79
+ :name => '[^\/]',
79
80
  :format => '[^\.]'
80
81
  )
81
82
  end
@@ -165,7 +165,7 @@ module Dragonfly
165
165
  when @pathname then "pathname=#{@pathname.inspect}"
166
166
  when @tempfile then "tempfile=#{@tempfile.inspect}"
167
167
  end
168
- to_s.sub(/>$/, " #{content_string} >")
168
+ "<#{self.class.name} #{content_string} >"
169
169
  end
170
170
 
171
171
  def unique_id
@@ -49,18 +49,37 @@ describe Item do
49
49
  end
50
50
  end
51
51
 
52
- it "should work for included modules (e.g. Mongoid::Document)" do
53
- mongoid_document = Module.new
54
- app1.define_macro_on_include(mongoid_document, :dog_accessor)
55
- model_class = Class.new do
56
- def self.before_save(*args); end
57
- def self.before_destroy(*args); end
58
- include mongoid_document
59
- dog_accessor :doogie
52
+ describe "included modules (e.g. Mongoid::Document)" do
53
+
54
+ it "should work" do
55
+ mongoid_document = Module.new
56
+ app1.define_macro_on_include(mongoid_document, :dog_accessor)
57
+ model_class = Class.new do
58
+ def self.before_save(*args); end
59
+ def self.before_destroy(*args); end
60
+ include mongoid_document
61
+ dog_accessor :doogie
62
+ end
63
+ klass = model_class.dragonfly_attachment_classes.first
64
+ klass.app.should == app1
65
+ klass.attribute.should == :doogie
66
+ end
67
+
68
+ it "should work with two apps" do
69
+ mongoid_document = Module.new
70
+ app1.define_macro_on_include(mongoid_document, :image_accessor)
71
+ app2.define_macro_on_include(mongoid_document, :video_accessor)
72
+ model_class = Class.new do
73
+ def self.before_save(*args); end
74
+ def self.before_destroy(*args); end
75
+ include mongoid_document
76
+ image_accessor :doogie
77
+ video_accessor :boogie
78
+ end
79
+ model_class.dragonfly_attachment_classes[0].app.should == app1
80
+ model_class.dragonfly_attachment_classes[1].app.should == app2
60
81
  end
61
- klass = model_class.dragonfly_attachment_classes.first
62
- klass.app.should == app1
63
- klass.attribute.should == :doogie
82
+
64
83
  end
65
84
 
66
85
  end
@@ -288,12 +307,18 @@ describe Item do
288
307
 
289
308
  end
290
309
 
291
- describe "when the data can't be found" do
310
+ describe "destroy errors" do
292
311
  it "should log a warning if the data wasn't found on destroy" do
293
312
  @app.datastore.should_receive(:destroy).with('some_uid').and_raise(Dragonfly::DataStorage::DataNotFound)
294
313
  @app.log.should_receive(:warn)
295
314
  @item.destroy
296
315
  end
316
+
317
+ it "should log a warning if the data wasn't found on destroy" do
318
+ @app.datastore.should_receive(:destroy).with('some_uid').and_raise(Dragonfly::DataStorage::DestroyError)
319
+ @app.log.should_receive(:warn)
320
+ @item.destroy
321
+ end
297
322
  end
298
323
 
299
324
  end
@@ -1446,7 +1471,7 @@ describe Item do
1446
1471
  @item.save!
1447
1472
  end
1448
1473
  it "should be awesome" do
1449
- @item.preview_image.inspect.should =~ %r{^<Dragonfly Attachment uid="[^"]+".*>$}
1474
+ @item.preview_image.inspect.should =~ %r{^<Dragonfly Attachment uid="[^"]+", app=:test[_\w]*>$}
1450
1475
  end
1451
1476
  end
1452
1477
 
@@ -164,4 +164,10 @@ describe Dragonfly::App do
164
164
  end
165
165
  end
166
166
 
167
+ describe "inspect" do
168
+ it "should give a neat output" do
169
+ Dragonfly[:hello].inspect.should == "<Dragonfly::App name=:hello >"
170
+ end
171
+ end
172
+
167
173
  end
@@ -261,6 +261,16 @@ describe Dragonfly::DataStorage::S3DataStore do
261
261
  @data_store.url_scheme = 'https'
262
262
  @data_store.url_for(@uid).should == "https://#{BUCKET_NAME}.s3.amazonaws.com/some/path/on/s3"
263
263
  end
264
+
265
+ it "should allow for customizing the host" do
266
+ @data_store.url_for(@uid, :host => 'customised.domain.com/and/path').should == "http://customised.domain.com/and/path/some/path/on/s3"
267
+ end
268
+
269
+ it "should allow the url_host to be customised permanently" do
270
+ url_host = 'customised.domain.com/and/path'
271
+ @data_store.url_host = url_host
272
+ @data_store.url_for(@uid).should == "http://#{url_host}/some/path/on/s3"
273
+ end
264
274
 
265
275
  end
266
276
 
@@ -226,4 +226,10 @@ describe Dragonfly::JobEndpoint do
226
226
  end
227
227
  end
228
228
 
229
+ describe "inspect" do
230
+ it "should be pretty yo" do
231
+ @job.to_app.inspect.should == %(<Dragonfly::JobEndpoint steps=[fetch("egg")] >)
232
+ end
233
+ end
234
+
229
235
  end
@@ -44,5 +44,9 @@ describe Dragonfly::RoutedEndpoint do
44
44
  response = response_for @endpoint.call(env)
45
45
  response.body.should == 'wassup'
46
46
  end
47
+
48
+ it "should have nice inspect output" do
49
+ @endpoint.inspect.should =~ /<Dragonfly::RoutedEndpoint for app :test_[_\w]* >/
50
+ end
47
51
 
48
52
  end
@@ -37,7 +37,8 @@ def mock_app(extra_stubs={})
37
37
  end
38
38
 
39
39
  def test_app
40
- app = Dragonfly::App.send(:new)
40
+ time = Time.now
41
+ app = Dragonfly::App.send(:new, "test_#{time.sec}_#{time.usec}".to_sym)
41
42
  app.log = Logger.new(LOG_FILE)
42
43
  app.datastore.root_path = 'tmp/file_data_store_test'
43
44
  app
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dragonfly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.10
4
+ version: 0.9.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-11 00:00:00.000000000Z
12
+ date: 2012-03-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &70223626180020 !ruby/object:Gem::Requirement
16
+ requirement: &70236021927120 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70223626180020
24
+ version_requirements: *70236021927120
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: capybara
27
- requirement: &70223626179540 !ruby/object:Gem::Requirement
27
+ requirement: &70236021942780 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70223626179540
35
+ version_requirements: *70236021942780
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: cucumber
38
- requirement: &70223626173660 !ruby/object:Gem::Requirement
38
+ requirement: &70236021941780 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.10.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70223626173660
46
+ version_requirements: *70236021941780
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: cucumber-rails
49
- requirement: &70223626173180 !ruby/object:Gem::Requirement
49
+ requirement: &70236021940000 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.5.2
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70223626173180
57
+ version_requirements: *70236021940000
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: database_cleaner
60
- requirement: &70223626172700 !ruby/object:Gem::Requirement
60
+ requirement: &70236021938420 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70223626172700
68
+ version_requirements: *70236021938420
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: jeweler
71
- requirement: &70223626172220 !ruby/object:Gem::Requirement
71
+ requirement: &70236021937080 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.5.2
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70223626172220
79
+ version_requirements: *70236021937080
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: fog
82
- requirement: &70223626171740 !ruby/object:Gem::Requirement
82
+ requirement: &70236021936400 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,21 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70223626171740
90
+ version_requirements: *70236021936400
91
+ - !ruby/object:Gem::Dependency
92
+ name: github-markup
93
+ requirement: &70236021935700 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70236021935700
91
102
  - !ruby/object:Gem::Dependency
92
103
  name: mongo
93
- requirement: &70223626170440 !ruby/object:Gem::Requirement
104
+ requirement: &70236021976980 !ruby/object:Gem::Requirement
94
105
  none: false
95
106
  requirements:
96
107
  - - ! '>='
@@ -98,10 +109,10 @@ dependencies:
98
109
  version: '0'
99
110
  type: :development
100
111
  prerelease: false
101
- version_requirements: *70223626170440
112
+ version_requirements: *70236021976980
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: couchrest
104
- requirement: &70223626169900 !ruby/object:Gem::Requirement
115
+ requirement: &70236021976260 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ~>
@@ -109,10 +120,10 @@ dependencies:
109
120
  version: '1.0'
110
121
  type: :development
111
122
  prerelease: false
112
- version_requirements: *70223626169900
123
+ version_requirements: *70236021976260
113
124
  - !ruby/object:Gem::Dependency
114
125
  name: rack-cache
115
- requirement: &70223626169420 !ruby/object:Gem::Requirement
126
+ requirement: &70236021975280 !ruby/object:Gem::Requirement
116
127
  none: false
117
128
  requirements:
118
129
  - - ! '>='
@@ -120,10 +131,10 @@ dependencies:
120
131
  version: '0'
121
132
  type: :development
122
133
  prerelease: false
123
- version_requirements: *70223626169420
134
+ version_requirements: *70236021975280
124
135
  - !ruby/object:Gem::Dependency
125
136
  name: rails
126
- requirement: &70223626168940 !ruby/object:Gem::Requirement
137
+ requirement: &70236021974280 !ruby/object:Gem::Requirement
127
138
  none: false
128
139
  requirements:
129
140
  - - ~>
@@ -131,10 +142,21 @@ dependencies:
131
142
  version: 3.1.0
132
143
  type: :development
133
144
  prerelease: false
134
- version_requirements: *70223626168940
145
+ version_requirements: *70236021974280
146
+ - !ruby/object:Gem::Dependency
147
+ name: redcarpet
148
+ requirement: &70236021973200 !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ~>
152
+ - !ruby/object:Gem::Version
153
+ version: '1.0'
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: *70236021973200
135
157
  - !ruby/object:Gem::Dependency
136
158
  name: rspec
137
- requirement: &70223626168460 !ruby/object:Gem::Requirement
159
+ requirement: &70236021971360 !ruby/object:Gem::Requirement
138
160
  none: false
139
161
  requirements:
140
162
  - - ~>
@@ -142,10 +164,10 @@ dependencies:
142
164
  version: '2.5'
143
165
  type: :development
144
166
  prerelease: false
145
- version_requirements: *70223626168460
167
+ version_requirements: *70236021971360
146
168
  - !ruby/object:Gem::Dependency
147
169
  name: webmock
148
- requirement: &70223626167980 !ruby/object:Gem::Requirement
170
+ requirement: &70236021970020 !ruby/object:Gem::Requirement
149
171
  none: false
150
172
  requirements:
151
173
  - - ! '>='
@@ -153,10 +175,10 @@ dependencies:
153
175
  version: '0'
154
176
  type: :development
155
177
  prerelease: false
156
- version_requirements: *70223626167980
178
+ version_requirements: *70236021970020
157
179
  - !ruby/object:Gem::Dependency
158
180
  name: yard
159
- requirement: &70223626167500 !ruby/object:Gem::Requirement
181
+ requirement: &70236021985140 !ruby/object:Gem::Requirement
160
182
  none: false
161
183
  requirements:
162
184
  - - ! '>='
@@ -164,10 +186,10 @@ dependencies:
164
186
  version: '0'
165
187
  type: :development
166
188
  prerelease: false
167
- version_requirements: *70223626167500
189
+ version_requirements: *70236021985140
168
190
  - !ruby/object:Gem::Dependency
169
191
  name: bluecloth
170
- requirement: &70223626167020 !ruby/object:Gem::Requirement
192
+ requirement: &70236021984320 !ruby/object:Gem::Requirement
171
193
  none: false
172
194
  requirements:
173
195
  - - ! '>='
@@ -175,21 +197,21 @@ dependencies:
175
197
  version: '0'
176
198
  type: :development
177
199
  prerelease: false
178
- version_requirements: *70223626167020
200
+ version_requirements: *70236021984320
179
201
  - !ruby/object:Gem::Dependency
180
202
  name: bson_ext
181
- requirement: &70223626166540 !ruby/object:Gem::Requirement
203
+ requirement: &70236021983000 !ruby/object:Gem::Requirement
182
204
  none: false
183
205
  requirements:
184
- - - ~>
206
+ - - ! '>='
185
207
  - !ruby/object:Gem::Version
186
- version: 1.3.1
208
+ version: '0'
187
209
  type: :development
188
210
  prerelease: false
189
- version_requirements: *70223626166540
211
+ version_requirements: *70236021983000
190
212
  - !ruby/object:Gem::Dependency
191
213
  name: sqlite3-ruby
192
- requirement: &70223626166060 !ruby/object:Gem::Requirement
214
+ requirement: &70236021981600 !ruby/object:Gem::Requirement
193
215
  none: false
194
216
  requirements:
195
217
  - - ! '>='
@@ -197,7 +219,7 @@ dependencies:
197
219
  version: '0'
198
220
  type: :development
199
221
  prerelease: false
200
- version_requirements: *70223626166060
222
+ version_requirements: *70236021981600
201
223
  description: ! "Dragonfly is a framework that enables on-the-fly processing for any
202
224
  content type.\n It is especially suited to image handling. Its uses range from
203
225
  image thumbnails to standard attachments to on-demand text generation."
@@ -394,7 +416,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
394
416
  version: '0'
395
417
  segments:
396
418
  - 0
397
- hash: 2886754180935822941
419
+ hash: -783174098517993028
398
420
  required_rubygems_version: !ruby/object:Gem::Requirement
399
421
  none: false
400
422
  requirements:
@@ -403,7 +425,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
403
425
  version: '0'
404
426
  requirements: []
405
427
  rubyforge_project:
406
- rubygems_version: 1.8.10
428
+ rubygems_version: 1.8.11
407
429
  signing_key:
408
430
  specification_version: 3
409
431
  summary: Ideal gem for handling attachments in Rails, Sinatra and Rack applications.