mongoid-paperclip 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ .DS_Store
2
+ mongoid-paperclip-*.gem
data/README.md ADDED
@@ -0,0 +1,73 @@
1
+ Mongoid::Paperclip - Making Paperclip play nice with Mongoid ORM
2
+ ================================================================
3
+
4
+ As the title suggests, using this gem you will be able to use [Paperclip](https://github.com/thoughtbot/paperclip) with [Mongoid](http://mongoid.org/).
5
+
6
+ This is actually **easier** and **faster** to set up than when using the ActiveRecord ORM.
7
+
8
+ This example assumes you are using **Ruby on Rails 3** and **Bundler**. However it doesn't require either.
9
+
10
+
11
+ Setting it up in a few seconds
12
+ ------------------------------
13
+
14
+ First require the **Paperclip** gem as you normally would, followed by the **Mongoid::Paperclip** extension. Additionally if you are working with Amazon S3 you will want to add the AWS::S3 gem to your Gemfile as well.
15
+
16
+ **Rails.root/Gemfile**
17
+
18
+ gem "paperclip"
19
+ gem "mongoid-paperclip", :require => "mongoid_paperclip"
20
+ gem "aws-s3", :require => "aws/s3"
21
+
22
+ Next let's assume we have a User model and we want to allow our users to upload an avatar.
23
+
24
+ **Rails.root/app/models/user.rb**
25
+
26
+ class User
27
+ include Mongoid::Document
28
+ include Mongoid::Paperclip
29
+
30
+ has_attached_file :avatar
31
+ end
32
+
33
+
34
+ And there you go!
35
+ -----------------
36
+
37
+ As you can see you use it in practically the same as when you use vanilla Paperclip. However, since we're using Mongoid and not ActiveRecord, we do not have a schema or any migrations. So with **Mongoid::Paperclip** when you invoke the `has_attached_file :avatar` it will create the necessary Mongoid **fields** for the specified attribute (`:avatar` in this case).
38
+
39
+
40
+ A more complex example
41
+ ----------------------
42
+
43
+ Just like vanilla Paperclip, Mongoid::Paperclip takes a second argument (hash of options) for the `has_attached_file` method, so you can do more complex things such as in the following example.
44
+
45
+ class User
46
+ include Mongoid::Document
47
+ embeds_many :pictures
48
+ end
49
+
50
+ class Picture
51
+ include Mongoid::Document
52
+ include Mongoid::Paperclip
53
+
54
+ embedded_in :user, :inverse_of => :pictures
55
+
56
+ has_attached_file :attachment,
57
+ :path => ':attachment/:id/:style.:extension',
58
+ :storage => :s3,
59
+ :url => ':s3_alias_url',
60
+ :s3_host_alias => 'something.cloudfront.net',
61
+ :s3_credentials => File.join(Rails.root, 'config', 's3.yml'),
62
+ :styles => {
63
+ :original => ['1920x1680>', :jpg],
64
+ :small => ['100x100#', :jpg],
65
+ :medium => ['250x250', :jpg],
66
+ :large => ['500x500>', :jpg]
67
+ },
68
+ :convert_options => { :all => '-background white -flatten +matte' }
69
+ end
70
+
71
+ Quite a lot of people have been looking for a solution to use [Paperclip](https://github.com/thoughtbot/paperclip) with [Mongoid](http://mongoid.org/) so I hope this helps!
72
+
73
+ © Copyright [Michael van Rooijen](http://michaelvanrooijen.com/)
@@ -0,0 +1,79 @@
1
+ ##
2
+ # The logger is set to the Active Record logger by Paperclip itself.
3
+ # Because of this, we set the logger to false as "default" so that it doesn't raise
4
+ # an "uninitialized constant" exception.
5
+ #
6
+ # You can manually change loggers by adding for example an initializer and configuring the logger, like so:
7
+ #
8
+ # Paperclip.options[:log] = MyLogger.log
9
+ #
10
+ Paperclip.options[:log] = false
11
+
12
+ ##
13
+ # If Ruby on Rails is defined and the logger method exists, the Paperclip logger
14
+ # will be set to the Rails logger by default. You may overwrite the logger by re-defining the
15
+ # logger in for example an initializer file, like so:
16
+ #
17
+ # Paperclip.options[:log] = MyLogger.log
18
+ #
19
+ if defined?(Rails)
20
+ if Rails.respond_to?(:logger)
21
+ Paperclip.options[:log] = Rails.logger
22
+ end
23
+ end
24
+
25
+ ##
26
+ # The Mongoid::Paperclip extension
27
+ # Makes Paperclip play nice with the Mongoid ORM
28
+ #
29
+ # Example:
30
+ #
31
+ # class User
32
+ # include Mongoid::Document
33
+ # include Mongoid::Paperclip
34
+ #
35
+ # has_attached_file :avatar
36
+ # end
37
+ #
38
+ # The above example is all you need to do. This will load the Paperclip library into the User model
39
+ # and add the "has_attached_file" class method. Provide this method with the same values as you would
40
+ # when using "vanilla Paperclip". The first parameter is a symbol [:field] and the second parameter is a hash of options [options = {}].
41
+ #
42
+ # Unlike Paperclip for ActiveRecord, since MongoDB does not use "schema" or "migrations", Mongoid::Paperclip automatically adds the neccesary "fields"
43
+ # to your Model (MongoDB collection) when you invoke the "#has_attached_file" method. When you invoke "has_attached_file :avatar" it will
44
+ # automatially add the following fields:
45
+ #
46
+ # field :avatar_file_name, :type => String
47
+ # field :avatar_content_type, :type => String
48
+ # field :avatar_file_size, :type => Integer
49
+ # field :avatar_updated_at, :type => DateTime
50
+ #
51
+ module Mongoid
52
+ module Paperclip
53
+
54
+ ##
55
+ # Extends the model with the defined Class methods
56
+ def self.included(base)
57
+ base.extend(ClassMethods)
58
+ end
59
+
60
+ module ClassMethods
61
+
62
+ ##
63
+ # Adds Mongoid::Paperclip's "#has_attached_file" class method to the model
64
+ # which includes Paperclip and Paperclip::Glue in to the model. Additionally
65
+ # it'll also add the required fields for Paperclip since MongoDB is schemaless and doesn't
66
+ # have migrations.
67
+ def has_attached_file(field, options = {})
68
+ include ::Paperclip
69
+ include ::Paperclip::Glue
70
+ has_attached_file(field, options)
71
+ field(:"#{field}_file_name", :type => String)
72
+ field(:"#{field}_content_type", :type => String)
73
+ field(:"#{field}_file_size", :type => Integer)
74
+ field(:"#{field}_updated_at", :type => DateTime)
75
+ end
76
+ end
77
+
78
+ end
79
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ Gem::Specification.new do |gem|
4
+
5
+ gem.name = 'mongoid-paperclip'
6
+ gem.version = '0.0.1'
7
+ gem.platform = Gem::Platform::RUBY
8
+ gem.authors = 'Michael van Rooijen'
9
+ gem.email = 'meskyanichi@gmail.com'
10
+ gem.homepage = 'https://github.com/meskyanichi/mongoid-paperclip'
11
+ gem.summary = 'Mongoid::Paperclip enables you to use Paperclip with the Mongoid ORM for MongoDB.'
12
+ gem.description = 'Mongoid::Paperclip enables you to use Paperclip with the Mongoid ORM for MongoDB.'
13
+
14
+ gem.files = %x[git ls-files].split("\n")
15
+ gem.test_files = %x[git ls-files -- {spec}/*].split("\n")
16
+ gem.require_path = 'lib'
17
+
18
+ gem.add_dependency 'paperclip', ['~> 2.3.6']
19
+
20
+ end
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mongoid-paperclip
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Michael van Rooijen
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-12-10 00:00:00 +01:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: paperclip
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 2
30
+ - 3
31
+ - 6
32
+ version: 2.3.6
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ description: Mongoid::Paperclip enables you to use Paperclip with the Mongoid ORM for MongoDB.
36
+ email: meskyanichi@gmail.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - .gitignore
45
+ - README.md
46
+ - lib/mongoid_paperclip.rb
47
+ - mongoid_paperclip.gemspec
48
+ has_rdoc: true
49
+ homepage: https://github.com/meskyanichi/mongoid-paperclip
50
+ licenses: []
51
+
52
+ post_install_message:
53
+ rdoc_options: []
54
+
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ segments:
63
+ - 0
64
+ version: "0"
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ requirements: []
74
+
75
+ rubyforge_project:
76
+ rubygems_version: 1.3.7
77
+ signing_key:
78
+ specification_version: 3
79
+ summary: Mongoid::Paperclip enables you to use Paperclip with the Mongoid ORM for MongoDB.
80
+ test_files: []
81
+