|
module Agents
class WunderlistAgent < Agent
include FormConfigurable
include Oauthable
valid_oauth_providers :wunderlist
cannot_be_scheduled!
gem_dependency_check { Devise.omniauth_providers.include?(:wunderlist) }
description <<-MD
The WunderlistAgent creates new Wunderlist tasks based on the incoming event.
#{'## Include the `omniauth-wunderlist` gem in your `Gemfile` and set `WUNDERLIST_OAUTH_KEY` and `WUNDERLIST_OAUTH_SECRET` in your environment to use this Agent' if dependencies_missing?}
To be able to use this Agent you need to authenticate with Wunderlist in the [Services](/services) section first.
MD
def default_options
{
'list_id' => '',
'title' => '{{title}}'
}
end
form_configurable :list_id, roles: :completable
form_configurable :title
def complete_list_id
response = request_guard do
HTTParty.get lists_url, request_options
end
response.map { |p| {text: "#{p['title']} (#{p['id']})", id: p['id']}}
end
def validate_options
errors.add(:base, "you need to specify the list you want to add tasks to") unless options['list_id'].present?
errors.add(:base, "you need to specify the title of the task to create") unless options['title'].present?
end
def working?
!recent_error_logs?
end
def receive(incoming_events)
incoming_events.each do |event|
mo = interpolated(event)
title = mo[:title][0..244]
log("Creating new task '#{title}' on list #{mo[:list_id]}", inbound_event: event)
request_guard do
HTTParty.post tasks_url, request_options.merge(body: {title: title, list_id: mo[:list_id].to_i}.to_json)
end
end
end
private
def request_guard(&blk)
response = yield
error("Error during http request: #{response.body}") if response.code > 400
response
end
def lists_url
"https://a.wunderlist.com/api/v1/lists"
end
def tasks_url
"https://a.wunderlist.com/api/v1/tasks"
end
def request_options
{:headers => {'Content-Type' => 'application/json',
'User-Agent' => 'Huginn (https://github.com/cantino/huginn)',
'X-Access-Token' => service.token,
'X-Client-ID' => ENV["WUNDERLIST_OAUTH_KEY"] }}
end
end
end
|