class Asana2Flowdock::Asana::Api

ref: developer.asana.com/documentation/

Constants

Uri

Public Class Methods

new(token = ENV['ASANA_TOKEN']) click to toggle source
# File lib/asana2flowdock/asana.rb, line 16
def initialize(token = ENV['ASANA_TOKEN'])
  @token = token
end

Public Instance Methods

get(url, *args) click to toggle source
# File lib/asana2flowdock/asana.rb, line 36
def get(url, *args)
#
  url = url.to_s
  options = Map.options_for!(args)
  model = args.detect{|arg| arg <= Model} || options.delete(:model)
  query = options[:query] || options

#
  unless url['://']
    url = url_for(url)
  end

#
  uri = URI.parse(url)

  unless query.blank?
    uri.query = query.map{|k,v| [CGI.escape(k.to_s), CGI.escape(v.to_s)].join('=')}.join('&')
  end

  url = uri.to_s

#
  result = nil
  error = nil
  cmd = nil

#
  3.times do
    begin
      cmd = "curl -s -u #{ @token }: #{ url.inspect } 2>/dev/null"

      log(:debug, cmd) if debug

      result = `#{ cmd }`
      break result

    rescue => e
      error = e
      sleep(3)
      nil
    end
  end

#
  raise "#{ cmd } blargh'd!?" if error || result.nil?

#
  result = JSON.parse(result)

  if result['errors']
    raise result['errors'].inspect
  end

  data = result['data']

#
  result_for(data, :model => model)
end
log(level, *args, &block) click to toggle source
# File lib/asana2flowdock/asana.rb, line 20
def log(level, *args, &block)
  if logger?
    logger.send(level, *args, &block)
  end
end
me() click to toggle source
# File lib/asana2flowdock/asana.rb, line 26
def me
  get("/users/me", :model => User)
end
Also aliased as: my
model_for(model, *args, &block) click to toggle source
# File lib/asana2flowdock/asana.rb, line 122
def model_for(model, *args, &block)
  model = model.for(*args, &block)
ensure
  model.api = self if model
end
my()
Alias for: me
result_for(data, options = {}) click to toggle source
# File lib/asana2flowdock/asana.rb, line 102
def result_for(data, options = {})
  case data
    when Array
      data.map do |item|
        result_for(item, options)
      end
    when Hash
      attributes = Map.for(data)
      model = options[:model]

      if model
        model_for(model, attributes)
      else
        attributes
      end
    else
      raise ArgumentError, data.class.name
  end
end
url_for(*paths) click to toggle source
# File lib/asana2flowdock/asana.rb, line 95
def url_for(*paths)
  uri = Uri.dup
  path = uri.path
  uri.path = File.join(path, *paths.flatten.compact.map{|path| path.to_s})
  uri.to_s
end
users(options = {}) click to toggle source
# File lib/asana2flowdock/asana.rb, line 30
def users(options = {})
  get("/users", User, options)
end