summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gemfile.lock7
-rw-r--r--hcl.gemspec2
-rw-r--r--lib/hcl/task.rb11
-rw-r--r--lib/hcl/timesheet_resource.rb60
4 files changed, 49 insertions, 31 deletions
diff --git a/Gemfile.lock b/Gemfile.lock
index 3e5e81e..d6f1a8b 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -3,6 +3,8 @@ PATH
specs:
hcl (0.4.9)
chronic
+ faraday
+ faraday_middleware
highline
trollop
@@ -11,12 +13,17 @@ GEM
specs:
chronic (0.10.2)
fakeweb (1.3.0)
+ faraday (0.8.8)
+ multipart-post (~> 1.2.0)
+ faraday_middleware (0.9.0)
+ faraday (>= 0.7.4, < 0.9)
highline (1.6.20)
metaclass (0.0.1)
minitest (4.7.5)
mocha (0.14.0)
metaclass (~> 0.0.1)
multi_json (1.8.2)
+ multipart-post (1.2.0)
rake (10.1.0)
rubinius-coverage (2.0.3)
rubygems-tasks (0.2.4)
diff --git a/hcl.gemspec b/hcl.gemspec
index ec2222b..d0fa7f8 100644
--- a/hcl.gemspec
+++ b/hcl.gemspec
@@ -18,6 +18,8 @@ Gem::Specification.new do |s|
s.add_runtime_dependency 'trollop'
s.add_runtime_dependency 'chronic'
s.add_runtime_dependency 'highline'
+ s.add_runtime_dependency 'faraday'
+ s.add_runtime_dependency 'faraday_middleware'
s.add_development_dependency 'rake'
s.add_development_dependency 'rubygems-tasks'
s.add_development_dependency 'mocha'
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