cloudapp_api 0.1.1 → 0.2.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.
- data/README.md +85 -45
- data/VERSION +1 -1
- data/cloudapp_api.gemspec +21 -11
- data/lib/cloudapp/account.rb +65 -31
- data/lib/cloudapp/base.rb +3 -3
- data/lib/cloudapp/client.rb +85 -47
- data/lib/cloudapp/core_ext.rb +16 -0
- data/lib/cloudapp/drop.rb +197 -0
- data/lib/cloudapp/gift_card.rb +64 -0
- data/lib/cloudapp_api.rb +5 -5
- data/spec/cloudapp_account_spec.rb +27 -2
- data/spec/cloudapp_client_spec.rb +55 -28
- data/spec/cloudapp_drop_spec.rb +258 -0
- data/spec/cloudapp_gift_card_spec.rb +67 -0
- data/spec/cloudapp_item_spec.rb +73 -7
- data/spec/fakeweb_helper.rb +15 -10
- data/spec/stubs/account/stats +8 -0
- data/spec/stubs/{item → drop}/create +0 -0
- data/spec/stubs/{item → drop}/delete +0 -0
- data/spec/stubs/{item → drop}/index +0 -0
- data/spec/stubs/{item → drop}/new +3 -1
- data/spec/stubs/drop/new-private +17 -0
- data/spec/stubs/{item → drop}/show +0 -0
- data/spec/stubs/drop/show-private +19 -0
- data/spec/stubs/{item → drop}/update +0 -0
- data/spec/stubs/gift_card/redeem +16 -0
- data/spec/stubs/gift_card/show +16 -0
- metadata +64 -55
- data/lib/cloudapp/item.rb +0 -154
@@ -0,0 +1,197 @@
|
|
1
|
+
module CloudApp
|
2
|
+
|
3
|
+
# An ActiveResource-like interface through which to interract with CloudApp drops.
|
4
|
+
#
|
5
|
+
# @example Gets started by Authenticating
|
6
|
+
# CloudApp.authenticate "username", "password"
|
7
|
+
#
|
8
|
+
# @example Usage via the Drop class
|
9
|
+
# # Find a single drop by it's slug
|
10
|
+
# @drop = CloudApp::Drop.find "2wr4"
|
11
|
+
#
|
12
|
+
# # Get a list of all drops
|
13
|
+
# @drops = CloudApp::Drop.all
|
14
|
+
#
|
15
|
+
# # Create a new bookmark
|
16
|
+
# @drop = CloudApp::Drop.create :bookmark, :name => "CloudApp", :redirect_url => "http://getcloudapp.com"
|
17
|
+
#
|
18
|
+
# # Create multiple bookmarks
|
19
|
+
# bookmarks = [
|
20
|
+
# { :name => "Authur Dent", :redirect_url => "http://en.wikipedia.org/wiki/Arthur_Dent" },
|
21
|
+
# { :name => "Zaphod Beeblebrox", :redirect_url => "http://en.wikipedia.org/wiki/Zaphod_Beeblebrox" }
|
22
|
+
# ]
|
23
|
+
# @drops = CloudApp::Drop.create :bookmarks, bookmarks
|
24
|
+
#
|
25
|
+
# # Upload a file
|
26
|
+
# @drop = CloudApp::Drop.create :upload, :file => "/path/to/image.png"
|
27
|
+
# @drop = CloudApp::Drop.create :upload, :file => "/path/to/image.png", :private => true
|
28
|
+
#
|
29
|
+
# # Rename a file
|
30
|
+
# CloudApp::Drop.update "http://my.cl.ly/items/1912565", :name => "Big Screenshot"
|
31
|
+
#
|
32
|
+
# # Set a drop's privacy
|
33
|
+
# CloudApp::Drop.update "http://my.cl.ly/items/1912565", :private => true
|
34
|
+
#
|
35
|
+
# # Delete a drop
|
36
|
+
# CloudApp::Drop.delete "http://my.cl.ly/items/1912565"
|
37
|
+
#
|
38
|
+
# # Recover a deleted drop
|
39
|
+
# CloudApp::Drop.recover "http://my.cl.ly/items/1912565"
|
40
|
+
#
|
41
|
+
# @example Usage via the class instance
|
42
|
+
# # Rename a file
|
43
|
+
# @drop.update :name => "Big Screenshot"
|
44
|
+
#
|
45
|
+
# # Set the drop's privacy
|
46
|
+
# @drop.update :private => true
|
47
|
+
#
|
48
|
+
# # Delete a drop
|
49
|
+
# @drop.delete
|
50
|
+
#
|
51
|
+
# # Recover a deleted drop
|
52
|
+
# @drop.recover
|
53
|
+
#
|
54
|
+
class Drop < Base
|
55
|
+
|
56
|
+
# Get metadata about a cl.ly URL like name, type, or view count.
|
57
|
+
#
|
58
|
+
# Finds the drop by it's slug id, for example "2wr4".
|
59
|
+
#
|
60
|
+
# @param [String] id cl.ly slug id
|
61
|
+
# @return [CloudApp::Drop]
|
62
|
+
def self.find(id)
|
63
|
+
res = get "http://cl.ly/#{id}"
|
64
|
+
res.ok? ? Drop.new(res) : res
|
65
|
+
end
|
66
|
+
|
67
|
+
# Page through your drops.
|
68
|
+
#
|
69
|
+
# Requires authentication.
|
70
|
+
#
|
71
|
+
# @param [Hash] opts options parameters
|
72
|
+
# @option opts [Integer] :page Page number starting at 1
|
73
|
+
# @option opts [Integer] :per_page Number of items per page
|
74
|
+
# @option opts [String] :type Filter items by type (image, bookmark, text, archive, audio, video, or unknown)
|
75
|
+
# @option opts [Boolean] :deleted Show trashed drops
|
76
|
+
# @return [Array[CloudApp::Drop]]
|
77
|
+
def self.all(opts = {})
|
78
|
+
res = get "/items", {:query => (opts.empty? ? nil : opts), :digest_auth => @@auth}
|
79
|
+
res.ok? ? res.collect{|i| Drop.new(i)} : res
|
80
|
+
end
|
81
|
+
|
82
|
+
# Create a new drop. Multiple bookmarks can be created at once by
|
83
|
+
# passing an array of bookmark options parameters.
|
84
|
+
#
|
85
|
+
# Requires authentication.
|
86
|
+
#
|
87
|
+
# @param [Symbol] kind type of drop (can be +:bookmark+, +:bookmarks+ or +:upload+)
|
88
|
+
# @overload self.create(:bookmark, opts = {})
|
89
|
+
# @param [Hash] opts options paramaters
|
90
|
+
# @option opts [String] :name Name of bookmark (only required for +:bookmark+ kind)
|
91
|
+
# @option opts [String] :redirect_url Redirect URL (only required for +:bookmark+ kind)
|
92
|
+
# @overload self.create(:bookmarks, bookmarks)
|
93
|
+
# @param [Array] bookmarks array of bookmark option parameters (containing +:name+ and +:redirect_url+)
|
94
|
+
# @overload self.create(:upload, opts = {})
|
95
|
+
# @param [Hash] opts options paramaters
|
96
|
+
# @option opts [String] :file Path to file (only required for +:upload+ kind)
|
97
|
+
# @option opts [Boolean] :private override the account default privacy setting
|
98
|
+
# @return [CloudApp::Drop]
|
99
|
+
def self.create(kind, opts = {})
|
100
|
+
case kind
|
101
|
+
when :bookmark
|
102
|
+
res = post "/items", {:body => {:item => opts}, :digest_auth => @@auth}
|
103
|
+
when :bookmarks
|
104
|
+
res = post "/items", {:body => {:items => opts}, :digest_auth => @@auth}
|
105
|
+
when :upload
|
106
|
+
r = get "/items/new", {:query => ({:item => {:private => opts[:private]}} if opts.has_key?(:private)), :digest_auth => @@auth}
|
107
|
+
return r unless r.ok?
|
108
|
+
res = post r['url'], Multipart.new(r['params'].merge!(:file => File.new(opts[:file]))).payload.merge!(:digest_auth => @@auth)
|
109
|
+
else
|
110
|
+
# TODO raise an error
|
111
|
+
return false
|
112
|
+
end
|
113
|
+
res.ok? ? (res.is_a?(Array) ? res.collect{|i| Drop.new(i)} : Drop.new(res)) : res
|
114
|
+
end
|
115
|
+
|
116
|
+
# Modify a drop. Can currently modify it's name or security setting by passing parameters.
|
117
|
+
#
|
118
|
+
# Requires authentication.
|
119
|
+
#
|
120
|
+
# @param [String] href href attribute of drop
|
121
|
+
# @param [Hash] opts options paramaters
|
122
|
+
# @option opts [String] :name for renaming the drop
|
123
|
+
# @option opts [Boolean] :privacy set drop privacy
|
124
|
+
# @return [CloudApp::Drop]
|
125
|
+
def self.update(href, opts = {})
|
126
|
+
res = put href, {:body => {:item => opts}, :digest_auth => @@auth}
|
127
|
+
res.ok? ? Drop.new(res) : res
|
128
|
+
end
|
129
|
+
|
130
|
+
# Send a drop to the trash.
|
131
|
+
#
|
132
|
+
# Requires authentication.
|
133
|
+
#
|
134
|
+
# @param [String] href href attribute of the drop
|
135
|
+
# @return [CloudApp::Drop]
|
136
|
+
def self.delete(href)
|
137
|
+
# Use delete on the Base class to avoid recursion
|
138
|
+
res = Base.delete href, :digest_auth => @@auth
|
139
|
+
res.ok? ? Drop.new(res) : res
|
140
|
+
end
|
141
|
+
|
142
|
+
# Recover a drop from the trash.
|
143
|
+
#
|
144
|
+
# Requires authentication.
|
145
|
+
#
|
146
|
+
# @param [String] href href attribute of the drop
|
147
|
+
# @return [CloudApp::Drop]
|
148
|
+
def self.recover(href)
|
149
|
+
res = put href, {:body => {:deleted => true, :item => {:deleted_at => nil}}, :digest_auth => @@auth}
|
150
|
+
res.ok? ? Drop.new(res) : res
|
151
|
+
end
|
152
|
+
|
153
|
+
attr_reader :href, :name, :private, :url, :content_url, :item_type, :view_counter,
|
154
|
+
:icon, :remote_url, :redirect_url, :created_at, :updated_at, :deleted_at
|
155
|
+
|
156
|
+
# Create a new CloudApp::Drop object.
|
157
|
+
#
|
158
|
+
# Only used internally.
|
159
|
+
#
|
160
|
+
# @param [Hash] attributes
|
161
|
+
# @param [CloudApp::Drop]
|
162
|
+
def initialize(attributes = {})
|
163
|
+
load(attributes)
|
164
|
+
end
|
165
|
+
|
166
|
+
# Modify the drop. Can currently modify it's name or security setting by passing parameters.
|
167
|
+
#
|
168
|
+
# @param [Hash] opts options paramaters
|
169
|
+
# @option opts [String] :name for renaming the drop
|
170
|
+
# @option opts [Boolean] :privacy set the drop's privacy
|
171
|
+
# @return [CloudApp::Drop]
|
172
|
+
def update(opts = {})
|
173
|
+
self.class.update self.href, opts
|
174
|
+
end
|
175
|
+
|
176
|
+
# Send the drop to the trash.
|
177
|
+
#
|
178
|
+
# @return [CloudApp::Drop]
|
179
|
+
def delete
|
180
|
+
self.class.delete self.href
|
181
|
+
end
|
182
|
+
|
183
|
+
# Recover the drop from the trash.
|
184
|
+
#
|
185
|
+
# @return [CloudApp::Drop]
|
186
|
+
def recover
|
187
|
+
self.class.recover self.href
|
188
|
+
end
|
189
|
+
|
190
|
+
end
|
191
|
+
|
192
|
+
# The Item class is now deprecated in favour of the Drop class.
|
193
|
+
# For legacy purposes you can still use the Item class but it is recommended you
|
194
|
+
# update your code to use the Drop class to ensure future compatibility.
|
195
|
+
class Item < Drop; end
|
196
|
+
|
197
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module CloudApp
|
2
|
+
|
3
|
+
# An ActiveResource-like interface through which to interract with CloudApp gift cards.
|
4
|
+
#
|
5
|
+
#
|
6
|
+
# @example Gets started by Authenticating
|
7
|
+
# CloudApp.authenticate "username", "password"
|
8
|
+
#
|
9
|
+
# @example Usage via the GiftCard class
|
10
|
+
# # View gift card details
|
11
|
+
# @gift = CloudApp::GiftCard.find "ABC123"
|
12
|
+
#
|
13
|
+
# # Apply the gift card
|
14
|
+
# CloudApp::GiftCard.redeem "ABC123"
|
15
|
+
# # or
|
16
|
+
# @gift.redeem
|
17
|
+
#
|
18
|
+
class GiftCard < Base
|
19
|
+
|
20
|
+
# Get the details of an unredeemed gift card.
|
21
|
+
#
|
22
|
+
# Requires authentication.
|
23
|
+
#
|
24
|
+
# @param [String] code Gift card code
|
25
|
+
# @return [CloudApp::GiftCard]
|
26
|
+
def self.find(code)
|
27
|
+
res = get "/gift_cards/#{code}", :digest_auth => @@auth
|
28
|
+
res.ok? ? GiftCard.new(res) : res
|
29
|
+
end
|
30
|
+
|
31
|
+
# Apply a gift card to the authenticated account.
|
32
|
+
#
|
33
|
+
# Requires authentication.
|
34
|
+
#
|
35
|
+
# @param [String] code Gift card code
|
36
|
+
# @return [CloudApp::GiftCard]
|
37
|
+
def self.redeem(code)
|
38
|
+
res = put "/gift_cards/#{code}", :digest_auth => @@auth
|
39
|
+
res.ok? ? GiftCard.new(res) : res
|
40
|
+
end
|
41
|
+
|
42
|
+
attr_reader :id, :code, :plan, :months, :href,
|
43
|
+
:created_at, :updated_at, :redeemed_at, :effective_at, :expires_at
|
44
|
+
|
45
|
+
# Create a new CloudApp::GiftCard object.
|
46
|
+
#
|
47
|
+
# Only used internally
|
48
|
+
#
|
49
|
+
# @param [Hash] attributes
|
50
|
+
# @param [CloudApp::GiftCard]
|
51
|
+
def initialize(attributes = {})
|
52
|
+
load(attributes)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Apply the gift card to the authenticated account.
|
56
|
+
#
|
57
|
+
# @return [CloudApp::GiftCard]
|
58
|
+
def redeem
|
59
|
+
self.class.redeem code
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
data/lib/cloudapp_api.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "httparty"
|
2
2
|
|
3
|
-
["base", "
|
3
|
+
["base", "drop", "account", "gift_card", "client", "multipart", "httparty", "core_ext"].each do |inc|
|
4
4
|
require File.join(File.dirname(__FILE__), "cloudapp", inc)
|
5
5
|
end
|
6
6
|
|
@@ -10,15 +10,15 @@ end
|
|
10
10
|
module CloudApp
|
11
11
|
|
12
12
|
# Version number
|
13
|
-
VERSION = "0.
|
13
|
+
VERSION = "0.2.0"
|
14
14
|
|
15
15
|
# Sets the authentication credentials in a class variable
|
16
16
|
#
|
17
|
-
# @param [String]
|
17
|
+
# @param [String] email cl.ly username
|
18
18
|
# @param [String] password cl.ly password
|
19
19
|
# @return [Hash] authentication credentials
|
20
|
-
def CloudApp.authenticate(
|
21
|
-
Base.authenticate(
|
20
|
+
def CloudApp.authenticate(email, password)
|
21
|
+
Base.authenticate(email, password)
|
22
22
|
end
|
23
23
|
|
24
24
|
end
|
@@ -122,14 +122,14 @@ describe "Register account" do
|
|
122
122
|
before(:each) do
|
123
123
|
fake_it_all
|
124
124
|
@email = "arthur@dent.com"
|
125
|
-
@account = CloudApp::Account.create :email => @email, :current_password => "towel"
|
125
|
+
@account = CloudApp::Account.create :email => @email, :current_password => "towel", :accept_tos => true
|
126
126
|
end
|
127
127
|
|
128
128
|
it "should be a Account object" do
|
129
129
|
@account.should be_a_kind_of CloudApp::Account
|
130
130
|
end
|
131
131
|
|
132
|
-
it "should
|
132
|
+
it "should have the same email" do
|
133
133
|
@account.email.should == @email
|
134
134
|
end
|
135
135
|
|
@@ -160,3 +160,28 @@ describe "Set custom domain" do
|
|
160
160
|
|
161
161
|
end
|
162
162
|
|
163
|
+
|
164
|
+
describe "View account statistics" do
|
165
|
+
|
166
|
+
before(:each) do
|
167
|
+
fake_it_all
|
168
|
+
CloudApp.authenticate "testuser@test.com", "password"
|
169
|
+
@account = CloudApp::Account.find
|
170
|
+
@stats = @account.stats
|
171
|
+
end
|
172
|
+
|
173
|
+
it "should be a Hash object" do
|
174
|
+
@stats.should be_a_kind_of Hash
|
175
|
+
end
|
176
|
+
|
177
|
+
it "should have a number of items" do
|
178
|
+
@stats[:items].should be_true
|
179
|
+
@stats[:items].should be_a_kind_of Integer
|
180
|
+
end
|
181
|
+
|
182
|
+
it "should have a number of views" do
|
183
|
+
@stats[:views].should be_true
|
184
|
+
@stats[:views].should be_a_kind_of Integer
|
185
|
+
end
|
186
|
+
|
187
|
+
end
|
@@ -15,51 +15,78 @@ describe CloudApp::Client do
|
|
15
15
|
auth[:username].should == username
|
16
16
|
end
|
17
17
|
|
18
|
-
it "should find an
|
19
|
-
|
20
|
-
|
18
|
+
it "should find an drop" do
|
19
|
+
drop = @client.drop "2wr4"
|
20
|
+
drop.should be_a_kind_of CloudApp::Drop
|
21
21
|
end
|
22
22
|
|
23
|
-
it "should list all
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
it "should list all drops" do
|
24
|
+
drops = @client.drops
|
25
|
+
drops.should be_a_kind_of Array
|
26
|
+
drops.each do |drop|
|
27
|
+
drop.should be_a_kind_of CloudApp::Drop
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
it "should bookmark an
|
31
|
+
it "should bookmark an drop" do
|
32
32
|
name = "CloudApp"
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
drop = @client.bookmark "http://getcloudapp.com", name
|
34
|
+
drop.should be_a_kind_of CloudApp::Drop
|
35
|
+
drop.name.should == name
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should bookmark multiple drops" do
|
39
|
+
# overwrite the normal fake uri for this spec
|
40
|
+
FakeWeb.register_uri :post, 'http://my.cl.ly/items', :response => stub_file(File.join('drop', 'index'))
|
41
|
+
bookmarks = [
|
42
|
+
{ :name => "Authur Dent", :redirect_url => "http://en.wikipedia.org/wiki/Arthur_Dent" },
|
43
|
+
{ :name => "Ford Prefect", :redirect_url => "http://en.wikipedia.org/wiki/Ford_Prefect_(character)"},
|
44
|
+
{ :name => "Zaphod Beeblebrox", :redirect_url => "http://en.wikipedia.org/wiki/Zaphod_Beeblebrox" }
|
45
|
+
]
|
46
|
+
drops = @client.bookmark bookmarks
|
47
|
+
drops.should be_a_kind_of Array
|
48
|
+
drops.each do |drop|
|
49
|
+
drop.should be_a_kind_of CloudApp::Drop
|
50
|
+
end
|
36
51
|
end
|
37
52
|
|
38
53
|
it "should upload a file" do
|
39
|
-
|
40
|
-
|
41
|
-
|
54
|
+
drop = @client.upload "README.md"
|
55
|
+
drop.should be_a_kind_of CloudApp::Drop
|
56
|
+
drop.item_type.should == "image"
|
42
57
|
end
|
43
58
|
|
44
|
-
it "should
|
59
|
+
it "should upload a file with specific privacy" do
|
60
|
+
# override the upload fakeweb uri
|
61
|
+
FakeWeb.register_uri :post, 'http://f.cl.ly', :status => ["303"], :location => "http://my.cl.ly/items/s3?item[private]=true"
|
62
|
+
drop = @client.upload "README.md", :private => true
|
63
|
+
drop.should be_a_kind_of CloudApp::Drop
|
64
|
+
drop.private.should == true
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should rename an drop" do
|
45
68
|
name = "CloudApp"
|
46
|
-
|
47
|
-
|
48
|
-
|
69
|
+
drop = @client.rename "2wr4", name
|
70
|
+
drop.should be_a_kind_of CloudApp::Drop
|
71
|
+
drop.name.should == name
|
49
72
|
end
|
50
73
|
|
51
|
-
it "should set an
|
52
|
-
|
53
|
-
|
54
|
-
|
74
|
+
it "should set an drops privacy" do
|
75
|
+
drop = @client.privacy "2wr4", false
|
76
|
+
drop.should be_a_kind_of CloudApp::Drop
|
77
|
+
drop.private.should == false
|
55
78
|
end
|
56
79
|
|
57
|
-
it "should delete an
|
58
|
-
|
59
|
-
|
60
|
-
|
80
|
+
it "should delete an drop" do
|
81
|
+
drop = @client.delete "2wr4"
|
82
|
+
drop.should be_a_kind_of CloudApp::Drop
|
83
|
+
drop.deleted_at.should be_a_kind_of Time
|
61
84
|
end
|
62
85
|
|
86
|
+
it "should recover an drop" do
|
87
|
+
drop = @client.recover "2wr4"
|
88
|
+
drop.should be_a_kind_of CloudApp::Drop
|
89
|
+
drop.deleted_at.should == nil
|
90
|
+
end
|
63
91
|
|
64
92
|
end
|
65
|
-
|
@@ -0,0 +1,258 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe CloudApp::Drop do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
fake_it_all
|
7
|
+
@drop = CloudApp::Drop.find "2wr4"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should be a Drop object" do
|
11
|
+
@drop.should be_a_kind_of CloudApp::Drop
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return a name" do
|
15
|
+
@drop.name.should == "CloudApp Logo.png"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should return an href" do
|
19
|
+
@drop.href.should == "http://my.cl.ly/items/1912559"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return a privacy boolean" do
|
23
|
+
@drop.private.should == false
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should return a url" do
|
27
|
+
@drop.url.should == "http://cl.ly/2wr4"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should return a content url" do
|
31
|
+
@drop.content_url.should == "http://cl.ly/2wr4/CloudApp_Logo.png"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should return a drop type" do
|
35
|
+
@drop.item_type.should == "image"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should return a view counter" do
|
39
|
+
@drop.view_counter.should == 42
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should return an icon url" do
|
43
|
+
@drop.icon.should == "http://my.cl.ly/images/item_types/image.png"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should return a remote url" do
|
47
|
+
@drop.remote_url == "http://f.cl.ly/items/7c7aea1395c3db0aee18/CloudApp%20Logo.png"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should not return a redirect url" do
|
51
|
+
@drop.redirect_url == nil
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should return timestamps" do
|
55
|
+
@drop.created_at.should be_a_kind_of Time
|
56
|
+
@drop.updated_at.should be_a_kind_of Time
|
57
|
+
@drop.deleted_at.should == nil
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
describe "Bookmark link" do
|
64
|
+
|
65
|
+
before(:each) do
|
66
|
+
fake_it_all
|
67
|
+
CloudApp.authenticate "testuser@test.com", "password"
|
68
|
+
@name = "CloudApp"
|
69
|
+
@redirect_url = "http://getcloudapp.com"
|
70
|
+
@drop = CloudApp::Drop.create :bookmark, {:name => @name, :redirect_url => @redirect_url}
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should be a Drop object" do
|
74
|
+
@drop.should be_a_kind_of CloudApp::Drop
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should return the same name" do
|
78
|
+
@drop.name.should == @name
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should return the same redirect_url" do
|
82
|
+
@drop.redirect_url.should == @redirect_url
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
describe "Bookmark multiple links" do
|
89
|
+
|
90
|
+
before(:each) do
|
91
|
+
fake_it_all
|
92
|
+
# overwrite the normal fake uri for this spec
|
93
|
+
FakeWeb.register_uri :post, 'http://my.cl.ly/items', :response => stub_file(File.join('drop', 'index'))
|
94
|
+
CloudApp.authenticate "testuser@test.com", "password"
|
95
|
+
@bookmarks = [
|
96
|
+
{ :name => "Authur Dent", :redirect_url => "http://en.wikipedia.org/wiki/Arthur_Dent" },
|
97
|
+
{ :name => "Ford Prefect", :redirect_url => "http://en.wikipedia.org/wiki/Ford_Prefect_(character)"},
|
98
|
+
{ :name => "Zaphod Beeblebrox", :redirect_url => "http://en.wikipedia.org/wiki/Zaphod_Beeblebrox" }
|
99
|
+
]
|
100
|
+
@drops = CloudApp::Drop.create :bookmarks, @bookmarks
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should be an Array" do
|
104
|
+
@drops.should be_a_kind_of Array
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should contain Drop objects" do
|
108
|
+
@drops.each do |drop|
|
109
|
+
drop.should be_a_kind_of CloudApp::Drop
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
describe "Change security of an drop" do
|
117
|
+
|
118
|
+
before(:each) do
|
119
|
+
fake_it_all
|
120
|
+
CloudApp.authenticate "testuser@test.com", "password"
|
121
|
+
@drop = CloudApp::Drop.update "http://my.cl.ly/items/1912565", {:private => false}
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should be an Drop object" do
|
125
|
+
@drop.should be_a_kind_of CloudApp::Drop
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should not be private" do
|
129
|
+
@drop.private.should == false
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
describe "Delete a drop" do
|
137
|
+
|
138
|
+
before(:each) do
|
139
|
+
fake_it_all
|
140
|
+
CloudApp.authenticate "testuser@test.com", "password"
|
141
|
+
@drop = CloudApp::Drop.delete "http://my.cl.ly/items/1912565"
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should be an Drop object" do
|
145
|
+
@drop.should be_a_kind_of CloudApp::Drop
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should have a deleted_at timestamp" do
|
149
|
+
@drop.deleted_at.should be_a_kind_of Time
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
|
155
|
+
describe "Empty trash" do
|
156
|
+
end
|
157
|
+
|
158
|
+
|
159
|
+
describe "List drops" do
|
160
|
+
|
161
|
+
before(:each) do
|
162
|
+
fake_it_all
|
163
|
+
CloudApp.authenticate "testuser@test.com", "password"
|
164
|
+
@drops = CloudApp::Drop.all
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should be an Array" do
|
168
|
+
@drops.should be_a_kind_of Array
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should contain Drop objects" do
|
172
|
+
@drops.each do |drop|
|
173
|
+
drop.should be_a_kind_of CloudApp::Drop
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
|
180
|
+
describe "Recover deleted drop" do
|
181
|
+
|
182
|
+
before(:each) do
|
183
|
+
fake_it_all
|
184
|
+
CloudApp.authenticate "testuser@test.com", "password"
|
185
|
+
@drop = CloudApp::Drop.recover "http://my.cl.ly/items/1912565"
|
186
|
+
end
|
187
|
+
|
188
|
+
it "should be an Drop object" do
|
189
|
+
@drop.should be_a_kind_of CloudApp::Drop
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should not have a deleted_at timestamp" do
|
193
|
+
@drop.deleted_at.should == nil
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
197
|
+
|
198
|
+
|
199
|
+
describe "Rename drop" do
|
200
|
+
|
201
|
+
before(:each) do
|
202
|
+
fake_it_all
|
203
|
+
CloudApp.authenticate "testuser@test.com", "password"
|
204
|
+
@name = "CloudApp"
|
205
|
+
@drop = CloudApp::Drop.update "http://my.cl.ly/items/1912565", {:name => @name}
|
206
|
+
end
|
207
|
+
|
208
|
+
it "should be an Drop object" do
|
209
|
+
@drop.should be_a_kind_of CloudApp::Drop
|
210
|
+
end
|
211
|
+
|
212
|
+
it "should be have the same name" do
|
213
|
+
@drop.name.should == @name
|
214
|
+
end
|
215
|
+
|
216
|
+
end
|
217
|
+
|
218
|
+
|
219
|
+
describe "Upload file" do
|
220
|
+
|
221
|
+
before(:each) do
|
222
|
+
fake_it_all
|
223
|
+
CloudApp.authenticate "testuser@test.com", "password"
|
224
|
+
@drop = CloudApp::Drop.create :upload, {:file => "README.md"}
|
225
|
+
end
|
226
|
+
|
227
|
+
it "should be an Drop object" do
|
228
|
+
@drop.should be_a_kind_of CloudApp::Drop
|
229
|
+
end
|
230
|
+
|
231
|
+
it "should return a drop type" do
|
232
|
+
@drop.item_type.should == "image"
|
233
|
+
end
|
234
|
+
|
235
|
+
end
|
236
|
+
|
237
|
+
|
238
|
+
describe "Upload file with specific privacy" do
|
239
|
+
|
240
|
+
before(:each) do
|
241
|
+
fake_it_all
|
242
|
+
# override the upload fakeweb uri
|
243
|
+
FakeWeb.register_uri :post, 'http://f.cl.ly', :status => ["303"], :location => "http://my.cl.ly/items/s3?item[private]=true"
|
244
|
+
CloudApp.authenticate "testuser@test.com", "password"
|
245
|
+
@drop = CloudApp::Drop.create :upload, {:file => "README.md", :private => true}
|
246
|
+
end
|
247
|
+
|
248
|
+
it "should be an Drop object" do
|
249
|
+
@drop.should be_a_kind_of CloudApp::Drop
|
250
|
+
end
|
251
|
+
|
252
|
+
it "should return as private" do
|
253
|
+
@drop.private.should == true
|
254
|
+
end
|
255
|
+
|
256
|
+
end
|
257
|
+
|
258
|
+
|