diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/hcl/task.rb | 11 | ||||
| -rw-r--r-- | lib/hcl/timesheet_resource.rb | 60 |
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 |
