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