uploadcare-ruby 2.1.2 → 3.0.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 +4 -4
- data/.github/workflows/gem-push.yml +20 -0
- data/.github/workflows/ruby.yml +52 -0
- data/.gitignore +13 -6
- data/.rspec +2 -0
- data/.rubocop.yml +20 -0
- data/.yardopts +4 -0
- data/CHANGELOG.md +24 -51
- data/DEVELOPMENT.md +18 -0
- data/Gemfile +2 -0
- data/LICENSE +1 -1
- data/README.md +164 -578
- data/Rakefile +5 -5
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/lib/uploadcare.rb +36 -32
- data/lib/uploadcare/api/api.rb +25 -0
- data/lib/uploadcare/client/file_client.rb +44 -0
- data/lib/uploadcare/client/file_list_client.rb +46 -0
- data/lib/uploadcare/client/group_client.rb +45 -0
- data/lib/uploadcare/client/multipart_upload/chunks_client.rb +46 -0
- data/lib/uploadcare/client/multipart_upload_client.rb +62 -0
- data/lib/uploadcare/client/project_client.rb +18 -0
- data/lib/uploadcare/client/rest_client.rb +73 -0
- data/lib/uploadcare/client/rest_group_client.rb +23 -0
- data/lib/uploadcare/client/upload_client.rb +35 -0
- data/lib/uploadcare/client/uploader_client.rb +93 -0
- data/lib/uploadcare/client/webhook_client.rb +43 -0
- data/lib/uploadcare/concern/error_handler.rb +54 -0
- data/lib/uploadcare/concern/throttle_handler.rb +25 -0
- data/lib/uploadcare/concern/upload_error_handler.rb +32 -0
- data/lib/uploadcare/entity/decorator/paginator.rb +81 -0
- data/lib/uploadcare/entity/entity.rb +18 -0
- data/lib/uploadcare/entity/file.rb +81 -0
- data/lib/uploadcare/entity/file_list.rb +30 -0
- data/lib/uploadcare/entity/group.rb +41 -0
- data/lib/uploadcare/entity/group_list.rb +24 -0
- data/lib/uploadcare/entity/project.rb +13 -0
- data/lib/uploadcare/entity/uploader.rb +73 -0
- data/lib/uploadcare/entity/webhook.rb +14 -0
- data/lib/uploadcare/exception/request_error.rb +9 -0
- data/lib/uploadcare/exception/throttle_error.rb +14 -0
- data/lib/uploadcare/param/authentication_header.rb +25 -0
- data/lib/uploadcare/param/param.rb +10 -0
- data/lib/uploadcare/param/secure_auth_header.rb +37 -0
- data/lib/uploadcare/param/simple_auth_header.rb +14 -0
- data/lib/uploadcare/param/upload/signature_generator.rb +24 -0
- data/lib/uploadcare/param/upload/upload_params_generator.rb +23 -0
- data/lib/uploadcare/param/user_agent.rb +21 -0
- data/lib/uploadcare/ruby/version.rb +5 -0
- data/uploadcare-ruby.gemspec +50 -37
- metadata +98 -113
- data/.travis.yml +0 -26
- data/UPGRADE_NOTES.md +0 -36
- data/lib/uploadcare/api.rb +0 -26
- data/lib/uploadcare/api/file_api.rb +0 -7
- data/lib/uploadcare/api/file_list_api.rb +0 -19
- data/lib/uploadcare/api/file_storage_api.rb +0 -34
- data/lib/uploadcare/api/group_api.rb +0 -38
- data/lib/uploadcare/api/group_list_api.rb +0 -17
- data/lib/uploadcare/api/project_api.rb +0 -9
- data/lib/uploadcare/api/raw_api.rb +0 -38
- data/lib/uploadcare/api/uploading_api.rb +0 -71
- data/lib/uploadcare/api/uploading_api/upload_params.rb +0 -72
- data/lib/uploadcare/api/validators/file_list_options_validator.rb +0 -73
- data/lib/uploadcare/api/validators/group_list_options_validator.rb +0 -49
- data/lib/uploadcare/errors/errors.rb +0 -64
- data/lib/uploadcare/resources/file.rb +0 -164
- data/lib/uploadcare/resources/file_list.rb +0 -14
- data/lib/uploadcare/resources/group.rb +0 -115
- data/lib/uploadcare/resources/group_list.rb +0 -14
- data/lib/uploadcare/resources/project.rb +0 -13
- data/lib/uploadcare/resources/resource_list.rb +0 -83
- data/lib/uploadcare/rest/auth/auth.rb +0 -31
- data/lib/uploadcare/rest/auth/secure.rb +0 -43
- data/lib/uploadcare/rest/auth/simple.rb +0 -16
- data/lib/uploadcare/rest/connections/api_connection.rb +0 -53
- data/lib/uploadcare/rest/connections/upload_connection.rb +0 -22
- data/lib/uploadcare/rest/middlewares/auth_middleware.rb +0 -24
- data/lib/uploadcare/rest/middlewares/parse_json_middleware.rb +0 -33
- data/lib/uploadcare/rest/middlewares/raise_error_middleware.rb +0 -21
- data/lib/uploadcare/utils/parser.rb +0 -71
- data/lib/uploadcare/utils/user_agent.rb +0 -44
- data/lib/uploadcare/version.rb +0 -3
- data/spec/api/file_list_api_spec.rb +0 -95
- data/spec/api/file_storage_api_spec.rb +0 -88
- data/spec/api/group_list_api_spec.rb +0 -59
- data/spec/api/raw_api_spec.rb +0 -25
- data/spec/api/uploading_api/upload_params_spec.rb +0 -99
- data/spec/api/uploading_api_spec.rb +0 -59
- data/spec/resources/file_list_spec.rb +0 -25
- data/spec/resources/file_spec.rb +0 -223
- data/spec/resources/group_list_spec.rb +0 -25
- data/spec/resources/group_spec.rb +0 -101
- data/spec/resources/operations_spec.rb +0 -59
- data/spec/resources/project_spec.rb +0 -21
- data/spec/rest/api_connection_spec.rb +0 -68
- data/spec/rest/auth/secure_spec.rb +0 -66
- data/spec/rest/auth/simple_spec.rb +0 -31
- data/spec/rest/errors_spec.rb +0 -75
- data/spec/rest/upload_connection_spec.rb +0 -19
- data/spec/shared/resource_list.rb +0 -188
- data/spec/spec_helper.rb +0 -54
- data/spec/uploadcare_spec.rb +0 -43
- data/spec/utils/parser_spec.rb +0 -85
- data/spec/utils/user_agent_spec.rb +0 -46
- data/spec/view.png +0 -0
- data/spec/view2.jpg +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4bdafd33b7c8ae9c4497155542a87b3b1797d72828d9be8649c74b731afefe10
|
|
4
|
+
data.tar.gz: e88de8ba3a43eb0ed7fa878d34831a11dadd7e1d103ea9781beed93bcd9b5eb9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f7adc9b72cf7587f09d6ffc1f3eea789d3c2c7ccb747b364b254a89783449aac38185a0cfcde5c7c89088eee658629804d606a1111d213e97433bc4727b31f2b
|
|
7
|
+
data.tar.gz: e88dc8694ac67b3eefba88218b111a5d51f8696e3dc9de9d3f46cf3bd7dbfadc53589ce2f94e43b78d1279758821edbe206c24a62df4088d126f76b90f200d94
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
name: Publish Gem
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- v*
|
|
7
|
+
jobs:
|
|
8
|
+
build:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v1
|
|
13
|
+
|
|
14
|
+
- name: Release Gem
|
|
15
|
+
if: contains(github.ref, 'refs/tags/v')
|
|
16
|
+
uses: cadwallion/publish-rubygems-action@v1.0.0
|
|
17
|
+
env:
|
|
18
|
+
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
|
19
|
+
RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
|
|
20
|
+
RELEASE_COMMAND: rake release
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
|
2
|
+
# They are provided by a third-party and are governed by
|
|
3
|
+
# separate terms of service, privacy policy, and support
|
|
4
|
+
# documentation.
|
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
|
7
|
+
|
|
8
|
+
name: Ruby
|
|
9
|
+
|
|
10
|
+
on: [push, pull_request]
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
test:
|
|
14
|
+
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
strategy:
|
|
17
|
+
matrix:
|
|
18
|
+
ruby-version: [
|
|
19
|
+
'2.4', '2.5', # eol
|
|
20
|
+
'2.6', '2.7', # maintained
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v2
|
|
25
|
+
- name: Set up Ruby
|
|
26
|
+
uses: ruby/setup-ruby@v1
|
|
27
|
+
with:
|
|
28
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
29
|
+
bundler-cache: true
|
|
30
|
+
- name: Run tests
|
|
31
|
+
run: bundle exec rake
|
|
32
|
+
env:
|
|
33
|
+
UPLOADCARE_PUBLIC_KEY: demopublickey
|
|
34
|
+
UPLOADCARE_SECRET_KEY: demoprivatekey
|
|
35
|
+
|
|
36
|
+
style-check:
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
continue-on-error: true
|
|
39
|
+
strategy:
|
|
40
|
+
matrix:
|
|
41
|
+
ruby-version: ['2.7',]
|
|
42
|
+
steps:
|
|
43
|
+
- uses: actions/checkout@v2
|
|
44
|
+
- name: Set up Ruby
|
|
45
|
+
uses: ruby/setup-ruby@v1
|
|
46
|
+
with:
|
|
47
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
48
|
+
bundler-cache: true
|
|
49
|
+
- name: Install Rubocop
|
|
50
|
+
run: gem install rubocop
|
|
51
|
+
- name: Check codestyle
|
|
52
|
+
run: rubocop
|
data/.gitignore
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/.bundle/
|
|
2
|
+
/.yardoc
|
|
3
|
+
/_yardoc/
|
|
4
|
+
/coverage/
|
|
5
|
+
/doc/
|
|
6
|
+
/pkg/
|
|
7
|
+
/spec/reports/
|
|
8
|
+
/tmp/
|
|
9
|
+
/spec/fixtures/big.jpeg
|
|
4
10
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
11
|
+
# rspec failure tracking
|
|
12
|
+
.rspec_status
|
|
13
|
+
.byebug_history
|
|
14
|
+
Gemfile.lock
|
data/.rspec
CHANGED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
TargetRubyVersion: 2.7
|
|
3
|
+
|
|
4
|
+
Metrics/LineLength:
|
|
5
|
+
Max: 120
|
|
6
|
+
|
|
7
|
+
IneffectiveAccessModifier:
|
|
8
|
+
Enabled: false
|
|
9
|
+
|
|
10
|
+
Metrics/BlockLength:
|
|
11
|
+
Exclude:
|
|
12
|
+
- 'bin/'
|
|
13
|
+
- 'spec/**/*'
|
|
14
|
+
- 'uploadcare-ruby.gemspec'
|
|
15
|
+
|
|
16
|
+
Metrics/MethodLength:
|
|
17
|
+
Max: 20
|
|
18
|
+
|
|
19
|
+
Style/Documentation:
|
|
20
|
+
Enabled: false
|
data/.yardopts
ADDED
data/CHANGELOG.md
CHANGED
|
@@ -1,65 +1,38 @@
|
|
|
1
1
|
# Changelog
|
|
2
|
-
All notable changes to this project will be documented in this file.
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
3
|
+
## [Unreleased](https://github.com/uploadcare/uploadcare-ruby/tree/develop)
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
[Full Changelog](https://github.com/uploadcare/uploadcare-ruby/compare/0baded5593869f1d741f0fff22c58814970726b2...HEAD)
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
- Show Uploadcare::USER_AGENT deprecation warning only when the constant is being used
|
|
7
|
+
## [3.0.4-dev] 2020-03-19
|
|
11
8
|
|
|
12
|
-
|
|
9
|
+
- Added better pagination methods for GroupList & FileList
|
|
10
|
+
- Improved documentation and install instructions
|
|
11
|
+
- Added CI
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
- User-Agent format reports gem name, version and environment
|
|
17
|
-
|
|
18
|
-
## 2.1.0 - 2018-04-23 [YANKED]
|
|
13
|
+
## [3.0.3-dev] 2020-03-13
|
|
14
|
+
- Added better pagination and iterators for GroupList & FileList
|
|
19
15
|
|
|
20
|
-
##
|
|
16
|
+
## [3.0.2-dev] 2020-03-11
|
|
21
17
|
|
|
22
|
-
|
|
18
|
+
- Expanded File and Group entities
|
|
19
|
+
- Changed user agent syntax
|
|
23
20
|
|
|
24
|
-
|
|
25
|
-
- Support for `store` flag in [Upload API](https://uploadcare.com/documentation/upload/) methods
|
|
26
|
-
- Methods to store/delete multiple files at once: `Uploadcare::Api#store_files` & `Uploadcare::Api#delete_files`
|
|
21
|
+
## [3.0.1-dev] 2020-03-11
|
|
27
22
|
|
|
23
|
+
- Added Upload/group functionality
|
|
24
|
+
- Added user API
|
|
25
|
+
- Added user agent
|
|
26
|
+
- Isolated clients, entities and concerns
|
|
27
|
+
- Expanded documentation
|
|
28
|
+
## [3.0.0-dev] 2020-02-18
|
|
28
29
|
### Changed
|
|
29
|
-
-
|
|
30
|
-
- All POST/PUT/DELETE params are now being sent as JSON instead of being form-encoded
|
|
31
|
-
- Pagination implementation for files and groups
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
### [1.2.1] - 2018-05-24
|
|
35
|
-
|
|
36
|
-
### Changed
|
|
37
|
-
- Allow user to override User-Agent header
|
|
38
|
-
- User-Agent format reports gem name, version and environment
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
## 1.1.0 - 2017-03-21
|
|
30
|
+
- Rewrote gem from scratch
|
|
42
31
|
|
|
43
32
|
### Added
|
|
44
|
-
- Added to new methods to `Uploadcare::Api::File`, `#internal_copy` and `#external_copy`.
|
|
45
|
-
- Added support of [secure authorization](https://uploadcare.com/documentation/rest/#request) for REST API. It is now used by default (can be overriden in config)
|
|
46
|
-
|
|
47
|
-
### Fixed
|
|
48
|
-
- Fixed middleware names that could break other gems ([#13](https://github.com/uploadcare/uploadcare-ruby/issues/13)).
|
|
49
|
-
|
|
50
|
-
### Deprecated
|
|
51
|
-
- `Uploadcare::Api::File#copy` in favor of `#internal_copy` and `#external_copy`.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
## 1.0.6, 2017-01-30
|
|
55
|
-
|
|
56
|
-
### Added
|
|
57
|
-
- Ruby version and public API key sent via User-Agent header (can be overriden in config)
|
|
58
|
-
|
|
59
|
-
### Fixed
|
|
60
|
-
- Incorrect dependencies
|
|
61
|
-
|
|
62
33
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
34
|
+
- Client wrappers for REST API
|
|
35
|
+
- Serializers for REST API
|
|
36
|
+
- Client wrappers for Upload API
|
|
37
|
+
- Serializers for Upload API
|
|
38
|
+
- rdoc documentation
|
data/DEVELOPMENT.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
## How to contribute
|
|
2
|
+
|
|
3
|
+
https://github.com/uploadcare/.github/blob/master/CONTRIBUTING.md
|
|
4
|
+
|
|
5
|
+
## Useful docs
|
|
6
|
+
|
|
7
|
+
### Uploadcare:
|
|
8
|
+
|
|
9
|
+
* https://uploadcare.com/docs/api_reference/
|
|
10
|
+
* https://uploadcare.com/api-refs/rest-api/
|
|
11
|
+
|
|
12
|
+
### ApiStruct:
|
|
13
|
+
|
|
14
|
+
* https://github.com/rubygarage/api_struct/
|
|
15
|
+
|
|
16
|
+
## Uploadcare-ruby gem architecture
|
|
17
|
+
|
|
18
|
+

|
data/Gemfile
CHANGED
data/LICENSE
CHANGED
data/README.md
CHANGED
|
@@ -1,117 +1,79 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
# Ruby integration for Uploadcare
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
[![Build Status][actions-img]][actions-badge]
|
|
3
5
|
[![Uploadcare stack on StackShare][stack-img]][stack]
|
|
6
|
+
<!--[![Coverage Status][coverals-img]][coverals]-->
|
|
4
7
|
|
|
5
|
-
[
|
|
6
|
-
[
|
|
7
|
-
[coverals-img]: https://coveralls.io/repos/github/uploadcare/uploadcare-ruby/badge.svg?branch=
|
|
8
|
-
[coverals]: https://coveralls.io/github/uploadcare/uploadcare-ruby?branch=
|
|
8
|
+
[actions-badge]: https://github.com/uploadcare/uploadcare-ruby/actions/workflows/ruby.yml
|
|
9
|
+
[actions-img]: https://github.com/uploadcare/uploadcare-ruby/actions/workflows/ruby.yml/badge.svg
|
|
10
|
+
[coverals-img]: https://coveralls.io/repos/github/uploadcare/uploadcare-ruby/badge.svg?branch=main
|
|
11
|
+
[coverals]: https://coveralls.io/github/uploadcare/uploadcare-ruby?branch=main
|
|
9
12
|
[stack-img]: https://img.shields.io/badge/tech-stack-0690fa.svg?style=flat
|
|
10
13
|
[stack]: https://stackshare.io/uploadcare/stacks/
|
|
11
14
|
|
|
12
|
-
|
|
15
|
+
|
|
16
|
+
Uploadcare Ruby integration handles uploads and further operations with files by
|
|
17
|
+
wrapping Upload and REST APIs.
|
|
18
|
+
|
|
19
|
+
* [Installation](#installation)
|
|
20
|
+
* [Usage](#usage)
|
|
21
|
+
* [Useful links](#useful-links)
|
|
22
|
+
|
|
23
|
+
## Requirements
|
|
24
|
+
* ruby 2.4+
|
|
25
|
+
|
|
26
|
+
## Compatibility
|
|
27
|
+
|
|
28
|
+
Note that `uploadcare-ruby` **3.x** is not backward compativble with
|
|
29
|
+
**[2.x](https://github.com/uploadcare/uploadcare-ruby/tree/v2.x)**.
|
|
13
30
|
|
|
14
31
|
## Installation
|
|
15
32
|
|
|
16
|
-
|
|
17
|
-
First of, add the following line to your app's Gemfile:
|
|
33
|
+
Add this line to your application's Gemfile:
|
|
18
34
|
|
|
19
35
|
```ruby
|
|
20
36
|
gem 'uploadcare-ruby'
|
|
21
37
|
```
|
|
22
38
|
|
|
23
|
-
|
|
39
|
+
And then execute:
|
|
24
40
|
|
|
25
|
-
|
|
26
|
-
$ bundle install
|
|
27
|
-
```
|
|
41
|
+
$ bundle
|
|
28
42
|
|
|
29
|
-
|
|
43
|
+
If already not, create your project in [Uploadcare dashboard](https://uploadcare.com/dashboard/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby) and copy
|
|
44
|
+
its API keys from there.
|
|
30
45
|
|
|
31
|
-
|
|
32
|
-
|
|
46
|
+
Set your Uploadcare keys in config file or through environment variables:
|
|
47
|
+
```bash
|
|
48
|
+
export UPLOADCARE_PUBLIC_KEY=demopublickey
|
|
49
|
+
export UPLOADCARE_SECRET_KEY=demoprivatekey
|
|
33
50
|
```
|
|
34
51
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
52
|
+
Or configure your app yourself if you are using different way of storing keys.
|
|
53
|
+
Gem configuration is available in `Uploadcare.configuration`. Full list of
|
|
54
|
+
settings can be seen in [`lib/uploadcare.rb`](lib/uploadcare.rb)
|
|
38
55
|
|
|
39
56
|
```ruby
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
@api = Uploadcare::Api.new(settings) # using user-defined settings
|
|
57
|
+
# your_config_initializer_file.rb
|
|
58
|
+
Uploadcare.config.public_key = 'demopublickey'
|
|
59
|
+
Uploadcare.config.secret_key = 'demoprivatekey'
|
|
45
60
|
```
|
|
46
61
|
|
|
47
|
-
Here's how the default settings look like:
|
|
48
|
-
|
|
49
|
-
``` ruby
|
|
50
|
-
{
|
|
51
|
-
public_key: 'demopublickey', # you need to override this
|
|
52
|
-
private_key: 'demoprivatekey', # you need to override this
|
|
53
|
-
upload_url_base: 'https://upload.uploadcare.com',
|
|
54
|
-
api_url_base: 'https://api.uploadcare.com',
|
|
55
|
-
static_url_base: 'https://ucarecdn.com',
|
|
56
|
-
api_version: '0.5',
|
|
57
|
-
cache_files: true,
|
|
58
|
-
autostore: :auto,
|
|
59
|
-
auth_scheme: :secure
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
You're free to use both `demopublickey` and `demoprivatekey`
|
|
64
|
-
for initial testing purposes. We wipe out files loaded to our
|
|
65
|
-
demo account periodically. For a better experience,
|
|
66
|
-
consider creating an Uploadcare account. Check out
|
|
67
|
-
[this](http://kb.uploadcare.com/article/234-uc-project-and-account)
|
|
68
|
-
article to get up an running in minutes.
|
|
69
|
-
|
|
70
|
-
Please note, in order to use [Upload API](https://uploadcare.com/documentation/upload/)
|
|
71
|
-
you will only need the public key alone. However, using
|
|
72
|
-
[REST API](https://uploadcare.com/documentation/rest/) requires you to
|
|
73
|
-
use both public and private keys for authentication.
|
|
74
|
-
While “private key” is a common way to name a key from an
|
|
75
|
-
authentication key pair, the actual thing for our `auth-param` is `secret_key`.
|
|
76
|
-
|
|
77
|
-
`:autostore` option allows you to set the default storage
|
|
78
|
-
behaviour upon uploads. For more info see [`store` flag][uploads from url] for
|
|
79
|
-
uploads via URL and [`UPLOADCARE_STORE` flag][in-body file uploads] for file uploads
|
|
80
|
-
|
|
81
|
-
[in-body file uploads]: https://uploadcare.com/documentation/upload/#upload-body
|
|
82
|
-
[uploads from url]: https://uploadcare.com/documentation/upload/#from-url
|
|
83
|
-
|
|
84
62
|
## Usage
|
|
85
63
|
|
|
86
|
-
This section contains practical usage examples. Please note,
|
|
87
|
-
|
|
88
|
-
|
|
64
|
+
This section contains practical usage examples. Please note, everything that
|
|
65
|
+
follows gets way more clear once you've looked through our
|
|
66
|
+
[docs](https://uploadcare.com/docs/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby).
|
|
89
67
|
|
|
90
|
-
###
|
|
68
|
+
### Uploading and storing a single file
|
|
91
69
|
|
|
92
70
|
Using Uploadcare is simple, and here are the basics of handling files.
|
|
93
71
|
|
|
94
|
-
First of, create the API object:
|
|
95
|
-
|
|
96
|
-
```ruby
|
|
97
|
-
@api = Uploadcare::Api.new(CONFIG)
|
|
98
|
-
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
And yeah, now you can upload a file:
|
|
102
|
-
|
|
103
72
|
```ruby
|
|
104
73
|
@file_to_upload = File.open("your-file.png")
|
|
105
74
|
|
|
106
|
-
@uc_file =
|
|
107
|
-
# => #<Uploadcare::Api::File ...
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
Then, let's check out UUID and URL of the
|
|
111
|
-
file you've just uploaded:
|
|
75
|
+
@uc_file = Uploadcare::Uploader.upload(@file_to_upload)
|
|
112
76
|
|
|
113
|
-
```ruby
|
|
114
|
-
# file uuid (you'd probably want to store those somewhere)
|
|
115
77
|
@uc_file.uuid
|
|
116
78
|
# => "dc99200d-9bd6-4b43-bfa9-aa7bfaefca40"
|
|
117
79
|
|
|
@@ -120,10 +82,9 @@ file you've just uploaded:
|
|
|
120
82
|
# => "https://ucarecdn.com/dc99200d-9bd6-4b43-bfa9-aa7bfaefca40/"
|
|
121
83
|
```
|
|
122
84
|
|
|
123
|
-
Your might then want to store or delete the uploaded file.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
If not stored manually or automatically, files get deleted
|
|
85
|
+
Your might then want to store or delete the uploaded file. Storing files could
|
|
86
|
+
be crucial if you aren't using the “Automatic file storing” option for your
|
|
87
|
+
Uploadcare project. If not stored manually or automatically, files get deleted
|
|
127
88
|
within a 24-hour period.
|
|
128
89
|
|
|
129
90
|
```ruby
|
|
@@ -136,48 +97,25 @@ within a 24-hour period.
|
|
|
136
97
|
# => #<Uploadcare::Api::File ...
|
|
137
98
|
```
|
|
138
99
|
|
|
139
|
-
###
|
|
100
|
+
### Uploads
|
|
140
101
|
|
|
141
|
-
|
|
142
|
-
and you're good to go.
|
|
102
|
+
Uploadcare supports multiple ways to upload files:
|
|
143
103
|
|
|
144
104
|
```ruby
|
|
145
|
-
#
|
|
146
|
-
|
|
147
|
-
# => #<Uploadcare::Api::File ...
|
|
148
|
-
|
|
149
|
-
# use this one if you want to explicitly upload from URL
|
|
150
|
-
@file = @api.upload_from_url "http://your.awesome/avatar.jpg"
|
|
151
|
-
# => #<Uploadcare::Api::File ...
|
|
105
|
+
# Smart upload - detects type of passed object and picks appropriate upload method
|
|
106
|
+
Uploadcare::Uploader.upload('https://placekitten.com/96/139')
|
|
152
107
|
```
|
|
153
|
-
Keep in mind that providing invalid URL
|
|
154
|
-
will raise `ArgumentError`.
|
|
155
|
-
|
|
156
|
-
### Uploading multiple files
|
|
157
108
|
|
|
158
|
-
|
|
159
|
-
of `File` instances into our API.
|
|
109
|
+
There are explicit ways to select upload type:
|
|
160
110
|
|
|
161
111
|
```ruby
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
files = [file1, file2]
|
|
165
|
-
|
|
166
|
-
@uc_files = @api.upload files
|
|
167
|
-
# => [#<Uploadcare::Api::File uuid="dc99200d-9bd6-4b43-bfa9-aa7bfaefca40">,
|
|
168
|
-
# #<Uploadcare::Api::File uuid="96cdc400-adc3-435b-9c94-04cd87633fbb">]
|
|
169
|
-
```
|
|
112
|
+
files = [File.open('1.jpg'), File.open('1.jpg']
|
|
113
|
+
Uploadcare::Uploader.upload_files(files)
|
|
170
114
|
|
|
171
|
-
|
|
172
|
-
You can iterate through the array to address to single files.
|
|
173
|
-
You might also want to request more info about a file using `load_data`.
|
|
115
|
+
Uploadcare::Uploader.upload_from_url('https://placekitten.com/96/139')
|
|
174
116
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
# => #<Uploadcare::Api::File uuid="dc99200d-9bd6-4b43-bfa9-aa7bfaefca40">
|
|
178
|
-
|
|
179
|
-
@uc_files[1].load_data
|
|
180
|
-
# => #<Uploadcare::Api::File uuid="96cdc400-adc3-435b-9c94-04cd87633fbb", original_file_url="https://ucarecdn.com/96cdc400-adc3-435b-9c94-04cd87633fbb/samuelzeller118195.jpg", image_info={"width"=>4896, "geo_location"=>nil, "datetime_original"=>nil, "height"=>3264}, ....>
|
|
117
|
+
# multipart upload - can be useful for files bigger than 10 mb
|
|
118
|
+
Uploadcare::Uploader.multipart_upload(File.open('big_file.bin'))
|
|
181
119
|
```
|
|
182
120
|
|
|
183
121
|
### Upload options
|
|
@@ -189,246 +127,89 @@ You can override global [`:autostore`](#initialization) option for each upload r
|
|
|
189
127
|
@api.upload_from_url(url, store: :auto)
|
|
190
128
|
```
|
|
191
129
|
|
|
192
|
-
###
|
|
193
|
-
|
|
194
|
-
Now that we've already outlined using arrays of `File` instances
|
|
195
|
-
to upload multiple files, let's fix on the `File` itself.
|
|
196
|
-
It's the the primary object for Uploadcare API.
|
|
197
|
-
Basically, it's an avatar for a file you uploaded.
|
|
198
|
-
And all the further operations are performed using this avatar,
|
|
199
|
-
the `File` object.
|
|
200
|
-
|
|
201
|
-
```ruby
|
|
202
|
-
@file_to_upload = File.open("your-file.png")
|
|
203
|
-
|
|
204
|
-
@uc_file = @api.upload(@file_to_upload)
|
|
205
|
-
# => #<Uploadcare::Api::File ...
|
|
206
|
-
|
|
207
|
-
@uc_file.uuid
|
|
208
|
-
# => "dc99200d-9bd6-4b43-bfa9-aa7bfaefca40"
|
|
209
|
-
|
|
210
|
-
@uc_file.cdn_url
|
|
211
|
-
# => "https://ucarecdn.com/dc99200d-9bd6-4b43-bfa9-aa7bfaefca40/"
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
Please note, all the data associated with files is only accessible
|
|
215
|
-
through separate HTTP requests only. So if you don't specifically
|
|
216
|
-
need file data (filenames, image dimensions, etc.), you'll be just
|
|
217
|
-
fine with using `:uuid` and `:cdn_url` methods for file output:
|
|
218
|
-
|
|
219
|
-
```erb
|
|
220
|
-
<img src="#{@file.cdn_url}"/>
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
Great, we've just lowered a precious loading time.
|
|
224
|
-
However, if you do need the data, you can always request
|
|
225
|
-
it manually:
|
|
226
|
-
|
|
227
|
-
```ruby
|
|
228
|
-
@uc_file.load_data
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
That way your file object will respond to any method described
|
|
232
|
-
in [API docs](https://uploadcare.com/documentation/rest/#file).
|
|
233
|
-
Basically, that's an an OpenStruct, so you know what to do:
|
|
234
|
-
|
|
235
|
-
```ruby
|
|
236
|
-
@uc_file.original_filename
|
|
237
|
-
# => "logo.png"
|
|
238
|
-
|
|
239
|
-
@uc_file.image_info
|
|
240
|
-
# => {"width"=>397, "geo_location"=>nil, "datetime_original"=>nil, "height"=>81}
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
### `File` object from UUID or CDN URL
|
|
244
|
-
|
|
245
|
-
`File` objects are needed to manipulate files on our CDN.
|
|
246
|
-
The usual case would be you as a client storing file UUIDs
|
|
247
|
-
or CDN URLs somewhere on your side, e.g. in a database.
|
|
248
|
-
This is how you can use those to create `File` objects:
|
|
249
|
-
|
|
250
|
-
```ruby
|
|
251
|
-
# file object from UUID
|
|
252
|
-
@file = @api.file "dc99200d-9bd6-4b43-bfa9-aa7bfaefca40"
|
|
253
|
-
# => #<Uploadcare::Api::File uuid="dc99200d-9bd6-4b43-bfa9-aa7bfaefca40"
|
|
254
|
-
|
|
255
|
-
# file object from CDN URL
|
|
256
|
-
@file = @api.file "https://ucarecdn.com/dc99200d-9bd6-4b43-bfa9-aa7bfaefca40/"
|
|
257
|
-
# => #<Uploadcare::Api::File uuid="dc99200d-9bd6-4b43-bfa9-aa7bfaefca40"
|
|
258
|
-
|
|
259
|
-
# note, files you generate won't be loaded on init,
|
|
260
|
-
# you'll need to load those manually
|
|
261
|
-
@file.is_loaded?
|
|
262
|
-
# => false
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
### Operations
|
|
266
|
-
|
|
267
|
-
Another way to manipulate files on CDN is through operations.
|
|
268
|
-
This is particularly useful for images.
|
|
269
|
-
We've got on-the-fly crop, resize, rotation, format conversions, and
|
|
270
|
-
[more](https://uploadcare.com/documentation/cdn/).
|
|
271
|
-
Image operations are there to help you build responsive designs,
|
|
272
|
-
generate thumbnails and galleries, change formats, etc.
|
|
273
|
-
Currently, this gem has no specific methods for image operations,
|
|
274
|
-
we're planning to implement those in further versions.
|
|
275
|
-
However, we do support applying image operations through
|
|
276
|
-
adding them to CDN URLs. That's an Uploadcare CDN-native
|
|
277
|
-
way described in our [docs](https://uploadcare.com/documentation/cdn/).
|
|
278
|
-
|
|
130
|
+
### Api
|
|
131
|
+
Most methods are also available through `Uploadcare::Api` object:
|
|
279
132
|
```ruby
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
@file.operations
|
|
284
|
-
# => ["crop/150x150/center", "format/png"]
|
|
285
|
-
|
|
286
|
-
# note that by default :cdn_url method returns URLs with no operations:
|
|
287
|
-
@file.cdn_url
|
|
288
|
-
# => "https://ucarecdn.com/dc99200d-9bd6-4b43-bfa9-aa7bfaefca40/""
|
|
289
|
-
|
|
290
|
-
# you can pass "true" into the :cdn_url method to get URL including operations:
|
|
291
|
-
@file.cdn_url(true)
|
|
292
|
-
# => "https://ucarecdn.com/a8775cf7-0c2c-44fa-b071-4dd48637ecac/-/crop/150x150/center/-/format/png/"
|
|
293
|
-
|
|
294
|
-
# there also are specific methods to either dump or include image operations
|
|
295
|
-
# in the output URL:
|
|
296
|
-
@file.cdn_url_with_operations
|
|
297
|
-
@file.cdn_url_without_operations
|
|
133
|
+
# Same as Uploadcare::Uploader.upload
|
|
134
|
+
Uploadcare::Api.upload('https://placekitten.com/96/139')
|
|
298
135
|
```
|
|
299
136
|
|
|
300
|
-
|
|
301
|
-
is through adding them to URLs as strings:
|
|
302
|
-
|
|
303
|
-
```ruby
|
|
304
|
-
<img src="#{file.cdn_url}-/crop/#{width}x#{height}/center/"/>
|
|
305
|
-
# or something like that
|
|
306
|
-
```
|
|
137
|
+
### Entity object
|
|
307
138
|
|
|
308
|
-
|
|
139
|
+
Entities are representations of objects in Uploadcare cloud.
|
|
309
140
|
|
|
310
|
-
|
|
311
|
-
There are multiple ways of creating those.
|
|
312
|
-
Also, copying is important for image files because
|
|
313
|
-
it allows you to “apply” all the CDN operations
|
|
314
|
-
specified in the source URL to a separate static image.
|
|
141
|
+
#### File
|
|
315
142
|
|
|
316
|
-
|
|
317
|
-
This is called “internal copy”, and here's how it works:
|
|
143
|
+
File entity contains its metadata.
|
|
318
144
|
|
|
319
145
|
```ruby
|
|
320
|
-
@
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
"
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
with its own UUID and attributes.
|
|
345
|
-
|
|
346
|
-
`#internal_copy` can optionally be used with the options hash argument.
|
|
347
|
-
The available options are:
|
|
348
|
-
|
|
349
|
-
- *store*
|
|
350
|
-
|
|
351
|
-
By default a copy is created without “storing”.
|
|
352
|
-
Which means it will be deleted within a 24-hour period.
|
|
353
|
-
You can make your output copy permanent by passing the
|
|
354
|
-
`store: true` option to the `#internal_copy` method.
|
|
355
|
-
|
|
356
|
-
Example:
|
|
357
|
-
|
|
358
|
-
```ruby
|
|
359
|
-
@uc_file.internal_copy(store: true)
|
|
360
|
-
```
|
|
146
|
+
@file = Uploadcare::File.file('FILE_ID_IN_YOUR_PROJECT')
|
|
147
|
+
{"datetime_removed"=>nil,
|
|
148
|
+
"datetime_stored"=>"2020-01-16T15:03:15.315064Z",
|
|
149
|
+
"datetime_uploaded"=>"2020-01-16T15:03:14.676902Z",
|
|
150
|
+
"image_info"=>
|
|
151
|
+
{"color_mode"=>"RGB",
|
|
152
|
+
"orientation"=>nil,
|
|
153
|
+
"format"=>"JPEG",
|
|
154
|
+
"sequence"=>false,
|
|
155
|
+
"height"=>183,
|
|
156
|
+
"width"=>190,
|
|
157
|
+
"geo_location"=>nil,
|
|
158
|
+
"datetime_original"=>nil,
|
|
159
|
+
"dpi"=>nil},
|
|
160
|
+
"is_image"=>true,
|
|
161
|
+
"is_ready"=>true,
|
|
162
|
+
"mime_type"=>"image/jpeg",
|
|
163
|
+
"original_file_url"=>
|
|
164
|
+
"https://ucarecdn.com/FILE_ID_IN_YOUR_PROJECT/imagepng.jpeg",
|
|
165
|
+
"original_filename"=>"image.png.jpeg",
|
|
166
|
+
"size"=>5345,
|
|
167
|
+
"url"=>
|
|
168
|
+
"https://api.uploadcare.com/files/FILE_ID_IN_YOUR_PROJECT/",
|
|
169
|
+
"uuid"=>"8f64f313-e6b1-4731-96c0-6751f1e7a50a"}
|
|
361
170
|
|
|
362
|
-
|
|
171
|
+
@file.store # stores file, returns updated metadata
|
|
363
172
|
|
|
364
|
-
|
|
365
|
-
then by default the same set of operations is also applied to a copy.
|
|
366
|
-
You can override this by passing `strip_operations: true` to the
|
|
367
|
-
`#internal_copy` method.
|
|
368
|
-
|
|
369
|
-
Example:
|
|
370
|
-
|
|
371
|
-
```ruby
|
|
372
|
-
file = @api.file "https://ucarecdn.com/24626d2f-3f23-4464-b190-37115ce7742a/-/resize/50x50/"
|
|
373
|
-
file.internal_copy
|
|
374
|
-
# => This will trigger POST /files/ with {"source": "https://ucarecdn.com/24626d2f-3f23-4464-b190-37115ce7742a/-/resize/50x50/"} in the body
|
|
375
|
-
file.internal_copy(strip_operations: true)
|
|
376
|
-
# => This will trigger POST /files/ with {"source": "https://ucarecdn.com/24626d2f-3f23-4464-b190-37115ce7742a/"} in the body
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
Another option is copying your file to a custom storage.
|
|
380
|
-
We call it “external copy” and here's the usage example:
|
|
381
|
-
|
|
382
|
-
```ruby
|
|
383
|
-
@uc_file.external_copy('my_custom_storage_name')
|
|
384
|
-
|
|
385
|
-
# =>
|
|
386
|
-
{
|
|
387
|
-
"type"=>"url",
|
|
388
|
-
"result"=>"s3://my_bucket_name/c969be02-9925-4a7e-aa6d-b0730368791c/view.png"
|
|
389
|
-
}
|
|
173
|
+
@file.delete #deletes file. Returns updated metadata
|
|
390
174
|
```
|
|
391
175
|
|
|
392
|
-
|
|
393
|
-
a custom destination storage for your file.
|
|
394
|
-
|
|
395
|
-
There's also an optional second argument — options hash. The available options are:
|
|
396
|
-
|
|
397
|
-
- *make_public*
|
|
398
|
-
|
|
399
|
-
Make a copy available via public links. Can be either `true` or `false`.
|
|
176
|
+
Metadata of deleted files is stored permanently.
|
|
400
177
|
|
|
401
|
-
|
|
178
|
+
#### FileList
|
|
402
179
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
Same as for `#internal_copy`
|
|
408
|
-
|
|
409
|
-
You might want to learn more about
|
|
410
|
-
[storage options](https://uploadcare.com/documentation/storages/) or
|
|
411
|
-
[copying files](https://uploadcare.com/documentation/rest/#files-post)
|
|
412
|
-
with Uploadcare.
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
### File lists
|
|
416
|
-
|
|
417
|
-
`Uploadcare::Api::FileList` represents the whole collection of files (or it's subset) and privides a way to iterate through it, making pagination transparent. FileList objects can be created using `Uploadcare::Api#file_list` method.
|
|
180
|
+
`Uploadcare::Entity::FileList` represents the whole collection of files (or it's
|
|
181
|
+
subset) and provides a way to iterate through it, making pagination transparent.
|
|
182
|
+
FileList objects can be created using `Uploadcare::Entity.file_list` method.
|
|
418
183
|
|
|
419
184
|
```ruby
|
|
420
|
-
@list =
|
|
185
|
+
@list = Uploadcare::Entity.file_list
|
|
186
|
+
# Returns instance of Uploadcare::Api::FileList
|
|
187
|
+
<Hashie::Mash
|
|
188
|
+
next=nil
|
|
189
|
+
per_page=100
|
|
190
|
+
previous=nil
|
|
191
|
+
results=[
|
|
192
|
+
# Array of Entity::File
|
|
193
|
+
]
|
|
194
|
+
total=8>
|
|
195
|
+
# load last page of files
|
|
196
|
+
@files = @list.files
|
|
197
|
+
# load all files
|
|
198
|
+
@all_files = @list.load
|
|
421
199
|
```
|
|
422
200
|
|
|
423
|
-
This method accepts some options to controll which files should be fetched and
|
|
201
|
+
This method accepts some options to controll which files should be fetched and
|
|
202
|
+
how they should be fetched:
|
|
424
203
|
|
|
425
|
-
- **:limit**
|
|
426
|
-
- **:stored**
|
|
427
|
-
- **:removed**
|
|
428
|
-
- **:ordering**
|
|
429
|
-
- **:from**
|
|
204
|
+
- **:limit** — Controls page size. Accepts values from 1 to 1000, defaults to 100.
|
|
205
|
+
- **:stored** — Can be either `true` or `false`. When true, file list will contain only stored files. When false — only not stored.
|
|
206
|
+
- **:removed** — Can be either `true` or `false`. When true, file list will contain only removed files. When false — all except removed. Defaults to false.
|
|
207
|
+
- **:ordering** — Controls the order of returned files. Available values: `datetime_updated`, `-datetime_updated`, `size`, `-size`. Defaults to `datetime_uploaded`. More info can be found [here](https://uploadcare.com/documentation/rest/#file-files/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby).
|
|
208
|
+
- **:from** — Specifies the starting point for a collection. Resulting collection will contain files from the given value and to the end in a direction set by an **ordering** option. When files are ordered by `datetime_updated` in any direction, accepts either a `DateTime` object or an ISO 8601 string. When files are ordered by size, accepts non-negative integers (size in bytes). More info can be found [here](https://uploadcare.com/documentation/rest/#file-files/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby).
|
|
430
209
|
|
|
431
|
-
Options used to create a file list can be accessed through `#options` method.
|
|
210
|
+
Options used to create a file list can be accessed through `#options` method.
|
|
211
|
+
Note that, once set, they don't affect file fetching process anymore and are
|
|
212
|
+
stored just for your convenience. That is why they are frozen.
|
|
432
213
|
|
|
433
214
|
```ruby
|
|
434
215
|
options = {
|
|
@@ -438,286 +219,91 @@ options = {
|
|
|
438
219
|
from: "2017-01-01T00:00:00",
|
|
439
220
|
}
|
|
440
221
|
@list = @api.file_list(options)
|
|
441
|
-
@list.options # => same as options hash above, but frozen
|
|
442
|
-
```
|
|
443
|
-
|
|
444
|
-
`Uploadcare::Api::FileList` implements Enumerable interface and holds a collection of `Uploadcare::Api::File` objects, as well as some meta information.
|
|
445
|
-
|
|
446
|
-
```ruby
|
|
447
|
-
@list = @api.file_list
|
|
448
|
-
@list.total # => 1977
|
|
449
|
-
@list.meta # => {
|
|
450
|
-
# "next"=> "https://api.uploadcare.com/files/?from=2017-03-09T10%3A30%3A01.877590%2B00%3A00&offset=0",
|
|
451
|
-
# "previous"=>nil,
|
|
452
|
-
# "total"=>1977,
|
|
453
|
-
# "per_page"=>100
|
|
454
|
-
# }
|
|
455
|
-
|
|
456
|
-
# Enumerable interface
|
|
457
|
-
@list.first(5) # => array of 5 x Uploadcare::Api::File
|
|
458
|
-
@list.each{|file| puts file.original_filename}
|
|
459
|
-
@list.map{|file| file.uuid}
|
|
460
|
-
@list.reduce(0){|overall_size, file| overall_size += file.size}
|
|
461
|
-
# ...
|
|
462
222
|
```
|
|
463
223
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
Currently loaded files are available through `FileList#objects`. `FileList#loaded` method returns the number of currently loaded files.
|
|
467
|
-
|
|
224
|
+
To simply get all associated objects:
|
|
468
225
|
```ruby
|
|
469
|
-
@list
|
|
470
|
-
@list.loaded # => 5
|
|
471
|
-
@list.fully_loaded? # => false
|
|
472
|
-
|
|
473
|
-
@list.objects # => array of 5 x Uploadcare::Api::File
|
|
474
|
-
@list.objects[4] # => #<Uploadcare::Api::File ...>
|
|
475
|
-
@list.objects[5] # => nil (since 6th file is not yet loaded)
|
|
476
|
-
|
|
477
|
-
@list[4] # won't load anything, because 5 files are already loaded
|
|
478
|
-
@list[5] # will load the next page
|
|
479
|
-
@list.loaded # => 10
|
|
480
|
-
|
|
481
|
-
# Note that the example below will load all the files left, page by page,
|
|
482
|
-
# and return the count only when they all will be loaded
|
|
483
|
-
@list.count # => 132
|
|
484
|
-
@list.fully_loaded? # => true
|
|
226
|
+
@list.all # => returns Array of Files
|
|
485
227
|
```
|
|
486
228
|
|
|
487
|
-
|
|
229
|
+
##### Pagination
|
|
488
230
|
|
|
231
|
+
Initially, `FileList` is a paginated collection. It can be navigated using following methods:
|
|
489
232
|
```ruby
|
|
490
|
-
@
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
@
|
|
495
|
-
raise if i >= 19
|
|
496
|
-
i += 1
|
|
497
|
-
file.uuid
|
|
498
|
-
end # => RuntimeError
|
|
499
|
-
|
|
500
|
-
@list.loaded # => 20
|
|
233
|
+
@file_list = Uploadcare::Entity::FileList.file_list
|
|
234
|
+
# Let's assume there are 250 files in cloud. By default, UC loads 100 files. To get next 100 files, do:
|
|
235
|
+
@next_page = @file_list.next_page
|
|
236
|
+
# To get previous page:
|
|
237
|
+
@previous_page = @next_page.previous_page
|
|
501
238
|
```
|
|
502
239
|
|
|
503
|
-
|
|
504
|
-
### Store / delete multiple files at once
|
|
505
|
-
|
|
506
|
-
There are two methods to do so: `Uploadcare::Api#store_files` and
|
|
507
|
-
`Uploadcare::Api#delete_files`. Both of them accept a list of either
|
|
508
|
-
UUIDs or `Uploadcare::Api::File`s:
|
|
509
|
-
|
|
240
|
+
Alternatively, it's possible to iterate through full list of groups or files with `each`:
|
|
510
241
|
```ruby
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
# => {'status' => 'ok', 'problems' => {}, 'result' => [{...}, {...}]}
|
|
514
|
-
|
|
515
|
-
old_files = @api.file_list(stored: true, ordering: '-datetime_uploaded', from: "2015-01-01T00:00:00")
|
|
516
|
-
old_files.each_slice(100) do |batch|
|
|
517
|
-
response = @api.delete_files(batch)
|
|
518
|
-
# Do something with response if you need to
|
|
242
|
+
@list.each do |file|
|
|
243
|
+
p file.url
|
|
519
244
|
end
|
|
520
245
|
```
|
|
521
246
|
|
|
522
|
-
|
|
523
|
-
`#delete_files` with more than 100 files at once will cause an ArgumentError.
|
|
524
|
-
|
|
525
|
-
For more details see our [documentation on batch file storage/deletion](https://uploadcare.com/documentation/rest/#files-storage)
|
|
247
|
+
#### Group
|
|
526
248
|
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
Groups are structures intended to organize sets of separate files.
|
|
530
|
-
Each group is assigned UUID.
|
|
531
|
-
Note, group UUIDs include a `~#{files_count}` part at the end.
|
|
249
|
+
Groups are structures intended to organize sets of separate files. Each group is
|
|
250
|
+
assigned UUID. Note, group UUIDs include a `~#{files_count}` part at the end.
|
|
532
251
|
That's a requirement of our API.
|
|
533
252
|
|
|
534
253
|
```ruby
|
|
535
254
|
# group can be created from an array of Uploadcare files
|
|
536
255
|
@files_ary = [@file, @file2]
|
|
537
|
-
@files =
|
|
538
|
-
@group =
|
|
539
|
-
# => #<Uploadcare::Api::Group uuid="0d192d66-c7a6-4465-b2cd-46716c5e3df3~2", files_count=2 ...
|
|
540
|
-
|
|
541
|
-
# another way to from a group is via an array of strings holding UUIDs
|
|
542
|
-
@uuids_ary = ["c969be02-9925-4a7e-aa6d-b0730368791c", "c969be02-9925-4a7e-aa6d-b0730368791c"]
|
|
543
|
-
@group = @api.create_group @uuids_ary
|
|
544
|
-
# => #<Uploadcare::Api::Group uuid="0d192d66-c7a6-4465-b2cd-46716c5e3df3~2", files_count=2 ...
|
|
545
|
-
|
|
546
|
-
# also, you can create a group object via group UUID
|
|
547
|
-
@group_uloaded = @api.group "#{uuid}"
|
|
256
|
+
@files = Uploadcare::Uploader.upload @files_ary
|
|
257
|
+
@group = Uploadcare::Group.create @files
|
|
548
258
|
```
|
|
549
259
|
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
HTTP GET request. New groups created with the `:create_group` method
|
|
553
|
-
are loaded by default.
|
|
260
|
+
#### GroupList
|
|
261
|
+
`GroupList` is a list of `Group`
|
|
554
262
|
|
|
555
263
|
```ruby
|
|
556
|
-
@
|
|
557
|
-
|
|
558
|
-
@
|
|
559
|
-
# => false
|
|
560
|
-
|
|
561
|
-
@group.load_data
|
|
562
|
-
# => #<Uploadcare::Api::Group uuid="0d192d66-c7a6-4465-b2cd-46716c5e3df3~2", files_count=2 ...
|
|
563
|
-
|
|
564
|
-
# once a group is loaded, you can use any methods described in our API docs
|
|
565
|
-
# the files within a loaded group are loaded by default
|
|
566
|
-
@group.files
|
|
567
|
-
# => [#<Uploadcare::Api::File uuid="24626d2f-3f23-4464-b190-37115ce7742a" ...>,
|
|
568
|
-
# ... #{files_count} of them ...
|
|
569
|
-
# #<Uploadcare::Api::File uuid="7bb9efa4-05c0-4f36-b0ef-11a4221867f6" ...>]
|
|
264
|
+
@group_list = Uploadcare::GroupList.list
|
|
265
|
+
# To get an array of groups:
|
|
266
|
+
@groups = @group_list.all
|
|
570
267
|
```
|
|
571
268
|
|
|
572
|
-
|
|
573
|
-
[groups](https://uploadcare.com/documentation/rest/#group).
|
|
574
|
-
|
|
269
|
+
This is a paginated list, so [pagination](#Pagination) methods apply
|
|
575
270
|
|
|
576
|
-
|
|
271
|
+
#### Webhook
|
|
272
|
+
https://uploadcare.com/docs/api_reference/rest/webhooks/
|
|
577
273
|
|
|
578
|
-
|
|
274
|
+
You can use webhooks to provide notifications about your uploads to target urls.
|
|
275
|
+
This gem lets you create and manage webhooks.
|
|
579
276
|
|
|
580
277
|
```ruby
|
|
581
|
-
|
|
582
|
-
@list[0] # => instance of Uploadcare::Api::Group
|
|
278
|
+
Uploadcare::Webhook.create('example.com/listen', event: 'file.uploaded')
|
|
583
279
|
```
|
|
584
280
|
|
|
585
|
-
|
|
281
|
+
#### Project
|
|
586
282
|
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
### `Project` object
|
|
593
|
-
|
|
594
|
-
`Project` provides basic info about the connected Uploadcare project.
|
|
595
|
-
That object is also an OpenStruct, so every methods out of
|
|
596
|
-
[these](https://uploadcare.com/documentation/rest/#project) will work.
|
|
283
|
+
`Project` provides basic info about the connected Uploadcare project. That
|
|
284
|
+
object is also an Hashie::Mash, so every methods out of
|
|
285
|
+
[these](https://uploadcare.com/documentation/rest/#project/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby) will work.
|
|
597
286
|
|
|
598
287
|
```ruby
|
|
599
|
-
project =
|
|
288
|
+
@project = Uploadcare::Project.project
|
|
600
289
|
# => #<Uploadcare::Api::Project collaborators=[], name="demo", pub_key="demopublickey", autostore_enabled=true>
|
|
601
290
|
|
|
602
|
-
project.name
|
|
291
|
+
@project.name
|
|
603
292
|
# => "demo"
|
|
604
293
|
|
|
605
|
-
|
|
294
|
+
@project.collaborators
|
|
606
295
|
# => []
|
|
607
296
|
# while that one was empty, it usually goes like this:
|
|
608
297
|
# [{"email": collaborator@gmail.com, "name": "Collaborator"}, {"email": collaborator@gmail.com, "name": "Collaborator"}]
|
|
609
298
|
```
|
|
610
299
|
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
Raw API is a simple interface allowing you to make
|
|
614
|
-
custom requests to Uploadcare REST API.
|
|
615
|
-
It's mainly used when you want a low-level control
|
|
616
|
-
over your app.
|
|
617
|
-
|
|
618
|
-
```ruby
|
|
619
|
-
# here's how you make any requests
|
|
620
|
-
@api.request :get, "/files/", {page: 2}
|
|
621
|
-
|
|
622
|
-
# and there also are shortcuts for methods
|
|
623
|
-
@api.get '/files', {page: 2}
|
|
624
|
-
|
|
625
|
-
@api.post ...
|
|
626
|
-
|
|
627
|
-
@api.put ...
|
|
628
|
-
|
|
629
|
-
@api.delete ...
|
|
630
|
-
|
|
631
|
-
```
|
|
632
|
-
|
|
633
|
-
All of the raw API methods return a parsed JSON response
|
|
634
|
-
or raise an error (handling those is done on your side in the case).
|
|
635
|
-
|
|
636
|
-
### Error handling
|
|
637
|
-
|
|
638
|
-
Starting from the version 1.0.2, we've got have custom exceptions
|
|
639
|
-
that will be raised in case the Uploadcare service returns
|
|
640
|
-
something with 4xx or 5xx HTTP status.
|
|
641
|
-
|
|
642
|
-
Check out the list of custom errors:
|
|
643
|
-
|
|
644
|
-
```ruby
|
|
645
|
-
400 => Uploadcare::Error::RequestError::BadRequest,
|
|
646
|
-
401 => Uploadcare::Error::RequestError::Unauthorized,
|
|
647
|
-
403 => Uploadcare::Error::RequestError::Forbidden,
|
|
648
|
-
404 => Uploadcare::Error::RequestError::NotFound,
|
|
649
|
-
406 => Uploadcare::Error::RequestError::NotAcceptable,
|
|
650
|
-
408 => Uploadcare::Error::RequestError::RequestTimeout,
|
|
651
|
-
422 => Uploadcare::Error::RequestError::UnprocessableEntity,
|
|
652
|
-
429 => Uploadcare::Error::RequestError::TooManyRequests,
|
|
653
|
-
500 => Uploadcare::Error::ServerError::InternalServerError,
|
|
654
|
-
502 => Uploadcare::Error::ServerError::BadGateway,
|
|
655
|
-
503 => Uploadcare::Error::ServerError::ServiceUnavailable,
|
|
656
|
-
504 => Uploadcare::Error::ServerError::GatewayTimeout
|
|
657
|
-
```
|
|
658
|
-
|
|
659
|
-
That's how you handle a particular error
|
|
660
|
-
(in this case, a “404: Not Found” error):
|
|
661
|
-
|
|
662
|
-
```ruby
|
|
663
|
-
begin
|
|
664
|
-
@connection.send :get, '/random_url/', {}
|
|
665
|
-
rescue Uploadcare::Error::RequestError::NotFound => e
|
|
666
|
-
nil
|
|
667
|
-
end
|
|
668
|
-
```
|
|
669
|
-
|
|
670
|
-
Handling any request error (covers all 4xx status codes):
|
|
671
|
-
|
|
672
|
-
```ruby
|
|
673
|
-
begin
|
|
674
|
-
@connection.send :get, '/random_url/', {}
|
|
675
|
-
rescue Uploadcare::Error::RequestError => e
|
|
676
|
-
nil
|
|
677
|
-
end
|
|
678
|
-
```
|
|
679
|
-
|
|
680
|
-
Handling any Uploadcare service error:
|
|
681
|
-
|
|
682
|
-
```ruby
|
|
683
|
-
begin
|
|
684
|
-
@connection.send :get, '/random_url/', {}
|
|
685
|
-
rescue Uploadcare::Error => e
|
|
686
|
-
nil
|
|
687
|
-
end
|
|
688
|
-
```
|
|
689
|
-
|
|
690
|
-
Since many of the above listed things depend on Uploadcare servers,
|
|
691
|
-
errors might occasionally occur. Be prepared to handle those.
|
|
692
|
-
|
|
693
|
-
## Testing
|
|
694
|
-
|
|
695
|
-
For testing purposes, run `bundle exec rspec`.
|
|
696
|
-
|
|
697
|
-
Please note, if you're willing to run tests using your own keys,
|
|
698
|
-
make a `spec/config.yml` file containing the following:
|
|
699
|
-
|
|
700
|
-
```yaml
|
|
701
|
-
public_key: 'PUBLIC KEY'
|
|
702
|
-
private_key: 'PRIVATE KEY'
|
|
703
|
-
```
|
|
704
|
-
|
|
705
|
-
## Contributors
|
|
706
|
-
|
|
707
|
-
This is open source so fork, hack, request a pull — get a discount.
|
|
708
|
-
|
|
709
|
-
- [@romanonthego](https://github.com/romanonthego)
|
|
710
|
-
- [@vizvamitra](https://github.com/vizvamitra)
|
|
711
|
-
- [@dmitry-mukhin](https://github.com/dmitry-mukhin)
|
|
712
|
-
- [@zenati](https://github.com/zenati)
|
|
713
|
-
- [@renius](https://github.com/renius)
|
|
714
|
-
|
|
715
|
-
## Security issues
|
|
716
|
-
|
|
717
|
-
If you think you ran into something in Uploadcare libraries
|
|
718
|
-
which might have security implications, please hit us up at
|
|
719
|
-
[bugbounty@uploadcare.com](mailto:bugbounty@uploadcare.com)
|
|
720
|
-
or Hackerone.
|
|
300
|
+
## Useful links
|
|
721
301
|
|
|
722
|
-
|
|
723
|
-
|
|
302
|
+
* [Development](https://github.com/uploadcare/uploadcare-ruby/blob/main/DEVELOPMENT.md)
|
|
303
|
+
* [Uploadcare documentation](https://uploadcare.com/docs/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
|
304
|
+
* [Upload API reference](https://uploadcare.com/api-refs/upload-api/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
|
305
|
+
* [REST API reference](https://uploadcare.com/api-refs/rest-api/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
|
306
|
+
* [Changelog](./CHANGELOG.md)
|
|
307
|
+
* [Contributing guide](https://github.com/uploadcare/.github/blob/master/CONTRIBUTING.md)
|
|
308
|
+
* [Security policy](https://github.com/uploadcare/uploadcare-ruby/security/policy)
|
|
309
|
+
* [Support](https://github.com/uploadcare/.github/blob/master/SUPPORT.md)
|