diff options
| author | hukl <contact@smyck.org> | 2009-04-24 11:43:08 +0200 |
|---|---|---|
| committer | hukl <contact@smyck.org> | 2009-04-25 14:55:27 +0200 |
| commit | cf1b60e0cfa7d1a8f4a80d686649cc12e73a634e (patch) | |
| tree | b68bd845d290ce968892c4532bcff52083925834 /vendor/plugins/paperclip/README.rdoc | |
| parent | b2b78c06074046bd73cc3408a29386a976f0469c (diff) | |
Integrated basic Asset upload functionality. You can upload files now and use their url in pages.
Diffstat (limited to 'vendor/plugins/paperclip/README.rdoc')
| -rw-r--r-- | vendor/plugins/paperclip/README.rdoc | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/vendor/plugins/paperclip/README.rdoc b/vendor/plugins/paperclip/README.rdoc new file mode 100644 index 0000000..85fcf4b --- /dev/null +++ b/vendor/plugins/paperclip/README.rdoc | |||
| @@ -0,0 +1,172 @@ | |||
| 1 | =Paperclip | ||
| 2 | |||
| 3 | Paperclip is intended as an easy file attachment library for ActiveRecord. The | ||
| 4 | intent behind it was to keep setup as easy as possible and to treat files as | ||
| 5 | much like other attributes as possible. This means they aren't saved to their | ||
| 6 | final locations on disk, nor are they deleted if set to nil, until | ||
| 7 | ActiveRecord::Base#save is called. It manages validations based on size and | ||
| 8 | presence, if required. It can transform its assigned image into thumbnails if | ||
| 9 | needed, and the prerequisites are as simple as installing ImageMagick (which, | ||
| 10 | for most modern Unix-based systems, is as easy as installing the right | ||
| 11 | packages). Attached files are saved to the filesystem and referenced in the | ||
| 12 | browser by an easily understandable specification, which has sensible and | ||
| 13 | useful defaults. | ||
| 14 | |||
| 15 | See the documentation for +has_attached_file+ in Paperclip::ClassMethods for | ||
| 16 | more detailed options. | ||
| 17 | |||
| 18 | ==Quick Start | ||
| 19 | |||
| 20 | In your model: | ||
| 21 | |||
| 22 | class User < ActiveRecord::Base | ||
| 23 | has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" } | ||
| 24 | end | ||
| 25 | |||
| 26 | In your migrations: | ||
| 27 | |||
| 28 | class AddAvatarColumnsToUser < ActiveRecord::Migration | ||
| 29 | def self.up | ||
| 30 | add_column :users, :avatar_file_name, :string | ||
| 31 | add_column :users, :avatar_content_type, :string | ||
| 32 | add_column :users, :avatar_file_size, :integer | ||
| 33 | add_column :users, :avatar_updated_at, :datetime | ||
| 34 | end | ||
| 35 | |||
| 36 | def self.down | ||
| 37 | remove_column :users, :avatar_file_name | ||
| 38 | remove_column :users, :avatar_content_type | ||
| 39 | remove_column :users, :avatar_file_size | ||
| 40 | remove_column :users, :avatar_updated_at | ||
| 41 | end | ||
| 42 | end | ||
| 43 | |||
| 44 | In your edit and new views: | ||
| 45 | |||
| 46 | <% form_for :user, @user, :url => user_path, :html => { :multipart => true } do |form| %> | ||
| 47 | <%= form.file_field :avatar %> | ||
| 48 | <% end %> | ||
| 49 | |||
| 50 | In your controller: | ||
| 51 | |||
| 52 | def create | ||
| 53 | @user = User.create( params[:user] ) | ||
| 54 | end | ||
| 55 | |||
| 56 | In your show view: | ||
| 57 | |||
| 58 | <%= image_tag @user.avatar.url %> | ||
| 59 | <%= image_tag @user.avatar.url(:medium) %> | ||
| 60 | <%= image_tag @user.avatar.url(:thumb) %> | ||
| 61 | |||
| 62 | ==Usage | ||
| 63 | |||
| 64 | The basics of paperclip are quite simple: Declare that your model has an | ||
| 65 | attachment with the has_attached_file method, and give it a name. Paperclip | ||
| 66 | will wrap up up to four attributes (all prefixed with that attachment's name, | ||
| 67 | so you can have multiple attachments per model if you wish) and give the a | ||
| 68 | friendly front end. The attributes are <attachment>_file_name, | ||
| 69 | <attachment>_file_size, <attachment>_content_type, and <attachment>_updated_at. | ||
| 70 | Only <attachment>_file_name is required for paperclip to operate. More | ||
| 71 | information about the options to has_attached_file is available in the | ||
| 72 | documentation of Paperclip::ClassMethods. | ||
| 73 | |||
| 74 | Attachments can be validated with Paperclip's validation methods, | ||
| 75 | validates_attachment_presence, validates_attachment_content_type, and | ||
| 76 | validates_attachment_size. | ||
| 77 | |||
| 78 | ==Storage | ||
| 79 | |||
| 80 | The files that are assigned as attachments are, by default, placed in the | ||
| 81 | directory specified by the :path option to has_attached_file. By default, this | ||
| 82 | location is | ||
| 83 | ":rails_root/public/system/:attachment/:id/:style/:basename.:extension". This | ||
| 84 | location was chosen because on standard Capistrano deployments, the | ||
| 85 | public/system directory is symlinked to the app's shared directory, meaning it | ||
| 86 | will survive between deployments. For example, using that :path, you may have a | ||
| 87 | file at | ||
| 88 | |||
| 89 | /data/myapp/releases/20081229172410/public/system/avatars/13/small/my_pic.png | ||
| 90 | |||
| 91 | NOTE: This is a change from previous versions of Paperclip, but is overall a | ||
| 92 | safer choice for the defaul file store. | ||
| 93 | |||
| 94 | You may also choose to store your files using Amazon's S3 service. You can find | ||
| 95 | more information about S3 storage at the description for | ||
| 96 | Paperclip::Storage::S3. | ||
| 97 | |||
| 98 | Files on the local filesystem (and in the Rails app's public directory) will be | ||
| 99 | available to the internet at large. If you require access control, it's | ||
| 100 | possible to place your files in a different location. You will need to change | ||
| 101 | both the :path and :url options in order to make sure the files are unavailable | ||
| 102 | to the public. Both :path and :url allow the same set of interpolated | ||
| 103 | variables. | ||
| 104 | |||
| 105 | ==Post Processing | ||
| 106 | |||
| 107 | Paperclip supports an extendible selection of post-processors. When you define | ||
| 108 | a set of styles for an attachment, by default it is expected that those | ||
| 109 | "styles" are actually "thumbnails". However, you can do more than just | ||
| 110 | thumbnail images. By defining a subclass of Paperclip::Processor, you can | ||
| 111 | perform any processing you want on the files that are attached. Any file in | ||
| 112 | your Rails app's lib/paperclip_processors directory is automatically loaded by | ||
| 113 | paperclip, allowing you to easily define custom processors. You can specify a | ||
| 114 | processor with the :processors option to has_attached_file: | ||
| 115 | |||
| 116 | has_attached_file :scan, :styles => { :text => { :quality => :better } }, | ||
| 117 | :processors => [:ocr] | ||
| 118 | |||
| 119 | This would load the hypothetical class Paperclip::Ocr, which would have the | ||
| 120 | hash "{ :quality => :better }" passed to it along with the uploaded file. For | ||
| 121 | more information about defining processors, see Paperclip::Processor. | ||
| 122 | |||
| 123 | The default processor is Paperclip::Thumbnail. For backwards compatability | ||
| 124 | reasons, you can pass a single geometry string or an array containing a | ||
| 125 | geometry and a format, which the file will be converted to, like so: | ||
| 126 | |||
| 127 | has_attached_file :avatar, :styles => { :thumb => ["32x32#", :png] } | ||
| 128 | |||
| 129 | This will convert the "thumb" style to a 32x32 square in png format, regardless | ||
| 130 | of what was uploaded. If the format is not specified, it is kept the same (i.e. | ||
| 131 | jpgs will remain jpgs). | ||
| 132 | |||
| 133 | Multiple processors can be specified, and they will be invoked in the order | ||
| 134 | they are defined in the :processors array. Each successive processor will | ||
| 135 | be given the result of the previous processor's execution. All processors will | ||
| 136 | receive the same parameters, which are what you define in the :styles hash. | ||
| 137 | For example, assuming we had this definition: | ||
| 138 | |||
| 139 | has_attached_file :scan, :styles => { :text => { :quality => :better } }, | ||
| 140 | :processors => [:rotator, :ocr] | ||
| 141 | |||
| 142 | then both the :rotator processor and the :ocr processor would receive the | ||
| 143 | options "{ :quality => :better }". This parameter may not mean anything to one | ||
| 144 | or more or the processors, and they are free to ignore it. | ||
| 145 | |||
| 146 | ==Events | ||
| 147 | |||
| 148 | Before and after the Post Processing step, Paperclip calls back to the model | ||
| 149 | with a few callbacks, allowing the model to change or cancel the processing | ||
| 150 | step. The callbacks are "before_post_process" and "after_post_process" (which | ||
| 151 | are called before and after the processing of each attachment), and the | ||
| 152 | attachment-specific "before_<attachment>_post_process" and | ||
| 153 | "after_<attachment>_post_process". The callbacks are intended to be as close to | ||
| 154 | normal ActiveRecord callbacks as possible, so if you return false (specifically | ||
| 155 | - returning nil is not the same) in a before_ filter, the post processing step | ||
| 156 | will halt. Returning false in an after_ filter will not halt anything, but you | ||
| 157 | can access the model and the attachment if necessary. | ||
| 158 | |||
| 159 | NOTE: Post processing will not even *start* if the attachment is not valid | ||
| 160 | according to the validations. Your callbacks (and processors) will only be | ||
| 161 | called with valid attachments. | ||
| 162 | |||
| 163 | ==Contributing | ||
| 164 | |||
| 165 | If you'd like to contribute a feature or bugfix: Thanks! To make sure your | ||
| 166 | fix/feature has a high chance of being included, please read the following | ||
| 167 | guidelines: | ||
| 168 | |||
| 169 | 1. Ask on the mailing list, or post a ticket in Lighthouse. | ||
| 170 | 2. Make sure there are tests! We will not accept any patch that is not tested. | ||
| 171 | It's a rare time when explicit tests aren't needed. If you have questions | ||
| 172 | about writing tests for paperclip, please ask the mailing list. | ||
