Papermill
Asset management made easy.
Install the gem!
$ gem sources -a http://gems.github.com
$ sudo gem install BBenezech-papermill
Try the demo!
$ sudo gem install sqlite3-ruby
$ rails -m http://gist.github.com/177714.txt papermill-example
Papermill comes in 2 flavors:
Generic catch-all declaration
papermill {my_option_hash} # in your papermilled assetable model
assets_upload(:my_key, {optional_option_hash}) # form helper call
@assetable.papermill_assets(:key => :my_key) # data access in your view
Association specific declaration
papermill :my_association, {my_option_hash} # in your papermilled assetable model
assets_upload(:my_association, {optional_option_hash}) # form helper call
@assetable.my_association # data access in your view
In both case, you can specify a PapermillAsset subclass to use with :class_name => MyPapermillAssetSubclass in the option hash You can have a catch-all declaration and as many specific association as you want in your model (as long as they use different keys)
See papermill_module.rb for the complete list of options.
Installation
You’ll need something like this in your environment.rb:
config.gem 'rsl-stringex', :lib => 'stringex'
config.gem 'paperclip'
config.gem 'mime-types', :lib => 'mime/types'
config.gem 'ryanb-acts-as-list', :lib => 'acts_as_list'
config.gem 'BBenezech-papermill', :lib => 'papermill'
Then you can generate a migration and copy a couple of static assets:
$ ./script/generate papermill PapermillMigration
# will generate a migration named PapermillMigration and copy a couple of static assets
$ rake db:migrate
In your assetable model:
# You can set a catch-all papermill association :
papermill {:class_name => Asset}
# or create an association for the specific :my_gallery key
papermill :my_gallery, {
:class_name => GalleryAsset,
:thumbnail => {
:width => 90,
:height => 30
}
}
In your layout:
<%= papermill_stylesheet_tag %>
<%= papermill_javascript_tag :with_jquery => "no_conflict" %>
# you won't need :with_jquery if you use it already, obviously.
In your edit form:
f.images_upload(:my_gallery) # use specific papermill :my_gallery declaration
f.assets_upload(:my_assets) # use catch-all
f.asset_upload(:my_other_asset) # use catch-all
Access them with:
@assetable.my_gallery.each{ |image| image.url("100x100") }
@assetable.papermill_assets(:key => :my_assets).each{ |asset| asset.url }
@assetable.papermill_assets(:key => :my_other_asset).first.url
Also see gist.github.com/177714.txt for more precises installation steps. Have a look at the API here rdoc.info/projects/BBenezech/papermill
Translations:
Papermill is fully I18n-able. Copy config/locales/papermill.yml to your root config/locale folder to modify any wording in a any locale.
Word of caution:
Beta. Wait for gem 1.0.0 for the production ready thing. This is xNIX only (system(“rm …”)). Rails 2.3
Copyright © 2009 Benoit Bénézech, released under the MIT license