uploadcare-ruby 2.1.2 → 3.1.0

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.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/gem-push.yml +20 -0
  3. data/.github/workflows/ruby.yml +52 -0
  4. data/.gitignore +13 -6
  5. data/.rspec +2 -0
  6. data/.rubocop.yml +33 -0
  7. data/.yardopts +4 -0
  8. data/CHANGELOG.md +29 -47
  9. data/DEVELOPMENT.md +18 -0
  10. data/Gemfile +2 -0
  11. data/LICENSE +1 -1
  12. data/README.md +433 -527
  13. data/Rakefile +5 -5
  14. data/bin/console +15 -0
  15. data/bin/setup +8 -0
  16. data/lib/uploadcare/api/api.rb +25 -0
  17. data/lib/uploadcare/client/conversion/base_conversion_client.rb +59 -0
  18. data/lib/uploadcare/client/conversion/document_conversion_client.rb +41 -0
  19. data/lib/uploadcare/client/conversion/video_conversion_client.rb +46 -0
  20. data/lib/uploadcare/client/file_client.rb +44 -0
  21. data/lib/uploadcare/client/file_list_client.rb +46 -0
  22. data/lib/uploadcare/client/group_client.rb +45 -0
  23. data/lib/uploadcare/client/multipart_upload/chunks_client.rb +57 -0
  24. data/lib/uploadcare/client/multipart_upload_client.rb +64 -0
  25. data/lib/uploadcare/client/project_client.rb +18 -0
  26. data/lib/uploadcare/client/rest_client.rb +74 -0
  27. data/lib/uploadcare/client/rest_group_client.rb +23 -0
  28. data/lib/uploadcare/client/upload_client.rb +43 -0
  29. data/lib/uploadcare/client/uploader_client.rb +101 -0
  30. data/lib/uploadcare/client/webhook_client.rb +47 -0
  31. data/lib/uploadcare/concern/error_handler.rb +54 -0
  32. data/lib/uploadcare/concern/throttle_handler.rb +25 -0
  33. data/lib/uploadcare/concern/upload_error_handler.rb +32 -0
  34. data/lib/uploadcare/entity/conversion/base_converter.rb +36 -0
  35. data/lib/uploadcare/entity/conversion/document_converter.rb +15 -0
  36. data/lib/uploadcare/entity/conversion/video_converter.rb +15 -0
  37. data/lib/uploadcare/entity/decorator/paginator.rb +79 -0
  38. data/lib/uploadcare/entity/entity.rb +18 -0
  39. data/lib/uploadcare/entity/file.rb +106 -0
  40. data/lib/uploadcare/entity/file_list.rb +31 -0
  41. data/lib/uploadcare/entity/group.rb +40 -0
  42. data/lib/uploadcare/entity/group_list.rb +24 -0
  43. data/lib/uploadcare/entity/project.rb +13 -0
  44. data/lib/uploadcare/entity/uploader.rb +81 -0
  45. data/lib/uploadcare/entity/webhook.rb +14 -0
  46. data/lib/uploadcare/exception/conversion_error.rb +8 -0
  47. data/lib/uploadcare/exception/request_error.rb +9 -0
  48. data/lib/uploadcare/exception/throttle_error.rb +16 -0
  49. data/lib/uploadcare/param/authentication_header.rb +25 -0
  50. data/lib/uploadcare/param/conversion/document/processing_job_url_builder.rb +39 -0
  51. data/lib/uploadcare/param/conversion/video/processing_job_url_builder.rb +64 -0
  52. data/lib/uploadcare/param/param.rb +10 -0
  53. data/lib/uploadcare/param/secure_auth_header.rb +37 -0
  54. data/lib/uploadcare/param/simple_auth_header.rb +14 -0
  55. data/lib/uploadcare/param/upload/signature_generator.rb +24 -0
  56. data/lib/uploadcare/param/upload/upload_params_generator.rb +23 -0
  57. data/lib/uploadcare/param/user_agent.rb +21 -0
  58. data/lib/uploadcare/ruby/version.rb +5 -0
  59. data/lib/uploadcare.rb +36 -32
  60. data/uploadcare-ruby.gemspec +50 -37
  61. metadata +107 -113
  62. data/.travis.yml +0 -26
  63. data/UPGRADE_NOTES.md +0 -36
  64. data/lib/uploadcare/api/file_api.rb +0 -7
  65. data/lib/uploadcare/api/file_list_api.rb +0 -19
  66. data/lib/uploadcare/api/file_storage_api.rb +0 -34
  67. data/lib/uploadcare/api/group_api.rb +0 -38
  68. data/lib/uploadcare/api/group_list_api.rb +0 -17
  69. data/lib/uploadcare/api/project_api.rb +0 -9
  70. data/lib/uploadcare/api/raw_api.rb +0 -38
  71. data/lib/uploadcare/api/uploading_api/upload_params.rb +0 -72
  72. data/lib/uploadcare/api/uploading_api.rb +0 -71
  73. data/lib/uploadcare/api/validators/file_list_options_validator.rb +0 -73
  74. data/lib/uploadcare/api/validators/group_list_options_validator.rb +0 -49
  75. data/lib/uploadcare/api.rb +0 -26
  76. data/lib/uploadcare/errors/errors.rb +0 -64
  77. data/lib/uploadcare/resources/file.rb +0 -164
  78. data/lib/uploadcare/resources/file_list.rb +0 -14
  79. data/lib/uploadcare/resources/group.rb +0 -115
  80. data/lib/uploadcare/resources/group_list.rb +0 -14
  81. data/lib/uploadcare/resources/project.rb +0 -13
  82. data/lib/uploadcare/resources/resource_list.rb +0 -83
  83. data/lib/uploadcare/rest/auth/auth.rb +0 -31
  84. data/lib/uploadcare/rest/auth/secure.rb +0 -43
  85. data/lib/uploadcare/rest/auth/simple.rb +0 -16
  86. data/lib/uploadcare/rest/connections/api_connection.rb +0 -53
  87. data/lib/uploadcare/rest/connections/upload_connection.rb +0 -22
  88. data/lib/uploadcare/rest/middlewares/auth_middleware.rb +0 -24
  89. data/lib/uploadcare/rest/middlewares/parse_json_middleware.rb +0 -33
  90. data/lib/uploadcare/rest/middlewares/raise_error_middleware.rb +0 -21
  91. data/lib/uploadcare/utils/parser.rb +0 -71
  92. data/lib/uploadcare/utils/user_agent.rb +0 -44
  93. data/lib/uploadcare/version.rb +0 -3
  94. data/spec/api/file_list_api_spec.rb +0 -95
  95. data/spec/api/file_storage_api_spec.rb +0 -88
  96. data/spec/api/group_list_api_spec.rb +0 -59
  97. data/spec/api/raw_api_spec.rb +0 -25
  98. data/spec/api/uploading_api/upload_params_spec.rb +0 -99
  99. data/spec/api/uploading_api_spec.rb +0 -59
  100. data/spec/resources/file_list_spec.rb +0 -25
  101. data/spec/resources/file_spec.rb +0 -223
  102. data/spec/resources/group_list_spec.rb +0 -25
  103. data/spec/resources/group_spec.rb +0 -101
  104. data/spec/resources/operations_spec.rb +0 -59
  105. data/spec/resources/project_spec.rb +0 -21
  106. data/spec/rest/api_connection_spec.rb +0 -68
  107. data/spec/rest/auth/secure_spec.rb +0 -66
  108. data/spec/rest/auth/simple_spec.rb +0 -31
  109. data/spec/rest/errors_spec.rb +0 -75
  110. data/spec/rest/upload_connection_spec.rb +0 -19
  111. data/spec/shared/resource_list.rb +0 -188
  112. data/spec/spec_helper.rb +0 -54
  113. data/spec/uploadcare_spec.rb +0 -43
  114. data/spec/utils/parser_spec.rb +0 -85
  115. data/spec/utils/user_agent_spec.rb +0 -46
  116. data/spec/view.png +0 -0
  117. data/spec/view2.jpg +0 -0
@@ -1,99 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Uploadcare::UploadingApi::UploadParams do
4
- shared_examples 'handles store flag' do |key_name|
5
- let(:true_value) { 1 }
6
- let(:false_value) { 0 }
7
-
8
- context 'when neither global nor per-request store option is set' do
9
- it { is_expected.not_to include(key_name) }
10
- end
11
-
12
- context 'accepts :auto value in :store option' do
13
- before { request_options.merge!(store: :auto) }
14
- it { is_expected.to include(key_name => 'auto') }
15
- end
16
-
17
- context 'when only global :autostore option is set' do
18
- context 'to true' do
19
- before { global_options.merge!(autostore: true) }
20
- it { is_expected.to include(key_name => true_value) }
21
- end
22
-
23
- context 'to false' do
24
- before { global_options.merge!(autostore: false) }
25
- it { is_expected.to include(key_name => false_value) }
26
- end
27
- end
28
-
29
- context 'per-request :store option is set' do
30
- context 'to true' do
31
- before { request_options.merge!(store: true) }
32
- it { is_expected.to include(key_name => true_value) }
33
- end
34
-
35
- context 'to false' do
36
- before { request_options.merge!(store: false) }
37
- it { is_expected.to include(key_name => false_value) }
38
- end
39
- end
40
-
41
- context 'when both global and per-request store options are set' do
42
- before do
43
- global_options.merge!(autostore: false)
44
- request_options.merge!(store: true)
45
- end
46
-
47
- it 'per-request :store option has higher presidence' do
48
- is_expected.to include(key_name => true_value)
49
- end
50
- end
51
- end
52
-
53
- let(:global_options) { {public_key: 'test_public_key'} }
54
- let(:request_options) { {} }
55
-
56
- describe '#for_url_upload' do
57
- let(:url) { 'http://example.com/image.jpg' }
58
- subject(:upload_params) do
59
- described_class.new(global_options, request_options).for_url_upload(url)
60
- end
61
-
62
- it { is_expected.to include(source_url: URI.parse(url)) }
63
- it { is_expected.to include(pub_key: 'test_public_key') }
64
- it_behaves_like 'handles store flag', :store
65
-
66
- context 'works with https URLs' do
67
- let(:url) { 'https://example.com/image.jpg' }
68
- it { expect { upload_params }.not_to raise_error }
69
- end
70
-
71
- context 'if url is not http/https' do
72
- let(:url) { 'ftp://example.com/image.jpg' }
73
- it { expect { upload_params }.to raise_error(ArgumentError) }
74
- end
75
- end
76
-
77
- describe '#for_file_upload' do
78
- let(:files) { FILES_ARY } # contains 2 files, first is png, second is jpg
79
- subject(:upload_params) do
80
- described_class.new(global_options, request_options).for_file_upload(files)
81
- end
82
-
83
- it { is_expected.to include(UPLOADCARE_PUB_KEY: 'test_public_key') }
84
- it_behaves_like 'handles store flag', :UPLOADCARE_STORE
85
-
86
- context 'file params' do
87
- subject(:file_params) { upload_params.select { |k, _| k =~ /^file\[\d+\]/ }.values }
88
-
89
- it { expect(file_params.size).to eq(files.size) }
90
- it { is_expected.to all(be_a(Faraday::UploadIO)) }
91
- it { is_expected.to all(satisfy { |file| file.content_type =~ /image\/(png|jpeg)/}) }
92
- end
93
-
94
- context 'when any of given objects is not a File' do
95
- let(:files) { FILES_ARY + ['not a File'] }
96
- it { expect {upload_params}.to raise_error(ArgumentError) }
97
- end
98
- end
99
- end
@@ -1,59 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Uploadcare::Api do
4
- shared_examples 'respects :store option' do
5
- context 'respects :store option' do
6
- let(:upload_options) { {store: store} }
7
- subject { Array(uploaded).map(&:load_data) }
8
-
9
- context 'when :store option is true' do
10
- let(:store) { true }
11
- it { is_expected.to all(be_stored) }
12
- end
13
-
14
- define_negated_matcher :be_not_stored, :be_stored
15
- context 'when :store option is false' do
16
- let(:store) { false }
17
- it { is_expected.to all(be_not_stored) }
18
- end
19
- end
20
- end
21
-
22
- let(:api) { API }
23
- let(:upload_options) { {} }
24
-
25
- context 'when uploading single object' do
26
- subject(:uploaded) { api.upload(object, upload_options) }
27
-
28
- context 'when uploading a file' do
29
- let(:object) { FILE1 }
30
-
31
- it { is_expected.to be_a(Uploadcare::Api::File) }
32
- it { is_expected.to have_attributes(uuid: match(UUID_REGEX)) }
33
- include_examples 'respects :store option'
34
- end
35
-
36
- context 'when uploading from url' do
37
- let(:object) { IMAGE_URL }
38
-
39
- it { is_expected.to be_a(Uploadcare::Api::File) }
40
- it { is_expected.to have_attributes(uuid: match(UUID_REGEX)) }
41
- it { expect { api.upload('invalid.url.') }.to raise_error(ArgumentError) }
42
- include_examples 'respects :store option'
43
- end
44
- end
45
-
46
- context 'when loading multiple objects' do
47
- before(:all) { @uploaded_files = API.upload(FILES_ARY) }
48
- subject(:uploaded) { @uploaded_files.dup }
49
-
50
- it { is_expected.to be_a(Array) }
51
- it { is_expected.to all(be_a(Uploadcare::Api::File)) }
52
- it { is_expected.to all(have_attributes(uuid: match(UUID_REGEX))) }
53
- it { expect { uploaded.map(&:load_data) }.not_to raise_error }
54
- end
55
-
56
- context 'when given object is not a File, Array or String' do
57
- it { expect { api.upload(12) }.to raise_error(ArgumentError) }
58
- end
59
- end
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Uploadcare::Api::FileList do
4
- before :all do
5
- @api = API
6
-
7
- # ensure that current project has at least three files
8
- count = @api.get('/files/', limit: 3)['results'].size
9
- (3 - count).times{ @api.upload(IMAGE_URL) } if count < 3
10
-
11
- @list = @api.file_list(limit: 1)
12
- end
13
-
14
- let(:resource_class){ Uploadcare::Api::File }
15
- subject{ @list }
16
-
17
- it_behaves_like 'resource list'
18
-
19
- describe '#objects' do
20
- subject{ @list.objects }
21
-
22
- it{ is_expected.to all(be_a(resource_class)) }
23
- it{ is_expected.to all(be_loaded) }
24
- end
25
- end
@@ -1,223 +0,0 @@
1
- require 'spec_helper'
2
- require 'uri'
3
- require 'socket'
4
- require 'securerandom'
5
-
6
- describe Uploadcare::Api::File do
7
- let(:api) { API }
8
- let(:file) { api.upload IMAGE_URL }
9
-
10
- it 'is an instance of File' do
11
- expect(file).to be_an_instance_of Uploadcare::Api::File
12
- end
13
-
14
- it 'is not initialized without correct UUID given' do
15
- expect {Uploadcare::Api::File.new(api, "not-uuid")}.to raise_error NoMethodError
16
- end
17
-
18
- it 'has a valid url' do
19
- expect(file.uuid).to match UUID_REGEX
20
- end
21
-
22
- it 'returns a public url' do
23
- expect(file).to respond_to :cdn_url
24
- expect(file).to respond_to :public_url
25
- end
26
-
27
- it 'has a public url that is valid' do
28
- url = file.cdn_url
29
- uri = URI.parse(url)
30
- expect(uri).to be_kind_of(URI::HTTP)
31
- end
32
-
33
- it 'is able to load image data' do
34
- expect {file.load_data}.to_not raise_error
35
- end
36
-
37
- it 'stores itself' do
38
- expect { file.store }.to_not raise_error
39
- end
40
-
41
- it 'responds with nil for :stored? and :deleted? methods unless loaded' do
42
- expect(file.is_loaded?).to be false
43
- expect(file.is_stored?).to be_nil
44
- expect(file.is_deleted?).to be_nil
45
- end
46
-
47
- it 'is able to tell thenever file was stored' do
48
- file.load
49
- expect(file.stored?).to be(true)
50
- wait_until_ready(file)
51
- file.delete
52
- expect(file.stored?).to be(false)
53
- end
54
-
55
- it 'deletes itself' do
56
- expect { file.delete }.to_not raise_error
57
- end
58
-
59
- it 'is able to tell thenever file was deleted' do
60
- file.load
61
- file.is_deleted?.should == false
62
- wait_until_ready(file)
63
- file.delete
64
- expect(file.is_deleted?).to be true
65
- end
66
-
67
- it 'constructs file from uuid' do
68
- uuid_file = api.file file.uuid
69
- expect(uuid_file).to be_kind_of(Uploadcare::Api::File)
70
- end
71
-
72
- it 'constructs file from cdn url' do
73
- url = file.cdn_url + "-/crop/150x150/center/-/format/png/"
74
- file = api.file url
75
- expect(file).to be_kind_of(Uploadcare::Api::File)
76
- end
77
-
78
- it 'responds to datetime_ methods' do
79
- file.load
80
- expect(file).to respond_to(:datetime_original)
81
- expect(file).to respond_to(:datetime_uploaded)
82
- expect(file).to respond_to(:datetime_stored)
83
- expect(file).to respond_to(:datetime_removed)
84
- end
85
-
86
- it 'responds to datetime_uploaded' do
87
- file.load
88
- expect(file.datetime_uploaded).to be_kind_of(DateTime)
89
- end
90
-
91
- it 'responds to datetime_stored' do
92
- file.load
93
- file.store
94
- expect(file.datetime_stored).to be_kind_of(DateTime)
95
- end
96
-
97
- it 'responds to datetime_removed' do
98
- file.load
99
- wait_until_ready(file)
100
- file.delete
101
- expect(file.datetime_removed).to be_kind_of(DateTime)
102
- expect(file.datetime_deleted).to be_kind_of(DateTime)
103
- expect(file.datetime_removed).to eq file.datetime_deleted
104
- end
105
-
106
-
107
- it 'copies itself' do
108
- # This can cause "File is not ready yet" error if ran too early
109
- # In this case we retry it 3 times before giving up
110
- result = retry_if(Uploadcare::Error::RequestError::BadRequest){file.copy}
111
- expect(result).to be_kind_of(Hash)
112
- expect(result["type"]).to eq "file"
113
- end
114
-
115
-
116
- describe '#internal_copy' do
117
- describe 'integration' do
118
- it 'creates an internal copy of the file' do
119
- response = retry_if(Uploadcare::Error::RequestError::BadRequest){file.internal_copy}
120
-
121
- expect( response['type'] ).to eq 'file'
122
- expect( response['result']['uuid'] ).not_to eq file.uuid
123
- end
124
- end
125
-
126
- describe 'params' do
127
- let(:url_without_ops){ api.file(SecureRandom.uuid).cdn_url }
128
- let(:url_with_ops){ url_without_ops + "-/crop/5x5/center/" }
129
- let(:file){ api.file(url_with_ops) }
130
-
131
- context 'if no params given' do
132
- it 'requests server to create an unstored copy with operataions applied' do
133
- expect(api).to receive(:post)
134
- .with('/files/', source: url_with_ops)
135
-
136
- file.internal_copy
137
- end
138
- end
139
-
140
- context 'if strip_operations: true given' do
141
- it 'passes url without operations as a source for a copy' do
142
- expect(api).to receive(:post)
143
- .with('/files/', source: url_without_ops)
144
-
145
- file.internal_copy(strip_operations: true)
146
- end
147
- end
148
-
149
- context 'if store: true given' do
150
- it 'requests server to create a stored copy' do
151
- expect(api).to receive(:post)
152
- .with('/files/', source: url_with_ops, store: true)
153
-
154
- file.internal_copy(store: true)
155
- end
156
- end
157
- end
158
- end
159
-
160
-
161
- describe '#external_copy' do
162
- let(:target){ 'with-prefix' }
163
-
164
- describe 'integration', :payed_feature do
165
- it 'creates an external copy of the file' do
166
- response = retry_if(Uploadcare::Error::RequestError::BadRequest) do
167
- file.external_copy(target)
168
- end
169
-
170
- expect( response['type'] ).to eq 'url'
171
- expect( response['result'] ).to match(URI.regexp)
172
- end
173
- end
174
-
175
- describe 'params' do
176
- let(:url_without_ops){ api.file(SecureRandom.uuid).cdn_url }
177
- let(:url_with_ops){ url_without_ops + "-/resize/50x50/" }
178
- let(:file){ api.file(url_with_ops) }
179
-
180
- context 'if only target is given' do
181
- it 'requests server to create a private copy with default name and with operataions applied' do
182
- expect(api).to receive(:post)
183
- .with('/files/', source: url_with_ops, target: target)
184
-
185
- file.external_copy(target)
186
- end
187
- end
188
-
189
- context 'if target is not given' do
190
- it 'raises ArgumentError' do
191
- expect{ file.external_copy }.to raise_error(ArgumentError)
192
- end
193
- end
194
-
195
- context 'if strip_operations: true given' do
196
- it 'passes url without operations as a source for a copy' do
197
- expect(api).to receive(:post)
198
- .with('/files/', source: url_without_ops, target: target)
199
-
200
- file.external_copy(target, strip_operations: true)
201
- end
202
- end
203
-
204
- context 'if :make_public given' do
205
- it 'requests server to create a copy with correspondent permissions' do
206
- expect(api).to receive(:post)
207
- .with('/files/', source: url_with_ops, target: target, make_public: false)
208
-
209
- file.external_copy(target, make_public: false)
210
- end
211
- end
212
-
213
- context 'if :pattern given' do
214
- it 'requests server to apply given pattern to name of a copy' do
215
- expect(api).to receive(:post)
216
- .with('/files/', source: url_with_ops, target: target, pattern: 'test')
217
-
218
- file.external_copy(target, pattern: 'test')
219
- end
220
- end
221
- end
222
- end
223
- end
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Uploadcare::Api::GroupList do
4
- before :all do
5
- @api = API
6
-
7
- # ensure that current project has at least three groups
8
- count = @api.get('/groups/', limit: 3)['results'].size
9
- (3 - count).times{ @api.create_group([@api.upload(IMAGE_URL)]) } if count < 3
10
-
11
- @list = @api.group_list(limit: 1)
12
- end
13
-
14
- let(:resource_class){ Uploadcare::Api::Group }
15
- subject{ @list }
16
-
17
- it_behaves_like 'resource list'
18
-
19
- describe '#objects' do
20
- subject{ @list.objects }
21
-
22
- it{ is_expected.to all(be_a(resource_class)) }
23
- it{ is_expected.not_to include(be_loaded) }
24
- end
25
- end
@@ -1,101 +0,0 @@
1
- require 'spec_helper'
2
- require 'uri'
3
- require 'socket'
4
-
5
- describe Uploadcare::Api::Group do
6
- before :all do
7
- @api = API
8
- @files = @api.upload FILES_ARY
9
- end
10
-
11
- it "should return group object" do
12
- group = @api.create_group @files
13
- group.should be_kind_of(Uploadcare::Api::Group)
14
- end
15
-
16
- it "should have valid UUID and count of files" do
17
- group = @api.create_group @files
18
- group.should respond_to(:uuid)
19
- group.should respond_to(:files_count)
20
- end
21
-
22
- it "should may have files" do
23
- group = @api.create_group @files
24
- group.should respond_to(:files)
25
- group.files.should be_kind_of(Array)
26
- group.files.each do |file|
27
- file.should be_kind_of(Uploadcare::Api::File)
28
- end
29
- end
30
-
31
- it "should create group by id" do
32
- group = @api.create_group @files
33
-
34
- expect {group_uloaded = @api.group group.uuid}.to_not raise_error
35
- end
36
-
37
- it "should create loaded and unloaded groups" do
38
- group = @api.create_group @files
39
- group_uloaded = @api.group group.uuid
40
- group.is_loaded?.should be true
41
- group_uloaded.is_loaded?.should be false
42
- end
43
-
44
- it "group should load data" do
45
- group = @api.create_group @files
46
- group_uloaded = @api.group group.uuid
47
- group_uloaded.should respond_to(:load_data)
48
- expect {group_uloaded.load_data}.to_not raise_error
49
- group_uloaded.is_loaded?.should be true
50
- end
51
-
52
- it "group should store itself" do
53
- group = @api.create_group @files
54
- expect {group.store}.to_not raise_error
55
- end
56
-
57
- it "should be able to tell when group is stored" do
58
- group = @api.create_group @files
59
- group_unloaded = @api.group group.uuid
60
-
61
- group_unloaded.is_loaded?.should == false
62
- group_unloaded.is_stored?.should == nil
63
-
64
- group_unloaded.load
65
- group_unloaded.is_stored?.should == false
66
-
67
- group_unloaded.store
68
- group_unloaded.is_stored?.should == true
69
- end
70
-
71
- it "group should have datetime attributes" do
72
- group = @api.create_group @files
73
- group.should respond_to(:datetime_created)
74
- group.should respond_to(:datetime_stored)
75
- end
76
-
77
- it "group should have datetime_created as DateTime object" do
78
- group = @api.create_group @files
79
- group.datetime_created.should be_kind_of(DateTime)
80
- end
81
-
82
- it "group should have datetime_created as DateTime object" do
83
- group = @api.create_group @files
84
- group.store
85
- group.datetime_stored.should be_kind_of(DateTime)
86
- end
87
-
88
- it "should return cdn string for file in group by it index" do
89
- group = @api.create_group @files
90
-
91
- file_cdn_url = group.file_cdn_url(0)
92
-
93
- file_cdn_url.should be_kind_of(String)
94
- file_cdn_url.should == group.cdn_url + "nth/0/"
95
- end
96
-
97
- it 'should raise an error if index is greater than files count in group' do
98
- group = @api.create_group @files
99
- expect {group.file_cdn_url(5)}.to raise_error ArgumentError
100
- end
101
- end
@@ -1,59 +0,0 @@
1
- require 'spec_helper'
2
- require 'uri'
3
- require 'socket'
4
-
5
- describe Uploadcare::Api::File do
6
- before :all do
7
- @api = API
8
- @file = @api.upload IMAGE_URL
9
- end
10
-
11
- it "freshly uploaded file should have empty operations list" do
12
- @file.should respond_to :operations
13
- @file.operations.should be_kind_of(Array)
14
- @file.operations.should be_empty
15
- end
16
-
17
- it "file created from uuid should be not loaded and without operations" do
18
- file = @api.file @file.uuid
19
- file.is_loaded?.should be false
20
- file.operations.should be_empty
21
- end
22
-
23
- it "file created from url without operations should be not be loaded and have no operations" do
24
- file = @api.file @file.cdn_url
25
- file.is_loaded?.should be false
26
- file.operations.should be_empty
27
- end
28
-
29
- it "file created from url with operations should be not be loaded and have operations" do
30
- file = @api.file @file.cdn_url + "-/crop/150x150/center/-/format/png/"
31
- file.is_loaded?.should be false
32
- file.operations.should_not be_empty
33
- end
34
-
35
- it "file should have methods for construct cdn urls with or without cdn operations" do
36
- @file.should respond_to(:cdn_url_with_operations)
37
- @file.should respond_to(:cdn_url_without_operations)
38
- end
39
-
40
- it "file should construct cdn_url with and without opreations" do
41
- url_without_operations = @file.cdn_url
42
- url_with_operations = @file.cdn_url + "-/crop/150x150/center/-/format/png/"
43
-
44
- file = @api.file url_with_operations
45
-
46
- file.cdn_url.should == (url_without_operations)
47
- file.cdn_url(true).should == (url_with_operations)
48
- end
49
-
50
- it 'should works also with exact methods' do
51
- url_without_operations = @file.cdn_url.to_s
52
- url_with_operations = @file.cdn_url + "-/crop/150x150/center/-/format/png/"
53
-
54
- file = @api.file url_with_operations
55
-
56
- file.cdn_url_with_operations.should == (url_with_operations)
57
- file.cdn_url_without_operations.should == (url_without_operations)
58
- end
59
- end
@@ -1,21 +0,0 @@
1
- require 'spec_helper'
2
- require 'uri'
3
- require 'socket'
4
-
5
- describe Uploadcare::Api::Project do
6
- before :all do
7
- @api = API
8
- @project = @api.project
9
- end
10
-
11
- it "should instantiated project" do
12
- @project.should be_kind_of Uploadcare::Api::Project
13
- end
14
-
15
- it "should respond to project api methods" do
16
- @project.should respond_to :collaborators
17
- @project.should respond_to :name
18
- @project.should respond_to :pub_key
19
- @project.should respond_to :autostore_enabled
20
- end
21
- end
@@ -1,68 +0,0 @@
1
- require 'spec_helper'
2
- require 'uri'
3
- require 'socket'
4
-
5
- describe Uploadcare::Connections::ApiConnection do
6
- let(:settings){ Uploadcare.default_settings }
7
-
8
- it 'is initializable with default settings' do
9
- expect {described_class.new(settings)}.to_not raise_error
10
- end
11
-
12
-
13
- describe 'default request headers' do
14
- subject{ described_class.new(settings).headers }
15
-
16
- it 'includes correct Accept header' do
17
- expected = "application/vnd.uploadcare-v#{settings[:api_version]}+json"
18
- expect(subject['Accept']).to eq expected
19
- end
20
-
21
- it 'includes correct User-Agent header' do
22
- expected = Uploadcare::UserAgent.new.call(settings)
23
- expect(subject['User-Agent']).to eq expected
24
- end
25
- end
26
-
27
-
28
- describe 'middleware' do
29
- subject{ described_class.new(settings).builder.handlers }
30
-
31
- it 'uses Request::Auth middleware' do
32
- expect(subject).to include(Uploadcare::Connections::Request::Auth)
33
- end
34
-
35
- it 'uses Response::ParseJson middleware' do
36
- expect(subject).to include(Uploadcare::Connections::Response::ParseJson)
37
- end
38
-
39
- it 'uses Response::RaiseError middleware' do
40
- expect(subject).to include(Uploadcare::Connections::Response::RaiseError)
41
- end
42
- end
43
-
44
-
45
- describe 'auth scheme' do
46
- it 'uses simple auth when auth_scheme: :simple setting is provided' do
47
- expect(Uploadcare::Connections::Auth::Simple).to receive(:new)
48
- described_class.new(settings.merge(auth_scheme: :simple))
49
- end
50
-
51
- it 'uses secure auth when auth_scheme: :secure setting is provided' do
52
- expect(Uploadcare::Connections::Auth::Secure).to receive(:new)
53
- described_class.new(settings.merge(auth_scheme: :secure))
54
- end
55
-
56
- it 'raises KeyError when :auth_scheme options is not provided' do
57
- expect{
58
- described_class.new(settings.reject{|k,_| k == :auth_scheme})
59
- }.to raise_error(KeyError)
60
- end
61
-
62
- it 'raises ArgumentError when provided :auth_scheme is unknown' do
63
- expect{
64
- described_class.new(settings.merge(auth_scheme: :unknown))
65
- }.to raise_error(ArgumentError)
66
- end
67
- end
68
- end