module RTFM
Constants
- VERSION
Public Class Methods
api_base()
click to toggle source
# File lib/crowdflower-rtfm.rb, line 14 def self.api_base; @@api_base; end
api_base=(api_base)
click to toggle source
# File lib/crowdflower-rtfm.rb, line 13 def self.api_base=(api_base); @@api_base = api_base; end
api_key()
click to toggle source
# File lib/crowdflower-rtfm.rb, line 12 def self.api_key; @@api_key; end
api_key=(api_key)
click to toggle source
# File lib/crowdflower-rtfm.rb, line 11 def self.api_key=(api_key); @@api_key = api_key; end
api_url(url='')
click to toggle source
# File lib/crowdflower-rtfm.rb, line 15 def self.api_url(url=''); @@api_base + url; end
error(klass = Error, error, rcode, rbody, error_obj)
click to toggle source
# File lib/crowdflower-rtfm.rb, line 94 def self.error(klass = Error, error, rcode, rbody, error_obj); klass.new(error, rcode, rbody, error_obj); end
handle_api_error(rcode, rbody)
click to toggle source
# File lib/crowdflower-rtfm.rb, line 96 def self.handle_api_error(rcode, rbody) begin error_obj = MultiJson.load(rbody, :symbolize_keys => true) error = (error_obj && error_obj[:error]) or raise Error.new # escape from parsing rescue MultiJson::DecodeError, Error raise APIError.new("Invalid response object from API: #{rbody.inspect} (HTTP response code was #{rcode})", rcode, rbody) end case rcode when 503 raise error(RateLimitError, error, rcode, rbody, error_obj) when 400, 404 then raise error(InvalidRequestError, error, rcode, rbody, error_obj) when 401 raise error(AuthenticationError, error, rcode, rbody, error_obj) when 402 raise error(PaymentError, error, rcode, rbody, error_obj) when 403 raise error(AccountError, error, rcode, rbody, error_obj) else raise error(APIError, error, rcode, rbody, error_obj) end end
handle_restclient_error(e)
click to toggle source
# File lib/crowdflower-rtfm.rb, line 120 def self.handle_restclient_error(e) case e when RestClient::ServerBrokeConnection, RestClient::RequestFailed message = "Could not connect to RTFM (#{@@api_base}). Please check your internet connection and try again. If this problem persists, you should check RTFM's service status at https://twitter.com/cfstatus, or let us know at rtfm@crowdflower.com." when RestClient::SSLCertificateNotVerified message = "Could not verify RTFM's SSL certificate. Please make sure that your network is not intercepting certificates. If this problem persists, let us know at rtfm@crowdflower.com." when SocketError message = "Unexpected error communicating when trying to connect to RTFM. HINT: You may be seeing this message because your DNS is not working. To check, try running 'host stripe.com' from the command line." else message = "Unexpected error communicating with RTFM. If this problem persists, let us know at rtfm@crowdflower.com" end message += "\n\n(Network error: #{e.message})" raise APIConnectionError.new(message) end
moderate_image(url, metadata = nil)
click to toggle source
# File lib/crowdflower-rtfm.rb, line 17 def self.moderate_image(url, metadata = nil) params = {:url => url} params.merge!(:metadata => metadata) if metadata request("/images", :post, params) end
request(url, method = :get, params = nil, api_key = nil, headers = {})
click to toggle source
# File lib/crowdflower-rtfm.rb, line 27 def self.request(url, method = :get, params = nil, api_key = nil, headers = {}) api_key ||= @@api_key raise AuthenticationError.new("Please provide an API key (RTFM.api_key = <API-KEY>, your API key can be found by clicking \"APISettings\" @ http://crowdflower.com/rtfm)") unless api_key #RestClient appends get parameters by looking for params in headers... lame if method == :get && params headers.merge!(:params => params) params = nil end opts = { :user => api_key, :timeout => 30, :url => api_url(url), :method => method, :headers => { :user_agent => "RTFM/v1 RubyGem/#{VERSION}", :accept => "application/json" }.merge(headers), :payload => params } response = RestClient::Request.execute(opts) MultiJson.load(response.body, :symbolize_keys => true) rescue SocketError => e self.handle_restclient_error(e) rescue RestClient::ExceptionWithResponse => e rcode = e.http_code rbody = e.http_body if rcode && rbody self.handle_api_error(rcode, rbody) else self.handle_restclient_error(e) end rescue RestClient::Exception, Errno::ECONNREFUSED => e self.handle_restclient_error(e) rescue MultiJson::DecodeError raise APIError.new("Invalid response body: #{response.body.inspect}. (HTTP response code of #{response.code})", response.code, response.body) end
retrieve_image(id)
click to toggle source
# File lib/crowdflower-rtfm.rb, line 23 def self.retrieve_image(id) request("/images/#{id}") end