gnuside-carrierwave-mongoid 0.6.6

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ca43efedbc77776f18febcb4221aaa33c3282ce3
4
+ data.tar.gz: 3bf91aabd888b0cc5a3d64843d9c1a7ce313654e
5
+ SHA512:
6
+ metadata.gz: a3b041ee18c6af1ead1bbaa2a5067427602dd78cd6aef24b191db4d96c54f14ca6d003c114b1199d40a920b16107a8cb6934040f54aabc13572ffb726903551e
7
+ data.tar.gz: 35fdd5f94ff329d1ea3d703e433a522b5b0dad7680cad1981a63e5cce2ab321a539e64998ea66e6260bc32ba62573e831493ef4184153263a66f83264c618485
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ pkg/*
2
+ *.gem
3
+ *.sw*
4
+ .bundle
5
+ spec/public
6
+ gemfiles/*.lock
7
+ log/*
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ glebtv-carrierwave-mongoid
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.0.0-p247
data/.travis.yml ADDED
@@ -0,0 +1,19 @@
1
+ services: mongodb
2
+
3
+ notifications:
4
+ email: false
5
+
6
+ language: ruby
7
+ rvm:
8
+ - 1.9.3
9
+ - 2.0.0
10
+ - jruby-19mode
11
+ - rbx-19mode
12
+
13
+ gemfile:
14
+ - Gemfile
15
+ - gemfiles/carrierwave-0.8.gemfile
16
+ - gemfiles/carrierwave-master.gemfile
17
+ - gemfiles/mongoid-3.0.gemfile
18
+ - gemfiles/mongoid-3.1.gemfile
19
+ - gemfiles/mongoid-4.0.gemfile
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in glebtv-carrierwave-mongoid.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,63 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ glebtv-carrierwave-mongoid (0.6.5)
5
+ carrierwave (>= 0.8.0, < 0.10.0)
6
+ mongoid (>= 3.0, < 5.0)
7
+ mongoid (>= 3.0, < 5.0)
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ activemodel (3.2.15)
13
+ activesupport (= 3.2.15)
14
+ builder (~> 3.0.0)
15
+ activesupport (3.2.15)
16
+ i18n (~> 0.6, >= 0.6.4)
17
+ multi_json (~> 1.0)
18
+ builder (3.0.4)
19
+ carrierwave (0.9.0)
20
+ activemodel (>= 3.2.0)
21
+ activesupport (>= 3.2.0)
22
+ json (>= 1.7)
23
+ coderay (1.0.9)
24
+ diff-lcs (1.2.4)
25
+ i18n (0.6.5)
26
+ json (1.8.1)
27
+ method_source (0.8.2)
28
+ mini_magick (3.6.0)
29
+ subexec (~> 0.2.1)
30
+ mongoid (3.1.5)
31
+ activemodel (~> 3.2)
32
+ moped (~> 1.4)
33
+ origin (~> 1.0)
34
+ tzinfo (~> 0.3.29)
35
+ moped (1.5.1)
36
+ multi_json (1.8.2)
37
+ origin (1.1.0)
38
+ pry (0.9.12.2)
39
+ coderay (~> 1.0.5)
40
+ method_source (~> 0.8)
41
+ slop (~> 3.4)
42
+ rake (10.1.0)
43
+ rspec (2.14.1)
44
+ rspec-core (~> 2.14.0)
45
+ rspec-expectations (~> 2.14.0)
46
+ rspec-mocks (~> 2.14.0)
47
+ rspec-core (2.14.6)
48
+ rspec-expectations (2.14.3)
49
+ diff-lcs (>= 1.1.3, < 2.0)
50
+ rspec-mocks (2.14.4)
51
+ slop (3.4.6)
52
+ subexec (0.2.3)
53
+ tzinfo (0.3.38)
54
+
55
+ PLATFORMS
56
+ ruby
57
+
58
+ DEPENDENCIES
59
+ glebtv-carrierwave-mongoid!
60
+ mini_magick
61
+ pry
62
+ rake (~> 10.0)
63
+ rspec (~> 2.14)
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008-2012 Jonas Nicklas
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,219 @@
1
+ # Fork with OPTIONAL gridfs
2
+
3
+ # CarrierWave for Mongoid
4
+
5
+ See upstream for details: https://github.com/carrierwaveuploader/carrierwave-mongoid
6
+
7
+
8
+ This functionality used to be part of CarrierWave but has since been extracted
9
+ into this gem.
10
+
11
+ ## Installation
12
+
13
+ Install the latest release:
14
+
15
+ gem install carrierwave-mongoid
16
+
17
+ Require it in your code:
18
+
19
+ ```ruby
20
+ require 'carrierwave/mongoid'
21
+ ```
22
+
23
+ Or, in Rails you can add it to your Gemfile:
24
+
25
+ ```ruby
26
+ gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid'
27
+ ```
28
+
29
+ Note: If using Rails 4, you'll need to make sure `mongoid-grid_fs` is `>= 1.9.0`.
30
+ If in doubt, run `bundle update mongoid-grid_fs`
31
+
32
+ ```ruby
33
+ gem 'mongoid-grid_fs', github: 'ahoward/mongoid-grid_fs'
34
+ ```
35
+
36
+ ## Getting Started
37
+
38
+ Follow the "Getting Started" directions in the main
39
+ [Carrierwave repository](https://raw.github.com/carrierwaveuploader/carrierwave/).
40
+
41
+ [Suggested] Add the field to your attr_accessor list for mass assignment
42
+ protection:
43
+
44
+ ```ruby
45
+ attr_accessible :avatar, :avatar_cache
46
+ ```
47
+
48
+ Now you can cache files by assigning them to the attribute; they will
49
+ automatically be stored when the record is saved. Ex:
50
+
51
+ ```ruby
52
+ u = User.new
53
+ u.avatar = File.open('somewhere')
54
+ u.save!
55
+ ```
56
+
57
+ ## Using MongoDB's GridFS store
58
+
59
+ In your uploader, set the storage to `:grid_fs`:
60
+
61
+ ```ruby
62
+ class AvatarUploader < CarrierWave::Uploader::Base
63
+ storage :grid_fs
64
+ end
65
+ ```
66
+
67
+ Bringing it all together, you can also configure Carrierwave to use Mongoid's
68
+ database connection and default all storage to GridFS. That might look something
69
+ like this:
70
+
71
+ ```ruby
72
+ CarrierWave.configure do |config|
73
+ config.storage = :grid_fs
74
+ config.root = Rails.root.join('tmp')
75
+ config.cache_dir = "uploads"
76
+ end
77
+ ```
78
+
79
+ ## Serving uploading files
80
+
81
+ Since GridFS doesn't make the files available via HTTP, you'll need to stream
82
+ them yourself. For example, in Rails, you could use the `send_data` method:
83
+
84
+ ```ruby
85
+ class UsersController < ApplicationController
86
+ def avatar
87
+ content = @user.avatar.read
88
+ if stale?(etag: content, last_modified: @user.updated_at.utc, public: true)
89
+ send_data content, type: @user.avatar.file.content_type, disposition: "inline"
90
+ expires_in 0, public: true
91
+ end
92
+ end
93
+ end
94
+
95
+ # and in routes.rb
96
+ resources :users do
97
+ get :avatar, on: :member
98
+ end
99
+ ```
100
+
101
+ You can optionally tell CarrierWave the URL you will serve your images from,
102
+ allowing it to generate the correct URL, by setting `grid_fs_access_url`:
103
+
104
+ ```ruby
105
+ CarrierWave.configure do |config|
106
+ config.grid_fs_access_url = "/systems/uploads"
107
+ end
108
+ ```
109
+
110
+ ## Route configuration
111
+
112
+ If you follow the instruction to this point, the uploaded images will be
113
+ stored to GridFS, and you are responsible for serving the images a public
114
+ endpoint. If you would like to use the `#url` method on the uploaded file, you
115
+ will need to take some additional steps.
116
+
117
+ The `grid_fs_access_url` configuration option is the prefix for the path of
118
+ the stored file in carrierwave.
119
+
120
+ Let's assume that we have a mounted `avatar` uploader on a `User` model and a
121
+ `GridfsController`. Let's also assume that your uploader definition
122
+ (i.e. `app/uploaders/avatar_uploader.rb`) defines `store_dir` like this:
123
+
124
+ ```ruby
125
+ def store_dir
126
+ "#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
127
+ end
128
+ ```
129
+
130
+ If `grid_fs_access_url` (in `config/initializers/carrierwave.rb`) were:
131
+
132
+ ```ruby
133
+ config.grid_fs_access_url = '/uploads/grid'
134
+ ```
135
+
136
+ You would need to define a route in your `config/routes.rb` like so:
137
+
138
+ ```ruby
139
+ match '/uploads/grid/user/avatar/:id/:filename' => 'gridfs#avatar'
140
+ ```
141
+
142
+ Now, `user.avatar.url` should return an appropriate url path to use in your
143
+ views.
144
+
145
+ ### Different uploaded versions
146
+
147
+ If you need to include different versions (e.g. thumbnails), additional routes
148
+ will help:
149
+
150
+ ```ruby
151
+ match '/uploads/grid/user/avatar/:id/:filename' => 'gridfs#thumb_avatar', constraints: { filename: /thumb.*/ }
152
+ ```
153
+
154
+ ## Version differences
155
+
156
+ | Version | Notes |
157
+ |----------|---------------------------------------------------------------------------------|
158
+ | ~> 0.6.0 | ([compare][compare-0.6], [dependencies][deps-0.6]) Mongoid 3 & 4, bug fixes |
159
+ | ~> 0.5.0 | ([compare][compare-0.5], [dependencies][deps-0.5]) Mongoid::Paranoia support |
160
+ | ~> 0.4.0 | ([compare][compare-0.4], [dependencies][deps-0.4]) Carrierwave bump |
161
+ | ~> 0.3.0 | ([compare][compare-0.3], [dependencies][deps-0.3]) Mongoid >= 3.0 |
162
+ | ~> 0.2.0 | ([compare][compare-0.2], [dependencies][deps-0.2]) Rails >= 3.2, Mongoid ~> 2.0 |
163
+ | ~> 0.1.0 | ([compare][compare-0.1], [dependencies][deps-0.1]) Rails <= 3.1 |
164
+
165
+ [compare-0.6]: https://github.com/carrierwaveuploader/carrierwave-mongoid/compare/v0.5.0...v0.6.3
166
+ [compare-0.5]: https://github.com/carrierwaveuploader/carrierwave-mongoid/compare/v0.4.0...v0.5.0
167
+ [compare-0.4]: https://github.com/carrierwaveuploader/carrierwave-mongoid/compare/v0.3.1...v0.4.0
168
+ [compare-0.3]: https://github.com/carrierwaveuploader/carrierwave-mongoid/compare/v0.2.1...v0.3.1
169
+ [compare-0.2]: https://github.com/carrierwaveuploader/carrierwave-mongoid/compare/v0.1.7...v0.2.2
170
+ [compare-0.1]: https://github.com/carrierwaveuploader/carrierwave-mongoid/compare/v0.1.1...v0.1.7
171
+
172
+ [deps-0.6]: https://rubygems.org/gems/carrierwave-mongoid/versions/0.6.3
173
+ [deps-0.5]: https://rubygems.org/gems/carrierwave-mongoid/versions/0.5.0
174
+ [deps-0.4]: https://rubygems.org/gems/carrierwave-mongoid/versions/0.4.0
175
+ [deps-0.3]: https://rubygems.org/gems/carrierwave-mongoid/versions/0.3.1
176
+ [deps-0.2]: https://rubygems.org/gems/carrierwave-mongoid/versions/0.2.2
177
+ [deps-0.1]: https://rubygems.org/gems/carrierwave-mongoid/versions/0.1.7
178
+
179
+ ### Changes from earlier versions of CarrierWave <= 0.5.6
180
+
181
+ CarrierWave used to have built-in Mongoid support. This gem replaces that
182
+ support and only supports Mongoid ~> 2.1
183
+
184
+ You can use `upload_identifier` to retrieve the original name of the uploaded file.
185
+
186
+ In the earlier version, the mount_uploader-method for mongoid had been defined
187
+ in lib/carrierwave/orm/mongoid. This code has been moved to
188
+ carrierwave/mongoid. If you update from earlier versions, don't forget to adjust
189
+ your require accordingly in your carrierwave-initializer.
190
+
191
+ The default mount column used to be the name of the upload column plus
192
+ `_filename`. Now it is simply the name of the column. Most of the time, the
193
+ column was called `upload`, so it would have been mounted to `upload_filename`.
194
+ If you'd like to avoid a database migration, simply use the `:mount_on` option
195
+ to specify the field name explicitly. Therefore, you only have to add a
196
+ `_filename` to your column name. For example, if your column is called
197
+ `:upload`:
198
+
199
+ ```ruby
200
+ class Dokument
201
+ mount_uploader :upload, DokumentUploader, mount_on: :upload_filename
202
+ end
203
+ ```
204
+
205
+ ## Known issues and limitations
206
+
207
+ Note that files mounted in embedded documents aren't saved when parent documents
208
+ are saved. By default, mongoid does not cascade callbacks on embedded
209
+ documents. In order to save the attached files on embedded documents, you must
210
+ either explicitly call save on the embedded documents or you must configure the
211
+ embedded association to cascade the callbacks automatically. For example:
212
+
213
+ ```ruby
214
+ class User
215
+ embeds_many :pictures, cascade_callbacks: true
216
+ end
217
+ ```
218
+
219
+ You can read more about this [here](https://github.com/carrierwaveuploader/carrierwave/issues#issue/81)
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require 'bundler/setup'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+
6
+ desc "Run all examples"
7
+ RSpec::Core::RakeTask.new(:spec) do |t|
8
+ #t.rspec_path = 'bin/rspec'
9
+ t.rspec_opts = %w[--color]
10
+ end
11
+
12
+ task :default => :spec
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "carrierwave", "~> 0.8.0"
4
+
5
+ gemspec path: "../"
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "carrierwave", github: "carrierwaveuploader/carrierwave", branch: "master"
4
+
5
+ gemspec path: "../"
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "mongoid-grid_fs", github: "ahoward/mongoid-grid_fs", branch: "master"
4
+ gem "mongoid", github: "mongoid/mongoid", branch: "master"
5
+
6
+ gemspec path: "../"
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "carrierwave/mongoid/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "gnuside-carrierwave-mongoid"
7
+ s.version = Carrierwave::Mongoid::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["GlebTv", "Jonas Nicklas", "Trevor Turk", "Roland Laurès"]
10
+ s.email = ["jonas.nicklas@gmail.com", "roland.laures@gnuside.com"]
11
+ s.homepage = "https://github.com/Gnuside/carrierwave-mongoid"
12
+ s.summary = "This fork is made to be compatible with rails 4"
13
+ s.description = "This fork is made to be compatible with rails 4"
14
+ s.license = "MIT"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_dependency "mongoid", [">= 3.0", "< 5.0"]
22
+ s.add_dependency "carrierwave", [">= 0.8.0", "< 0.10.0"]
23
+ s.add_dependency "mongoid", [">= 4.0.0"]
24
+ s.add_dependency "mongoid-grid_fs", [">= 1.9"]
25
+ s.add_development_dependency "rspec", ["~> 2.14"]
26
+ s.add_development_dependency "rake", ["~> 10.0"]
27
+ s.add_development_dependency "mini_magick"
28
+ s.add_development_dependency "pry"
29
+ end
@@ -0,0 +1,118 @@
1
+ # encoding: utf-8
2
+
3
+ require 'mongoid'
4
+ require 'carrierwave'
5
+ require 'carrierwave/validations/active_model'
6
+
7
+ module CarrierWave
8
+ module Mongoid
9
+ include CarrierWave::Mount
10
+ ##
11
+ # See +CarrierWave::Mount#mount_uploader+ for documentation
12
+ #
13
+ def mount_uploader(column, uploader=nil, options={}, &block)
14
+ field_name = options[:mount_on] || column
15
+ unless fields.keys.include?(field_name.to_s) || fields.values.map { |f| f.options[:as].to_s }.include?(field_name.to_s)
16
+ field field_name
17
+ end
18
+
19
+ super
20
+
21
+ alias_method :read_uploader, :read_attribute
22
+ alias_method :write_uploader, :write_attribute
23
+ public :read_uploader
24
+ public :write_uploader
25
+
26
+ include CarrierWave::Validations::ActiveModel
27
+
28
+ validates_integrity_of column if uploader_option(column.to_sym, :validate_integrity)
29
+ validates_processing_of column if uploader_option(column.to_sym, :validate_processing)
30
+
31
+ after_save :"store_#{column}!"
32
+ before_save :"write_#{column}_identifier"
33
+ after_destroy :"remove_#{column}!"
34
+ before_update :"store_previous_model_for_#{column}"
35
+ after_save :"remove_previously_stored_#{column}"
36
+
37
+ class_eval <<-RUBY, __FILE__, __LINE__+1
38
+ def #{column}=(new_file)
39
+ column = _mounter(:#{column}).serialization_column
40
+
41
+ # mongoid won't upload a new file if there was no file previously.
42
+ write_uploader(column, '_old_') if self.persisted? && read_uploader(column).nil?
43
+
44
+ send(:"\#{column}_will_change!")
45
+ super
46
+ end
47
+
48
+ def remove_#{column}=(arg)
49
+ column = _mounter(:#{column}).serialization_column
50
+ send(:"\#{column}_will_change!")
51
+ super
52
+ end
53
+
54
+ def remove_#{column}!
55
+ super unless respond_to?(:paranoid?) && paranoid? && flagged_for_destroy?
56
+ end
57
+
58
+ # Overrides Mongoid's default dirty behavior to instead work more like
59
+ # ActiveRecord's. Mongoid doesn't deem an attribute as changed unless
60
+ # the new value is different than the original. Given that CarrierWave
61
+ # caches files before save, it's necessary to know that there's a
62
+ # pending change even though the attribute value itself might not
63
+ # reflect that yet.
64
+ def #{column}_changed?
65
+ changed_attributes.has_key?("#{column}")
66
+ end
67
+
68
+ # The default Mongoid attribute_will_change! method is not enough
69
+ # when we want to upload a new file in an existing embedded document.
70
+ # The custom version of that method forces the callbacks to be
71
+ # ran and so does the upload.
72
+ def #{column}_will_change!
73
+ changed_attributes["#{column}"] = '_new_'
74
+ end
75
+
76
+ def find_previous_model_for_#{column}
77
+ if self.embedded?
78
+ ancestors = [[ self.metadata.key, self._parent ]].tap { |x| x.unshift([ x.first.last.metadata.key, x.first.last._parent ]) while x.first.last.embedded? }
79
+ first_parent = ancestors.first.last
80
+ reloaded_parent = first_parent.class.unscoped.find(first_parent.to_key.first)
81
+ association = ancestors.inject(reloaded_parent) { |parent,(key,ancestor)| (parent.is_a?(Array) ? parent.find(ancestor.to_key.first) : parent).send(key) }
82
+ association.is_a?(Array) ? association.find(to_key.first) : association
83
+ else
84
+ self.class.unscoped.for_ids(to_key).first
85
+ end
86
+ end
87
+
88
+ def serializable_hash(options=nil)
89
+ hash = {}
90
+
91
+ except = options && options[:except] && Array.wrap(options[:except]).map(&:to_s)
92
+ only = options && options[:only] && Array.wrap(options[:only]).map(&:to_s)
93
+
94
+ self.class.uploaders.each do |column, uploader|
95
+ if (!only && !except) || (only && only.include?(column.to_s)) || (except && !except.include?(column.to_s))
96
+ hash[column.to_s] = _mounter(column.to_sym).uploader.serializable_hash
97
+ end
98
+ end
99
+ super(options).merge(hash)
100
+ end
101
+ RUBY
102
+ end
103
+ end # Mongoid
104
+ end # CarrierWave
105
+
106
+ if defined?(Mongoid::GridFs)
107
+ CarrierWave::Storage.autoload :GridFS, 'carrierwave/storage/grid_fs'
108
+
109
+ class CarrierWave::Uploader::Base
110
+ add_config :grid_fs_access_url
111
+
112
+ configure do |config|
113
+ config.storage_engines[:grid_fs] = "CarrierWave::Storage::GridFS"
114
+ end
115
+ end
116
+ end
117
+
118
+ Mongoid::Document::ClassMethods.send(:include, CarrierWave::Mongoid)