summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/hcl/task.rb11
-rw-r--r--lib/hcl/timesheet_resource.rb60
2 files changed, 40 insertions, 31 deletions
diff --git a/lib/hcl/task.rb b/lib/hcl/task.rb
index 79b9917..4bb635c 100644
--- a/lib/hcl/task.rb
+++ b/lib/hcl/task.rb
@@ -3,6 +3,17 @@ require 'fileutils'
module HCl
class Task < TimesheetResource
+ def self.cache_tasks_hash day_entry_hash
+ tasks = day_entry_hash['projects'].
+ map { |p| p['tasks'].each {|t| new t.merge(project:p) } }.flatten.uniq
+ unless tasks.empty?
+ FileUtils.mkdir_p(cache_dir)
+ File.open(cache_file, 'w') do |f|
+ f.write tasks.to_yaml
+ end
+ end
+ end
+
def self.cache_tasks doc
tasks = []
doc.root.elements.collect('projects/project') do |project_elem|
diff --git a/lib/hcl/timesheet_resource.rb b/lib/hcl/timesheet_resource.rb
index 8fa7f5c..44d9ca0 100644
--- a/lib/hcl/timesheet_resource.rb
+++ b/lib/hcl/timesheet_resource.rb
@@ -1,6 +1,7 @@
require 'net/http'
require 'net/https'
require 'cgi'
+require 'faraday_middleware'
module HCl
class TimesheetResource
@@ -41,48 +42,45 @@ module HCl
CONFIG_VARS.inject({}) {|c,k| c.update(k => TimesheetResource.send(k)) }
end
+ def get action
+ new self.class.get(action).body
+ end
+ def post action, data
+ new self.class.post(action, data).body
+ end
+ def delete action
+ new self.class.delete(action).body
+ end
+
+ def self.faraday
+ @faraday ||= begin
+ Faraday.new(
+ "http#{ssl && 's'}://#{subdomain}.harvestapp.com"
+ ) do |f|
+ #f.headers['Accept'] = 'application/json'
+ f.headers['Accept'] = 'application/xml'
+ #f.request :json
+ f.request :basic_auth, login, password
+ #f.response :json, content_type: /\bjson$/
+ f.adapter Faraday.default_adapter
+ end
+ end
+ end
+
def initialize params
@data = params
end
def self.get action
- http_do Net::HTTP::Get, action
+ faraday.get(action).body
end
def self.post action, data
- http_do Net::HTTP::Post, action, data
+ faraday.post(action, data).body
end
def self.delete action
- http_do Net::HTTP::Delete, action
- end
-
- def self.connect
- Net::HTTP.new("#{subdomain}.harvestapp.com", (ssl ? 443 : 80)).tap do |https|
- https.use_ssl = ssl
- https.verify_mode = OpenSSL::SSL::VERIFY_NONE if ssl
- end
- end
-
- def self.http_do method_class, action, data = nil
- https = connect
- request = method_class.new "/#{action}"
- request.basic_auth login, password
- request.content_type = 'application/xml'
- request['Accept'] = 'application/xml'
- response = https.request request, data
- case response
- when Net::HTTPSuccess
- response.body
- when Net::HTTPFound
- raise Failure, "Redirected! Perhaps your ssl configuration variable is set incorrectly?"
- when Net::HTTPServiceUnavailable
- raise ThrottleFailure, response
- when Net::HTTPUnauthorized
- raise AuthFailure, "Login failed."
- else
- raise Failure, "Unexpected response from the upstream API."
- end
+ faraday.delete(action).body
end
def id