From 19b554c8cb5745b2af16866ddf17349a6a30f9bf Mon Sep 17 00:00:00 2001 From: Daniel Westendorf Date: Mon, 7 Mar 2016 08:43:53 -0700 Subject: [PATCH 1/7] Add support for the last changed employee endpoint --- README.md | 6 +++++ lib/bamboozled/api/base.rb | 1 + lib/bamboozled/api/employee.rb | 10 +++++++++ spec/fixtures/last_changed.json | 28 ++++++++++++++++++++++++ spec/lib/bamboozled/api/employee_spec.rb | 10 +++++++++ 5 files changed, 55 insertions(+) create mode 100644 spec/fixtures/last_changed.json diff --git a/README.md b/README.md index 4207858..80159f0 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,12 @@ client.employee.all(:all) # Gets all fields for all employees client.employee.all(["hireDate", "displayName"]) client.employee.all("hireDate,displayName") +# Get the employee records which have changed since a given date +client.employee.last_changed("2015-01-01T00:00:00-08:00", :updated) +client.employee.last_changed("2015-01-01T00:00:00-08:00", :inserted) +client.employee.last_changed("2015-01-01T00:00:00-08:00", :deleted) +client.employee.last_changed("2015-01-01T00:00:00-08:00") # Return all changes + # Returns a hash of a single employee client.employee.find(employee_id, fields = nil) diff --git a/lib/bamboozled/api/base.rb b/lib/bamboozled/api/base.rb index 88a5817..cd3fe72 100644 --- a/lib/bamboozled/api/base.rb +++ b/lib/bamboozled/api/base.rb @@ -1,4 +1,5 @@ require 'json' +require 'time' require 'active_support/core_ext/hash/indifferent_access' module Bamboozled diff --git a/lib/bamboozled/api/employee.rb b/lib/bamboozled/api/employee.rb index 2a0994d..bb1e586 100644 --- a/lib/bamboozled/api/employee.rb +++ b/lib/bamboozled/api/employee.rb @@ -23,6 +23,16 @@ def find(employee_id, fields = nil) request(:get, "employees/#{employee_id}?fields=#{fields}") end + def last_changed(date = "2011-06-05T00:00:00+00:00", type = nil) + query = { + since: date.respond_to?(:iso8601) ? date.iso8601 : date, + type: type + } + + response = request(:get, "employees/changed", query) + response['employees'] + end + # Tabular data [:job_info, :employment_status, :compensation, :dependents, :contacts].each do |action| define_method(action.to_s) do |argument_id| diff --git a/spec/fixtures/last_changed.json b/spec/fixtures/last_changed.json new file mode 100644 index 0000000..4aac66d --- /dev/null +++ b/spec/fixtures/last_changed.json @@ -0,0 +1,28 @@ +HTTP/1.1 200 OK +content-type: application/json; charset=utf-8 +date: Tue, 17 Jun 2014 19:25:35 UTC + +{ + "employees": { + "3": { + "id":"3", + "action":"Inserted", + "lastChanged":"2011-06-02T19:26:23+00:00" + }, + "4": { + "id":"4", + "action":"Updated", + "lastChanged":"2011-06-02T19:26:23+00:00" + }, + "5": { + "id":"5", + "action":"Deleted", + "lastChanged":"2011-06-02T19:26:23+00:00" + }, + "10": { + "id":"10", + "action":"Inserted", + "lastChanged":"2011-05-31T22:57:10+00:00" + } + } +} diff --git a/spec/lib/bamboozled/api/employee_spec.rb b/spec/lib/bamboozled/api/employee_spec.rb index dd3ffc8..b96c453 100644 --- a/spec/lib/bamboozled/api/employee_spec.rb +++ b/spec/lib/bamboozled/api/employee_spec.rb @@ -108,6 +108,16 @@ expect(url).to eq required_url end + it "Gets all employee records which have changed since a given date" do + response = File.new("spec/fixtures/last_changed.json") + stub_request(:any, /.*api\.bamboohr\.com.*/).to_return(response) + + employees = @client.employee.last_changed("2011-06-02T19:26:23+00:00") + + expect(employees).to be_a Hash + expect(employees.keys.count).to eq 4 + end + describe "#add" do it "creates a new employee in BambooHR" do xml = YAML.load_file("spec/fixtures/add_employee_xml.yml") From cff30133e074e2867d26c91b0bd620895363cd8f Mon Sep 17 00:00:00 2001 From: Daniel Westendorf Date: Mon, 7 Mar 2016 08:44:42 -0700 Subject: [PATCH 2/7] Remove AS version dependency This introduces unnecessary dependency conflicts, locks out rails 3 users --- bamboozled.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bamboozled.gemspec b/bamboozled.gemspec index 29f20cc..36b14b2 100644 --- a/bamboozled.gemspec +++ b/bamboozled.gemspec @@ -27,5 +27,5 @@ Gem::Specification.new do |spec| spec.add_dependency "httparty", "~> 0.13" spec.add_dependency "json", "~> 1.8" - spec.add_dependency "activesupport", "~> 4.2" + spec.add_dependency "activesupport" end From 789f7199c856d1fc4a9c46ab1a71dca184103fa5 Mon Sep 17 00:00:00 2001 From: Daniel Westendorf Date: Mon, 7 Mar 2016 09:03:56 -0700 Subject: [PATCH 3/7] Properly send the query parameters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Request expects a hash with a query key - Don’t send the type if we don’t have one --- lib/bamboozled/api/employee.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/bamboozled/api/employee.rb b/lib/bamboozled/api/employee.rb index bb1e586..0c3d937 100644 --- a/lib/bamboozled/api/employee.rb +++ b/lib/bamboozled/api/employee.rb @@ -25,11 +25,11 @@ def find(employee_id, fields = nil) def last_changed(date = "2011-06-05T00:00:00+00:00", type = nil) query = { - since: date.respond_to?(:iso8601) ? date.iso8601 : date, - type: type + since: date.respond_to?(:iso8601) ? date.iso8601 : date } + query[:type] = type unless type.nil? - response = request(:get, "employees/changed", query) + response = request(:get, "employees/changed", {query: query}) response['employees'] end From 3edc145d9337e778e3a962fbd579bf855f418b35 Mon Sep 17 00:00:00 2001 From: Daniel Westendorf Date: Tue, 22 Mar 2016 09:06:47 -0600 Subject: [PATCH 4/7] Fix hound warnings --- lib/bamboozled/api/base.rb | 2 +- lib/bamboozled/api/employee.rb | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/bamboozled/api/base.rb b/lib/bamboozled/api/base.rb index cd3fe72..04daae9 100644 --- a/lib/bamboozled/api/base.rb +++ b/lib/bamboozled/api/base.rb @@ -1,5 +1,5 @@ require 'json' -require 'time' +require "time" require 'active_support/core_ext/hash/indifferent_access' module Bamboozled diff --git a/lib/bamboozled/api/employee.rb b/lib/bamboozled/api/employee.rb index 0c3d937..56400b0 100644 --- a/lib/bamboozled/api/employee.rb +++ b/lib/bamboozled/api/employee.rb @@ -24,9 +24,8 @@ def find(employee_id, fields = nil) end def last_changed(date = "2011-06-05T00:00:00+00:00", type = nil) - query = { - since: date.respond_to?(:iso8601) ? date.iso8601 : date - } + query = {} + query[:since] = date.respond_to?(:iso8601) ? date.iso8601 : date query[:type] = type unless type.nil? response = request(:get, "employees/changed", {query: query}) From 3bcd335551c3bcdd25acda5fc214abc3d2dff7da Mon Sep 17 00:00:00 2001 From: Daniel Westendorf Date: Fri, 6 May 2016 09:37:37 -0600 Subject: [PATCH 5/7] Fix rubocop violations --- lib/bamboozled/api/employee.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/bamboozled/api/employee.rb b/lib/bamboozled/api/employee.rb index 56400b0..c0ed024 100644 --- a/lib/bamboozled/api/employee.rb +++ b/lib/bamboozled/api/employee.rb @@ -24,12 +24,12 @@ def find(employee_id, fields = nil) end def last_changed(date = "2011-06-05T00:00:00+00:00", type = nil) - query = {} + query = Hash.new query[:since] = date.respond_to?(:iso8601) ? date.iso8601 : date query[:type] = type unless type.nil? - response = request(:get, "employees/changed", {query: query}) - response['employees'] + response = request(:get, "employees/changed", query: query) + response["employees"] end # Tabular data From 38762d702d89148da99c999653881f189f72a7dd Mon Sep 17 00:00:00 2001 From: Daniel Westendorf Date: Fri, 6 May 2016 11:33:20 -0600 Subject: [PATCH 6/7] Lock listen gem at v3.1.1 It looks like the listen gem, a guard dependency, is the failure here as it has strict ruby version requirements. ``` Installing listen 3.1.3 Gem::InstallError: listen requires Ruby version >= 2.2.3, ~> 2.2. ``` I'm locking listen in at 3.1.1, as that version doesn't have the ruby version requirements. --- Gemfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Gemfile b/Gemfile index 0dac828..7576bfd 100644 --- a/Gemfile +++ b/Gemfile @@ -6,6 +6,7 @@ group :test do end group :development, :test do + gem "listen", "3.1.1" gem "guard" gem "guard-rspec", require: false gem "rubocop", require: false From 09b43115e4416f119caf5a599da30dd3a68ed0cc Mon Sep 17 00:00:00 2001 From: Daniel Westendorf Date: Fri, 6 May 2016 12:48:27 -0600 Subject: [PATCH 7/7] Further downgrade listen to support old ruby versions --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 7576bfd..b7fee5f 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,7 @@ group :test do end group :development, :test do - gem "listen", "3.1.1" + gem "listen", "3.0.7" gem "guard" gem "guard-rspec", require: false gem "rubocop", require: false