dropio 0.9.1 → 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.
data/lib/dropio/client.rb CHANGED
@@ -1,316 +1,214 @@
1
- require 'rbconfig'
2
-
3
1
  class Dropio::Client
4
- include Singleton
2
+ attr_accessor :service
5
3
 
6
- # Generates a user agent string.
7
- def self.user_agent_string
8
- ruby_version = %w{MAJOR MINOR TEENY}.map { |k| Config::CONFIG[k] }.join(".")
9
- "DropioAPI-Ruby/#{Dropio::VERSION} (Ruby #{ruby_version} #{Config::CONFIG["host"]}; +http://dropio.rubyforge.org/)"
4
+ def initialize
5
+ self.service = Dropio::Api.new
10
6
  end
11
7
 
12
- # The default set of headers for each request.
13
- DEFAULT_HEADER = {
14
- 'User-Agent' => user_agent_string,
15
- 'Accept' => 'application/json'
16
- }
17
-
18
- # Takes a drop name and optional token and returns a +Drop+ or errors.
19
- def find_drop(drop_name, token = nil)
20
- uri = URI::HTTP.build({:path => drop_path(drop_name), :query => get_request_tokens(token)})
21
- req = Net::HTTP::Get.new(uri.request_uri, DEFAULT_HEADER)
22
- drop = nil
23
- complete_request(req) { |body| drop = Mapper.map_drops(body) }
24
- drop
8
+ def drop(drop_name, token = nil)
9
+ handle(:drop, self.service.drop(drop_name, token))
25
10
  end
26
11
 
27
- # Finds a collection of +Asset+ objects for a given +Drop+.
28
- def find_assets(drop, page = 1)
29
- token = get_default_token(drop)
30
- uri = URI::HTTP.build({:path => asset_path(drop), :query => get_request_tokens(token) + "&page=#{page}"})
31
- req = Net::HTTP::Get.new(uri.request_uri, DEFAULT_HEADER)
32
- assets = nil
33
- complete_request(req) { |body| assets = Mapper.map_assets(drop, body) }
34
- assets
12
+ def generate_drop_url(drop)
13
+ self.service.generate_drop_url(drop.name,drop.default_token)
35
14
  end
36
-
37
- # Finds a collection of +Comment+ objects for a given +Asset+.
38
- def find_comments(asset)
39
- token = get_default_token(asset.drop)
40
- uri = URI::HTTP.build({:path => comment_path(asset.drop, asset), :query => get_request_tokens(token)})
41
- req = Net::HTTP::Get.new(uri.request_uri, DEFAULT_HEADER)
42
- comments = nil
43
- complete_request(req) { |body| comments = Mapper.map_comments(asset, body) }
44
- comments
15
+
16
+ def create_drop(params = {})
17
+ handle(:drop, self.service.create_drop(params))
45
18
  end
46
-
47
- # Creates a drop with an +attributes+ hash.
48
- # Valid attributes: name (string), guests_can_comment (boolean), guests_can_add (boolean), guests_can_delete (boolean), expiration_length (string), password (string), admin_password (string), and premium_code (string)
49
- # Descriptions can be found here: http://groups.google.com/group/dropio-api/web/full-api-documentation
50
- def create_drop(attributes = {})
51
- uri = URI::HTTP.build({:path => drop_path})
52
- form = create_form(attributes)
53
- req = Net::HTTP::Post.new(uri.request_uri, DEFAULT_HEADER)
54
- req.set_form_data(form)
55
- drop = nil
56
- complete_request(req) { |body| drop = Mapper.map_drops(body) }
57
- drop
19
+
20
+ def update_drop(drop)
21
+ params = { :description => drop.description, :admin_email => drop.admin_email,
22
+ :email_key => drop.email_key, :default_view => drop.default_view,
23
+ :chat_password => drop.chat_password, :guests_can_comment => drop.guests_can_comment,
24
+ :guests_can_add => drop.guests_can_add, :guests_can_delete => drop.guests_can_delete,
25
+ :expiration_length => drop.expiration_length, :password => drop.password,
26
+ :admin_password => drop.admin_password, :premium_code => drop.premium_code }
27
+ handle(:drop, self.service.update_drop(drop.name,drop.admin_token,params))
58
28
  end
