uploadcare-rails 3.3.2 → 3.3.3

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