lib/rufus/rtm/base.rb in rufus-rtm-0.1 vs lib/rufus/rtm/base.rb in rufus-rtm-0.1.2

- old
+ new

@@ -1,39 +1,29 @@ - -# #-- -# Copyright (c) 2008, John Mettraux, jmettraux@gmail.com +# Copyright (c) 2008-2009, John Mettraux, jmettraux@gmail.com # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: -# +# # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # -# (MIT license) +# Made in Japan. #++ -# -# -# John Mettraux -# -# Made in Japan -# -# 2008/02/07 -# require 'rubygems' require 'rufus/verbs' require 'json' @@ -42,60 +32,69 @@ include Rufus::Verbs module Rufus module RTM - - AUTH_ENDPOINT = "http://www.rememberthemilk.com/services/auth/" - REST_ENDPOINT = "http://api.rememberthemilk.com/services/rest/" - # - # Signs the RTM request (sets the 'api_sig' parameter). - # - def self.sign (params) #:nodoc: + VERSION = '0.1.2' - sig = MD5.md5(SHARED_SECRET + params.sort.flatten.join) - params['api_sig'] = sig.to_s + AUTH_ENDPOINT = "http://www.rememberthemilk.com/services/auth/" + REST_ENDPOINT = "http://api.rememberthemilk.com/services/rest/" - params - end + # + # Signs the RTM request (sets the 'api_sig' parameter). + # + def self.sign (params, secret) #:nodoc: - # - # Calls an API method (milk the cow). - # - def self.milk (params={}) #:nodoc: + sig = MD5.md5(secret + params.sort.flatten.join) - sleep 1 + params['api_sig'] = sig.to_s - endpoint = params.delete :endpoint - endpoint = AUTH_ENDPOINT if endpoint == :auth - endpoint = endpoint || REST_ENDPOINT + params + end - ps = params.inject({}) do |r, (k, v)| - r[k.to_s] = v - r - end + # + # Calls an API method (milk the cow). + # + def self.milk (params={}) #:nodoc: - ps['api_key'] = API_KEY - ps['format'] = "json" + sleep 1 - ps['frob'] = FROB if FROB - ps['auth_token'] = AUTH_TOKEN if AUTH_TOKEN + endpoint = params.delete(:endpoint) + endpoint = AUTH_ENDPOINT if endpoint == :auth + endpoint = endpoint || REST_ENDPOINT - sign ps + ps = params.inject({}) { |r, (k, v)| r[k.to_s] = v; r } - res = get endpoint, :query => ps + ps['api_key'] = params[:api_key] || ENV['RTM_API_KEY'] - JSON.parse(res.body)["rsp"] - end + raise 'API_KEY missing from environment or parameters, cannot proceed' \ + unless ps['api_key'] - # - # Requests a timeline from RTM. - # - def self.get_timeline #:nodoc: + ps['frob'] = params[:frob] || ENV['RTM_FROB'] + ps.delete('frob') if ps['frob'] == nil - milk(:method => "rtm.timelines.create")['timeline'] - end + ps['auth_token'] = params[:auth_token] || ENV['RTM_AUTH_TOKEN'] + ps.delete('auth_token') if ps['auth_token'] == nil + + ps['format'] = 'json' + + secret = params[:shared_secret] || ENV['RTM_SHARED_SECRET'] + + sign(ps, secret) + + res = get(endpoint, :query => ps) + + JSON.parse(res.body)['rsp'] + end + + # + # Requests a timeline from RTM. + # + def self.get_timeline #:nodoc: + + milk(:method => 'rtm.timelines.create')['timeline'] + end end end