locomotive_carrierwave 0.5.0.1 → 0.5.4.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. data/README.md +714 -0
  2. data/lib/carrierwave.rb +9 -3
  3. data/lib/carrierwave/compatibility/paperclip.rb +18 -18
  4. data/lib/carrierwave/mount.rb +30 -25
  5. data/lib/carrierwave/orm/activerecord.rb +14 -4
  6. data/lib/carrierwave/orm/mongoid.rb +29 -8
  7. data/lib/carrierwave/processing/image_science.rb +25 -2
  8. data/lib/carrierwave/processing/mini_magick.rb +4 -3
  9. data/lib/carrierwave/processing/rmagick.rb +3 -2
  10. data/lib/carrierwave/sanitized_file.rb +23 -38
  11. data/lib/carrierwave/storage/abstract.rb +0 -3
  12. data/lib/carrierwave/storage/cloud_files.rb +30 -10
  13. data/lib/carrierwave/storage/file.rb +1 -8
  14. data/lib/carrierwave/storage/fog.rb +332 -0
  15. data/lib/carrierwave/storage/grid_fs.rb +6 -6
  16. data/lib/carrierwave/storage/s3.rb +31 -34
  17. data/lib/carrierwave/test/matchers.rb +1 -1
  18. data/lib/carrierwave/uploader.rb +0 -1
  19. data/lib/carrierwave/uploader/cache.rb +28 -7
  20. data/lib/carrierwave/uploader/callbacks.rb +11 -17
  21. data/lib/carrierwave/uploader/configuration.rb +62 -34
  22. data/lib/carrierwave/uploader/download.rb +16 -5
  23. data/lib/carrierwave/uploader/extension_whitelist.rb +14 -3
  24. data/lib/carrierwave/uploader/mountable.rb +1 -1
  25. data/lib/carrierwave/uploader/processing.rb +20 -15
  26. data/lib/carrierwave/uploader/proxy.rb +16 -1
  27. data/lib/carrierwave/uploader/store.rb +3 -9
  28. data/lib/carrierwave/uploader/url.rb +3 -2
  29. data/lib/carrierwave/uploader/versions.rb +78 -25
  30. data/lib/carrierwave/version.rb +1 -1
  31. data/lib/generators/templates/uploader.rb +2 -1
  32. metadata +64 -102
  33. data/README.rdoc +0 -532
  34. data/lib/carrierwave/orm/datamapper.rb +0 -37
  35. data/lib/carrierwave/orm/sequel.rb +0 -45
  36. data/lib/carrierwave/uploader/rename.rb +0 -62
@@ -13,11 +13,11 @@ module CarrierWave
13
13
 
14
14
  class RemoteFile
15
15
  def initialize(uri)
16
- @uri = URI.parse(URI.escape(uri))
16
+ @uri = uri
17
17
  end
18
18
 
19
19
  def original_filename
20
- File.basename(@uri.path)
20
+ File.basename(file.base_uri.path)
21
21
  end
22
22
 
23
23
  def respond_to?(*args)
@@ -52,13 +52,24 @@ module CarrierWave
52
52
  #
53
53
  def download!(uri)
54
54
  unless uri.blank?
55
- file = RemoteFile.new(uri)
55
+ processed_uri = process_uri(uri)
56
+ file = RemoteFile.new(processed_uri)
56
57
  raise CarrierWave::DownloadError, "trying to download a file which is not served over HTTP" unless file.http?
57
- cache!(file)
58
+ cache!(file)
58
59
  end
59
60
  end
60
61
 
62
+ ##
63
+ # Processes the given URL by parsing and escaping it. Public to allow overriding.
64
+ #
65
+ # === Parameters
66
+ #
67
+ # [url (String)] The URL where the remote file is stored
68
+ #
69
+ def process_uri(uri)
70
+ URI.parse(URI.escape(URI.unescape(uri)))
71
+ end
72
+
61
73
  end # Download
62
74
  end # Uploader
63
75
  end # CarrierWave
64
-
@@ -11,11 +11,15 @@ module CarrierWave
11
11
 
12
12
  ##
13
13
  # Override this method in your uploader to provide a white list of extensions which
14
- # are allowed to be uploaded.
14
+ # are allowed to be uploaded. Compares the file's extension case insensitive.
15
+ # Furthermore, not only strings but Regexp are allowed as well.
16
+ #
17
+ # When using a Regexp in the white list, `\A` and `\z` are automatically added to
18
+ # the Regexp expression, also case insensitive.
15
19
  #
