uploadcare-rails 3.3.2 → 3.3.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +170 -0
- data/Gemfile +10 -0
- data/LICENSE.txt +21 -0
- data/README.md +969 -0
- data/lib/uploadcare/rails/version.rb +1 -1
- data/uploadcare-rails.gemspec +54 -0
- metadata +20 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 337ca39681c735dffe71dcc95c0a5a969290cb702f845cbb95691bd820f1ffec
|
4
|
+
data.tar.gz: b2666c556bd0fa86a13c8892d47f7ca32a19e42ac3faccd9686d07035f5f2174
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ea70005621475a6892a155e0441f5ddddb7cfcc75b3b9b9968a27f0870adef177c3de763a6d885060a571a9f18881cb9b03eca6a5624ac7db452bcfd1a829f4
|
7
|
+
data.tar.gz: 33f3b7cbb9bf9091fb7a0a0803f5eecd29593d3e618b541ec82051cb0f369c4011a9790e166fde573794ed6c5a8a3ea6cfcea96b7d77608f2e9beb8bee9ee763
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,170 @@
|
|
1
|
+
# Changelog
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
|
4
|
+
The format is based now on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
5
|
+
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
6
|
+
|
7
|
+
## 3.3.2.1 — 2023-03-26
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
|
11
|
+
* Updated links in the gemspec
|
12
|
+
|
13
|
+
## 3.3.2 — 2023-03-26
|
14
|
+
|
15
|
+
### Changed
|
16
|
+
|
17
|
+
* Fixed an issue with the configuration
|
18
|
+
* Updated the gem documentation
|
19
|
+
|
20
|
+
## 3.3.1 — 2023-03-20
|
21
|
+
|
22
|
+
* Update gem description
|
23
|
+
* Respect data-multiple in helper options (https://github.com/uploadcare/uploadcare-rails/issues/119)
|
24
|
+
|
25
|
+
## 3.3.0 — 2023-03-16
|
26
|
+
|
27
|
+
Guarantee support of maintainable versions of Ruby and Rails
|
28
|
+
|
29
|
+
### Breaking Сhanges
|
30
|
+
|
31
|
+
Drop support of unmaintainable Ruby 2.4, 2.5, 2.6 and Rails before 6.0
|
32
|
+
|
33
|
+
### Added
|
34
|
+
|
35
|
+
Add support of Ruby 3.1 and 3.2 and Rails 7.0
|
36
|
+
|
37
|
+
## 3.0.0 — 2022-12-29
|
38
|
+
|
39
|
+
This version supports latest Uploadcare REST API — [v0.7](https://uploadcare.com/api-refs/rest-api/v0.7.0/), which introduces new file management features:
|
40
|
+
* [File metadata](https://uploadcare.com/docs/file-metadata/)
|
41
|
+
* New [add-ons API](https://uploadcare.com/api-refs/rest-api/v0.7.0/#tag/Add-Ons):
|
42
|
+
* [Background removal](https://uploadcare.com/docs/remove-bg/)
|
43
|
+
* [Virus checking](https://uploadcare.com/docs/security/malware-protection/)
|
44
|
+
* [Object recognition](https://uploadcare.com/docs/intelligence/object-recognition/)
|
45
|
+
|
46
|
+
### Breaking Сhanges
|
47
|
+
|
48
|
+
- For `Uploadcare::FileApi#get_file`
|
49
|
+
- File information doesn't return `image_info` and `video_info` fields anymore
|
50
|
+
- Removed `rekognition_info` in favor of `appdata`
|
51
|
+
- Parameter `add_fields` was renamed to `include`
|
52
|
+
- For `Uploadcare::FileApi#get_files`
|
53
|
+
- Removed the option of sorting the file list by file size
|
54
|
+
- For `Uploadcare::GroupApi#store_group`
|
55
|
+
- Changed response format
|
56
|
+
- For `Uploadcare::FileApi`
|
57
|
+
- Removed method `copy_file` in favor of `local_copy_file` and `remote_copy_file` methods
|
58
|
+
|
59
|
+
### Changed
|
60
|
+
|
61
|
+
- For `Uploadcare::FileApi#get_file`
|
62
|
+
- Field `content_info` that includes mime-type, image (dimensions, format, etc), video information (duration, format, bitrate, etc), audio information, etc
|
63
|
+
- Field `metadata` that includes arbitrary metadata associated with a file
|
64
|
+
- Field `appdata` that includes dictionary of application names and data associated with these applications
|
65
|
+
|
66
|
+
### Added
|
67
|
+
|
68
|
+
- Add Uploadcare API interface:
|
69
|
+
- `Uploadcare::FileMetadataApi`
|
70
|
+
- `Uploadcare::AddonsApi`
|
71
|
+
- Added an option to delete a Group
|
72
|
+
- For `Uploadcare::FileApi` add `local_copy_file` and `remote_copy_file` methods
|
73
|
+
|
74
|
+
## 2.1.1 2022-05-13
|
75
|
+
### Fix
|
76
|
+
|
77
|
+
Fixed Rails 4 tests by enforcing https.
|
78
|
+
|
79
|
+
## 2.1.0 2021-11-16
|
80
|
+
### Added
|
81
|
+
|
82
|
+
- Option `signing_secret` in the `Uploadcare::WebhookApi`.
|
83
|
+
|
84
|
+
## 2.0.0 - 2021-10-11
|
85
|
+
### :heavy_exclamation_mark: *Note: the gem uploadcare-rails 2.x is not backward compatible with 1.x.*
|
86
|
+
|
87
|
+
### Added
|
88
|
+
|
89
|
+
- Add Uploadcare API interface:
|
90
|
+
- Uploadcare::FileApi
|
91
|
+
- Uploadcare::UploadApi
|
92
|
+
- Uploadcare::GroupApi
|
93
|
+
- Uploadcare::ConversionApi
|
94
|
+
- Uploadcare::ProjectApi
|
95
|
+
- Uploadcare::WebhookApi
|
96
|
+
- Add uploadcare_widget_tag helper for views
|
97
|
+
- Add methods File#store, File#delete, File#load
|
98
|
+
- Add methods Group#transform_file_urls, Group#store, Group#load
|
99
|
+
|
100
|
+
### Changed
|
101
|
+
|
102
|
+
- Change File Uploader widget view helpers
|
103
|
+
- Rename has_uploadcare_file -> mount_uploadcare_file
|
104
|
+
- Rename has_uploadcare_group -> mount_uploadcare_file_group
|
105
|
+
- Change generated config path from config/uploadcare.yml to config/initializers/uploadcare.rb and add more options
|
106
|
+
- Rename the class `Uploadcare::Rails::Settings` to `Uploadcare::Rails::Configuration`
|
107
|
+
- Rename the class `Uploadcare::Rails::Operations` to `Uploadcare::Rails::Transformations::ImageTransformations`.
|
108
|
+
Configuration object is available as `Uploadcare::Rails.configuration` now
|
109
|
+
- Change methods File#url -> File#transform_url
|
110
|
+
- Change methods Group#urls -> Group#file_urls
|
111
|
+
- Change methods Group#load_data -> Group#load
|
112
|
+
|
113
|
+
### Removed
|
114
|
+
|
115
|
+
- Remove uploadcare_uploader_tag helper
|
116
|
+
- Remove uploadcare_multiple_uploader_field helper
|
117
|
+
- Remove uploadcare_single_uploader_field helper
|
118
|
+
- Remove uploadcare_uploader_options (now options are included in uploadcare_widget_tag)
|
119
|
+
- Remove FormBuilder support
|
120
|
+
- Remove Formtastic support
|
121
|
+
- Remove SimpleForm support
|
122
|
+
- Remove caching files and groups on delete
|
123
|
+
- Remove callback ```ruby after_save after_save "store_#{ attribute }".to_sym```. Now managed by the `do_not_store` option in `config/initializers/uploadcare.rb`
|
124
|
+
- Remove methods File#prepared_operations, File#to_builder, File#to_json, File#as_json, File#marshal_dump, File#image
|
125
|
+
- Remove methods Group#cache_data, Group#to_json, Group#as_json, Group#map_files, Group#load_data!, Group#marshal_dump
|
126
|
+
|
127
|
+
## 1.2.1 - 2018-10-01
|
128
|
+
### Fixed
|
129
|
+
- Allow to use multiple files or groups
|
130
|
+
|
131
|
+
## 1.2.0 - 2018-06-03
|
132
|
+
|
133
|
+
## 1.2.0-alpha3 - 2018-05-29
|
134
|
+
### Fixed
|
135
|
+
|
136
|
+
- Require `uploadcare/rails/version` in `lib/uploadcare-rails.rb`
|
137
|
+
|
138
|
+
## 1.2.0-alpha2 - 2018-05-28 - YANKED
|
139
|
+
### Changed
|
140
|
+
- Gem now reports us your `uploadcare-rails` and `rails` versions using the User-Agent header (overridable via config)
|
141
|
+
- `uploadcare-ruby` gem version bumped to 1.2.x
|
142
|
+
|
143
|
+
|
144
|
+
## 1.2.0-alpha - 2018-04-18
|
145
|
+
### Changed
|
146
|
+
- Allow gem in rails 5.2
|
147
|
+
- Update default widget version to 3.x
|
148
|
+
|
149
|
+
### Removed
|
150
|
+
- Tests against Ruby 2.0 and 2.1 that [had reached their EOL](https://www.ruby-lang.org/en/downloads/branches/)
|
151
|
+
|
152
|
+
|
153
|
+
## 1.1.1 - 2017-11-07
|
154
|
+
### Fixed
|
155
|
+
- Uploadcare config generator
|
156
|
+
- Issues preventing the gem to be used with rails 5.1
|
157
|
+
|
158
|
+
|
159
|
+
## 1.1.0 - 2016-07-12
|
160
|
+
### Added
|
161
|
+
- Removed widget from the asset pipeline. It is expected to use helper or to append to the asset pipeline manually.
|
162
|
+
- Operations for image_tag helpers.
|
163
|
+
|
164
|
+
### Fixed
|
165
|
+
- Bug with creating object with empty file or file_group.
|
166
|
+
- Workaround to remove unnecessary API-calls for groups of images.
|
167
|
+
|
168
|
+
### Development
|
169
|
+
- Tests have been refactored, VCR appended to development environment.
|
170
|
+
- Tests performance improvements.
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2021 dmitrij
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,969 @@
|
|
1
|
+
# Uploadcare Rails
|
2
|
+
|
3
|
+
![license](https://img.shields.io/badge/license-MIT-brightgreen.svg)
|
4
|
+
[![Build Status][actions-img]][actions-badge]
|
5
|
+
|
6
|
+
[actions-badge]: https://github.com/uploadcare/uploadcare-rails/actions/workflows/test.yml
|
7
|
+
[actions-img]: https://github.com/uploadcare/uploadcare-rails/actions/workflows/test.yml/badge.svg
|
8
|
+
|
9
|
+
A Ruby on Rails plugin for [Uploadcare](https://uploadcare.com) service.
|
10
|
+
Based on [uploadcare-ruby](https://github.com/uploadcare/uploadcare-ruby) gem (general purpose wrapper for Uploadcare API)
|
11
|
+
|
12
|
+
### :heavy_exclamation_mark: *Note: the gem uploadcare-rails 2.x is not backward compatible with 1.x.*
|
13
|
+
|
14
|
+
* [Requirements](#requirements)
|
15
|
+
* [Installation](#installation)
|
16
|
+
* [Using Gemfile](#using-gemfile)
|
17
|
+
* [Using command line](#using-command-line)
|
18
|
+
* [Usage](#usage)
|
19
|
+
* [Configuration](#configuration)
|
20
|
+
* [Uploadcare File Uploader](#uploadcare-file-uploader)
|
21
|
+
* [Widget](#widget)
|
22
|
+
* [Using CDN](#using-cdn)
|
23
|
+
* [Using NPM](#using-npm)
|
24
|
+
* [Input](#input)
|
25
|
+
* [Using the File Uploader with Rails models](#using-the-file-uploader-with-rails-models)
|
26
|
+
* [Form data](#form-data)
|
27
|
+
* [File and Group wrappers](#file-and-group-wrappers)
|
28
|
+
* [Image Transformation](#image-transformation)
|
29
|
+
* [Uploadcare API interfaces](#uploadcare-api-interfaces)
|
30
|
+
* [Upload Api](#upload-api)
|
31
|
+
* [File Api](#file-api)
|
32
|
+
* [Group Api](#group-api)
|
33
|
+
* [Project Api](#project-api)
|
34
|
+
* [Webhook Api](#webhook-api)
|
35
|
+
* [Conversion Api](#conversion-api)
|
36
|
+
* [File Metadata Api](#file-metadata-api)
|
37
|
+
* [Add-Ons Api](#add-ons-api)
|
38
|
+
* [Useful links](#useful-links)
|
39
|
+
|
40
|
+
## Requirements
|
41
|
+
* ruby 2.7+
|
42
|
+
* Ruby on Rails 6.0+
|
43
|
+
|
44
|
+
## Installation
|
45
|
+
|
46
|
+
### Using Gemfile
|
47
|
+
|
48
|
+
Add this line to your application's Gemfile:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
gem "uploadcare-rails"
|
52
|
+
```
|
53
|
+
|
54
|
+
And then execute:
|
55
|
+
|
56
|
+
```console
|
57
|
+
$ bundle install
|
58
|
+
```
|
59
|
+
|
60
|
+
If you use `api_struct` gem in your project, replace it with `uploadcare-api_struct`:
|
61
|
+
```ruby
|
62
|
+
gem 'uploadcare-api_struct'
|
63
|
+
```
|
64
|
+
and run `bundle install`
|
65
|
+
|
66
|
+
### Using command line
|
67
|
+
|
68
|
+
```console
|
69
|
+
$ gem install uploadcare-rails
|
70
|
+
```
|
71
|
+
|
72
|
+
## Usage
|
73
|
+
|
74
|
+
### Configuration
|
75
|
+
|
76
|
+
To start using Uploadcare API you just need to set your [API keys](https://app.uploadcare.com/projects/-/api-keys/) (public key and secret key).
|
77
|
+
These keys can be set as ENV variables using the `export` directive:
|
78
|
+
|
79
|
+
```console
|
80
|
+
$ export UPLOADCARE_PUBLIC_KEY=your_public_key
|
81
|
+
$ export UPLOADCARE_SECRET_KEY=your_private_key
|
82
|
+
```
|
83
|
+
Or you can use popular gems like `dotenv-rails` for setting ENV variables.
|
84
|
+
You must set the gem before `uploadcare-rails` like this :
|
85
|
+
```ruby
|
86
|
+
gem "dotenv-rails", require: "dotenv/rails-now", groups: [:development, :test]
|
87
|
+
gem "uploadcare-rails"
|
88
|
+
```
|
89
|
+
:warning: `require: "dotenv/rails-now"` is very important!
|
90
|
+
|
91
|
+
Run the config generator command to generate a configuration file:
|
92
|
+
|
93
|
+
```console
|
94
|
+
$ rails g uploadcare_config
|
95
|
+
```
|
96
|
+
|
97
|
+
The generator will create a new file in `config/initializers/uploadcare.rb`.
|
98
|
+
|
99
|
+
The public key must be specified in `config/initializers/uploadcare.rb` to use Uploadcare file upload.
|
100
|
+
This step is done automatically in the initializer if you set the ENV variable `UPLOADCARE_PUBLIC_KEY` earlier.
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
...
|
104
|
+
Uploadcare::Rails.configure do |config|
|
105
|
+
# Sets your Uploadcare public key.
|
106
|
+
config.public_key = ENV.fetch("UPLOADCARE_PUBLIC_KEY", "your_public_key")
|
107
|
+
...
|
108
|
+
end
|
109
|
+
```
|
110
|
+
|
111
|
+
There are also some options set by default:
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
...
|
115
|
+
# Deletes files from Uploadcare servers after object destroy.
|
116
|
+
config.delete_files_after_destroy = true
|
117
|
+
|
118
|
+
# Sets caching for Uploadcare files
|
119
|
+
config.cache_files = true
|
120
|
+
|
121
|
+
# Available locales currently are:
|
122
|
+
# ar az ca cs da de el en es et fr he it ja ko lv nb nl pl pt ro ru sk sr sv tr uk vi zhTW zh
|
123
|
+
config.locale = "en"
|
124
|
+
|
125
|
+
# If true, inputs on your page are initialized automatically, see the article for details -
|
126
|
+
# https://uploadcare.com/docs/file-uploader-api/widget-initialization/
|
127
|
+
config.live = true
|
128
|
+
|
129
|
+
# If true, input initialization is invoked manually.
|
130
|
+
# See https://uploadcare.com/docs/file-uploader-api/widget-initialization/).
|
131
|
+
config.manual_start = false
|
132
|
+
```
|
133
|
+
|
134
|
+
Then you can configure all global variables such as files storing/caching, deleting files, etc.
|
135
|
+
Full list of available options is listed in the file itself. Just uncomment an option and set the value.
|
136
|
+
|
137
|
+
|
138
|
+
### Uploadcare File Uploader
|
139
|
+
|
140
|
+
### Widget
|
141
|
+
|
142
|
+
#### Using CDN
|
143
|
+
|
144
|
+
The fastest way to start using file uploading is to add the Uploadcare widget to the html-page.
|
145
|
+
There is a view helper that can do it with two strings of code:
|
146
|
+
|
147
|
+
Add this string to your <head> html-tag
|
148
|
+
|
149
|
+
```erb
|
150
|
+
<!DOCTYPE html>
|
151
|
+
<html>
|
152
|
+
<head>
|
153
|
+
<title>RailsApp</title>
|
154
|
+
<%= uploadcare_widget_tag %>
|
155
|
+
<!--
|
156
|
+
results in:
|
157
|
+
<script src="https://ucarecdn.com/libs/widget/3.x/uploadcare.full.min.js"></script>
|
158
|
+
<script>
|
159
|
+
//<![CDATA[
|
160
|
+
UPLOADCARE_PUBLIC_KEY = "your_public_key";
|
161
|
+
UPLOADCARE_LOCALE = "en";
|
162
|
+
UPLOADCARE_LIVE = true;
|
163
|
+
UPLOADCARE_MANUAL_START = false;
|
164
|
+
//]]>
|
165
|
+
</script>
|
166
|
+
-->
|
167
|
+
</head>
|
168
|
+
...
|
169
|
+
```
|
170
|
+
This helper uses a CDN-url for the widget bundle and supports three options:
|
171
|
+
|
172
|
+
- **version** — version of the Uploadcare widget. Default is "3.x".
|
173
|
+
- **bundle** — bundle name. Available names are "full", "default", "api", "ie8" and "lang.en".
|
174
|
+
Default bundle is "full" — a full bundle with built-in jQuery.
|
175
|
+
More info about bundles [here](https://uploadcare.com/docs/uploads/file-uploader/#bundles).
|
176
|
+
- **min** — bool value detecting if the bundle must be minified.
|
177
|
+
|
178
|
+
The <head> tag then also includes the <script> with widget global settings set in `config/initializers/uploadcare.rb`. You can override them later in an individual widget.
|
179
|
+
|
180
|
+
|
181
|
+
#### Using asset pipeline.
|
182
|
+
|
183
|
+
Download and append widget manually to your asset pipeline. You may download (e.g. https://ucarecdn.com/libs/widget/3.x/uploadcare.full.min.js) and serve the widget yourself along with your other assets.
|
184
|
+
|
185
|
+
#### Using NPM
|
186
|
+
|
187
|
+
Installing via NPM instructions can be found [here](https://uploadcare.com/docs/uploads/file-uploader/#npm).
|
188
|
+
|
189
|
+
### Input
|
190
|
+
|
191
|
+
When the widget is on a html-page, you want to add an input to your view that will be used by the File Uploader:
|
192
|
+
|
193
|
+
```erb
|
194
|
+
...
|
195
|
+
<%= uploadcare_uploader_field :object, :attribute %>
|
196
|
+
<!--
|
197
|
+
results in:
|
198
|
+
<input role="uploadcare-uploader" type="hidden" name="object[attribute]" id="object_attribute">
|
199
|
+
-->
|
200
|
+
...
|
201
|
+
```
|
202
|
+
|
203
|
+
- **object** — object name;
|
204
|
+
- **attribute** — object attribute name.
|
205
|
+
|
206
|
+
### Using the File Uploader with Rails models
|
207
|
+
|
208
|
+
View helpers are good to be used for Rails models.
|
209
|
+
First, you need to mount uploadcare file or group to the model attribute.
|
210
|
+
For example you have a database table like this and model `Post`:
|
211
|
+
```
|
212
|
+
# DB table "posts"
|
213
|
+
---------------------
|
214
|
+
title | String
|
215
|
+
---------------------
|
216
|
+
picture | String
|
217
|
+
---------------------
|
218
|
+
attachments | String
|
219
|
+
---------------------
|
220
|
+
```
|
221
|
+
|
222
|
+
### Form data
|
223
|
+
|
224
|
+
#### Uploadcare File
|
225
|
+
|
226
|
+
```ruby
|
227
|
+
# app/models/post.rb
|
228
|
+
class Post < ApplicationRecord
|
229
|
+
mount_uploadcare_file :picture
|
230
|
+
end
|
231
|
+
```
|
232
|
+
|
233
|
+
```erb
|
234
|
+
<!-- app/views/posts/new.html.erb -->
|
235
|
+
<h1> NEW POST </h1>
|
236
|
+
|
237
|
+
<%= form_tag("/posts", method: :post) do %>
|
238
|
+
<%= uploadcare_uploader_field :post, :picture %>
|
239
|
+
<!--
|
240
|
+
results in:
|
241
|
+
<input role="uploadcare-uploader" multiple="false" type="hidden" name="post[picture]" id="post_picture">
|
242
|
+
-->
|
243
|
+
<div>
|
244
|
+
<%= submit_tag "Save" %>
|
245
|
+
</div>
|
246
|
+
<% end %>
|
247
|
+
```
|
248
|
+
|
249
|
+
#### Uploadcare File Group
|
250
|
+
|
251
|
+
```ruby
|
252
|
+
# app/models/post.rb
|
253
|
+
class Post < ApplicationRecord
|
254
|
+
mount_uploadcare_file_group :attachments
|
255
|
+
end
|
256
|
+
```
|
257
|
+
|
258
|
+
```erb
|
259
|
+
<!-- app/views/posts/new.html.erb -->
|
260
|
+
<h1> NEW POST </h1>
|
261
|
+
|
262
|
+
<%= form_tag("/posts", method: :post) do %>
|
263
|
+
<%= uploadcare_uploader_field :post, :attachments %>
|
264
|
+
<!--
|
265
|
+
results in:
|
266
|
+
<input role="uploadcare-uploader" multiple="true" type="hidden" name="post[attachments]" id="post_attachments">
|
267
|
+
-->
|
268
|
+
<div>
|
269
|
+
<%= submit_tag "Save" %>
|
270
|
+
</div>
|
271
|
+
<% end %>
|
272
|
+
```
|
273
|
+
|
274
|
+
The input will have a `value` property set to CDN-urls when you will select files to upload in the widget.
|
275
|
+
|
276
|
+
```erb
|
277
|
+
<input role="uploadcare-uploader" type="hidden" name="post[picture]" id="post_picture" value="https://ucarecdn.com/8355c2c5-f108-4d74-963d-703d48020f83/">
|
278
|
+
```
|
279
|
+
|
280
|
+
So, you get CDN-urls as a value of the attribute in the controller on form submit.
|
281
|
+
The value will be available in the controller by `params[:post][:picture]`.
|
282
|
+
|
283
|
+
The helper is detecting the value of the `multiple` property based on the mount type in your model.
|
284
|
+
|
285
|
+
### File and Group wrappers
|
286
|
+
|
287
|
+
When you mount either Uploadcare File or Group to an attribute, this attribute is getting wrapped with
|
288
|
+
a Uploadcare object. This feature adds some usefull methods to the attribute.
|
289
|
+
|
290
|
+
#### Uploadcare File
|
291
|
+
|
292
|
+
Say, you have such model in your Rails app:
|
293
|
+
|
294
|
+
```ruby
|
295
|
+
# app/models/post.rb
|
296
|
+
class Post < ApplicationRecord
|
297
|
+
mount_uploadcare_file :picture
|
298
|
+
end
|
299
|
+
```
|
300
|
+
|
301
|
+
And then you create a new Post object specifying a CDN-url for your prevously uploaded Uploadcare file:
|
302
|
+
|
303
|
+
```console
|
304
|
+
$ post = Post.create(picture: "https://ucarecdn.com/2d33999d-c74a-4ff9-99ea-abc23496b052/")
|
305
|
+
```
|
306
|
+
|
307
|
+
Now the `post.picture` is an Uploadcare::Rails::File. Following methods are supported:
|
308
|
+
|
309
|
+
```console
|
310
|
+
# Store the file on an Uploadcare server permanently:
|
311
|
+
$ post.picture.store
|
312
|
+
# => {
|
313
|
+
# "cdn_url"=>"https://ucarecdn.com/2d33999d-c74a-4ff9-99ea-abc23496b052/",
|
314
|
+
# ...other group data...
|
315
|
+
# }
|
316
|
+
#
|
317
|
+
# Delete the file from an Uploadcare server permanently:
|
318
|
+
$ post.picture.delete
|
319
|
+
# => {
|
320
|
+
# "datetime_removed"=>"2021-07-30T09:19:30.797174Z",
|
321
|
+
# ...other group data...
|
322
|
+
# }
|
323
|
+
#
|
324
|
+
# Get CDN-url of an object attribute:
|
325
|
+
$ post.picture.to_s
|
326
|
+
# => "https://ucarecdn.com/2d33999d-c74a-4ff9-99ea-abc23496b052/"
|
327
|
+
#
|
328
|
+
# Load object (send a GET request to the server to get all the file's data)
|
329
|
+
# This data will be cached if the cache_files option is set to true
|
330
|
+
# Default data (without asking an Uploadcare server) for each file contains cdn_url and uuid only:
|
331
|
+
$ post.picture.load
|
332
|
+
# => {
|
333
|
+
# "cdn_url"=>"https://ucarecdn.com/2d33999d-c74a-4ff9-99ea-abc23496b052/",
|
334
|
+
# ...other file data...
|
335
|
+
# }
|
336
|
+
#
|
337
|
+
# Check if an attribute loaded from the server.
|
338
|
+
# Will return false unless the :load or the :store methods are called:
|
339
|
+
$ post.picture.loaded?
|
340
|
+
# => true
|
341
|
+
#
|
342
|
+
# More about image transformations below.
|
343
|
+
# Transform a CDN-url to get a new transformed image's source. Works for images only:
|
344
|
+
$ post.picture.transform_url(quality: "better")
|
345
|
+
# => "https://ucarecdn.com/2d33999d-c74a-4ff9-99ea-abc23496b052/-/quality/better/"
|
346
|
+
```
|
347
|
+
|
348
|
+
#### Uploadcare File Group
|
349
|
+
|
350
|
+
Groups work similar to the File but have some differences though.
|
351
|
+
|
352
|
+
```ruby
|
353
|
+
# app/models/post.rb
|
354
|
+
class Post < ApplicationRecord
|
355
|
+
mount_uploadcare_file_group :attachments
|
356
|
+
end
|
357
|
+
```
|
358
|
+
|
359
|
+
Creating a new `post` with the Group mounted:
|
360
|
+
|
361
|
+
```console
|
362
|
+
$ post = Post.create(attachments: "https://ucarecdn.com/dbc4e868-b7a6-43ff-a35f-2ebef935dc1b~1/")
|
363
|
+
```
|
364
|
+
|
365
|
+
Now the `post.attachments` is an Uploadcare::Rails::Group. Following methods are supported:
|
366
|
+
|
367
|
+
```console
|
368
|
+
# Store the file group on an Uploadcare server permanently:
|
369
|
+
$ post.attachments.store
|
370
|
+
# => {
|
371
|
+
# "cdn_url"=>"https://ucarecdn.com/dbc4e868-b7a6-43ff-a35f-2ebef935dc1b~1/",
|
372
|
+
# ...other group data...
|
373
|
+
# "files"=> [{
|
374
|
+
# "datetime_stored"=>"2021-07-29T08:31:45.668354Z",
|
375
|
+
# ...other file data...
|
376
|
+
# }]
|
377
|
+
# }
|
378
|
+
#
|
379
|
+
# Delete the file group from an Uploadcare server permanently:
|
380
|
+
$ post.attachments.delete
|
381
|
+
# => {
|
382
|
+
# "datetime_removed"=>"2021-07-30T09:19:30.797174Z",
|
383
|
+
# ...other group data...
|
384
|
+
# }
|
385
|
+
#
|
386
|
+
# Get CDN-url of an object attribute:
|
387
|
+
$ post.attachments.to_s
|
388
|
+
# => "https://ucarecdn.com/dbc4e868-b7a6-43ff-a35f-2ebef935dc1b~1/"
|
389
|
+
#
|
390
|
+
# Load object — works the same way as for the File:
|
391
|
+
$ post.attachments.load
|
392
|
+
# => {
|
393
|
+
# "cdn_url"=>"https://ucarecdn.com/dbc4e868-b7a6-43ff-a35f-2ebef935dc1b~1/",
|
394
|
+
# ...other group data...
|
395
|
+
# "files"=> [{
|
396
|
+
# "datetime_stored"=>"2021-07-29T08:31:45.668354Z",
|
397
|
+
# ...other file data...
|
398
|
+
# }]
|
399
|
+
# }
|
400
|
+
#
|
401
|
+
# Check if an attribute loaded from the server:
|
402
|
+
$ post.attachments.loaded?
|
403
|
+
# => true
|
404
|
+
#
|
405
|
+
# As we don't want to show (on the html-page) a file group itself,
|
406
|
+
# we can get CDN-urls for file that the group contains. No loading group or files needed.
|
407
|
+
# This works for images only:
|
408
|
+
$ post.attachments.transform_file_urls(quality: "better")
|
409
|
+
# => ["https://ucarecdn.com/dbc4e868-b7a6-43ff-a35f-2ebef935dc1b~1/nth/0/-/quality/better/"]
|
410
|
+
#
|
411
|
+
# If you want to get non-transformed file urls, use:
|
412
|
+
$ post.attachments.file_urls
|
413
|
+
# => ["https://ucarecdn.com/dbc4e868-b7a6-43ff-a35f-2ebef935dc1b~1/nth/0/"]
|
414
|
+
```
|
415
|
+
|
416
|
+
|
417
|
+
### Image Transformation
|
418
|
+
|
419
|
+
Uploadcare provides a way to transform images stored on Uploadcare services specifying a list of operations.
|
420
|
+
If an operation has just one option, you can specify it like key-value:
|
421
|
+
|
422
|
+
```console
|
423
|
+
$ post.picture.transform_url(quality: "better")
|
424
|
+
# => "https://ucarecdn.com/ebbb9929-eb92-4f52-a212-eecfdb19d27d/-/quality/better/"
|
425
|
+
```
|
426
|
+
|
427
|
+
and if an operation supports several options — just set them as a Hash:
|
428
|
+
|
429
|
+
```console
|
430
|
+
$ post.picture.transform_url(crop: { dimensions: "300x500", coords: "50, 50", alignment: "center" })
|
431
|
+
# => "https://ucarecdn.com/ebbb9929-eb92-4f52-a212-eecfdb19d27d/-/crop/300x500/50,50/center/"
|
432
|
+
```
|
433
|
+
|
434
|
+
Full list of operations and valid values can be found [here](https://uploadcare.com/docs/transformations/image/).
|
435
|
+
|
436
|
+
### Uploadcare API interfaces
|
437
|
+
|
438
|
+
Uploadcare provides [APIs](https://uploadcare.com/docs/start/api/) to manage files, group, projects, webhooks, video and documents conversion and file uploads. The gem has unified interfaces to use Uploadcare APIs in RailsApp.
|
439
|
+
|
440
|
+
### Upload API
|
441
|
+
|
442
|
+
[Upload Api](https://uploadcare.com/api-refs/upload-api/) provides methods to upload files in many ways.
|
443
|
+
|
444
|
+
#### Upload a single file
|
445
|
+
|
446
|
+
```console
|
447
|
+
# Load a file
|
448
|
+
$ file = File.open("kitten.png")
|
449
|
+
# => #<File:kitten.png>
|
450
|
+
# Upload file to Uploadcare
|
451
|
+
$ uploadcare_file = Uploadcare::UploadApi.upload_file(file)
|
452
|
+
# => {
|
453
|
+
# "uuid"=>"2d33999d-c74a-4ff9-99ea-abc23496b053",
|
454
|
+
# ...other file data...
|
455
|
+
# }
|
456
|
+
```
|
457
|
+
|
458
|
+
This method supports single file uploading and uploading files from an URL (depending on the type of first argument - can be either String (i.e. URL) or File).
|
459
|
+
|
460
|
+
```console
|
461
|
+
# Upload file from URL
|
462
|
+
$ url = "https://ucarecdn.com/80b807be-faad-4f01-bbbe-0bbde172b9de/1secVIDEO.mp4"
|
463
|
+
$ uploadcare_file = Uploadcare::UploadApi.upload_file(url)
|
464
|
+
# => [
|
465
|
+
# {
|
466
|
+
# "size"=>22108,
|
467
|
+
# "uuid"=>"b5ed5e1d-a939-4fe4-bfb2-31d3867bb6s6",
|
468
|
+
# "original_filename"=>"1 sec VIDEO.mp4",
|
469
|
+
# "is_image"=>false,
|
470
|
+
# "image_info"=>nil,
|
471
|
+
# "is_ready"=>true,
|
472
|
+
# "mime_type"=>"video/mp4"
|
473
|
+
# }
|
474
|
+
# ]
|
475
|
+
```
|
476
|
+
|
477
|
+
|
478
|
+
#### Upload several files
|
479
|
+
|
480
|
+
```console
|
481
|
+
# Load a file
|
482
|
+
$ file = File.open("kitten.png")
|
483
|
+
# => #<File:kitten.png>
|
484
|
+
# Upload several files to Uploadcare
|
485
|
+
$ uploadcare_file = Uploadcare::UploadApi.upload_files([file])
|
486
|
+
# => [
|
487
|
+
# {
|
488
|
+
# "uuid"=>"2dfc94e6-e74e-4014-9ff5-a71b8928f4fa",
|
489
|
+
# "original_filename"=>:"kitten.png"
|
490
|
+
# }
|
491
|
+
# ]
|
492
|
+
```
|
493
|
+
|
494
|
+
|
495
|
+
### File API
|
496
|
+
|
497
|
+
FileApi provides an interface to manage single files, stored on Uploadcare Servers.
|
498
|
+
|
499
|
+
#### Get files
|
500
|
+
|
501
|
+
```console
|
502
|
+
# Valid options:
|
503
|
+
# removed: [true|false]
|
504
|
+
# stored: [true|false]
|
505
|
+
# limit: (1..1000)
|
506
|
+
# ordering: ["datetime_uploaded"|"-datetime_uploaded"]
|
507
|
+
# from: A starting point for filtering files. The value depends on your ordering parameter value.
|
508
|
+
$ Uploadcare::FileApi.get_files(ordering: "datetime_uploaded", limit: 10)
|
509
|
+
# => {
|
510
|
+
# "next"=>nil,
|
511
|
+
# "previous"=>nil,
|
512
|
+
# "total"=>2,
|
513
|
+
# "per_page"=>10,
|
514
|
+
# "results"=> [
|
515
|
+
# {
|
516
|
+
# "datetime_removed"=>nil,
|
517
|
+
# ... file data ...
|
518
|
+
# }
|
519
|
+
# ]
|
520
|
+
# }
|
521
|
+
```
|
522
|
+
|
523
|
+
|
524
|
+
#### Get a file by UUID
|
525
|
+
|
526
|
+
```console
|
527
|
+
$ Uploadcare::FileApi.get_file("7b2b35b4-125b-4c1e-9305-12e8da8916eb")
|
528
|
+
# => {
|
529
|
+
# "cdn_url"=>"https://ucarecdn.com/7b2b35b4-125b-4c1e-9305-12e8da8916eb/",
|
530
|
+
# ...other file data...
|
531
|
+
# }
|
532
|
+
```
|
533
|
+
|
534
|
+
|
535
|
+
#### Copy a file to default storage. Source can be UID or full CDN link
|
536
|
+
|
537
|
+
```console
|
538
|
+
# Valid options:
|
539
|
+
# stored: [true|false]
|
540
|
+
$ Uploadcare::FileApi.local_copy_file("2d33999d-c74a-4ff9-99ea-abc23496b052", store: false)
|
541
|
+
# => {
|
542
|
+
# "uuid"=>"f486132c-2fa5-454e-9e70-93c5e01a7e04",
|
543
|
+
# ...other file data...
|
544
|
+
# }
|
545
|
+
```
|
546
|
+
|
547
|
+
#### Copy a file to custom storage. Source can be UID or full CDN link
|
548
|
+
|
549
|
+
```console
|
550
|
+
# Valid options:
|
551
|
+
# make_public: [true|false]
|
552
|
+
$ Uploadcare::FileApi.remote_copy_file("2d33999d-c74a-4ff9-99ea-abc23496b052", "mytarget", make_public: false)
|
553
|
+
# => {
|
554
|
+
# "uuid"=>"f486132c-2fa5-454e-9e70-93c5e01a7e04",
|
555
|
+
# ...other file data...
|
556
|
+
# }
|
557
|
+
```
|
558
|
+
|
559
|
+
|
560
|
+
#### Store a file by UUID
|
561
|
+
|
562
|
+
```console
|
563
|
+
$ Uploadcare::FileApi.store_file("2d33999d-c74a-4ff9-99ea-abc23496b052")
|
564
|
+
# => {
|
565
|
+
# "uuid"=>"2d33999d-c74a-4ff9-99ea-abc23496b052",
|
566
|
+
# ...other file data...
|
567
|
+
# }
|
568
|
+
```
|
569
|
+
|
570
|
+
|
571
|
+
#### Store several files by UUIDs
|
572
|
+
|
573
|
+
```console
|
574
|
+
$ Uploadcare::FileApi.store_files(["f486132c-2fa5-454e-9e70-93c5e01a7e04"])
|
575
|
+
# => {
|
576
|
+
# "result" => [
|
577
|
+
# {
|
578
|
+
# "uuid"=>"f486132c-2fa5-454e-9e70-93c5e01a7e04",
|
579
|
+
# ...other file data...
|
580
|
+
# }
|
581
|
+
# ]
|
582
|
+
# }
|
583
|
+
```
|
584
|
+
|
585
|
+
|
586
|
+
#### Delete a file by UUID
|
587
|
+
|
588
|
+
```console
|
589
|
+
$ Uploadcare::FileApi.delete_file("2d33999d-c74a-4ff9-99ea-abc23496b052")
|
590
|
+
# => {
|
591
|
+
# "uuid"=>"2d33999d-c74a-4ff9-99ea-abc23496b052",
|
592
|
+
# ...other file data...
|
593
|
+
# }
|
594
|
+
```
|
595
|
+
|
596
|
+
|
597
|
+
#### Delete several files by UUIDs
|
598
|
+
|
599
|
+
```console
|
600
|
+
$ Uploadcare::FileApi.delete_files(["f486132c-2fa5-454e-9e70-93c5e01a7e04"])
|
601
|
+
# => {
|
602
|
+
# "result" => [
|
603
|
+
# {
|
604
|
+
# "uuid"=>"f486132c-2fa5-454e-9e70-93c5e01a7e04",
|
605
|
+
# ...other file data...
|
606
|
+
# }
|
607
|
+
# ]
|
608
|
+
# }
|
609
|
+
```
|
610
|
+
|
611
|
+
|
612
|
+
### Group API
|
613
|
+
|
614
|
+
GroupApi provides an interface to manage file groups stored on Uploadcare Servers.
|
615
|
+
|
616
|
+
#### Get file groups
|
617
|
+
|
618
|
+
```console
|
619
|
+
# Valid options:
|
620
|
+
# limit: (1..1000)
|
621
|
+
# ordering: ["datetime_created"|"-datetime_created"]
|
622
|
+
# from: A starting point for filtering group lists. MUST be a datetime value with T used as a separator.
|
623
|
+
# example: "2015-01-02T10:00:00"
|
624
|
+
$ Uploadcare::GroupApi.get_groups(ordering: "datetime_uploaded", limit: 10)
|
625
|
+
# => {
|
626
|
+
# "next"=>"next"=>"https://api.uploadcare.com/groups/?ordering=datetime_uploaded&limit=10&from=2021-07-16T11%3A12%3A12.236280%2B00%3A00&offset=0",
|
627
|
+
# "previous"=>nil,
|
628
|
+
# "total"=>82,
|
629
|
+
# "per_page"=>10,
|
630
|
+
# "results"=> [
|
631
|
+
# {
|
632
|
+
# "id"=>"d476f4c9-44a9-4670-88a5-c3cf5a26b6c2~20",
|
633
|
+
# "datetime_created"=>"2021-07-16T11:03:01.182239Z",
|
634
|
+
# "datetime_stored"=>nil,
|
635
|
+
# "files_count"=>20,
|
636
|
+
# "cdn_url"=>"https://ucarecdn.com/d476f4c9-44a9-4670-88a5-c3cf5d16b6c2~20/",
|
637
|
+
# "url"=>"https://api.uploadcare.com/groups/d476f4c9-44a9-4670-83a5-c3cf5d26b6c2~20/"
|
638
|
+
# },
|
639
|
+
# ... other groups data ...
|
640
|
+
# ]
|
641
|
+
# }
|
642
|
+
```
|
643
|
+
|
644
|
+
|
645
|
+
#### Get a single file group by a group ID
|
646
|
+
|
647
|
+
```console
|
648
|
+
$ Uploadcare::GroupApi.get_group("d476f4c9-44a9-4670-88a5-c3cf5d26a6c2~20")
|
649
|
+
# => {
|
650
|
+
# "cdn_url"=>"https://ucarecdn.com/d476f4c9-44a9-4670-88a5-c3cf5d26a6c2~20/",
|
651
|
+
# ...other group data...
|
652
|
+
# "files"=> [{
|
653
|
+
# "datetime_stored"=>"2021-07-29T08:31:45.668354Z",
|
654
|
+
# ...other file data...
|
655
|
+
# }]
|
656
|
+
# }
|
657
|
+
```
|
658
|
+
|
659
|
+
|
660
|
+
#### Store files of a group by a group ID
|
661
|
+
|
662
|
+
```console
|
663
|
+
$ Uploadcare::GroupApi.store_group("d476f4c9-44a9-4670-88a5-c3cf5d26a6c2~20")
|
664
|
+
# => "200 OK"
|
665
|
+
```
|
666
|
+
|
667
|
+
|
668
|
+
#### Create a new group by file's uuids.
|
669
|
+
|
670
|
+
It is possible to specify transformed URLs with UUIDs of files OR just UUIDs.
|
671
|
+
|
672
|
+
```
|
673
|
+
NOTE: Be sure to add a trailing slash "/" to the URL in case of specifying transformed URLs.
|
674
|
+
```
|
675
|
+
|
676
|
+
```console
|
677
|
+
$ Uploadcare::GroupApi.create_group(["e08dec9e-7e25-49c5-810e-4c360d86bbae/-/resize/300x500/"])
|
678
|
+
# => {
|
679
|
+
# "cdn_url"=>"https://ucarecdn.com/d476f4c9-44a9-4670-88a5-c3cf5d26a6c2~1/",
|
680
|
+
# ...other group data...
|
681
|
+
# "files"=> [{
|
682
|
+
# "datetime_stored"=>"2021-07-29T08:31:45.668354Z",
|
683
|
+
# ...other file data...
|
684
|
+
# }]
|
685
|
+
# }
|
686
|
+
```
|
687
|
+
|
688
|
+
|
689
|
+
#### Delete a file group by its ID
|
690
|
+
|
691
|
+
```console
|
692
|
+
$ Uploadcare::GroupApi.delete_group("90c93e96-965b-4dd2-b323-39d9bd5f492c~1")
|
693
|
+
# => "200 OK"
|
694
|
+
```
|
695
|
+
|
696
|
+
|
697
|
+
### Project API
|
698
|
+
|
699
|
+
ProjectApi interface provides just one method - to get a configuration of your Uploadcare project.
|
700
|
+
|
701
|
+
```console
|
702
|
+
$ Uploadcare::ProjectApi.get_project
|
703
|
+
# => {
|
704
|
+
# "collaborators"=>[],
|
705
|
+
# "name"=>"New project",
|
706
|
+
# "pub_key"=>"your_public_key",
|
707
|
+
# "autostore_enabled"=>true
|
708
|
+
# }
|
709
|
+
```
|
710
|
+
|
711
|
+
|
712
|
+
### Webhook API
|
713
|
+
|
714
|
+
WebhookApi allows to manage Uploadcare webhooks.
|
715
|
+
|
716
|
+
#### Get all webhooks
|
717
|
+
|
718
|
+
This method returns a non-paginated list of webhooks set in your project
|
719
|
+
|
720
|
+
```console
|
721
|
+
$ Uploadcare::WebhookApi.get_webhooks
|
722
|
+
# => [{
|
723
|
+
# "id"=>815677,
|
724
|
+
# "created"=>"2021-08-02T05:02:14.588794Z",
|
725
|
+
# "updated"=>"2021-08-02T05:02:14.588814Z",
|
726
|
+
# "event"=>"file.uploaded",
|
727
|
+
# "target_url"=>"https://example.com",
|
728
|
+
# "project"=>123682,
|
729
|
+
# "is_active"=>true
|
730
|
+
# }]
|
731
|
+
```
|
732
|
+
|
733
|
+
|
734
|
+
#### Create a new webhook
|
735
|
+
|
736
|
+
This method requires an URL that is triggered by an event, for example, a file upload. A target URL MUST be unique for each project — event type combination.
|
737
|
+
|
738
|
+
Each webhook payload can be signed with a secret (the `signing_secret` option) to ensure that the request comes from the expected sender.
|
739
|
+
More info about secure webhooks [here](https://uploadcare.com/docs/security/secure-webhooks/).
|
740
|
+
|
741
|
+
```console
|
742
|
+
# Valid options:
|
743
|
+
# event: ["file.uploaded"]
|
744
|
+
# is_active: [true|false]
|
745
|
+
$ Uploadcare::WebhookApi.create_webhook("https://example.com", event: "file.uploaded", is_active: true, signing_secret: "some-secret")
|
746
|
+
# => {
|
747
|
+
# "id"=>815671,
|
748
|
+
# "created"=>"2021-08-02T05:02:14.588794Z",
|
749
|
+
# "updated"=>"2021-08-02T05:02:14.588814Z",
|
750
|
+
# "event"=>"file.uploaded",
|
751
|
+
# "target_url"=>"https://example.com",
|
752
|
+
# "project"=>123682,
|
753
|
+
# "is_active"=>true
|
754
|
+
# }
|
755
|
+
```
|
756
|
+
|
757
|
+
|
758
|
+
#### Update an existing webhook by ID
|
759
|
+
|
760
|
+
Updating a webhook is available if webhook ID is known. The ID is returned in a response on creating or listing webhooks. Setting a signing secret is supported when updating a webhook as well.
|
761
|
+
|
762
|
+
```console
|
763
|
+
# Valid options:
|
764
|
+
# event: Presently, we only support the "file.uploaded" event
|
765
|
+
# is_active: [true|false]
|
766
|
+
$ Uploadcare::WebhookApi.update_webhook("webhook_id", target_url: "https://example1.com", event: "file.uploaded", is_active: false, signing_secret: "some-secret")
|
767
|
+
# => {
|
768
|
+
# "id"=>815671,
|
769
|
+
# "created"=>"2021-08-02T05:02:14.588794Z",
|
770
|
+
# "updated"=>"2021-08-02T05:02:14.588814Z",
|
771
|
+
# "event"=>"file.uploaded",
|
772
|
+
# "target_url"=>"https://example1.com",
|
773
|
+
# "project"=>123682,
|
774
|
+
# "is_active"=>false
|
775
|
+
# }
|
776
|
+
```
|
777
|
+
|
778
|
+
|
779
|
+
#### Delete an existing webhook by a target_url
|
780
|
+
|
781
|
+
```console
|
782
|
+
$ Uploadcare::WebhookApi.delete_webhook("https://example1.com")
|
783
|
+
# => Success(nil)
|
784
|
+
```
|
785
|
+
|
786
|
+
### Conversion API
|
787
|
+
|
788
|
+
ConversionApi provides methods to manage video and documents conversion.
|
789
|
+
|
790
|
+
#### Convert a document
|
791
|
+
|
792
|
+
This method requires an UUID of a previously uploaded to Uploadcare file and target format.
|
793
|
+
If using an image format, you can also specify a page number that must be converted for a document containing pages.
|
794
|
+
More info about document conversion can be found [here](https://uploadcare.com/docs/transformations/document-conversion/).
|
795
|
+
|
796
|
+
```console
|
797
|
+
$ Uploadcare::ConversionApi.convert_document(
|
798
|
+
$ { uuid: "466740dd-cfad-4de4-9218-1ddc0edf7aa6", format: "png", page: 1 },
|
799
|
+
$ store: false
|
800
|
+
$ )
|
801
|
+
# => Success({
|
802
|
+
# :result=>[{
|
803
|
+
# :original_source=>"466740dd-cfad-4de4-9218-1ddc0edf7aa6/document/-/format/png/-/page/1/",
|
804
|
+
# :token=>21316034,
|
805
|
+
# :uuid=>"db6e52b8-cc03-4174-a07a-012be43b144e"
|
806
|
+
# }],
|
807
|
+
# :problems=>{}
|
808
|
+
# })
|
809
|
+
```
|
810
|
+
|
811
|
+
|
812
|
+
#### Get a document conversion job status
|
813
|
+
|
814
|
+
This method requires a token obtained in a response to the [convert_document](#convert-a-document) method.
|
815
|
+
|
816
|
+
```console
|
817
|
+
$ Uploadcare::ConversionApi.get_document_conversion_status(21316034)
|
818
|
+
# => Success({
|
819
|
+
# :result=>{
|
820
|
+
# :uuid=>"db6e52b8-cc03-4174-a07a-012be43b144e"
|
821
|
+
# },
|
822
|
+
# :error=>nil,
|
823
|
+
# :status=>"finished"
|
824
|
+
# })
|
825
|
+
```
|
826
|
+
|
827
|
+
|
828
|
+
#### Convert a video
|
829
|
+
|
830
|
+
Such as the document conversion method, this method requires an UUID of a previously uploaded to Uploadcare file.
|
831
|
+
Also you have several options to control the way a video will be converted. All of them are optional.
|
832
|
+
Description of valid options and other info about video conversion can be found [here](https://uploadcare.com/docs/transformations/video-encoding/).
|
833
|
+
|
834
|
+
```console
|
835
|
+
$ Uploadcare::ConversionApi.convert_video(
|
836
|
+
$ {
|
837
|
+
$ uuid: "466740dd-cfad-4de4-9218-1ddc0edf7aa6",
|
838
|
+
$ format: "ogg",
|
839
|
+
$ quality: "best",
|
840
|
+
$ cut: { start_time: "0:0:0.0", length: "0:0:1.0" },
|
841
|
+
$ thumbs: { N: 2, number: 1 }
|
842
|
+
$ },
|
843
|
+
$ store: false
|
844
|
+
$ )
|
845
|
+
# => Success({
|
846
|
+
# :result=>[{
|
847
|
+
# :original_source=>"80b807be-faad-4f01-bbbe-0bbde172b9de/video/-/size/600x400/change_ratio/-/quality/best/-/format/ogg/-/cut/0:0:0.0/0:0:1.0/-/thumbs~2/1/",
|
848
|
+
# :token=>916090555,
|
849
|
+
# :uuid=>"df597ef4-59e7-47ef-af5d-365d8409934c~2",
|
850
|
+
# :thumbnails_group_uuid=>"df597ef4-59e7-47ef-af5d-365d8409934c~2"
|
851
|
+
# }],
|
852
|
+
# :problems=>{}
|
853
|
+
# })
|
854
|
+
```
|
855
|
+
|
856
|
+
|
857
|
+
#### Get a video conversion job status
|
858
|
+
|
859
|
+
This method requires a token obtained in a response to the [convert_video](#convert-a-video) method.
|
860
|
+
|
861
|
+
```console
|
862
|
+
$ Uploadcare::ConversionApi.get_video_conversion_status(916090555)
|
863
|
+
# => Success({
|
864
|
+
# :result=>{
|
865
|
+
# :uuid=>"f0a3e66e-cd22-4397-ba0a-8a8becc925f9",
|
866
|
+
# :thumbnails_group_uuid=>"df597ef4-59e7-47ef-af5d-365d8409934c~2"
|
867
|
+
# },
|
868
|
+
# :error=>nil,
|
869
|
+
# :status=>"finished"
|
870
|
+
# })
|
871
|
+
```
|
872
|
+
|
873
|
+
|
874
|
+
### File Metadata Api
|
875
|
+
|
876
|
+
File metadata is additional, arbitrary data, associated with uploaded file.
|
877
|
+
As an example, you could store unique file identifier from your system.
|
878
|
+
Metadata is key-value data.
|
879
|
+
|
880
|
+
#### Get file's metadata keys and values
|
881
|
+
|
882
|
+
```console
|
883
|
+
$ Uploadcare::FileMetadataApi.file_metadata('f757ea10-8b1a-4361-9a7c-56bfa5d45176')
|
884
|
+
# => {:"sample-key"=>"sample-value"}
|
885
|
+
```
|
886
|
+
|
887
|
+
#### Get the value of a single metadata key
|
888
|
+
|
889
|
+
```console
|
890
|
+
$ Uploadcare::FileMetadataApi.file_metadata_value('f757ea10-8b1a-4361-9a7c-56bfa5d45176', 'sample-key')
|
891
|
+
# => "sample-value"
|
892
|
+
```
|
893
|
+
|
894
|
+
#### Update the value of a single metadata key
|
895
|
+
|
896
|
+
If the key does not exist, it will be created.
|
897
|
+
|
898
|
+
```console
|
899
|
+
$ Uploadcare::FileMetadataApi.update_file_metadata('f757ea10-8b1a-4361-9a7c-56bfa5d45176', 'sample-key', 'new-value')
|
900
|
+
# => "new-value"
|
901
|
+
```
|
902
|
+
|
903
|
+
#### Delete a file's metadata key
|
904
|
+
|
905
|
+
```console
|
906
|
+
$ Uploadcare::FileMetadataApi.delete_file_metadata('f757ea10-8b1a-4361-9a7c-56bfa5d45176', 'sample-key')
|
907
|
+
# => "200 OK"
|
908
|
+
```
|
909
|
+
|
910
|
+
|
911
|
+
### Add-Ons Api
|
912
|
+
|
913
|
+
An Add-On is an application implemented by Uploadcare that accepts uploaded files as an input and can produce other files and/or appdata as an output.
|
914
|
+
|
915
|
+
#### Execute AWS Rekognition Add-On for a given target to detect labels in an image
|
916
|
+
|
917
|
+
```
|
918
|
+
Note: Detected labels are stored in the file's appdata.
|
919
|
+
```
|
920
|
+
|
921
|
+
```console
|
922
|
+
$ Uploadcare::AddonsApi.rekognition_detect_labels('f757ea10-8b1a-4361-9a7c-56bfa5d45176')
|
923
|
+
# => {"request_id"=>"dfeaf81c-5c0d-49d5-8ed4-ac09bac7998e"}
|
924
|
+
```
|
925
|
+
|
926
|
+
#### Check the status of an Add-On execution request that had been started using the Execute Add-On operation
|
927
|
+
|
928
|
+
```console
|
929
|
+
$ Uploadcare::AddonsApi.rekognition_detect_labels_status('dfeaf81c-5c0d-49d5-8ed4-ac09bac7998e')
|
930
|
+
# => {"status"=>"done"}
|
931
|
+
```
|
932
|
+
|
933
|
+
#### Execute ClamAV virus checking Add-On for a given target
|
934
|
+
|
935
|
+
```console
|
936
|
+
$ Uploadcare::AddonsApi.virus_scan('dfeaf81c-5c0d-49d5-8ed4-ac09bac7998e')
|
937
|
+
# => {"request_id"=>"1b0126de-ace6-455b-82e2-25f4aa33fc6f"}
|
938
|
+
```
|
939
|
+
|
940
|
+
#### Check the status of an Add-On execution request that had been started using the Execute Add-On operation
|
941
|
+
|
942
|
+
```console
|
943
|
+
$ Uploadcare::AddonsApi.virus_scan_status('1b0126de-ace6-455b-82e2-25f4aa33fc6f')
|
944
|
+
# => {"status"=>"done"}
|
945
|
+
```
|
946
|
+
|
947
|
+
#### Execute remove.bg background image removal Add-On for a given target
|
948
|
+
|
949
|
+
```console
|
950
|
+
$ Uploadcare::AddonsApi.remove_bg('f757ea10-8b1a-4361-9a7c-56bfa5d45176')
|
951
|
+
# => {"request_id"=>"6d26a7d5-0955-4aeb-a9b1-c9776c83aa4c"}
|
952
|
+
```
|
953
|
+
|
954
|
+
#### Check the status of an Add-On execution request that had been started using the Execute Add-On operation
|
955
|
+
|
956
|
+
```console
|
957
|
+
$ Uploadcare::AddonsApi.remove_bg_status('6d26a7d5-0955-4aeb-a9b1-c9776c83aa4c')
|
958
|
+
# => {"status"=>"done", "result"=>{"file_id"=>"8f0a2a28-3ed7-481e-b415-ee3cce982aaa"}}
|
959
|
+
```
|
960
|
+
|
961
|
+
|
962
|
+
## Useful links
|
963
|
+
* [Uploadcare documentation](https://uploadcare.com/docs/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-rails)
|
964
|
+
* [Upload API reference](https://uploadcare.com/api-refs/upload-api/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-rails)
|
965
|
+
* [REST API reference](https://uploadcare.com/api-refs/rest-api/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-rails)
|
966
|
+
* [Changelog](./CHANGELOG.md)
|
967
|
+
* [Contributing guide](https://github.com/uploadcare/.github/blob/master/CONTRIBUTING.md)
|
968
|
+
* [Security policy](https://github.com/uploadcare/uploadcare-rails/security/policy)
|
969
|
+
* [Support](https://github.com/uploadcare/.github/blob/master/SUPPORT.md)
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
4
|
+
|
5
|
+
# Maintain your gem's version:
|
6
|
+
require 'uploadcare/rails/version'
|
7
|
+
|
8
|
+
# Describe your gem and declare its dependencies:
|
9
|
+
Gem::Specification.new do |gem|
|
10
|
+
gem.required_ruby_version = '>= 2.7.0'
|
11
|
+
|
12
|
+
gem.name = 'uploadcare-rails'
|
13
|
+
gem.authors = ['@dmitrijivanchenko (Dmitrij Ivanchenko), @T0mbery (Andrey Aksenov)',
|
14
|
+
'kraft001 (Konstantin Rafalskii)']
|
15
|
+
gem.email = ['hello@uploadcare.com']
|
16
|
+
gem.summary = 'Rails gem for Uploadcare'
|
17
|
+
gem.description = <<~DESCRIPTION
|
18
|
+
Rails API client (based on uploadcare-ruby) that handles uploads
|
19
|
+
and further operations with files by wrapping Uploadcare Upload and REST APIs.
|
20
|
+
DESCRIPTION
|
21
|
+
gem.metadata = {
|
22
|
+
'source_code_uri' => 'https://github.com/uploadcare/uploadcare-rails',
|
23
|
+
'bug_tracker_uri' => 'https://github.com/uploadcare/uploadcare-rails/issues',
|
24
|
+
'changelog_uri' => 'https://github.com/uploadcare/uploadcare-rails/blob/main/CHANGELOG.md',
|
25
|
+
'documentation_uri' => 'https://www.rubydoc.info/gems/uploadcare-rails/',
|
26
|
+
'homepage_uri' => 'https://uploadcare.com/',
|
27
|
+
'rubygems_mfa_required' => 'true'
|
28
|
+
}
|
29
|
+
gem.homepage = 'https://uploadcare.com/'
|
30
|
+
gem.license = 'MIT'
|
31
|
+
|
32
|
+
gem.files = Dir[
|
33
|
+
'lib/**/*',
|
34
|
+
'Gemfile',
|
35
|
+
'Rakefile',
|
36
|
+
'uploadcare-rails.gemspec',
|
37
|
+
'LICENSE.txt',
|
38
|
+
'README.md',
|
39
|
+
'CHANGELOG.md'
|
40
|
+
]
|
41
|
+
|
42
|
+
gem.extra_rdoc_files = %w[README.md LICENSE.txt]
|
43
|
+
gem.rdoc_options = %w[--line-numbers --title Uploadcare --main README.rdoc --encoding=UTF-8]
|
44
|
+
|
45
|
+
gem.version = Uploadcare::Rails::VERSION
|
46
|
+
gem.add_dependency 'rails', '>= 6'
|
47
|
+
gem.add_dependency 'uploadcare-ruby', '>= 4.3'
|
48
|
+
|
49
|
+
gem.add_development_dependency 'rspec', '~> 3.12'
|
50
|
+
gem.add_development_dependency 'rspec-rails', '>= 5.1'
|
51
|
+
gem.add_development_dependency 'rubocop', '~> 1.48'
|
52
|
+
gem.add_development_dependency 'vcr', '~> 6.1'
|
53
|
+
gem.add_development_dependency 'webmock', '~> 3.18'
|
54
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uploadcare-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.3.2
|
4
|
+
version: 3.3.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "@dmitrijivanchenko (Dmitrij Ivanchenko), @T0mbery (Andrey Aksenov)"
|
@@ -116,8 +116,14 @@ email:
|
|
116
116
|
- hello@uploadcare.com
|
117
117
|
executables: []
|
118
118
|
extensions: []
|
119
|
-
extra_rdoc_files:
|
119
|
+
extra_rdoc_files:
|
120
|
+
- README.md
|
121
|
+
- LICENSE.txt
|
120
122
|
files:
|
123
|
+
- CHANGELOG.md
|
124
|
+
- Gemfile
|
125
|
+
- LICENSE.txt
|
126
|
+
- README.md
|
121
127
|
- Rakefile
|
122
128
|
- lib/generators/templates/uploadcare_config_template.erb
|
123
129
|
- lib/generators/uploadcare_config_generator.rb
|
@@ -150,16 +156,25 @@ files:
|
|
150
156
|
- lib/uploadcare/rails/services/id_extractor.rb
|
151
157
|
- lib/uploadcare/rails/transformations/image_transformations.rb
|
152
158
|
- lib/uploadcare/rails/version.rb
|
153
|
-
|
159
|
+
- uploadcare-rails.gemspec
|
160
|
+
homepage: https://uploadcare.com/
|
154
161
|
licenses:
|
155
162
|
- MIT
|
156
163
|
metadata:
|
157
|
-
|
164
|
+
source_code_uri: https://github.com/uploadcare/uploadcare-rails
|
158
165
|
bug_tracker_uri: https://github.com/uploadcare/uploadcare-rails/issues
|
159
166
|
changelog_uri: https://github.com/uploadcare/uploadcare-rails/blob/main/CHANGELOG.md
|
167
|
+
documentation_uri: https://www.rubydoc.info/gems/uploadcare-rails/
|
168
|
+
homepage_uri: https://uploadcare.com/
|
160
169
|
rubygems_mfa_required: 'true'
|
161
170
|
post_install_message:
|
162
|
-
rdoc_options:
|
171
|
+
rdoc_options:
|
172
|
+
- "--line-numbers"
|
173
|
+
- "--title"
|
174
|
+
- Uploadcare
|
175
|
+
- "--main"
|
176
|
+
- README.rdoc
|
177
|
+
- "--encoding=UTF-8"
|
163
178
|
require_paths:
|
164
179
|
- lib
|
165
180
|
required_ruby_version: !ruby/object:Gem::Requirement
|