uploadcare-ruby 1.0.1.rc1
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 +7 -0
- data/.DS_Store +0 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +42 -0
- data/LICENSE +22 -0
- data/README.md +385 -0
- data/Rakefile +2 -0
- data/lib/uploadcare.rb +43 -0
- data/lib/uploadcare/api.rb +20 -0
- data/lib/uploadcare/api/connections.rb +32 -0
- data/lib/uploadcare/api/file_api.rb +9 -0
- data/lib/uploadcare/api/file_list_api.rb +8 -0
- data/lib/uploadcare/api/group_api.rb +38 -0
- data/lib/uploadcare/api/group_list_api.rb +8 -0
- data/lib/uploadcare/api/parser.rb +42 -0
- data/lib/uploadcare/api/project_api.rb +9 -0
- data/lib/uploadcare/api/raw_api.rb +73 -0
- data/lib/uploadcare/api/uploading_api.rb +122 -0
- data/lib/uploadcare/resources/file.rb +136 -0
- data/lib/uploadcare/resources/file_list.rb +41 -0
- data/lib/uploadcare/resources/group.rb +116 -0
- data/lib/uploadcare/resources/group_list.rb +31 -0
- data/lib/uploadcare/resources/project.rb +21 -0
- data/lib/uploadcare/version.rb +3 -0
- data/spec/file_list_spec.rb +65 -0
- data/spec/file_spec.rb +105 -0
- data/spec/group_list_spec.rb +31 -0
- data/spec/group_spec.rb +90 -0
- data/spec/operations_spec.rb +60 -0
- data/spec/parser_spec.rb +87 -0
- data/spec/project_spec.rb +21 -0
- data/spec/raw_api_spec.rb +25 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/uploading_multiple_spec.rb +45 -0
- data/spec/uploading_spec.rb +40 -0
- data/spec/view.png +0 -0
- data/spec/view2.jpg +0 -0
- data/uploadcare-ruby.gemspec +35 -0
- metadata +184 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bd6d3a7c2b5ea89ee8d5f27a4e94768cf71eb2a4
|
4
|
+
data.tar.gz: 82b45824c695e1d038a37817555bfdb46cf9d919
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 06b23351a97c96ec9b3a4646821c544ebadfd3ef07263d69cf1259ef0c7fd42dec577b7fa492deef0de236de469a6a632cb7ad8a3ffa2090f68a63ee2ddcbf9e
|
7
|
+
data.tar.gz: f3467ac3e6b8ecd837af06fe28afa8d3e322addb19980831010257227531807cad02e907543b2cb690c1be1c015882346c74c9730684f0faa1f146732b0e7d5a
|
data/.DS_Store
ADDED
Binary file
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
uploadcare-ruby (1.0.0)
|
5
|
+
faraday
|
6
|
+
faraday_middleware
|
7
|
+
mime-types
|
8
|
+
multipart-post
|
9
|
+
|
10
|
+
GEM
|
11
|
+
remote: https://rubygems.org/
|
12
|
+
specs:
|
13
|
+
coderay (1.0.9)
|
14
|
+
diff-lcs (1.2.4)
|
15
|
+
faraday (0.8.8)
|
16
|
+
multipart-post (~> 1.2.0)
|
17
|
+
faraday_middleware (0.9.0)
|
18
|
+
faraday (>= 0.7.4, < 0.9)
|
19
|
+
method_source (0.8.2)
|
20
|
+
mime-types (2.0)
|
21
|
+
multipart-post (1.2.0)
|
22
|
+
pry (0.9.12.2)
|
23
|
+
coderay (~> 1.0.5)
|
24
|
+
method_source (~> 0.8)
|
25
|
+
slop (~> 3.4)
|
26
|
+
rspec (2.14.1)
|
27
|
+
rspec-core (~> 2.14.0)
|
28
|
+
rspec-expectations (~> 2.14.0)
|
29
|
+
rspec-mocks (~> 2.14.0)
|
30
|
+
rspec-core (2.14.7)
|
31
|
+
rspec-expectations (2.14.3)
|
32
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
33
|
+
rspec-mocks (2.14.4)
|
34
|
+
slop (3.4.6)
|
35
|
+
|
36
|
+
PLATFORMS
|
37
|
+
ruby
|
38
|
+
|
39
|
+
DEPENDENCIES
|
40
|
+
pry
|
41
|
+
rspec
|
42
|
+
uploadcare-ruby!
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Vadim Rastyagaev
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,385 @@
|
|
1
|
+
[](http://travis-ci.org/uploadcare/ruby-uploadcare-api)
|
2
|
+
|
3
|
+
A ruby wrapper for uploadcare.com service.
|
4
|
+
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Add this line to your application's Gemfile:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
gem 'uploadcare-ruby'
|
12
|
+
```
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
|
16
|
+
```shell
|
17
|
+
$ bundle install
|
18
|
+
```
|
19
|
+
|
20
|
+
Or install it yourself as:
|
21
|
+
|
22
|
+
```shell
|
23
|
+
$ gem install uploadcare-ruby
|
24
|
+
```
|
25
|
+
|
26
|
+
--
|
27
|
+
|
28
|
+
## Initalizations
|
29
|
+
Just create api object - and you good to go.
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
@api = Uploadcare::Api.new(CONFIG)
|
33
|
+
```
|
34
|
+
|
35
|
+
--
|
36
|
+
|
37
|
+
## Raw API
|
38
|
+
Raw API - it is a simple interface wich allows you to make custom requests to Uploadcare REST API.
|
39
|
+
Just in case you want some low-level control over your app.
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
# any request
|
43
|
+
@api.request :get, "/files/", {page: 2}
|
44
|
+
|
45
|
+
# you allso have the shortcuts for methods
|
46
|
+
@api.get '/files', {page: 2}
|
47
|
+
|
48
|
+
@api.post ...
|
49
|
+
|
50
|
+
@api.put ...
|
51
|
+
|
52
|
+
@api.delete ...
|
53
|
+
|
54
|
+
```
|
55
|
+
All raw API methods returns parsed JSON response or raise an error (from which you should rescue on your own).
|
56
|
+
|
57
|
+
--
|
58
|
+
|
59
|
+
## Basic usage
|
60
|
+
Using Uploadcare is pretty easy (which is the essence of the service itself).
|
61
|
+
|
62
|
+
Create the API object:
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
@api = Uploadcare::Api.new(CONFIG)
|
66
|
+
|
67
|
+
```
|
68
|
+
|
69
|
+
Upload file
|
70
|
+
|
71
|
+
```ruby
|
72
|
+
@file_to_upload = File.open("your-file.png")
|
73
|
+
|
74
|
+
@uc_file = @api.upload(@file_to_upload)
|
75
|
+
# => #<Uploadcare::Api::File ...
|
76
|
+
```
|
77
|
+
|
78
|
+
Use file
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
# file uuid (you probably want to store it somewhere)
|
82
|
+
@uc_file.uuid
|
83
|
+
# => "c969be02-9925-4a7e-aa6d-b0730368791c"
|
84
|
+
|
85
|
+
# url for the file - just paste in your template and you good to go.
|
86
|
+
@uc_file.cdn_url
|
87
|
+
# => "http://www.ucarecdn.com/c969be02-9925-4a7e-aa6d-b0730368791c/"
|
88
|
+
```
|
89
|
+
|
90
|
+
Keep or delete file
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
# store file (if you dont use autostore feature)
|
94
|
+
@uc_file.store
|
95
|
+
# => #<Uploadcare::Api::File ...
|
96
|
+
|
97
|
+
# and delete file
|
98
|
+
@uc_file.delete
|
99
|
+
# => #<Uploadcare::Api::File ...
|
100
|
+
```
|
101
|
+
## Uploading
|
102
|
+
You can upload either File object (array of files will also cut it) or custom URL.
|
103
|
+
|
104
|
+
### Uploading from URL
|
105
|
+
Just throw your URL into api - and you good to go.
|
106
|
+
|
107
|
+
```ruby
|
108
|
+
# smart upload
|
109
|
+
@file = @api.upload "http://your.awesome/avatar.jpg"
|
110
|
+
# => #<Uploadcare::Api::File ...
|
111
|
+
|
112
|
+
# explicitly upload from URl
|
113
|
+
@file = @api.upload_from_url "http://your.awesome/avatar.jpg"
|
114
|
+
# => #<Uploadcare::Api::File ...
|
115
|
+
```
|
116
|
+
Keep in mind that invalid url will rise an ArgumentError.
|
117
|
+
|
118
|
+
### Uploading a single file
|
119
|
+
Like with URL - just start throwing your file into api
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
|
123
|
+
file = File.open("path/to/your/file.png")
|
124
|
+
|
125
|
+
@uc_file = @api.upload file
|
126
|
+
# => #<Uploadcare::Api::File ...
|
127
|
+
|
128
|
+
```
|
129
|
+
And thats it.
|
130
|
+
|
131
|
+
### Uploading an array of files
|
132
|
+
Uploading of an array is just as easy as uploading single files.
|
133
|
+
Note, that every object in array must be an instance of File.
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
file1 = File.open("path/to/your/file.png")
|
137
|
+
file2 = File.open("path/to/your/another-file.png")
|
138
|
+
files = [file1, file2]
|
139
|
+
|
140
|
+
@uc_files = @api.upload files
|
141
|
+
# => [#<Uploadcare::Api::File uuid="24626d2f-3f23-4464-b190-37115ce7742a">,
|
142
|
+
# #<Uploadcare::Api::File uuid="7bb9efa4-05c0-4f36-b0ef-11a4221867f6">]
|
143
|
+
```
|
144
|
+
It is returning you an array of Uploadcare files.
|
145
|
+
|
146
|
+
```ruby
|
147
|
+
@uc_files[0]
|
148
|
+
# => #<Uploadcare::Api::File uuid="24626d2f-3f23-4464-b190-37115ce7742a">
|
149
|
+
|
150
|
+
@uc_files[0].load_data
|
151
|
+
# => #<Uploadcare::Api::File uuid="7bb9efa4-05c0-4f36-b0ef-11a4221867f6", original_file_url="http://www.ucarecdn.com/7bb9efa4-05c0-4f36-b0ef-11a4221867f6/view.png", image_info={"width"=>800, "geo_location"=>nil, "datetime_original"=>nil, "height"=>600}, ....>
|
152
|
+
```
|
153
|
+
|
154
|
+
## File
|
155
|
+
File - is the primary object for Uploadcare API. Basicly it an avatar for file, stored for you ).
|
156
|
+
So all the opertations you do - you do it with the file object.
|
157
|
+
|
158
|
+
*to do:* way to build file from UUID, CDN URL, and uploading
|
159
|
+
|
160
|
+
|
161
|
+
```ruby
|
162
|
+
@file_to_upload = File.open("your-file.png")
|
163
|
+
|
164
|
+
@uc_file = @api.upload(@file_to_upload)
|
165
|
+
# => #<Uploadcare::Api::File ...
|
166
|
+
|
167
|
+
@uc_file.uuid
|
168
|
+
# => "c969be02-9925-4a7e-aa6d-b0730368791c"
|
169
|
+
|
170
|
+
@uc_file.cdn_url
|
171
|
+
# => "http://www.ucarecdn.com/c969be02-9925-4a7e-aa6d-b0730368791c/"
|
172
|
+
```
|
173
|
+
There is one issue with files - all data associated with it accesible with separate HTTP request only.
|
174
|
+
So if don't *specificaly* need image data (like file name, geolocation data etc) - you could just use :uuid and :cdn_url methods for file output:
|
175
|
+
|
176
|
+
```erb
|
177
|
+
<img src="#{@file.cdn_url}"/>
|
178
|
+
```
|
179
|
+
|
180
|
+
And thats it. Saves precious loading time.
|
181
|
+
|
182
|
+
If you do however need image data - you could do it manualy:
|
183
|
+
|
184
|
+
```ruby
|
185
|
+
@uc_file.load_data
|
186
|
+
```
|
187
|
+
|
188
|
+
Then your file object will respond to any method, described in API documentations (it basicaly an OpenStruct, so you know what to do):
|
189
|
+
|
190
|
+
```ruby
|
191
|
+
@uc_file.original_filename
|
192
|
+
# => "logo.png"
|
193
|
+
|
194
|
+
@uc_file.image_info
|
195
|
+
# => {"width"=>397, "geo_location"=>nil, "datetime_original"=>nil, "height"=>81}
|
196
|
+
```
|
197
|
+
|
198
|
+
You could read more https://uploadcare.com/documentation/rest/#file
|
199
|
+
|
200
|
+
### Generating files from stored info
|
201
|
+
At this point you probably store your files UUIDs or CDN urls in some kind of storage.
|
202
|
+
Then you can created file object by passing them into API:
|
203
|
+
|
204
|
+
```ruby
|
205
|
+
# file by UUID
|
206
|
+
@file = @api.file "c969be02-9925-4a7e-aa6d-b0730368791c"
|
207
|
+
# => #<Uploadcare::Api::File uuid="7bb9efa4-05c0-4f36-b0ef-11a4221867f6"
|
208
|
+
|
209
|
+
# file by CDN url
|
210
|
+
@file = @api.file "http://www.ucarecdn.com/a8775cf7-0c2c-44fa-b071-4dd48637ecac/"
|
211
|
+
# => #<Uploadcare::Api::File uuid="7bb9efa4-05c0-4f36-b0ef-11a4221867f6"
|
212
|
+
|
213
|
+
# not that generated files aren't loaded by initializing, you need to load it.
|
214
|
+
@file.is_loaded?
|
215
|
+
# => false
|
216
|
+
```
|
217
|
+
|
218
|
+
### Operations
|
219
|
+
Uploadcare presents for you some awesome CDN operations for croping, resizing, rotation, format convertation etc. You could read more at https://uploadcare.com/documentation/cdn/
|
220
|
+
Version 1.0.0 of this gem has not specific methods for this kind of operations, we expecting it comes lately in 1.1 releases.
|
221
|
+
For now all you files objects can store operations passed by cdn url:
|
222
|
+
|
223
|
+
```ruby
|
224
|
+
@file = @api.file "http://www.ucarecdn.com/a8775cf7-0c2c-44fa-b071-4dd48637ecac/-/crop/150x150/center/-/format/png/"
|
225
|
+
# => #<Uploadcare::Api::File uuid="a8775cf7-0c2c-44fa-b071-4dd48637ecac"
|
226
|
+
|
227
|
+
@file.operations
|
228
|
+
# => ["crop/150x150/center", "format/png"]
|
229
|
+
|
230
|
+
# note that by default :cdn_url method will return url without any operations:
|
231
|
+
@file.cdn_url
|
232
|
+
# => "http://www.ucarecdn.com/a8775cf7-0c2c-44fa-b071-4dd48637ecac/""
|
233
|
+
|
234
|
+
# you can pass true to :cdn_url methods to get url with included operations:
|
235
|
+
@file.cdn_url(true)
|
236
|
+
# => "http://www.ucarecdn.com/a8775cf7-0c2c-44fa-b071-4dd48637ecac/-/crop/150x150/center/-/format/png/"
|
237
|
+
|
238
|
+
# or cal specific methods for url with or without them:
|
239
|
+
@file.cdn_url_with_operations
|
240
|
+
@file.cdn_url_without_operations
|
241
|
+
```
|
242
|
+
|
243
|
+
Until operations wrapper is released best way for you to manage operation is simply add them to url as a string:
|
244
|
+
|
245
|
+
```ruby
|
246
|
+
<img src="#{file.cdn_url}-/crop/#{width}x#{height}/center/"/>
|
247
|
+
# or something like that
|
248
|
+
```
|
249
|
+
|
250
|
+
## Files list and pagination
|
251
|
+
File lists - it is a paginated collection of files for you project. You could read more at https://uploadcare.com/documentation/rest/#pagination.
|
252
|
+
In our gem file list is a single page containing 20 (by default, value may change) files and some methods for navgiting throug pages.
|
253
|
+
|
254
|
+
```ruby
|
255
|
+
@list = @api.file_list 1 #page number, 1 by default
|
256
|
+
# => #<Uploadcare::Api::FileList ....
|
257
|
+
|
258
|
+
|
259
|
+
# method :resulst will return you an array of files
|
260
|
+
@list.results
|
261
|
+
# => [#<Uploadcare::Api::File uuid="24626d2f-3f23-4464-b190-37115ce7742a" ...>,
|
262
|
+
# ... 20 of them ...
|
263
|
+
# #<Uploadcare::Api::File uuid="7bb9efa4-05c0-4f36-b0ef-11a4221867f6" ...>]
|
264
|
+
|
265
|
+
|
266
|
+
# note that every file is already loaded
|
267
|
+
@list.results[1].is_loaded?
|
268
|
+
# => true
|
269
|
+
|
270
|
+
|
271
|
+
# there is also shortcuts for you
|
272
|
+
@list.to_a
|
273
|
+
# => [#<Uploadcare::Api::File uuid="24626d2f-3f23-4464-b190-37115ce7742a" ...>,
|
274
|
+
# ... 20 of them ...
|
275
|
+
# #<Uploadcare::Api::File uuid="7bb9efa4-05c0-4f36-b0ef-11a4221867f6" ...>]
|
276
|
+
|
277
|
+
@list[3]
|
278
|
+
# => #<Uploadcare::Api::File ....
|
279
|
+
```
|
280
|
+
|
281
|
+
And don't forget navigation throught pages:
|
282
|
+
|
283
|
+
```ruby
|
284
|
+
@list = @api.files_list 3
|
285
|
+
|
286
|
+
@list.next_page
|
287
|
+
# => #<Uploadcare::Api::FileList page=4 ....
|
288
|
+
|
289
|
+
@list.previous_page
|
290
|
+
# => #<Uploadcare::Api::FileList page=2 ....
|
291
|
+
|
292
|
+
@list.go_to 5
|
293
|
+
# => #<Uploadcare::Api::FileList page=5 ....
|
294
|
+
|
295
|
+
|
296
|
+
|
297
|
+
# there is also methods described in API docs avaliable for you:
|
298
|
+
# total pages
|
299
|
+
@list.pages
|
300
|
+
# => 16
|
301
|
+
|
302
|
+
# current page
|
303
|
+
@list.page
|
304
|
+
# => 3
|
305
|
+
|
306
|
+
# files per page
|
307
|
+
@list.per_page
|
308
|
+
# => 20
|
309
|
+
|
310
|
+
# total files in project
|
311
|
+
@list.total
|
312
|
+
# => 308
|
313
|
+
```
|
314
|
+
|
315
|
+
## Project
|
316
|
+
Project provides basic information about the connecting project.
|
317
|
+
Project object is basicly openstruct so every method described in API docs (https://uploadcare.com/documentation/rest/#project) accessible to you:
|
318
|
+
|
319
|
+
```ruby
|
320
|
+
project = @api.project
|
321
|
+
# => #<Uploadcare::Api::Project collaborators=[], name="demo", pub_key="demopublickey", autostore_enabled=true>
|
322
|
+
|
323
|
+
project.name
|
324
|
+
# => "demo"
|
325
|
+
|
326
|
+
p.collaborators
|
327
|
+
# => []
|
328
|
+
# more often it should look like
|
329
|
+
# [{"email": collaborator@gmail.com, "name": "Collaborator"}, {"email": collaborator@gmail.com, "name": "Collaborator"}]
|
330
|
+
```
|
331
|
+
|
332
|
+
|
333
|
+
## Groups of files
|
334
|
+
Groups of files - https://uploadcare.com/documentation/rest/#group.
|
335
|
+
Stores files as group by the single UUID.
|
336
|
+
Note that UUID has a bit ~#{files_count} at the end and it is required by API to work properly.
|
337
|
+
|
338
|
+
```ruby
|
339
|
+
# group can be created eather by array of Uploadcare Files:
|
340
|
+
@files_ary = [@file, @file2]
|
341
|
+
@files = @api.upload @files_ary
|
342
|
+
@group = @api.create_group @files
|
343
|
+
# => #<Uploadcare::Api::Group uuid="0d192d66-c7a6-4465-b2cd-46716c5e3df3~2", files_count=2 ...
|
344
|
+
|
345
|
+
# or by array of strings containing UUIDs
|
346
|
+
@uuids_ary = ["c969be02-9925-4a7e-aa6d-b0730368791c", "c969be02-9925-4a7e-aa6d-b0730368791c"]
|
347
|
+
@group = @api.create_group @uuids_ary
|
348
|
+
# => #<Uploadcare::Api::Group uuid="0d192d66-c7a6-4465-b2cd-46716c5e3df3~2", files_count=2 ...
|
349
|
+
|
350
|
+
# you can also create group object just by passing group UUID
|
351
|
+
@group_uloaded = @api.group "#{uuid}"
|
352
|
+
```
|
353
|
+
|
354
|
+
As with files, group created by passing just the UUID is not loaded by default - you need to load data manualy, as it requires separate HTTP GET request.
|
355
|
+
New groups created by :create_group method is loaded by default.
|
356
|
+
|
357
|
+
```ruby
|
358
|
+
@group = @api.group "#{uuid}"
|
359
|
+
|
360
|
+
@group.is_loaded?
|
361
|
+
# => false
|
362
|
+
|
363
|
+
@group.load_data
|
364
|
+
# => #<Uploadcare::Api::Group uuid="0d192d66-c7a6-4465-b2cd-46716c5e3df3~2", files_count=2 ...
|
365
|
+
|
366
|
+
# loaded group has methods described by API docs and more importantly an array of files
|
367
|
+
# this files are loaded by default.
|
368
|
+
@group.files
|
369
|
+
# => [#<Uploadcare::Api::File uuid="24626d2f-3f23-4464-b190-37115ce7742a" ...>,
|
370
|
+
# ... #{files_count} of them ...
|
371
|
+
# #<Uploadcare::Api::File uuid="7bb9efa4-05c0-4f36-b0ef-11a4221867f6" ...>]
|
372
|
+
```
|
373
|
+
|
374
|
+
## Testing
|
375
|
+
|
376
|
+
Run `bundle exec rspec`.
|
377
|
+
|
378
|
+
To run tests with your own keys, make a `spec/config.yml` file like this:
|
379
|
+
|
380
|
+
```yaml
|
381
|
+
public_key: 'PUBLIC KEY'
|
382
|
+
private_key: 'PRIVATE KEY'
|
383
|
+
```
|
384
|
+
|
385
|
+
## Contributing
|