Skip to content

wbotelhos/attachy

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Attachy

Build Status Gem Version

Attachments handler for Rails via http://cloudinary.com

Description

Send files from your browser directly to Cloudinary. Attachy will generate a has_one or has_many files (photos) to your model with no need to change your model schema!

Install

Add the following code on your Gemfile and run bundle install:

gem 'attachy'

So, extracts the necessary files including a migrate that create a table used to keep your file metadata. You can choose a Default Image via params version, public_id and format.

rails g attachy:install

Then execute the migrations to create the attachy_files table.

rake db:migrate

Usage

Model

Upload a single image that will be overrided on each upload:

class User < ApplicationRecord
  has_attachment :avatar
end

Upload a couple of images that will be added on each upload:

class User < ApplicationRecord
  has_attachments :photos
end

View

Expose your Cloudinary credentials on your layout:

<%= cloudinary_js_config %>

Into your form, add the upload field:

<%= f.attachy :avatar %>

Assets

Includes the attachy.js on your js manifest:

//= require attachy

Includes the attachy.sass on your css manifest:

/*
 *= require attachy
 */

Configurations

On your attachy.yml you can configure a default image to show when model has no file attached:

default:
  image:
    format: jpg
    public_id: default
    version: 42

Transformations

To know more about transformations, check the Cloudinary Doc.

Helpers

Attachy

<%= f.attachy :avatar,
  t:      { width: 160, height: 160, crop: :fill },
  tl:     { width: 800, height: 600, crop: :scale },
  button: { html: { text: 'Upload' } }
%>
  • t: image transformations;
  • tl: linked image transformations;
  • button.html: button html attributes.
<div class="attachy">
  <ul class="attachy__content">
    <li class="attachy__node">
      <a class="attachy__link" href="">
        <img src="">
      </a>

      <span class="attachy__remove">×</span>
    </li>
  </ul>

  <div class="attachy__button">
    <span>...</span>

    <input type="file" class="attachy__fileupload">

    <input value="[]" type="hidden">
  </div>
</div>
  • attachy: wrapper;
  • attachy__content: the file content;
  • attachy__node: each file of the content;
  • attachy__link: the link of some file;
  • img: the uploaded file;
  • attachy__remove: button to remove the image;
  • attachy__button: pseudo button to access the upload file button;
  • span: the label of the button;
  • attachy__fileupload: the upload file field;
  • hidden: the field that keeps hidden the files metadata as JSON.

Link

It draws the link with the image inside:

<%= attachy_link :avatar, @object
  t:    { width: 160, height: 160, crop: :fill },
  tl:   { width: 800, height: 600, crop: :scale },
  html: { class: :added_custom }
%>
  • t: image transformations;
  • tl: linked image transformations;
  • html: link html attributes.
<a class="attachy__link" href="">
  <img src="">
</a>

Image

It draws the image:

<%= attachy_image :avatar, @object
  t:    { width: 160, height: 160, crop: :fill },
  html: { alt: :me }
%>
  • t: image transformations;
  • html: link html attributes.
<img src="https://res.cloudinary.com/account/image/upload/secret/version/hash.format">

Test

Before send pull request, check if specs is passing.

rspec spec

Code Style

Check if the code style is good.

rubocop --debug --display-cop-names