class Twfy::Client
Public Class Methods
new(api_key, log_to=$stderr)
click to toggle source
# File lib/twfy/client.rb, line 16 def initialize(api_key, log_to=$stderr) @api_key = api_key @logger = Logger.new(log_to) end
Public Instance Methods
log(message, level=:info)
click to toggle source
# File lib/twfy/client.rb, line 21 def log(message, level=:info) @logger.send(level, message) if $DEBUG end
Private Instance Methods
api_params()
click to toggle source
# File lib/twfy/client.rb, line 78 def api_params @api_params ||= {key: @api_key, version: API::VERSION} end
build_query(params)
click to toggle source
# File lib/twfy/client.rb, line 70 def build_query(params) params.merge(api_params).map { |set| set.map { |i| CGI.escape(i.to_s) }.join('=') }.join('&') end
service(name, params = {}, target = OpenStruct, &block)
click to toggle source
# File lib/twfy/client.rb, line 27 def service(name, params = {}, target = OpenStruct, &block) log "Calling service #{name}" url = service_url(name, params) result = MultiJson.load(url.read) log result.inspect unless result.kind_of?(Enumerable) raise Error, "Could not handle result: #{result.inspect}" end if result.kind_of?(Hash) && result['error'] raise APIError, result['error'].to_s else structure result, block || target end end
service_url(name, params = {})
click to toggle source
# File lib/twfy/client.rb, line 42 def service_url(name, params = {}) url = BASE + name.to_s url.query = build_query(validate(params, API::VALIDATIONS[name])) url end
structure(value, target)
click to toggle source
# File lib/twfy/client.rb, line 53 def structure(value, target) case value when Array value.map{|r| structure(r, target) } when Hash if target.kind_of?(Proc) target.call(value) elsif target == Hash value else target.ancestors.include?(DataElement) ? target.new(self,value) : target.new(value) end else result end end
validate(params, against)
click to toggle source
# File lib/twfy/client.rb, line 48 def validate(params, against) Validation.run(params, against) params end