59
29
 
60
- # Saves a +Drop+ back to drop.io
61
- def save_drop(drop)
62
- uri = URI::HTTP.build({:path => drop_path(drop) })
63
- token = get_admin_token(drop)
64
- form = create_form :token => token,
65
- :expiration_length => drop.expiration_length,
66
- :guests_can_comment => drop.guests_can_comment,
67
- :premium_code => drop.premium_code,
68
- :guests_can_add => drop.guests_can_add,
69
- :guests_can_delete => drop.guests_can_delete,
70
- :password => drop.password,
71
- :admin_password => drop.admin_password
72
- req = Net::HTTP::Put.new(uri.request_uri, DEFAULT_HEADER)
73
- req.set_form_data(form)
74
- drop = nil
75
- complete_request(req) { |body| drop = Mapper.map_drops(body) }
76
- drop
30
+ def empty_drop(drop)
31
+ r = handle(:response, self.service.empty_drop(drop.name,drop.admin_token))
32
+ r["result"]
77
33
  end
78
-
79
- # Destroys a +Drop+
80
- def destroy_drop(drop)
81
- token = get_admin_token(drop)
82
- uri = URI::HTTP.build({:path => drop_path(drop)})
83
- form = create_form( { :token => token })
84
- req = Net::HTTP::Delete.new(uri.request_uri, DEFAULT_HEADER)
85
- req.set_form_data(form)
86
- complete_request(req)
87
- true
34
+
35
+ def delete_drop(drop)
36
+ r = handle(:response, self.service.delete_drop(drop.name,drop.admin_token))
37
+ r["result"]
88
38
  end
89
39
 
90
- # Adds a file to a +Drop+
91
- def add_file(drop, file_path)
92
- token = get_default_token(drop)
93
- asset = nil
94
-
95
- File.open(file_path, 'r') do |file|
96
- uri = URI.parse(Dropio.upload_url)
97
- req = Net::HTTP::Post.new(uri.path, DEFAULT_HEADER)
98
- form = create_form( { :drop_name => drop.name, :token => token , :file => file } )
99
- req.multipart_params = form
100
- complete_request(req, uri.host) { |body| asset = Mapper.map_assets(drop, body) }
101
- end
102
-
103
- asset
40
+ def promote_nick(drop,nick)
41
+ r = handle(:response, self.service.promote_nick(drop.name,nick,drop.admin_token))
42
+ r["result"]
104
43
  end
105
44
 
106
- # Creates a note +Asset+
107
- def create_note(drop, title, contents)
108
- token = get_default_token(drop)
109
- uri = URI::HTTP.build({:path => asset_path(drop)})
110
- form = create_form( { :token => token, :title => title, :contents => contents })
111
- req = Net::HTTP::Post.new(uri.request_uri, DEFAULT_HEADER)
112
- req.set_form_data(form)
113
- asset = nil
114
- complete_request(req) { |body| asset = Mapper.map_assets(drop, body) }
115
- asset
45
+ def drop_upload_code(drop)
46
+ r = handle(:response, self.service.drop_upload_code(drop.name,drop.default_token))
47
+ r["upload_code"]
116
48
  end
117
-
118
- # Creates a link +Asset+
49
+
119
50
  def create_link(drop, url, title = nil, description = nil)
120
- token = get_default_token(drop)
121
- uri = URI::HTTP.build({:path => asset_path(drop)})
122
- form = create_form( { :token => token, :url => url, :title => title, :description => description })
123
- req = Net::HTTP::Post.new(uri.request_uri, DEFAULT_HEADER)
124
- req.set_form_data(form)
125
- asset = nil
126
- complete_request(req) { |body| asset = Mapper.map_assets(drop, body) }
127
- asset
51
+ a = handle(:asset, self.service.create_link(drop.name, url, title, description, drop.default_token))
52
+ a.drop = drop
53
+ a
128
54
  end
