Skip to content

Instantly share code, notes, and snippets.

@whoisjake
Created August 24, 2009 21:54
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save whoisjake/174249 to your computer and use it in GitHub Desktop.
Save whoisjake/174249 to your computer and use it in GitHub Desktop.
Basic drop.io Ruby client
require 'rubygems'
# sudo gem install httparty
require 'httparty'
# sudo gem sources -a http://gems.github.com && sudo gem install multipart-post
require 'net/http/post/multipart'
require 'mime/types'
require 'pp'
class Dropio
include HTTParty
base_uri 'api.drop.io'
default_params :version => '1.0', :format => 'json'
def initialize(key)
self.class.default_params :api_key => key
end
def find(drop_name, token = nil)
self.class.get("/drops/#{drop_name}", :query => {:token => token})
end
def create(params = {})
self.class.post("/drops",:body => params)
end
def update(drop_name, params = {}, token = nil)
params[:token] = token
self.class.put("/drops/#{drop_name}", :body => params)
end
def delete(drop_name, admin_token)
params = {:token => admin_token}
self.class.delete("/drops/#{drop_name}", :query => params)
end
def create_link(drop_name, url, title = nil, description = nil, token = nil)
params = {:url => url, :title => title, :description => description, :token => token}
self.class.post("/drops/#{drop_name}/assets", :body => params)
end
def create_note(drop_name, contents, title = nil, token = nil)
params = {:contents => contents, :title => title, :token => token}
self.class.post("/drops/#{drop_name}/assets", :body => params)
end
def add_file(drop_name, file_path, token = nil)
url = URI.parse("http://assets.drop.io/upload/")
r = nil
File.open(file_path) do |file|
mime_type = (MIME::Types.type_for(file_path)[0] || MIME::Types["application/octet-stream"][0])
req = Net::HTTP::Post::Multipart.new url.path,
{ 'api_key' => self.class.default_params[:api_key], 'drop_name' => drop_name, 'format' => 'json',
'token' => token, 'version' => '1.0', 'file' => UploadIO.new(file, mime_type, file_path) }
http = Net::HTTP.new(url.host, url.port)
r = http.start{|http| http.request(req)}
end
(r.nil? or r.body.nil? or r.body.empty?) ? [] : Crack::JSON.parse(r.body)
end
def assets(drop_name, token = nil)
self.class.get("/drops/#{drop_name}/assets", :query => {:token => token})
end
def asset(drop_name, asset_name, token = nil)
self.class.get("/drops/#{drop_name}/assets/#{asset_name}", :query => {:token => token})
end
def embed_code(drop_name, asset_name, token = nil)
self.class.get("/drops/#{drop_name}/assets/#{asset_name}/embed_code", :query => {:token => token})
end
def update_asset(drop_name, asset_name, params = {}, token = nil)
params[:token] = token
self.class.put("/drops/#{drop_name}/assets/#{asset_name}", :body => params)
end
def delete_asset(drop_name, asset_name, token = nil)
self.class.delete("/drops/#{drop_name}/assets/#{asset_name}", :body => {:token => token})
end
def send_asset_to_drop(drop_name, asset_name, target_drop, token = nil)
params = {:drop_name => target_drop, :token => token}
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/send_to", :body => params)
end
def comments(drop_name, asset_name, token = nil)
self.class.get("/drops/#{drop_name}/assets/#{asset_name}/comments", :query => {:token => token})
end
def create_comment(drop_name, asset_name, contents, token = nil)
params = {:contents => contents, :token => token}
self.class.post("/drops/#{drop_name}/assets/#{asset_name}/comments",:body => params)
end
def comment(drop_name, asset_name, comment_id, token = nil)
self.class.get("/drops/#{drop_name}/assets/#{asset_name}/comments/#{comment_id}", :query => {:token => token})
end
def update_comment(drop_name, asset_name, comment_id, contents, token = nil)
params = {:contents => contents, :token => token}
self.class.put("/drops/#{drop_name}/assets/#{asset_name}/comments/#{comment_id}", :body => params)
end
def delete_comment(drop_name, asset_name, comment_id, token = nil)
self.class.delete("/drops/#{drop_name}/assets/#{asset_name}/comments/#{comment_id}", :body => {:token => token})
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment