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