129
-
130
- # Saves a +Comment+, requires admin token.
131
- def save_comment(comment)
132
- token = get_default_token(comment.asset.drop)
133
- uri = URI::HTTP.build({:path => comment_path(comment.asset.drop, comment.asset, comment)})
134
- form = create_form( { :token => token, :contents => comment.contents })
135
- req = Net::HTTP::Put.new(uri.request_uri, DEFAULT_HEADER)
136
- req.set_form_data(form)
137
- complete_request(req) { |body| comment = Mapper.map_comments(comment.asset, body) }
138
- comment
55
+
56
+ def create_note(drop, contents, title = nil)
57
+ a = handle(:asset, self.service.create_note(drop.name, contents, title, drop.default_token))
58
+ a.drop = drop
59
+ a
139
60
  end
140
-
141
- # Destroys a +Comment+, requires admin token.
142
- def destroy_comment(comment)
143
- token = get_admin_token(comment.asset.drop)
144
- uri = URI::HTTP.build({:path => comment_path(comment.asset.drop, comment.asset, comment)})
145
- form = create_form( { :token => token })
146
- req = Net::HTTP::Delete.new(uri.request_uri, DEFAULT_HEADER)
147
- req.set_form_data(form)
148
- complete_request(req)
149
- true
61
+
62
+ def add_file(drop, file_path, comment = nil)
63
+ a = handle(:asset, self.service.add_file(drop.name, file_path, drop.default_token, comment))
64
+ a.drop = drop
65
+ a
150
66
  end
151
67
 
152
- # Creates a +Comment+
153
- def create_comment(asset, contents)
154
- token = get_default_token(asset.drop)
155
- uri = URI::HTTP.build({:path => comment_path(asset.drop, asset)})
156
- form = create_form( { :token => token, :contents => contents })
157
- req = Net::HTTP::Post.new(uri.request_uri, DEFAULT_HEADER)
158
- req.set_form_data(form)
159
- comment = nil
160
- complete_request(req) { |body| comment = Mapper.map_comments(asset, body) }
161
- comment
68
+ def add_file_from_url(drop, url)
69
+ a = handle(:asset, self.service.add_file_from_url(drop.name, url, drop.default_token))
70
+ a.drop = drop
71
+ a
162
72
  end
163
-
164
- # Sends an +Asset+ (of type Document) to a +fax_number+
165
- def send_to_fax(asset, fax_number)
166
- params = { :medium => "fax", :fax_number => fax_number }
167
- send_asset(asset,params)
73
+
74
+ def assets(drop, page = 1, order = :oldest)
75
+ assets = handle(:assets, self.service.assets(drop.name,page,order,drop.default_token))
76
+ assets.each{|a| a.drop = drop}
77
+ assets
168
78
  end
169
-
170
- # Sends an email +message+, containing the +asset+ to a list of +emails+
171
- def send_to_emails(asset, emails = [], message = nil)
172
- params = { :medium => "email", :emails => emails.join(","), :message => message }
173
- send_asset(asset,params)
79
+
80
+ def asset(drop, asset_name)
81
+ a = handle(:asset, self.service.asset(drop.name,asset_name,drop.default_token))
82
+ a.drop = drop
83
+ a
174
84
  end
175
85
 
176
- # Sends an +Asset+ to a given +Drop+ with +drop_name+
177
- def send_to_drop(asset, drop_name)
178
- params = { :medium => "drop", :drop_name => drop_name }
179
- send_asset(asset,params)
86
+ def generate_asset_url(asset)
87
+ self.service.generate_drop_url(asset.drop.name, asset.name, asset.drop.default_token)
180
88
  end
181
-
182
- # Saves an +Asset+ back to drop.io
183
- def save_asset(asset)
184
- token = get_default_token(asset.drop)
185
- uri = URI::HTTP.build({:path => asset_path(asset.drop, asset)})
186
- form = create_form({ :token => token,
187
- :title => asset.title,
188
- :url => asset.url,
189
- :description => asset.description,
190
- :contents => asset.contents })
191
- req = Net::HTTP::Put.new(uri.request_uri, DEFAULT_HEADER)
192
- req.set_form_data(form)
193
- complete_request(req) { |body| asset = Mapper.map_assets(asset.drop, body)}
194
- asset
89
+
90
+ def asset_embed_code(asset)
91
+ r = handle(:response, self.service.asset_embed_code(asset.drop.name,asset.name,asset.drop.default_token))
92
+ r["embed_code"]
195
93
  end
