uploadcare-ruby 4.4.1 → 4.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -0
- data/CHANGELOG.md +8 -0
- data/README.md +19 -5
- data/api_examples/rest_api/delete_files_storage.rb +6 -0
- data/api_examples/rest_api/delete_files_uuid_metadata_key.rb +5 -0
- data/api_examples/rest_api/delete_files_uuid_storage.rb +5 -0
- data/api_examples/rest_api/delete_groups_uuid.rb +5 -0
- data/api_examples/rest_api/delete_webhooks_unsubscribe.rb +5 -0
- data/api_examples/rest_api/get_addons_aws_rekognition_detect_labels_execute_status.rb +7 -0
- data/api_examples/rest_api/get_addons_aws_rekognition_detect_moderation_labels_execute_status.rb +7 -0
- data/api_examples/rest_api/get_addons_remove_bg_execute_status.rb +7 -0
- data/api_examples/rest_api/get_addons_uc_clamav_virus_scan_execute_status.rb +7 -0
- data/api_examples/rest_api/get_convert_document_status_token.rb +6 -0
- data/api_examples/rest_api/get_convert_document_uuid.rb +6 -0
- data/api_examples/rest_api/get_convert_video_status_token.rb +6 -0
- data/api_examples/rest_api/get_files.rb +6 -0
- data/api_examples/rest_api/get_files_uuid.rb +6 -0
- data/api_examples/rest_api/get_files_uuid_metadata.rb +6 -0
- data/api_examples/rest_api/get_files_uuid_metadata_key.rb +6 -0
- data/api_examples/rest_api/get_groups.rb +6 -0
- data/api_examples/rest_api/get_groups_uuid.rb +6 -0
- data/api_examples/rest_api/get_project.rb +6 -0
- data/api_examples/rest_api/get_webhooks.rb +6 -0
- data/api_examples/rest_api/post_addons_aws_rekognition_detect_labels_execute.rb +6 -0
- data/api_examples/rest_api/post_addons_aws_rekognition_detect_moderation_labels_execute.rb +6 -0
- data/api_examples/rest_api/post_addons_remove_bg_execute.rb +6 -0
- data/api_examples/rest_api/post_addons_uc_clamav_virus_scan_execute.rb +6 -0
- data/api_examples/rest_api/post_convert_document.rb +7 -0
- data/api_examples/rest_api/post_convert_video.rb +11 -0
- data/api_examples/rest_api/post_files_local_copy.rb +7 -0
- data/api_examples/rest_api/post_files_remote_copy.rb +8 -0
- data/api_examples/rest_api/post_webhooks.rb +10 -0
- data/api_examples/rest_api/put_files_storage.rb +9 -0
- data/api_examples/rest_api/put_files_uuid_metadata_key.rb +8 -0
- data/api_examples/rest_api/put_files_uuid_storage.rb +6 -0
- data/api_examples/rest_api/put_webhooks_id.rb +12 -0
- data/api_examples/upload_api/get_from_url_status.rb +6 -0
- data/api_examples/upload_api/get_group_info.rb +7 -0
- data/api_examples/upload_api/get_info.rb +7 -0
- data/api_examples/upload_api/post_base.rb +6 -0
- data/api_examples/upload_api/post_from_url.rb +6 -0
- data/api_examples/upload_api/post_group.rb +9 -0
- data/api_examples/upload_api/post_multipart_complete.rb +8 -0
- data/api_examples/upload_api/post_multipart_start.rb +8 -0
- data/api_examples/upload_api/put_presigned_url_x.rb +8 -0
- data/lib/uploadcare/client/conversion/document_conversion_client.rb +4 -0
- data/lib/uploadcare/client/multipart_upload_client.rb +1 -1
- data/lib/uploadcare/entity/conversion/base_converter.rb +7 -0
- data/lib/uploadcare/entity/file.rb +1 -2
- data/lib/uploadcare/param/authentication_header.rb +2 -2
- data/lib/uploadcare/ruby/version.rb +1 -1
- metadata +44 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b627592459c5fd8142372876e62f4888aa9ce94139011e583b72746ed68063b7
|
4
|
+
data.tar.gz: b695ed1e4ee129f82e589470930b2b84d58fac576f0f676095c1decc56226a1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5db8bdd4c9b77826087a6cd83c578e823abb8d1d212cf283baf887b841ba7fc643f35c41df98fa473daaf4614a7f1427cdd28da16df120effedf62e357cf5bb
|
7
|
+
data.tar.gz: 8772728c7606f69d5d8166a0a928862d6fde6849b91622022d6b0ba0814a4e9e2a586acf1e35a873cc7c835c33d28e4b197df9aebb94be89af0dc74de61b509e
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 4.4.2 — 2024-05-29
|
4
|
+
|
5
|
+
### Fixed
|
6
|
+
* Fixed the `Uploadcare::File.remote_copy` method which raised an `ApiStruct::EntityError: {url} must be Hash`. Now returns a string instead of a `File` entity instance.
|
7
|
+
|
8
|
+
### Added
|
9
|
+
* `Document Info` API added in `DocumentConverter`.
|
10
|
+
|
3
11
|
## 4.4.1 — 2024-04-27
|
4
12
|
|
5
13
|
### Added
|
data/README.md
CHANGED
@@ -556,7 +556,7 @@ An `Add-On` is an application implemented by Uploadcare that accepts uploaded fi
|
|
556
556
|
##### AWS Rekognition
|
557
557
|
|
558
558
|
```ruby
|
559
|
-
# Execute AWS Rekognition Add-On for a given target to detect labels in an image.
|
559
|
+
# Execute AWS Rekognition Add-On for a given target to detect labels in an image.
|
560
560
|
# Note: Detected labels are stored in the file's appdata.
|
561
561
|
Uploadcare::Addons.ws_rekognition_detect_labels('FILE_UUID')
|
562
562
|
|
@@ -567,7 +567,7 @@ Uploadcare::Addons.ws_rekognition_detect_labels_status('RETURNED_ID_FROM_WS_REKO
|
|
567
567
|
##### AWS Rekognition Moderation
|
568
568
|
|
569
569
|
```ruby
|
570
|
-
# Execute AWS Rekognition Moderation Add-On for a given target to detect moderation labels in an image.
|
570
|
+
# Execute AWS Rekognition Moderation Add-On for a given target to detect moderation labels in an image.
|
571
571
|
# Note: Detected moderation labels are stored in the file's appdata.
|
572
572
|
|
573
573
|
Uploadcare::Addons.ws_rekognition_detect_moderation_labels('FILE_UUID')
|
@@ -738,6 +738,20 @@ More examples and options can be found [here](https://uploadcare.com/docs/transf
|
|
738
738
|
##### Document
|
739
739
|
|
740
740
|
After each document file upload you obtain a file identifier in UUID format.
|
741
|
+
|
742
|
+
You can use file identifier to determine the document format and possible conversion formats.
|
743
|
+
```ruby
|
744
|
+
Uploadcare::DocumentConverter.info("dc99200d-9bd6-4b43-bfa9-aa7bfaefca40")
|
745
|
+
|
746
|
+
# Response
|
747
|
+
{:error=>nil, :format=>{
|
748
|
+
:name=>"jpg",
|
749
|
+
:conversion_formats=>[
|
750
|
+
{:name=>"avif"}, {:name=>"bmp"}, {:name=>"gif"}, {:name=>"ico"}, {:name=>"pcx"}, {:name=>"pdf"}, {:name=>"png"}, {:name=>"ps"}, {:name=>"svg"}, {:name=>"tga"}, {:name=>"thumbnail"}, {:name=>"tiff"}, {:name=>"wbmp"}, {:name=>"webp"}
|
751
|
+
]
|
752
|
+
}}
|
753
|
+
```
|
754
|
+
|
741
755
|
Then you can use this file identifier to convert your document to a new format:
|
742
756
|
|
743
757
|
```ruby
|
@@ -841,7 +855,7 @@ You can use custom domain and CDN provider to deliver files with authenticated U
|
|
841
855
|
To generate authenticated URL from the library, you should choose `Uploadcare::SignedUrlGenerators::AkamaiGenerator` (or create your own generator implementation):
|
842
856
|
|
843
857
|
```ruby
|
844
|
-
generator = Uploadcare::SignedUrlGenerators::AkamaiGenerator.new(cdn_host: 'example.com', secret_key: 'secret_key')
|
858
|
+
generator = Uploadcare::SignedUrlGenerators::AkamaiGenerator.new(cdn_host: 'example.com', secret_key: 'secret_key')
|
845
859
|
# Optional parameters: ttl: 300, algorithm: 'sha256'
|
846
860
|
generator.generate_url(uuid, acl = optional)
|
847
861
|
|
@@ -849,13 +863,13 @@ generator.generate_url("a7d5645e-5cd7-4046-819f-a6a2933bafe3")
|
|
849
863
|
# https://example.com/a7d5645e-5cd7-4046-819f-a6a2933bafe3/?token=exp=1649405263~acl=/a7d5645e-5cd7-4046-819f-a6a2933bafe3/~hmac=a989cae5342f17013677f5a0e6577fc5594cc4e238fb4c95eda36634eb47018b
|
850
864
|
|
851
865
|
# You can pass in ACL as a second parameter to generate_url. See https://uploadcare.com/docs/security/secure-delivery/#authenticated-urls for supported acl formats
|
852
|
-
generator.generate_url("a7d5645e-5cd7-4046-819f-a6a2933bafe3", '/*/')
|
866
|
+
generator.generate_url("a7d5645e-5cd7-4046-819f-a6a2933bafe3", '/*/')
|
853
867
|
# https://example.com/a7d5645e-5cd7-4046-819f-a6a2933bafe3/?token=exp=1649405263~acl=/*/~hmac=3ce1152c6af8864b36d4dc721f08ca3cf0b3a20278d7f849e82c6c930d48ccc1
|
854
868
|
|
855
869
|
# Optionally you can use wildcard: true to generate a wildcard acl token
|
856
870
|
generator.generate_url("a7d5645e-5cd7-4046-819f-a6a2933bafe3", wildcard: true)
|
857
871
|
# https://example.com/a7d5645e-5cd7-4046-819f-a6a2933bafe3/?token=exp=1714233449~acl=/a7d5645e-5cd7-4046-819f-a6a2933bafe3/*~hmac=a568ee2a85dd90a8a8a1ef35ea0cc0ef0acb84fe81990edd3a06eacf10a52b4e
|
858
|
-
|
872
|
+
|
859
873
|
# You can also pass in a custom ttl and algorithm to AkamaiGenerator
|
860
874
|
generator = Uploadcare::SignedUrlGenerators::AkamaiGenerator.new(cdn_host: 'example.com', secret_key: 'secret_key', ttl: 10)
|
861
875
|
generator.generate_url("a7d5645e-5cd7-4046-819f-a6a2933bafe3")
|
@@ -0,0 +1,7 @@
|
|
1
|
+
require 'uploadcare'
|
2
|
+
Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
|
3
|
+
Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'
|
4
|
+
|
5
|
+
request_id = 'd1fb31c6-ed34-4e21-bdc3-4f1485f58e21'
|
6
|
+
result = Uploadcare::Addons.ws_rekognition_detect_labels_status(request_id)
|
7
|
+
puts result.status
|
data/api_examples/rest_api/get_addons_aws_rekognition_detect_moderation_labels_execute_status.rb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
require 'uploadcare'
|
2
|
+
Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
|
3
|
+
Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'
|
4
|
+
|
5
|
+
request_id = 'd1fb31c6-ed34-4e21-bdc3-4f1485f58e21'
|
6
|
+
result = Uploadcare::Addons.ws_rekognition_detect_moderation_labels_status(request_id)
|
7
|
+
puts result.status
|
@@ -0,0 +1,7 @@
|
|
1
|
+
require 'uploadcare'
|
2
|
+
Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
|
3
|
+
Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'
|
4
|
+
|
5
|
+
request_id = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
|
6
|
+
result = Uploadcare::Addons.uc_clamav_virus_scan_status(request_id)
|
7
|
+
puts result.status
|
@@ -0,0 +1,7 @@
|
|
1
|
+
require 'uploadcare'
|
2
|
+
Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
|
3
|
+
Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'
|
4
|
+
|
5
|
+
document_params = { uuid: '1bac376c-aa7e-4356-861b-dd2657b5bfd2', format: :pdf }
|
6
|
+
options = { store: true }
|
7
|
+
Uploadcare::DocumentConverter.convert(document_params, options)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'uploadcare'
|
2
|
+
Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
|
3
|
+
Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'
|
4
|
+
|
5
|
+
video_params = {
|
6
|
+
uuid: '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
|
7
|
+
format: :mp4,
|
8
|
+
quality: :lighter
|
9
|
+
}
|
10
|
+
options = { store: true }
|
11
|
+
Uploadcare::VideoConverter.convert(video_params, options)
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require 'uploadcare'
|
2
|
+
Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
|
3
|
+
Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'
|
4
|
+
|
5
|
+
source_object = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
|
6
|
+
target = 'custom_storage_connected_to_the_project'
|
7
|
+
copied_file_url = Uploadcare::File.remote_copy(source_object, target, make_public: true)
|
8
|
+
puts copied_file_url
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'uploadcare'
|
2
|
+
Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
|
3
|
+
Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'
|
4
|
+
|
5
|
+
options = {
|
6
|
+
target_url: 'https://yourwebhook.com',
|
7
|
+
event: 'file.uploaded',
|
8
|
+
is_active: true
|
9
|
+
}
|
10
|
+
Uploadcare::Webhook.create(**options)
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'uploadcare'
|
2
|
+
Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
|
3
|
+
Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'
|
4
|
+
|
5
|
+
webhook_id = 1_473_151
|
6
|
+
options = {
|
7
|
+
target_url: 'https://yourwebhook.com',
|
8
|
+
event: 'file.uploaded',
|
9
|
+
is_active: true,
|
10
|
+
signing_secret: 'webhook-secret'
|
11
|
+
}
|
12
|
+
Uploadcare::Webhook.update(webhook_id, options)
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'uploadcare'
|
2
|
+
Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
|
3
|
+
Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'
|
4
|
+
|
5
|
+
uuids = [
|
6
|
+
'd6d34fa9-addd-472c-868d-2e5c105f9fcd',
|
7
|
+
'b1026315-8116-4632-8364-607e64fca723/-/resize/x800/'
|
8
|
+
]
|
9
|
+
Uploadcare::Group.create(uuids)
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# Uploadcare lib provides high level API for multipart uploads that does everything for you
|
2
|
+
|
3
|
+
require 'uploadcare'
|
4
|
+
Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
|
5
|
+
Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'
|
6
|
+
|
7
|
+
source_file = File.open('image.png')
|
8
|
+
Uploadcare::Uploader.upload(source_file, store: 'auto')
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# Uploadcare lib provides high level API for multipart uploads that does everything for you
|
2
|
+
|
3
|
+
require 'uploadcare'
|
4
|
+
Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
|
5
|
+
Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'
|
6
|
+
|
7
|
+
source_file = File.open('image.png')
|
8
|
+
Uploadcare::Uploader.upload(source_file, store: 'auto')
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# Uploadcare lib provides high level API for multipart uploads that does everything for you
|
2
|
+
|
3
|
+
require 'uploadcare'
|
4
|
+
Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
|
5
|
+
Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'
|
6
|
+
|
7
|
+
source_file = File.open('image.png')
|
8
|
+
Uploadcare::Uploader.upload(source_file, store: 'auto')
|
@@ -23,6 +23,13 @@ module Uploadcare
|
|
23
23
|
conversion_client.new.get_conversion_status(token)
|
24
24
|
end
|
25
25
|
|
26
|
+
# Returns the document format and possible conversion formats.
|
27
|
+
#
|
28
|
+
# @param uuid [String] UUID of the document
|
29
|
+
def info(uuid)
|
30
|
+
conversion_client.new.document_info(uuid)
|
31
|
+
end
|
32
|
+
|
26
33
|
private
|
27
34
|
|
28
35
|
def conversion_client
|
@@ -64,8 +64,7 @@ module Uploadcare
|
|
64
64
|
#
|
65
65
|
# @see https://uploadcare.com/api-refs/rest-api/v0.7.0/#tag/File/operation/createRemoteCopy
|
66
66
|
def self.remote_copy(source, target, args = {})
|
67
|
-
|
68
|
-
File.new(response)
|
67
|
+
FileClient.new.remote_copy(source: source, target: target, **args).success[:result]
|
69
68
|
end
|
70
69
|
|
71
70
|
# Instance version of {internal_copy}
|
@@ -23,8 +23,8 @@ module Uploadcare
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.validate_auth_config
|
26
|
-
raise AuthError, 'Public Key is blank.' if is_blank?(Uploadcare.config.public_key)
|
27
|
-
raise AuthError, 'Secret Key is blank.' if is_blank?(Uploadcare.config.secret_key)
|
26
|
+
raise Uploadcare::Exception::AuthError, 'Public Key is blank.' if is_blank?(Uploadcare.config.public_key)
|
27
|
+
raise Uploadcare::Exception::AuthError, 'Secret Key is blank.' if is_blank?(Uploadcare.config.secret_key)
|
28
28
|
end
|
29
29
|
|
30
30
|
# rubocop:disable Naming/PredicateName
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uploadcare-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.4.
|
4
|
+
version: 4.4.2
|
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: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-
|
12
|
+
date: 2024-05-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mimemagic
|
@@ -93,6 +93,48 @@ files:
|
|
93
93
|
- LICENSE
|
94
94
|
- README.md
|
95
95
|
- Rakefile
|
96
|
+
- api_examples/rest_api/delete_files_storage.rb
|
97
|
+
- api_examples/rest_api/delete_files_uuid_metadata_key.rb
|
98
|
+
- api_examples/rest_api/delete_files_uuid_storage.rb
|
99
|
+
- api_examples/rest_api/delete_groups_uuid.rb
|
100
|
+
- api_examples/rest_api/delete_webhooks_unsubscribe.rb
|
101
|
+
- api_examples/rest_api/get_addons_aws_rekognition_detect_labels_execute_status.rb
|
102
|
+
- api_examples/rest_api/get_addons_aws_rekognition_detect_moderation_labels_execute_status.rb
|
103
|
+
- api_examples/rest_api/get_addons_remove_bg_execute_status.rb
|
104
|
+
- api_examples/rest_api/get_addons_uc_clamav_virus_scan_execute_status.rb
|
105
|
+
- api_examples/rest_api/get_convert_document_status_token.rb
|
106
|
+
- api_examples/rest_api/get_convert_document_uuid.rb
|
107
|
+
- api_examples/rest_api/get_convert_video_status_token.rb
|
108
|
+
- api_examples/rest_api/get_files.rb
|
109
|
+
- api_examples/rest_api/get_files_uuid.rb
|
110
|
+
- api_examples/rest_api/get_files_uuid_metadata.rb
|
111
|
+
- api_examples/rest_api/get_files_uuid_metadata_key.rb
|
112
|
+
- api_examples/rest_api/get_groups.rb
|
113
|
+
- api_examples/rest_api/get_groups_uuid.rb
|
114
|
+
- api_examples/rest_api/get_project.rb
|
115
|
+
- api_examples/rest_api/get_webhooks.rb
|
116
|
+
- api_examples/rest_api/post_addons_aws_rekognition_detect_labels_execute.rb
|
117
|
+
- api_examples/rest_api/post_addons_aws_rekognition_detect_moderation_labels_execute.rb
|
118
|
+
- api_examples/rest_api/post_addons_remove_bg_execute.rb
|
119
|
+
- api_examples/rest_api/post_addons_uc_clamav_virus_scan_execute.rb
|
120
|
+
- api_examples/rest_api/post_convert_document.rb
|
121
|
+
- api_examples/rest_api/post_convert_video.rb
|
122
|
+
- api_examples/rest_api/post_files_local_copy.rb
|
123
|
+
- api_examples/rest_api/post_files_remote_copy.rb
|
124
|
+
- api_examples/rest_api/post_webhooks.rb
|
125
|
+
- api_examples/rest_api/put_files_storage.rb
|
126
|
+
- api_examples/rest_api/put_files_uuid_metadata_key.rb
|
127
|
+
- api_examples/rest_api/put_files_uuid_storage.rb
|
128
|
+
- api_examples/rest_api/put_webhooks_id.rb
|
129
|
+
- api_examples/upload_api/get_from_url_status.rb
|
130
|
+
- api_examples/upload_api/get_group_info.rb
|
131
|
+
- api_examples/upload_api/get_info.rb
|
132
|
+
- api_examples/upload_api/post_base.rb
|
133
|
+
- api_examples/upload_api/post_from_url.rb
|
134
|
+
- api_examples/upload_api/post_group.rb
|
135
|
+
- api_examples/upload_api/post_multipart_complete.rb
|
136
|
+
- api_examples/upload_api/post_multipart_start.rb
|
137
|
+
- api_examples/upload_api/put_presigned_url_x.rb
|
96
138
|
- bin/console
|
97
139
|
- bin/setup
|
98
140
|
- lib/uploadcare.rb
|