class Rasana::Api

Attributes

config[R]
me[RW]
project[RW]
tag[RW]
workspace[RW]

Public Class Methods

new(options) click to toggle source
# File lib/rasana/api.rb, line 15
def initialize(options)
     @config = Config.new(options)
  @workspace = find_workspace(@config['workspace'])
    @project = find_project(@config['project'])
        @tag = find_tag(@config['tag'])
end

Public Instance Methods

all_tasks() click to toggle source

#<Hashie::Mash errors=[#<Hashie::Mash

message="Must specify exactly one of project, tag, or workspace">]>
# File lib/rasana/api.rb, line 60
def all_tasks
  vputs "fetching all tasks..."
  workspaces.data.map do |w|
    on(w.id).tasks.data
  end.flatten
end
api_key() click to toggle source
# File lib/rasana/api.rb, line 22
def api_key
  config['api_key']
end
on(workspace_id_or_name) click to toggle source
# File lib/rasana/api.rb, line 53
def on(workspace_id_or_name)
  self.workspace = find_workspace(workspace_id_or_name)
  self
end
projects() click to toggle source
# File lib/rasana/api.rb, line 34
def projects
  get '/projects'
end
tags() click to toggle source
# File lib/rasana/api.rb, line 38
def tags
  get '/tags'
end
tasks() click to toggle source
# File lib/rasana/api.rb, line 42
def tasks
  if workspace
    vputs "fetching tasks from... #{workspace.name}"
    get "/tasks?workspace=#{workspace.id}&assignee=#{me.data.id}"
  elsif project # TODO
  elsif tag # TODO
  else
    all_tasks
  end
end
workspaces() click to toggle source
# File lib/rasana/api.rb, line 30
def workspaces
  get '/workspaces'
end

Private Instance Methods

connection() click to toggle source

Basic api comonents

# File lib/rasana/api.rb, line 95
def connection
  options = {
    url: 'https://app.asana.com/',
    ssl: { verify: false }
  }
  @connection ||= Faraday.new(options) do |faraday|
    faraday.adapter Faraday.default_adapter # required
    faraday.request :json
    faraday.use FaradayMiddleware::Mashify
    faraday.use FaradayMiddleware::ParseJson
  end
end
find_project(id_or_name) click to toggle source
# File lib/rasana/api.rb, line 77
def find_project(id_or_name)
  find_resource(id_or_name, projects)
end
find_resource(id_or_name, resources) click to toggle source
# File lib/rasana/api.rb, line 85
def find_resource(id_or_name, resources)
  case id_or_name
  when Integer
    resources.data.find { |w| w.id == id_or_name }
  when String
    resources.data.find { |w| w.name =~ /#{id_or_name}/ }
  end
end
find_tag(id_or_name) click to toggle source
# File lib/rasana/api.rb, line 81
def find_tag(id_or_name)
  find_resource(id_or_name, tags)
end
find_workspace(id_or_name) click to toggle source
# File lib/rasana/api.rb, line 73
def find_workspace(id_or_name)
  find_resource(id_or_name, workspaces)
end
get(path, params = {}) click to toggle source
# File lib/rasana/api.rb, line 121
def get(path, params = {})
  request :get, path, params
end
post(path, params = {}) click to toggle source
# File lib/rasana/api.rb, line 125
def post(path, params = {})
  request :post, path, params
end
request(_method, _path, params = {}) click to toggle source
# File lib/rasana/api.rb, line 108
def request(_method, _path, params = {})
  connection.headers[:authorization] =
    'Basic ' + ::Base64.encode64(api_key + ':').chomp
  path = '/api/1.0' + _path
  response = connection.send(_method) do |req|
    case _method
    when :get
      req.url path, params
    end
  end
  response.body
end
vputs(str) click to toggle source
# File lib/rasana/api.rb, line 68
def vputs(str)
  return unless config[:verbose]
  puts str
end