Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

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 :encoding

t.timestamps
end
end

def self.down
drop_table :videos
end
end

Model:

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

=== Reprocessing

rake 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.