cloudapp 2.0.0.beta.4 → 2.0.0.beta.5

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 (50) hide show
  1. data/Gemfile.lock +12 -19
  2. data/README.md +60 -6
  3. data/Rakefile +1 -19
  4. data/bin/cloudapp +48 -0
  5. data/cloudapp.gemspec +11 -42
  6. data/lib/cloudapp/authorized.rb +14 -0
  7. data/lib/cloudapp/collection_json.rb +86 -3
  8. data/lib/cloudapp/credentials.rb +115 -0
  9. data/lib/cloudapp/service.rb +43 -146
  10. data/lib/cloudapp.rb +1 -3
  11. data/man/cloudapp.1 +100 -0
  12. data/man/cloudapp.1.html +157 -0
  13. data/man/cloudapp.1.ronn +56 -0
  14. metadata +24 -69
  15. data/CHANGELOG.md +0 -34
  16. data/lib/cloudapp/authorized_representation.rb +0 -17
  17. data/lib/cloudapp/collection_json/item.rb +0 -20
  18. data/lib/cloudapp/collection_json/representation.rb +0 -74
  19. data/lib/cloudapp/collection_json/template.rb +0 -17
  20. data/lib/cloudapp/collection_json/tint.rb +0 -11
  21. data/lib/cloudapp/drop.rb +0 -37
  22. data/lib/cloudapp/drop_collection.rb +0 -37
  23. data/spec/cassettes/account_token.yml +0 -88
  24. data/spec/cassettes/create_bookmark.yml +0 -132
  25. data/spec/cassettes/create_bookmark_with_name.yml +0 -133
  26. data/spec/cassettes/create_bookmark_with_privacy.yml +0 -133
  27. data/spec/cassettes/list_drops.yml +0 -87
  28. data/spec/cassettes/list_drops_with_bad_token.yml +0 -45
  29. data/spec/cassettes/list_drops_with_filter.yml +0 -129
  30. data/spec/cassettes/list_drops_with_limit.yml +0 -129
  31. data/spec/cassettes/purge_drops.yml +0 -466
  32. data/spec/cassettes/setup_drops.yml +0 -620
  33. data/spec/cassettes/token_for_account.yml +0 -88
  34. data/spec/cassettes/token_for_account_with_bad_credentials.yml +0 -86
  35. data/spec/cassettes/upload_file.yml +0 -276
  36. data/spec/cassettes/upload_file_with_name.yml +0 -278
  37. data/spec/cassettes/upload_file_with_privacy.yml +0 -277
  38. data/spec/cassettes/view_drop.yml +0 -45
  39. data/spec/cloudapp/authorized_representation_spec.rb +0 -32
  40. data/spec/cloudapp/collection_json/item_spec.rb +0 -45
  41. data/spec/cloudapp/collection_json/representation_spec.rb +0 -118
  42. data/spec/cloudapp/collection_json/template_spec.rb +0 -53
  43. data/spec/cloudapp/drop_collection_spec.rb +0 -127
  44. data/spec/cloudapp/drop_spec.rb +0 -142
  45. data/spec/cloudapp/service_spec.rb +0 -335
  46. data/spec/helper.rb +0 -8
  47. data/spec/integration_spec.rb +0 -68
  48. data/spec/support/files/favicon.ico +0 -0
  49. data/spec/support/stub_class_or_module.rb +0 -22
  50. data/spec/support/vcr.rb +0 -24
@@ -1,335 +0,0 @@
1
- require 'helper'
2
- require 'support/vcr'
3
-
4
- require 'cloudapp/service'
5
-
6
- describe CloudApp::Service do
7
- let(:service) { CloudApp::Service.using_token token }
8
- let(:token) { 'abc123' }
9
- let(:email) { 'arthur@dent.com' }
10
- let(:password) { 'towel' }
11
- let(:favicon) {
12
- Pathname('../../support/files/favicon.ico').expand_path(__FILE__)
13
- }
14
-
15
- after(:all) do
16
- VCR.use_cassette('purge_drops') do
17
- service.drops(filter: 'all').each do |drop|
18
- service.delete_drop(drop.href)
19
- end
20
- end
21
- end
22
-
23
- describe '.token_for_account' do
24
- subject {
25
- VCR.use_cassette('token_for_account') {
26
- CloudApp::Service.token_for_account email, password
27
- }
28
- }
29
-
30
- it 'returns the token' do
31
- subject.should be_a(String)
32
- subject.should eq(token)
33
- end
34
-
35
- context 'with bad credentials' do
36
- let(:password) { 'wrong' }
37
- subject {
38
- VCR.use_cassette('token_for_account_with_bad_credentials') {
39
- CloudApp::Service.token_for_account email, password
40
- }
41
- }
42
-
43
- it 'returns nothing' do
44
- subject.should be_nil
45
- end
46
- end
47
- end
48
-
49
- describe '#account_token' do
50
- subject {
51
- VCR.use_cassette('account_token') {
52
- CloudApp::Service.new.account_token email, password
53
- }
54
- }
55
-
56
- it { should be_a(CloudApp::CollectionJson::Representation) }
57
-
58
- it 'returns a single item' do
59
- subject.should have(1).item
60
- end
61
-
62
- it 'returns the token' do
63
- subject.items.first.data.should eq('token' => token)
64
- end
65
-
66
- context 'with bad credentials' do
67
- let(:password) { 'wrong' }
68
- subject {
69
- VCR.use_cassette('token_for_account_with_bad_credentials') {
70
- CloudApp::Service.new.account_token email, password
71
- }
72
- }
73
-
74
- it { should be_unauthorized }
75
- end
76
- end
77
-
78
- describe '#drops' do
79
- subject { VCR.use_cassette('list_drops') { service.drops }}
80
- before do
81
- VCR.use_cassette('setup_drops') do
82
- service.upload favicon
83
- service.bookmark 'http://cl.ly', private: false
84
- drop = service.bookmark('http://getcloudapp.com', name: 'CloudApp').first
85
- service.trash_drop drop.href
86
- end
87
- end
88
-
89
- it { should be_a(CloudApp::DropCollection) }
90
-
91
- it 'has 2 drops' do
92
- subject.should have(2).items
93
- end
94
-
95
- context 'with filter' do
96
- subject {
97
- VCR.use_cassette('list_drops_with_filter') {
98
- service.drops filter: 'trash'
99
- }
100
- }
101
-
102
- it { should be_a(CloudApp::DropCollection) }
103
-
104
- it 'returns the filtered drops' do
105
- subject.should have(1).items
106
- end
107
- end
108
-
109
- context 'with limit' do
110
- subject {
111
- VCR.use_cassette('list_drops_with_limit') {
112
- service.drops limit: 1
113
- }
114
- }
115
-
116
- it { should be_a(CloudApp::DropCollection) }
117
-
118
- it 'limits drops' do
119
- subject.should have(1).items
120
- end
121
- end
122
-
123
- context 'with a bad token' do
124
- let(:token) { 'wrong' }
125
- subject {
126
- VCR.use_cassette('list_drops_with_bad_token') {
127
- service.drops
128
- }
129
- }
130
-
131
- it { should be_a(CloudApp::DropCollection) }
132
- it { should be_unauthorized }
133
- end
134
- end
135
-
136
- describe '#drop' do
137
- subject {
138
- VCR.use_cassette('list_drops') {
139
- @href = service.drops.first.href
140
- }
141
- VCR.use_cassette('view_drop') { service.drop(@href) }
142
- }
143
-
144
- it { should be_a(CloudApp::DropCollection) }
145
-
146
- it 'returns a drop' do
147
- subject.should have(1).item
148
- end
149
- end
150
-
151
- describe '#bookmark' do
152
- let(:url) { 'http://getcloudapp.com' }
153
- subject {
154
- VCR.use_cassette('create_bookmark') { service.bookmark(url) }
155
- }
156
-
157
- it { should be_a(CloudApp::DropCollection) }
158
-
159
- it 'returns the new drop' do
160
- subject.should have(1).item
161
- end
162
-
163
- context 'with a name' do
164
- let(:name) { 'New Bookmark' }
165
- subject {
166
- VCR.use_cassette('create_bookmark_with_name') {
167
- service.bookmark url, name: name
168
- }
169
- }
170
-
171
- it 'has the given name' do
172
- subject.first.data['name'].should eq(name)
173
- end
174
- end
175
-
176
- context 'with a privacy' do
177
- subject {
178
- VCR.use_cassette('create_bookmark_with_privacy') {
179
- service.bookmark url, private: false
180
- }
181
- }
182
-
183
- it 'is public' do
184
- subject.first.data['private'].should eq(false)
185
- end
186
- end
187
- end
188
-
189
- describe '#upload' do
190
- subject {
191
- VCR.use_cassette('upload_file') { service.upload(favicon) }
192
- }
193
-
194
- it { should be_a(CloudApp::DropCollection) }
195
-
196
- it 'returns the new drop' do
197
- subject.should have(1).item
198
- end
199
-
200
- context 'with a name' do
201
- let(:name) { 'New File' }
202
- subject {
203
- VCR.use_cassette('upload_file_with_name') {
204
- service.upload favicon, name: name
205
- }
206
- }
207
-
208
- it 'has the given name' do
209
- subject.first.data['name'].should eq(name)
210
- end
211
- end
212
-
213
- context 'with a privacy' do
214
- subject {
215
- VCR.use_cassette('upload_file_with_privacy') {
216
- service.upload favicon, private: false
217
- }
218
- }
219
-
220
- it 'is public' do
221
- subject.first.data['private'].should eq(false)
222
- end
223
- end
224
-
225
- describe 'too large file'
226
- end
227
-
228
-
229
- # describe '#update' do
230
- # let(:url) { 'http://getcloudapp.com' }
231
- # let(:name) { 'New Drop Name' }
232
- # let(:private) { false }
233
- # subject {
234
- # VCR.use_cassette('rename_drop') {
235
- # drop = service.bookmark(url).items.first
236
- # service.update drop.href, name: name, private: private
237
- # }
238
- # }
239
-
240
- # it { should be_a(CloudApp::CollectionJson::Representation) }
241
-
242
- # it 'returns the updated drop' do
243
- # subject.should have(1).item
244
- # end
245
-
246
- # it 'updates the name' do
247
- # subject.items.first.data['name'].should eq(name)
248
- # end
249
-
250
- # it 'updates the privacy' do
251
- # subject.items.first.data['private'].should eq(private)
252
- # end
253
-
254
- # context 'updating bookmark link' do
255
- # subject {
256
- # VCR.use_cassette('update_drop_bookmark_url') {
257
- # drop = service.bookmark(url).items.first
258
- # service.update drop.href, url: 'http://example.org'
259
- # }
260
- # }
261
-
262
- # it { should be_a(CloudApp::CollectionJson::Representation) }
263
-
264
- # it 'returns the new drop' do
265
- # subject.should have(1).item
266
- # end
267
- # end
268
-
269
- # context 'updating file' do
270
- # let(:options) {{ path: favicon }}
271
- # subject {
272
- # VCR.use_cassette('update_file') {
273
- # drop = service.bookmark(url).items.first
274
- # service.update drop.href, options
275
- # }
276
- # }
277
-
278
- # it { should be_a(CloudApp::CollectionJson::Representation) }
279
-
280
- # it 'returns the new drop' do
281
- # subject.should have(1).item
282
- # end
283
- # end
284
- # end
285
-
286
- # describe '#trash_drop' do
287
- # subject {
288
- # VCR.use_cassette('trash_drop') {
289
- # drop = service.bookmark('http://getcloudapp.com').items.first
290
- # service.trash_drop drop.href
291
- # }
292
- # }
293
-
294
- # it { should be_a(CloudApp::CollectionJson::Representation) }
295
-
296
- # it 'returns the trashed drop' do
297
- # subject.should have(1).item
298
- # end
299
-
300
- # it 'trashes the drop' do
301
- # subject.items.first.data['trash'].should eq(true)
302
- # end
303
- # end
304
-
305
- # describe '#recover_drop' do
306
- # subject {
307
- # VCR.use_cassette('recover_drop') {
308
- # drop = service.bookmark('http://getcloudapp.com').items.first
309
- # service.trash_drop drop.href
310
- # service.recover_drop drop.href
311
- # }
312
- # }
313
-
314
- # it { should be_a(CloudApp::CollectionJson::Representation) }
315
-
316
- # it 'returns the recovered drop' do
317
- # subject.should have(1).item
318
- # end
319
-
320
- # it 'recovers the drop' do
321
- # subject.items.first.data['trash'].should eq(false)
322
- # end
323
- # end
324
-
325
- # describe '#delete_drop' do
326
- # subject {
327
- # VCR.use_cassette('delete_drop') {
328
- # drop = service.bookmark('http://getcloudapp.com').items.first
329
- # service.delete_drop drop.href
330
- # }
331
- # }
332
-
333
- # it { should be_authorized }
334
- # end
335
- end
data/spec/helper.rb DELETED
@@ -1,8 +0,0 @@
1
- require 'support/stub_class_or_module'
2
- require 'English'
3
-
4
- root = File.expand_path('../..', __FILE__)
5
- $LOAD_PATH.unshift(File.expand_path('app/models', root))
6
- $LOAD_PATH.unshift(File.expand_path('app/controllers', root))
7
- $LOAD_PATH.unshift(File.expand_path('app/helpers', root))
8
- $LOAD_PATH.unshift(File.expand_path('lib', root))
@@ -1,68 +0,0 @@
1
- require 'helper'
2
- require 'support/vcr'
3
-
4
- require 'cloudapp'
5
-
6
- describe CloudApp, :integration do
7
- let(:path) { Pathname('../support/files/favicon.ico').expand_path(__FILE__) }
8
-
9
- it 'integrates with the API' do
10
- token = CloudApp::Service.token_for_account 'arthur@dent.com', 'towel'
11
- token.should =~ /\w+/
12
-
13
- service = CloudApp::Service.using_token token
14
- service.drops(filter: 'all').each(&:delete)
15
- service.drops(filter: 'all').should be_empty
16
-
17
- bookmark = service.bookmark('http://getcloudapp.com', name: 'CloudApp').first
18
- file = service.upload(path).first
19
- public_drop = service.bookmark('http://getcloudapp.com', private: false).first
20
-
21
- service.drops(filter: 'all').should have(3).items
22
-
23
- bookmark_details = service.drop(bookmark.href).first
24
- bookmark_details.name .should eq('CloudApp')
25
- bookmark_details.private.should eq(true)
26
-
27
- file_details = service.drop(file.href).first
28
- file_details.name .should eq('favicon.ico')
29
- file_details.private.should eq(true)
30
-
31
- public_drop_details = service.drop(public_drop.href).first
32
- public_drop_details.name .should eq('http://getcloudapp.com')
33
- public_drop_details.private.should eq(false)
34
-
35
- bookmark.trash
36
- file .trash
37
- service.drops(filter: 'all') .should have(3).items
38
- service.drops(filter: 'active').should have(1).item
39
- service.drops(filter: 'trash') .should have(2).items
40
-
41
- bookmark.recover
42
- service.drops(filter: 'all') .should have(3).items
43
- service.drops(filter: 'active').should have(2).item
44
- service.drops(filter: 'trash') .should have(1).items
45
-
46
- page1 = service.drops(filter: 'all', limit: 1)
47
- page1.should have(1).item
48
-
49
- page2 = page1.follow 'next'
50
- page2.should have(1).item
51
-
52
- page3 = page2.follow 'next'
53
- page3.should have(1).item
54
- page3.has_link?('next').should eq(false)
55
-
56
- page2 = page3.follow 'previous'
57
- page2.should have(1).item
58
-
59
- page1 = page2.follow 'previous'
60
- page1.should have(1).item
61
- page1.has_link?('previous').should eq(false)
62
-
63
- bookmark .delete
64
- file .delete
65
- public_drop.delete
66
- service.drops(filter: 'all').should be_empty
67
- end
68
- end
Binary file
@@ -1,22 +0,0 @@
1
- module Stubbed end
2
-
3
- def stub_module(full_name, &block)
4
- stub_class_or_module full_name, Module, &block
5
- end
6
-
7
- def stub_class(full_name, &block)
8
- stub_class_or_module full_name, Class, &block
9
- end
10
-
11
- def stub_class_or_module(full_name, kind, &block)
12
- stub = full_name.to_s.split(/::/).inject(Object) do |context, name|
13
- begin
14
- context.const_get(name)
15
- rescue NameError
16
- stubbed = kind.new do include(Stubbed) end
17
- context.const_set(name, stubbed)
18
- end
19
- end
20
-
21
- stub.class_eval &block if block
22
- end
data/spec/support/vcr.rb DELETED
@@ -1,24 +0,0 @@
1
- require 'vcr'
2
-
3
- VCR.configure do |vcr|
4
- vcr.cassette_library_dir = 'spec/cassettes'
5
- vcr.default_cassette_options = { record: :once,
6
- match_requests_on: [ :method, :uri, :body ]}
7
- vcr.hook_into :webmock
8
- vcr.configure_rspec_metadata!
9
- end
10
-
11
- RSpec.configure do |rspec|
12
- rspec.treat_symbols_as_metadata_keys_with_true_values = true
13
- rspec.before :each, integration: true do
14
- VCR.configure do |vcr|
15
- vcr.allow_http_connections_when_no_cassette = true
16
- end
17
- end
18
-
19
- rspec.after :each, integration: true do
20
- VCR.configure do |vcr|
21
- vcr.allow_http_connections_when_no_cassette = false
22
- end
23
- end
24
- end