16
20
  # === Returns
17
21
  #
18
- # [NilClass, Array[String]] a white list of extensions which are allowed to be uploaded
22
+ # [NilClass, Array[String,Regexp]] a white list of extensions which are allowed to be uploaded
19
23
  #
20
24
  # === Examples
21
25
  #
@@ -23,12 +27,19 @@ module CarrierWave
23
27
  # %w(jpg jpeg gif png)
24
28
  # end
25
29
  #
30
+ # Basically the same, but using a Regexp:
31
+ #
32
+ # def extension_white_list
33
+ # [/jpe?g/, 'gif', 'png']
34
+ # end
35
+ #
26
36
  def extension_white_list; end
27
37
 
28
38
  private
29
39
 
30
40
  def check_whitelist!(new_file)
31
- if extension_white_list and not extension_white_list.include?(new_file.extension.to_s)
41
+ extension = new_file.extension.to_s
42
+ if extension_white_list and not extension_white_list.detect { |item| extension =~ /\A#{item}\z/i }
32
43
  raise CarrierWave::IntegrityError, "You are not allowed to upload #{new_file.extension.inspect} files, allowed types: #{extension_white_list.inspect}"
33
44
  end
34
45
  end
@@ -4,7 +4,7 @@ module CarrierWave
4
4
  module Uploader
5
5
  module Mountable
6
6
 
7
- attr_reader :model, :mounted_as, :original_file
7
+ attr_reader :model, :mounted_as
8
8
 
9
9
  ##
10
10
  # If a model is given as the first parameter, it will stored in the uploader, and
@@ -8,23 +8,14 @@ module CarrierWave
8
8
  include CarrierWave::Uploader::Callbacks
9
9
 
10
10
  included do
11
+ class_inheritable_accessor :processors, :instance_reader => false, :instance_writer => false
12
+ self.processors = []
13
+
11
14
  after :cache, :process!
12
- after :recreate_versions, :process!
13
15
  end
14
16
 
15
17
  module ClassMethods
16
18
 
17
- ##
18
- # Lists processor callbacks declared
19
- #
20
- # === Returns
21
- #
22
- # [Array[Array[Symbol, Array]]] a list of processor callbacks which have been declared for this uploader
23
- #
24
- def processors
25
- @processors ||= []
26
- end
27
-
28
19
  ##
29
20
  # Adds a processor callback which applies operations as a file is uploaded.
30
21
  # The argument may be the name of any method of the uploader, expressed as a symbol,
@@ -41,6 +32,8 @@ module CarrierWave
41
32
  #
42
33
  # process :sepiatone, :vignette
43
34
  # process :scale => [200, 200]
35
+ # process :scale => [200, 200], :if => :image?
36
+ # process :sepiatone, :if => :image?
44
37
  #
45
38
  # def sepiatone
46
39
  # ...
@@ -53,16 +46,27 @@ module CarrierWave
53
46
  # def scale(height, width)
54
47
  # ...
55
48
  # end
49
+ #
50
+ # def image?
51
+ # ...
52
+ # end
53
+ #
56
54
  # end
57
55
  #
58
56
  def process(*args)
57
+ if !args.first.is_a?(Hash) && args.last.is_a?(Hash)
58
+ conditions = args.pop
59
+ args.map!{ |arg| {arg => []}.merge(conditions) }
60
+ end
61
+
59
62
  args.each do |arg|
60
63
  if arg.is_a?(Hash)
64
+ condition = arg.delete(:if)
61
65
  arg.each do |method, args|
62
- processors.push([method, args])
66
+ processors.push([method, args, condition])
63
67
  end
64
68
  else
65
- processors.push([arg, []])
69
+ processors.push([arg, [], nil])
66
70
  end
67
71
  end
68
72
  end
@@ -74,7 +78,8 @@ module CarrierWave
74
78
  #
75
79
  def process!(new_file=nil)
76
80
  if enable_processing
77
- self.class.processors.each do |method, args|
81
+ self.class.processors.each do |method, args, condition|
82
+ next if condition && !self.send(condition, new_file)
78
83
  self.send(method, *args)
79
84
  end
80
85
  end
@@ -57,6 +57,21 @@ module CarrierWave
57
57
  file.respond_to?(:size) ? file.size : 0
58
58
  end
59
59
 
60
+ ##
61
+ # Return the size of the file when asked for its length
62
+ #
63
+ # === Returns
64
+ #
65
+ # [Integer] size of the file
66
+ #
67
+ # === Note
68
+ #
69
+ # This was added because of the way Rails handles length/size validations in 3.0.6 and above.
70
+ #
71
+ def length
72
+ size
73
+ end
74
+
60
75
  end # Proxy
61
76
  end # Uploader
62
- end # CarrierWave
77
+ end # CarrierWave
@@ -27,10 +27,6 @@ module CarrierWave
27
27
  @filename
28
28
  end
29
29
 
30
- def delete_original_file?
31
- @original_file && @original_file.path != @file.path # if the path hasn't changed, no need to delete it
32
- end
33
-
34
30
  ##
35
31
  # Calculates the path where the file should be stored. If +for_file+ is given, it will be
36
32
  # used as the filename, otherwise +CarrierWave::Uploader#filename+ is assumed.
@@ -60,12 +56,10 @@ module CarrierWave
60
56
  cache!(new_file) if new_file
61
57
  if @file and @cache_id
62
58
  with_callbacks(:store, new_file) do
63
- @file = storage.store!(@file)
64
-
65
- @original_file.delete if self.delete_original_file?
66
-
59
+ new_file = storage.store!(@file)
60
+ @file.delete if delete_tmp_file_after_storage
61
+ @file = new_file
67
62
  @cache_id = nil
68
- @original_file = nil
69
63
  end
70
64
  end
71
65
  end
@@ -22,10 +22,11 @@ module CarrierWave
22
22
  ##
23
23
  # === Returns
24
24
  #
25
- # [String] A JSON serializtion containing this uploader's URL
25
+ # [String] A JSON serialization containing this uploader's URL(s)
26
26
  #
27
27
  def as_json(options = nil)
28
- { :url => url }
28
+ h = { :url => url }
29
+ h.merge Hash[versions.map { |name, version| [name, { :url => version.url }] }]
29
30
  end
30
31
 
31
32
  end # Url
@@ -8,6 +8,12 @@ module CarrierWave
8
8
  include CarrierWave::Uploader::Callbacks
9
9
 
10
10
  included do
11
+ class_inheritable_accessor :versions, :instance_reader => false, :instance_writer => false
12
+ self.versions = {}
13
+
14
+ class_inheritable_accessor :version_names, :instance_reader => false, :instance_writer => false
15
+ self.version_names = []
16
+
11
17
  after :cache, :cache_versions!
12
18
  after :store, :store_versions!
13
19
  after :remove, :remove_versions!
@@ -17,43 +23,71 @@ module CarrierWave
17
23
 
18
24
  module ClassMethods
19
25
 
20
- def version_names
21
- @version_names ||= []
22
- end
23
-
24
26
  ##
25
27
  # Adds a new version to this uploader
26
28
  #
27
29
  # === Parameters
28
30
  #
29
31
  # [name (#to_sym)] name of the version
32
+ # [options (Hash)] optional options hash
30
33
  # [&block (Proc)] a block to eval on this version of the uploader
31
34
  #
32
- def version(name, &block)
35
+ # === Examples
36
+ #
37
+ # class MyUploader < CarrierWave::Uploader::Base
38
+ #
39
+ # version :thumb do
40
+ # process :scale => [200, 200]
41
+ # end
42
+ #
43
+ # version :preview, :if => :image? do
44
+ # process :scale => [200, 200]
45
+ # end
46
+ #
47
+ # end
48
+ #
49
+ def version(name, options = {}, &block)
33
50
  name = name.to_sym
34
51
  unless versions[name]
35
- versions[name] = Class.new(self)
36
- versions[name].version_names.push(*version_names)
37
- versions[name].version_names.push(name)
52
+ uploader = Class.new(self)
53
+
54
+ # Define the enable_processing method for versions so they get the
55
+ # value from the parent class unless explicitly overwritten
56
+ uploader.class_eval <<-RUBY, __FILE__, __LINE__ + 1
57
+ def self.enable_processing(value=nil)
58
+ self.enable_processing = value if value
59
+ if !@enable_processing.nil?
60
+ @enable_processing
61
+ else
62
+ superclass.enable_processing
63
+ end
64
+ end
65
+ RUBY
66
+
67
+ versions[name] = {
68
+ :uploader => uploader,
69
+ :options => options,
70
+ }
71
+ versions[name][:uploader].version_names.push(name)
38
72
  class_eval <<-RUBY
39
73
  def #{name}
40
74
  versions[:#{name}]
41
75
  end
42
76
  RUBY
77
+ # as the processors get the output from the previous processors as their
78
+ # input we must not stack the processors here
79
+ versions[name][:uploader].processors.clear
43
80
  end
44
- versions[name].class_eval(&block) if block
81
+ versions[name][:uploader].class_eval(&block) if block
45
82
  versions[name]
46
83
  end
47
84
 
48
- ##
49
- # === Returns
50
- #
51
- # [Hash{Symbol => Class}] a list of versions available for this uploader
52
- #
53
- def versions
54
- @versions ||= {}
85
+ def recursively_apply_block_to_versions(&block)
86
+ versions.each do |name, version|
87
+ version[:uploader].class_eval(&block)
88
+ version[:uploader].recursively_apply_block_to_versions(&block)
89
+ end
55
90
  end
56
-
57
91
  end # ClassMethods
58
92
 
59
93
  ##
@@ -66,8 +100,8 @@ module CarrierWave
66
100
  def versions
67
101
  return @versions if @versions
68
102
  @versions = {}
69
- self.class.versions.each do |name, klass|
70
- @versions[name] = klass.new(model, mounted_as)
103
+ self.class.versions.each do |name, version|
104
+ @versions[name] = version[:uploader].new(model, mounted_as)
71
105
  end
72
106
  @versions
73
107
  end
@@ -114,13 +148,26 @@ module CarrierWave
114
148
  # versions if their parameters somehow have changed.
115
149
  #
116
150
  def recreate_versions!
117
- with_callbacks(:recreate_versions, file) do
118
- versions.each { |name, v| v.store!(file) }
119
- end
151
+ # Some files could possibly not be stored on the local disk. This
152
+ # doesn't play nicely with processing. Make sure that we're only
153
+ # processing a cached file
154
+ #
155
+ # The call to store! will trigger the necessary callbacks to both
156
+ # process this version and all sub-versions
157
+ cache_stored_file! if !cached?
158
+
159
+ store!
120
160
  end
121
161
 
122
162
  private
123
163
 
164
+ def active_versions
165
+ versions.select do |name, uploader|
166
+ condition = self.class.versions[name][:options][:if]
167
+ not condition or send(condition, file)
168
+ end
169
+ end
170
+
124
171
  def full_filename(for_file)
125
172
  [version_name, super(for_file)].compact.join('_')
126
173
  end
@@ -130,14 +177,20 @@ module CarrierWave
130
177
  end
131
178
 
132
179
  def cache_versions!(new_file)
133
- versions.each do |name, v|
180
+ # We might have processed the new_file argument after the callbacks were
181
+ # initialized, so get the actual file based off of the current state of
182
+ # our file
183
+ processed_parent = SanitizedFile.new :tempfile => self.file,
184
+ :filename => new_file.original_filename
185
+
186
+ active_versions.each do |name, v|
134
187
  v.send(:cache_id=, cache_id)
135
- v.cache!(new_file)
188
+ v.cache!(processed_parent)
136
189
  end
137
190
  end
138
191
 
139
192
  def store_versions!(new_file)
140
- versions.each { |name, v| v.store!(new_file) }
193
+ active_versions.each { |name, v| v.store!(new_file) }
141
194
  end
142
195
 
143
196
  def remove_versions!
@@ -1,3 +1,3 @@
1
1
  module CarrierWave
2
- VERSION = "0.5.0.1"
2
+ VERSION = "0.5.4.beta1"
3
3
  end
@@ -8,7 +8,7 @@ class <%= class_name %>Uploader < CarrierWave::Uploader::Base
8
8
 
9
9
  # Choose what kind of storage to use for this uploader:
10
10
  storage :file
11
- # storage :s3
11
+ # storage :fog
12
12
 
13
13
  # Override the directory where uploaded files will be stored.
14
14
  # This is a sensible default for uploaders that are meant to be mounted:
@@ -40,6 +40,7 @@ class <%= class_name %>Uploader < CarrierWave::Uploader::Base
40
40
  # end
41
41
 
42
42
  # Override the filename of the uploaded files:
43
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
43
44
  # def filename
44
45
  # "something.jpg" if original_filename
45
46
  # end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: locomotive_carrierwave
3
3
  version: !ruby/object:Gem::Version
4
- hash: 101
5
- prerelease: false
4
+ hash: 62196433
5
+ prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 0
9
+ - 4
10
+ - beta
10
11
  - 1
11
- version: 0.5.0.1
12
+ version: 0.5.4.beta1
12
13
  platform: ruby
13
14
  authors:
14
15
  - Jonas Nicklas
@@ -17,13 +18,12 @@ autorequire:
17
18
  bindir: bin
18
19
  cert_chain: []
19
20
 
20
- date: 2010-10-12 00:00:00 +02:00
21
- default_executable:
21
+ date: 2011-06-10 00:00:00 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
- type: :runtime
25
- prerelease: false
26
24
  name: activesupport
25
+ prerelease: false
26
+ type: :runtime
27
27
  version_requirements: &id001 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
@@ -36,9 +36,9 @@ dependencies:
36
36
  version: "3.0"
37
37
  requirement: *id001
38
38
  - !ruby/object:Gem::Dependency
39
- type: :development
40
- prerelease: false
41
39
  name: rails
40
+ prerelease: false
41
+ type: :development
42
42
  version_requirements: &id002 !ruby/object:Gem::Requirement
43
43
  none: false
44
44
  requirements:
@@ -48,45 +48,41 @@ dependencies:
48
48
  segments:
49
49
  - 3
50
50
  - 0
51
- - 0
52
- version: 3.0.0
51
+ version: "3.0"
53
52
  requirement: *id002
54
53
  - !ruby/object:Gem::Dependency
55
- type: :development
56
- prerelease: false
57
54
  name: rspec
55
+ prerelease: false
56
+ type: :development
58
57
  version_requirements: &id003 !ruby/object:Gem::Requirement
59
58
  none: false
60
59
  requirements:
61
60
  - - ~>
62
61
  - !ruby/object:Gem::Version
63
- hash: 27
62
+ hash: 3
64
63
  segments:
65
- - 1
66
- - 3
64
+ - 2
67
65
  - 0
68
- version: 1.3.0
66
+ version: "2.0"
69
67
  requirement: *id003
70
68
  - !ruby/object:Gem::Dependency
71
- type: :development
69
+ name: excon
72
70
  prerelease: false
73
- name: fog
71
+ type: :development
74
72
  version_requirements: &id004 !ruby/object:Gem::Requirement
75
73
  none: false
76
74
  requirements:
77
- - - ~>
75
+ - - ">="
78
76
  - !ruby/object:Gem::Version
79
- hash: 29
77
+ hash: 3
80
78
  segments:
81
79
  - 0
82
- - 3
83
- - 7
84
- version: 0.3.7
80
+ version: "0"
85
81
  requirement: *id004
86
82
  - !ruby/object:Gem::Dependency
87
- type: :development
83
+ name: fog
88
84
  prerelease: false
89
- name: cucumber
85
+ type: :development
90
86
  version_requirements: &id005 !ruby/object:Gem::Requirement
91
87
  none: false
92
88
  requirements:
@@ -98,9 +94,9 @@ dependencies:
98
94
  version: "0"
99
95
  requirement: *id005
100
96
  - !ruby/object:Gem::Dependency
101
- type: :development
97
+ name: cucumber
102
98
  prerelease: false
103
- name: sqlite3-ruby
99
+ type: :development
104
100
  version_requirements: &id006 !ruby/object:Gem::Requirement
105
101
  none: false
106
102
  requirements:
@@ -112,9 +108,9 @@ dependencies:
112
108
  version: "0"
113
109
  requirement: *id006
114
110
  - !ruby/object:Gem::Dependency
115
- type: :development
111
+ name: sqlite3
116
112
  prerelease: false
117
- name: dm-core
113
+ type: :development
118
114
  version_requirements: &id007 !ruby/object:Gem::Requirement
119
115
  none: false
120
116
  requirements:
@@ -126,9 +122,9 @@ dependencies:
126
122
  version: "0"
127
123
  requirement: *id007
128
124
  - !ruby/object:Gem::Dependency
129
- type: :development
125
+ name: rmagick
130
126
  prerelease: false
131
- name: dm-validations
127
+ type: :development
132
128
  version_requirements: &id008 !ruby/object:Gem::Requirement
133
129
  none: false
134
130
  requirements:
@@ -140,9 +136,9 @@ dependencies:
140
136
  version: "0"
141
137
  requirement: *id008
142
138
  - !ruby/object:Gem::Dependency
143
- type: :development
139
+ name: RubyInline
144
140
  prerelease: false
145
- name: dm-migrations
141
+ type: :development
146
142
  version_requirements: &id009 !ruby/object:Gem::Requirement
147
143
  none: false
148
144
  requirements:
@@ -154,9 +150,9 @@ dependencies:
154
150
  version: "0"
155
151
  requirement: *id009
156
152
  - !ruby/object:Gem::Dependency
157
- type: :development
153
+ name: image_science
158
154
  prerelease: false
159
- name: dm-sqlite-adapter
155
+ type: :development
160
156
  version_requirements: &id010 !ruby/object:Gem::Requirement
161
157
  none: false
162
158
  requirements:
@@ -168,9 +164,9 @@ dependencies:
168
164
  version: "0"
169
165
  requirement: *id010
170
166
  - !ruby/object:Gem::Dependency
171
- type: :development
167
+ name: mini_magick
172
168
  prerelease: false
173
- name: sequel
169
+ type: :development
174
170
  version_requirements: &id011 !ruby/object:Gem::Requirement
175
171
  none: false
176
172
  requirements:
@@ -182,9 +178,9 @@ dependencies:
182
178
  version: "0"
183
179
  requirement: *id011
184
180
  - !ruby/object:Gem::Dependency
185
- type: :development
181
+ name: bson_ext
186
182
  prerelease: false
187
- name: rmagick
183
+ type: :development
188
184
  version_requirements: &id012 !ruby/object:Gem::Requirement
189
185
  none: false
190
186
  requirements:
@@ -196,9 +192,9 @@ dependencies:
196
192
  version: "0"
197
193
  requirement: *id012
198
194
  - !ruby/object:Gem::Dependency
199
- type: :development
195
+ name: mongoid
200
196
  prerelease: false
201
- name: RubyInline
197
+ type: :development
202
198
  version_requirements: &id013 !ruby/object:Gem::Requirement
203
199
  none: false
204
200
  requirements:
@@ -210,9 +206,9 @@ dependencies:
210
206
  version: "0"
211
207
  requirement: *id013
212
208
  - !ruby/object:Gem::Dependency
213
- type: :development
209
+ name: timecop
214
210
  prerelease: false
215
- name: image_science
211
+ type: :development
216
212
  version_requirements: &id014 !ruby/object:Gem::Requirement
217
213
  none: false
218
214
  requirements:
@@ -224,43 +220,10 @@ dependencies:
224
220
  version: "0"
225
221
  requirement: *id014
226
222
  - !ruby/object:Gem::Dependency
227
- type: :development
228
- prerelease: false
229
- name: mini_magick
230
- version_requirements: &id015 !ruby/object:Gem::Requirement
231
- none: false
232
- requirements:
233
- - - ~>
234
- - !ruby/object:Gem::Version
235
- hash: 1
236
- segments:
237
- - 2
238
- - 1
239
- version: "2.1"
240
- requirement: *id015
241
- - !ruby/object:Gem::Dependency
242
- type: :development
223
+ name: json
243
224
  prerelease: false
244
- name: mongoid
245
- version_requirements: &id016 !ruby/object:Gem::Requirement
246
- none: false
247
- requirements:
248
- - - "="
249
- - !ruby/object:Gem::Version
250
- hash: 62196417
251
- segments:
252
- - 2
253
- - 0
254
- - 0
255
- - beta
256
- - 17
257
- version: 2.0.0.beta.17
258
- requirement: *id016
259
- - !ruby/object:Gem::Dependency
260
225
  type: :development
261
- prerelease: false
262
- name: bson_ext
263
- version_requirements: &id017 !ruby/object:Gem::Requirement
226
+ version_requirements: &id015 !ruby/object:Gem::Requirement
264
227
  none: false
265
228
  requirements:
266
229
  - - ">="
@@ -269,12 +232,12 @@ dependencies:
269
232
  segments:
270
233
  - 0
271
234
  version: "0"
272
- requirement: *id017
235
+ requirement: *id015
273
236
  - !ruby/object:Gem::Dependency
274
- type: :development
237
+ name: cloudfiles
275
238
  prerelease: false
276
- name: timecop
277
- version_requirements: &id018 !ruby/object:Gem::Requirement
239
+ type: :development
240
+ version_requirements: &id016 !ruby/object:Gem::Requirement
278
241
  none: false
279
242
  requirements:
280
243
  - - ">="
@@ -283,12 +246,12 @@ dependencies:
283
246
  segments:
284
247
  - 0
285
248
  version: "0"
286
- requirement: *id018
249
+ requirement: *id016
287
250
  - !ruby/object:Gem::Dependency
288
- type: :development
251
+ name: sham_rack
289
252
  prerelease: false
290
- name: json
291
- version_requirements: &id019 !ruby/object:Gem::Requirement
253
+ type: :development
254
+ version_requirements: &id017 !ruby/object:Gem::Requirement
292
255
  none: false
293
256
  requirements:
294
257
  - - ">="
@@ -297,7 +260,7 @@ dependencies:
297
260
  segments:
298
261
  - 0
299
262
  version: "0"
300
- requirement: *id019
263
+ requirement: *id017
301
264
  description: Upload files in your Ruby applications, map them to a range of ORMs, store them on different backends.
302
265
  email:
303
266
  - jonas.nicklas@gmail.com
@@ -307,15 +270,13 @@ executables: []
307
270
  extensions: []
308
271
 
309
272
  extra_rdoc_files:
310
- - README.rdoc
273
+ - README.md
311
274
  files:
312
275
  - lib/carrierwave/compatibility/paperclip.rb
313
276
  - lib/carrierwave/locale/en.yml
314
277
  - lib/carrierwave/mount.rb
315
278
  - lib/carrierwave/orm/activerecord.rb
316
- - lib/carrierwave/orm/datamapper.rb
317
279
  - lib/carrierwave/orm/mongoid.rb
318
- - lib/carrierwave/orm/sequel.rb
319
280
  - lib/carrierwave/processing/image_science.rb
320
281
  - lib/carrierwave/processing/mini_magick.rb
321
282
  - lib/carrierwave/processing/rmagick.rb
@@ -323,6 +284,7 @@ files:
323
284
  - lib/carrierwave/storage/abstract.rb
324
285
  - lib/carrierwave/storage/cloud_files.rb
325
286
  - lib/carrierwave/storage/file.rb
287
+ - lib/carrierwave/storage/fog.rb
326
288
  - lib/carrierwave/storage/grid_fs.rb
327
289
  - lib/carrierwave/storage/right_s3.rb
328
290
  - lib/carrierwave/storage/s3.rb
@@ -337,7 +299,6 @@ files:
337
299
  - lib/carrierwave/uploader/processing.rb
338
300
  - lib/carrierwave/uploader/proxy.rb
339
301
  - lib/carrierwave/uploader/remove.rb
340
- - lib/carrierwave/uploader/rename.rb
341
302
  - lib/carrierwave/uploader/store.rb
342
303
  - lib/carrierwave/uploader/url.rb
343
304
  - lib/carrierwave/uploader/versions.rb
@@ -347,15 +308,14 @@ files:
347
308
  - lib/carrierwave.rb
348
309
  - lib/generators/templates/uploader.rb
349
310
  - lib/generators/uploader_generator.rb
350
- - README.rdoc
351
- has_rdoc: true
352
- homepage: http://carrierwave.rubyforge.org
311
+ - README.md
312
+ homepage: https://github.com/jnicklas/carrierwave
353
313
  licenses: []
354
314
 
355
315
  post_install_message:
356
316
  rdoc_options:
357
317
  - --main
358
- - README.rdoc
318
+ - README.md
359
319
  require_paths:
360
320
  - lib
361
321
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -370,16 +330,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
370
330
  required_rubygems_version: !ruby/object:Gem::Requirement
371
331
  none: false
372
332
  requirements:
373
- - - ">="
333
+ - - ">"
374
334
  - !ruby/object:Gem::Version
375
- hash: 3
335
+ hash: 25
376
336
  segments:
377
- - 0
378
- version: "0"
337
+ - 1
338
+ - 3
339
+ - 1
340
+ version: 1.3.1
379
341
  requirements: []
380
342
 
381
343
  rubyforge_project: carrierwave
382
- rubygems_version: 1.3.7
344
+ rubygems_version: 1.8.5
383
345
  signing_key:
384
346
  specification_version: 3
385
347
  summary: Ruby file upload library