196
-
197
- # Destroys an +Asset+
198
- def destroy_asset(asset)
199
- token = get_default_token(asset.drop)
200
- uri = URI::HTTP.build({:path => asset_path(asset.drop, asset)})
201
- form = create_form( { :token => token })
202
- req = Net::HTTP::Delete.new(uri.request_uri, DEFAULT_HEADER)
203
- req.set_form_data(form)
204
- complete_request(req)
205
- true
94
+
95
+ def update_asset(asset)
96
+ params = { :title => asset.title, :description => asset.description, :url => asset.url, :contents => asset.contents }
97
+ a = handle(:asset, self.service.update_asset(asset.drop.name,asset.name,params,asset.drop.default_token))
98
+ a.drop = asset.drop
99
+ a
206
100
  end
207
-
208
- # Generates the authenticated +Drop+ url.
209
- def generate_drop_url(drop)
210
- signed_url(drop)
101
+
102
+ def delete_asset(asset)
103
+ r = handle(:response, self.service.delete_asset(asset.drop.name,asset.name,asset.drop.default_token))
104
+ r["result"]
211
105
  end
212
-
213
- # Generates the authenticated +Asset+ url.
214
- def generate_asset_url(asset)
215
- signed_url(asset.drop, asset)
106
+
107
+ def send_asset_to_drop(asset, target_drop)
108
+ r = handle(:response, self.service.send_asset_to_drop(asset.drop.name, asset.name, target_drop.name, target_drop.default_token, asset.drop.default_token))
109
+ r["result"]
216
110
  end
217
111
 
218
-
219
- protected
220
-
221
- def signed_url(drop, asset = nil)
222
- # 10 minute window.
223
- expires = (Time.now.utc + 10*60).to_i
224
- token = get_default_token(drop)
225
- path = Dropio.base_url + "/#{drop.name}"
226
- path += "/asset/#{asset.name}" if asset
227
- path += "/from_api"
228
- sig = Digest::SHA1.hexdigest("#{expires}+#{token}+#{drop.name}")
229
- path + "?expires=#{expires}&signature=#{sig}"
112
+ def send_asset_to_fax(asset, fax_number)
113
+ r = handle(:response, self.service.send_asset_to_fax(asset.drop.name, asset.name, fax_number, asset.drop.default_token))
114
+ r["result"]
230
115
  end
231
116
 
232
- def create_form(options = {})
233
- { :api_key => Dropio.api_key, :format => 'json', :version => '1.0' }.merge(options)
117
+ def send_asset_to_emails(asset, emails, message)
118
+ r = handle(:response, self.service.send_asset_to_emails(asset.drop.name, asset.name, emails, message, asset.drop.default_token))
119
+ r["result"]
234
120
  end
235
121
 
236
- def send_asset(asset, params = {})
237
- token = get_default_token(asset.drop)
238
- uri = URI::HTTP.build({:path => send_to_path(asset.drop, asset)})
239
- form = create_form( { :token => token }.merge(params) )
240
- req = Net::HTTP::Post.new(uri.request_uri, DEFAULT_HEADER)
241
- req.set_form_data(form)
242
- complete_request(req)
243
- true
122
+ def copy_asset(asset,target_drop)
123
+ r = handle(:response, self.service.copy_asset(asset.drop.name,asset.name,target_drop.name,target_drop.default_token,asset.drop.default_token))
124
+ r["result"]
244
125
  end
245
-
246
- def get_default_token(drop)
247
- drop.admin_token || drop.guest_token
126
+
127
+ def move_asset(asset,target_drop)
128
+ r = handle(:response, self.service.move_asset(asset.drop.name,asset.name,target_drop.name,target_drop.default_token,asset.drop.default_token))
129
+ r["result"]
248
130
  end
