Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ksylvest/attached
A file attachment tool that lets users upload to the cloud
https://github.com/ksylvest/attached
Last synced: about 2 months ago
JSON representation
A file attachment tool that lets users upload to the cloud
- Host: GitHub
- URL: https://github.com/ksylvest/attached
- Owner: ksylvest
- License: mit
- Created: 2010-11-30T02:15:44.000Z (almost 14 years ago)
- Default Branch: master
- Last Pushed: 2014-12-04T07:49:59.000Z (almost 10 years ago)
- Last Synced: 2024-07-14T21:48:40.803Z (2 months ago)
- Language: Ruby
- Homepage: http://ksylvest.github.com/attached/
- Size: 7.31 MB
- Stars: 22
- Watchers: 6
- Forks: 9
- Open Issues: 0
-
Metadata Files:
- Readme: README.rdoc
- License: LICENSE
Awesome Lists containing this project
README
= Attached
Attached is a Ruby on Rails file attachment tool that lets users upload to the cloud. The gem supports AWS, Google and Rackspace for storage networks by default. It is influenced (and copied) from Paperclip and makes heavy use of the incredibly awesome Fog library.
== Requirements
The gem is tested with:
* Ruby on Rails 4.1.6
* Ruby 2.1.6
* Ruby 2.0.0
* Ruby 1.9.3
* JRuby== Installation
gem install attached
== Optional
brew install imagemagick
brew install lame== Examples
Migration:
rails g model video name:string encoding:attachment
class CreateVideo < ActiveRecord::Migration
def self.up
create_table :videos do |t|
t.string :name
t.attachment :encodingt.timestamps
end
enddef self.down
drop_table :videos
end
endModel:
class Video < ActiveRecord::Base
has_attached :encoding, styles: {
webm: { extension: '.webm' },
mp4: { extension: '.mp4' },
ogv: { extension: '.ogv' },
}
after_save do
remote.encode(self.encoding.url)
end
end
Form:<%= form_for @video, html: { multipart: true } do |form| %>
<%= form.file_field :encoding %>
<% end %>
View:
== Advanced=== Validations
# app/models/person.rb
validates_attached_presence :file
validates_attached_size :file, in: 2.kilobytes..2.megabytes
validates_attached_extension :file, in: %w(jpe jpg jpeg png)==== Storage
# app/models/user.rb
has_attached :file, medium: :aws, credentials: "#{Rails.root}/config/aws.yml"
# app/models/user.rb
has_attached :file, medium: :google, credentials: "#{Rails.root}/config/google.yml"
# app/models/user.rb
has_attached :file, medium: :rackspace, credentials: "#{Rails.root}/config/rackspace.yml"
# config/initializers/attached.rb
Attached::Attachment.options[:medium] = :aws
Attached::Attachment.options[:credentials] = "#{Rails.root}/config/aws.yml"
# config/initializers/attached.rb
Attached::Attachment.options[:medium] = :google
Attached::Attachment.options[:credentials] = "#{Rails.root}/config/google.yml"
# config/initializers/attached.rb
Attached::Attachment.options[:medium] = :rackspace
Attached::Attachment.options[:credentials] = "#{Rails.root}/config/rackspace.yml"
=== Processors# app/models/image.rb
has_attached :file, processor: :image, styles: {
small: { size: '200x200>', extension: '.jpg', quality: 90 },
large: { size: '400x400<', extension: '.jpg', quality: 90 },
default: { size: '300x300#', extension: '.jpg', quality: 90 },
}
# app/models/image.rb
has_attached :file, processor: :image, styles: {
small: { operation: :decrease, width: 200, height: 200, extension: '.jpg', quality: 90 },
large: { operation: :increase, width: 400, height: 400, extension: '.jpg', quality: 90 },
default: { operation: :resize, width: 300, height: 300, extension: '.jpg', quality: 90 },
}
# app/models/audio.rb
has_attached :file, processor: :audio, styles: {
full: { preset: '320kbps', extension: '.wav' },
large: { preset: '256kbps', extension: '.wav' },
small: { preset: '128kbps', extension: '.wav' },
}
# app/models/audio.rb
has_attached :file, processor: :audio, styles: {
full: { preset: 'insane', extension: '.wav' },
large: { preset: 'extreme', extension: '.wav' },
small: { preset: 'medium', extension: '.wav' },
}
=== Strategies# app/models/sample.rb
has_attached :file, processor: ..., styles: { ... }, strategy: :delay
has_attached :file, processor: ..., styles: { ... }, strategy: :cache
=== Reprocessingrake attached:process[Image,file]
rake attached:process[Audio,file]
=== Aliases# app/initializer/attached.rb
Attached::Attachment.options[:alias] = "https://storage.ksylvest.com/"# app/initializer/attached.rb
Attached::Attachment.options[:aliases] = %w(
https://a.storage.ksylvest.com/
https://b.storage.ksylvest.com/
https://c.storage.ksylvest.com/
https://d.storage.ksylvest.com/
)=== Metadata
# app/initializers/attached.rb
Attached::Attachment.options[:metadata] = { 'Cache-Control' => 'max-age=3153600' }== Status
{}[https://gemnasium.com/ksylvest/attached]
{}[https://travis-ci.org/ksylvest/attached]
{}[https://coveralls.io/r/ksylvest/attached]
{}[https://codeclimate.com/github/ksylvest/attached]== Copyright
Copyright (c) 2010 - 2014 Kevin Sylvestre. See LICENSE for details.