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

https://github.com/wbotelhos/attachy

:paperclip: Attachments handler for Rails via Cloudinary
https://github.com/wbotelhos/attachy

activestorage attachment carrierwave cloudinary crop dragonfly image paperclip refinery upload

Last synced: about 1 year ago
JSON representation

:paperclip: Attachments handler for Rails via Cloudinary

Awesome Lists containing this project

README

          

# Attachy

[![Build Status](https://travis-ci.org/wbotelhos/attachy.svg)](https://travis-ci.org/wbotelhos/attachy)
[![Gem Version](https://badge.fury.io/rb/attachy.svg)](https://badge.fury.io/rb/attachy)

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

```ruby
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](#default-image) via params `version`, `public_id` and `format`.

```bash
rails g attachy:install
```

Then execute the migrations to create the `attachy_files` table.

```bash
rake db:migrate
```

## Usage

### Model

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

```ruby
class User < ApplicationRecord
has_attachment :avatar
end
```

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

```ruby
class User < ApplicationRecord
has_attachments :photos
end
```

### View

Expose your Cloudinary credentials on your layout:

```html
<%= cloudinary_js_config %>
```

Into your form, add the upload field:

```html
<%= f.attachy :avatar %>
```

### Assets

Includes the `attachy.js` on your js manifest:

```js
//= require attachy
```

Includes the `attachy.sass` on your css manifest:

```js
/*
*= require attachy
*/
```

### Configurations

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

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

## Transformations

To know more about transformations, check the [Cloudinary Doc](http://cloudinary.com/documentation/image_transformations).

## Helpers

### Attachy

```html
<%= 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.

```html



...




```

+ `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:

```html
<%= 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.

```html



```

### Image

It draws the image:

```html
<%= attachy_image :avatar, @object
t: { width: 160, height: 160, crop: :fill },
html: { alt: :me }
%>
```

+ `t`: image transformations;
+ `html`: link html attributes.

```html

```

## Test

Before send pull request, check if specs is passing.

```bash
rspec spec
```

## Code Style

Check if the code style is good.

```bash
rubocop --debug --display-cop-names
```