249
-
250
- def get_admin_token(drop)
251
- drop ? drop.admin_token : nil
131
+
132
+ def comments(asset)
133
+ comments = handle(:comments, self.service.comments(asset.drop.name,asset.name,asset.drop.default_token))
134
+ comments.each{|c| c.asset = asset}
135
+ comments
136
+ end
137
+
138
+ def create_comment(asset, contents)
139
+ c = handle(:comment, self.service.create_comment(asset.drop.name,asset.name,contents,asset.drop.default_token))
140
+ c.asset = asset
141
+ c
142
+ end
143
+
144
+ def comment(asset, comment_id)
145
+ c = handle(:comment, self.service.comment(asset.drop.name,asset.name,comment_id,asset.drop.default_token))
146
+ c.asset = asset
147
+ c
148
+ end
149
+
150
+ def update_comment(comment)
151
+ c = handle(:comment, self.service.update_comment(comment.asset.drop.name,comment.asset.name,comment.id,comment.contents,comment.asset.drop.admin_token))
152
+ c.asset = comment.asset
153
+ c
154
+ end
155
+
156
+ def delete_comment(comment)
157
+ r = handle(:response, self.service.delete_comment(comment.asset.drop.name,comment.asset.name,comment.id,comment.asset.drop.admin_token))
158
+ r["result"]
252
159
  end
253
160
 
254
- def get_request_tokens(token = '')
255
- "api_key=#{Dropio.api_key}&token=#{token}&version=1.0&format=json"
161
+ def create_twitter_subscription(drop, username,password, message, events)
162
+ s = handle(:subscription, self.service.create_twitter_subscription(drop.name, username, password, message, events, drop.default_token))
163
+ s.drop = drop
164
+ s
256
165
  end
257
166
 
258
- # Creates a path directly to a comment resource or a collection of comments.
259
- def comment_path(drop, asset, comment = nil)
260
- comment_id = (comment) ? comment.id.to_s : ''
261
- return asset_path(drop,asset) + "/comments/" + comment_id
167
+ def create_email_subscription(drop, emails, welcome_message, welcome_subject, welcome_from, message, events)
168
+ s = handle(:subscription, self.service.create_email_subscription(drop.name, emails, welcome_message, welcome_subject, welcome_from, message, events, drop.default_token))
169
+ s.drop = drop
170
+ s
262
171
  end
263
172
 
264
- # Creates a path directly to an asset resource or collection of assets.
265
- def asset_path(drop, asset = nil)
266
- asset_name = (asset) ? asset.name : ''
267
- return drop_path(drop) + "/assets/" + asset_name
173
+ def subscriptions(drop)
174
+ subscriptions = handle(:subscriptions, self.service.subscriptions(drop.name, drop.admin_token))
175
+ subscriptions.each{|s| s.drop = drop}
176
+ subscriptions
268
177
  end
269
178
 
270
- # Creates a path directly to a drop resource or collection of drops.
271
- def drop_path(drop = nil)
272
- drop_name = case drop
273
- when Dropio::Drop
274
- drop.name
275
- when String
276
- drop
277
- when nil
278
- ''
279
- else
280
- raise ArgumentError, "Client#drop_path takes a Drop or a String, got #{drop.inspect}"
179
+ private
180
+
181
+ def handle(type, response)
182
+ if response.code != 200
183
+ parse_response(response)
281
184
  end
282
185
 
283
- return "/drops/" + drop_name
186
+ case type
187
+ when :drop then return Dropio::Drop.new(response)
188
+ when :asset then return Dropio::Asset.new(response)
189
+ when :assets then return response.collect{|a| Dropio::Asset.new(a)}
190
+ when :comment then return Comment.new(response)
191
+ when :comments then return response.collect{|c| Dropio::Comment.new(c)}
192
+ when :subscription then return Dropio::Subscription.new(response)
193
+ when :subscriptions then return response.collect{|s| Dropio::Subscription.new(s)}
194
+ when :response then return parse_response(response)
195
+ end
284
196
  end
285
197
 
286
- # Creates a path for sending an +Asset+
287
- def send_to_path(drop, asset)
288
- return asset_path(drop, asset) + "/send_to"
289
- end
290
-
291
- # Starts and completes the given request. Returns or yields the response body.
292
- def complete_request(request, host = URI.parse(Dropio.api_url).host)
293
- http = Net::HTTP.new(host)
294
- # Set to debug http output.
295
- # http.set_debug_output $stderr
296
- response = http.start { |http| http.request(request) }
297
-
298
- case response
299
- when Net::HTTPSuccess then yield response.body if block_given?
300
- when Net::HTTPBadRequest then raise Dropio::RequestError, parse_error_message(response)
301
- when Net::HTTPForbidden then raise Dropio::AuthorizationError, parse_error_message(response)
302
- when Net::HTTPNotFound then raise Dropio::MissingResourceError, parse_error_message(response)
303
- when Net::HTTPServerError then raise Dropio::ServerError, "There was a problem connecting to Drop.io."
304
- else raise "Received an unexpected HTTP response: #{response}"
198
+ def parse_response(response)
199
+ case response.code
200
+ when 200 then return response
201
+ when 400 then raise Dropio::RequestError, parse_error_message(response)
202
+ when 403 then raise Dropio::AuthorizationError, parse_error_message(response)
203
+ when 404 then raise Dropio::MissingResourceError, parse_error_message(response)
204
+ when 500 then raise Dropio::ServerError, "There was a problem connecting to Drop.io."
205
+ else
206
+ raise "Received an unexpected HTTP response: #{response.code} #{response.body}"
305
207
  end
306
-
307
- response.body
308
208
  end
309
209
 
310
210
  # Extracts the error message from the response for the exception.
311
- def parse_error_message(response)
312
- error_hash = JSON.parse(response.body) rescue nil
313
-
211
+ def parse_error_message(error_hash)
314
212
  if (error_hash && error_hash.is_a?(Hash) && error_hash["response"] && error_hash["response"]["message"])
315
213
  return error_hash["response"]["message"]
316
214
  else
@@ -318,4 +216,4 @@ class Dropio::Client
318
216
  end
319
217
  end
320
218
 
321
- end
219
+ end
@@ -4,12 +4,12 @@ class Dropio::Comment < Dropio::Resource
4
4
 
5
5
  # Saves the comment back to drop.io
6
6
  def save
7
- Dropio::Client.instance.save_comment(self)
7
+ Dropio::Resource.client.update_comment(self)
8
8
  end
9
9
 
10
10
  # Destroys the comment on drop.io. Don't try to use an Comment after destroying it.
11
- def destroy
12
- Dropio::Client.instance.destroy_comment(self)
11
+ def destroy!
12
+ Dropio::Resource.client.delete_comment(self)
13
13
  end
14
14
 
15
15
  end
data/lib/dropio/drop.rb CHANGED
@@ -1,54 +1,95 @@
1
1
  class Dropio::Drop < Dropio::Resource
2
2
 
3
- attr_accessor :name, :email, :voicemail, :conference, :fax, :rss, :guest_token,
4
- :admin_token, :expiration_length, :guests_can_comment, :guests_can_add, :guests_can_delete,
5
- :max_bytes, :current_bytes, :hidden_upload_url, :upload_url, :password, :admin_password, :premium_code
3
+ attr_accessor :name, :email, :voicemail, :conference, :fax, :rss, :guest_token, :description,
4
+ :admin_token, :expires_at, :expiration_length, :guests_can_comment, :guests_can_add, :guests_can_delete,
5
+ :max_bytes, :current_bytes, :hidden_upload_url, :asset_count, :chat_password, :default_view,
6
+ :password, :admin_password, :premium_code, :admin_email, :email_key
7
+
8
+ # Gets the default token to be used, prefers the admin token.
9
+ def default_token
10
+ self.admin_token || self.guest_token
11
+ end
6
12
 
7
13
  # Gets a list of assets associated with the Drop. Paginated at
8
- def assets(page = 1)
9
- Dropio::Client.instance.find_assets(self, page)
14
+ def assets(page = 1, order = :oldest)
15
+ Dropio::Resource.client.assets(self, page, order)
10
16
  end
11
17
 
12
18
  # Finds a drop with +name+ and optional authorization +token+
13
19
  def self.find(name, token = nil)
14
- Dropio::Client.instance.find_drop(name, token)
20
+ Dropio::Resource.client.drop(name, token)
15
21
  end
16
22
 
17
23
  # Creates a drop with an +attributes+ hash.
18
- # Valid attributes: name (string), guests_can_comment (boolean), guests_can_add (boolean), guests_can_delete (boolean), expiration_length (string), password (string), admin_password (string), and premium_code (string)
24
+ # Valid attributes: name (string), default_view (string), guests_can_comment (boolean), guests_can_add (boolean), guests_can_delete (boolean), expiration_length (string), password (string), admin_password (string), and premium_code (string)
19
25
  # Descriptions can be found here: http://groups.google.com/group/dropio-api/web/full-api-documentation
20
26
  def self.create(attributes = {})
21
- Dropio::Client.instance.create_drop(attributes)
27
+ Dropio::Resource.client.create_drop(attributes)
28
+ end
29
+
30
+ # Gets the drop's embeddable uploader code
31
+ def upload_code
32
+ Dropio::Resource.client.drop_upload_code(self)
33
+ end
34
+
35
+ # Empties the drop, including it's assets.
36
+ def empty
37
+ Dropio::Resource.client.empty_drop(self)
38
+ end
39
+
40
+ # Promotes a nickname in the drop chat to admin.
41
+ def promote(nick)
42
+ Dropio::Resource.client.promote_nick(self,nick)
22
43
  end
23
44
 
24
45
  # Saves the Drop.
25
46
  def save
26
- Dropio::Client.instance.save_drop(self)
47
+ Dropio::Resource.client.update_drop(self)
27
48
  end
28
49
 
29
50
  # Deletes the Drop from the system including all associated assets.
30
- def destroy
31
- Dropio::Client.instance.destroy_drop(self)
51
+ def destroy!
52
+ Dropio::Resource.client.delete_drop(self)
53
+ end
54
+
55
+ # Adds a file to the Drop from a given +url+
56
+ def add_file_from_url(url)
57
+ Dropio::Resource.client.add_file_from_url(self,url)
32
58
  end
33
59
 
34
60
  # Adds a file to the Drop given the +file_path+.
35
- def add_file(file_path)
36
- Dropio::Client.instance.add_file(self, file_path)
61
+ def add_file(file_path, comment = nil)
62
+ Dropio::Resource.client.add_file(self, file_path, comment)
37
63
  end
38
64
 
39
65
  # Creates a note with a +title+ and +contents+
40
- def create_note(title,contents)
41
- Dropio::Client.instance.create_note(self, title, contents)
66
+ def create_note(contents, title = nil)
67
+ Dropio::Resource.client.create_note(self, contents, title)
42
68
  end
43
69
 
44
70
  # Creates a link with a +url+, +title+, and +description+.
45
71
  def create_link(url, title = nil, description = nil)
46
- Dropio::Client.instance.create_link(self, url, title, description)
72
+ Dropio::Resource.client.create_link(self, url, title, description)
73
+ end
74
+
75
+ # Creates a Twitter Subscription
76
+ def create_twitter_subscription(username,password,message = nil, events = {})
77
+ Dropio::Resource.client.create_twitter_subscription(self,username,password,message,events)
78
+ end
79
+
80
+ # Creates an email Subscription
81
+ def create_email_subscription(email, message = nil, welcome_message = nil, welcome_subject = nil, welcome_from = nil, events = {})
82
+ Dropio::Resource.client.create_email_subscription(self,email,message,welcome_message,welcome_subject,welcome_from, events)
83
+ end
84
+
85
+ # Gets a list of Subscription objects.
86
+ def subscriptions
87
+ Dropio::Resource.client.subscriptions(self)
47
88
  end
48
89
 
49
90
  # Generates an authenticated URL that will bypass any login action.
50
91
  def generate_url
51
- Dropio::Client.instance.generate_drop_url(self)
92
+ Dropio::Resource.client.generate_drop_url(self)
52
93
  end
53
94
 
54
95
  end
@@ -5,5 +5,9 @@ class Dropio::Resource
5
5
  self.send("#{key}=", val) if self.respond_to? key
6
6
  end
7
7
  end
8
+
9
+ def self.client
10
+ @@client ||= Dropio::Client.new
11
+ end
8
12
 
9
13
  end
@@ -0,0 +1,15 @@
1
+ class Dropio::Subscription < Dropio::Resource
2
+ attr_accessor :id, :username, :message, :type
3
+
4
+ # Fetches a single Subscription
5
+ def self.find(id)
6
+ Dropio::Resource.client.subscription(id)
7
+ end
8
+
9
+ # Destroys the given subscription. Admin +token+ required
10
+ def destroy!(token)
11
+ Dropio::Resource.client.delete_subscription(self,token)
12
+ nil
13
+ end
14
+
15
+ end