bamboozled 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +24 -0
- data/bamboozled.gemspec +24 -0
- data/lib/bamboozled/client.rb +132 -0
- data/lib/bamboozled/version.rb +3 -0
- data/lib/bamboozled/yesno.rb +11 -0
- data/lib/bamboozled.rb +10 -0
- metadata +81 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5e8d67307421bf68000afd6ace774f340f25e2dd
|
4
|
+
data.tar.gz: f077d6540b2b8022d3100d420e81aa5de118da63
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e906a09b6c8dc5c65b37d6e7fba76065f6c89ee3d73d6dc70138d958595c2f17705ffdf14aff9e9e63f78e11f0b890be4b0ca316f06fe6798ea9e52e8a0dd339
|
7
|
+
data.tar.gz: a197f8ebb1f8ddba7a58ae48e0b6bf8caef92e57fc1af05f65629e77879a955532bc69660d28864faa8079467ef9605936917e36e2e91014b282a9f6cdd2c294
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
bamboozled (0.0.1)
|
5
|
+
httparty
|
6
|
+
json
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
httparty (0.13.1)
|
12
|
+
json (~> 1.8)
|
13
|
+
multi_xml (>= 0.5.2)
|
14
|
+
json (1.8.1)
|
15
|
+
multi_xml (0.5.5)
|
16
|
+
rake (10.3.2)
|
17
|
+
|
18
|
+
PLATFORMS
|
19
|
+
ruby
|
20
|
+
|
21
|
+
DEPENDENCIES
|
22
|
+
bamboozled!
|
23
|
+
bundler (>= 1.6.2)
|
24
|
+
rake
|
data/bamboozled.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'bamboozled/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "bamboozled"
|
8
|
+
spec.version = Bamboozled::VERSION
|
9
|
+
spec.authors = ["Mark Rickert"]
|
10
|
+
spec.email = ["mjar81@gmail.com"]
|
11
|
+
spec.summary = "A Ruby Wrapper for the BambooHR API http://www.bamboohr.com/"
|
12
|
+
spec.description = "Bamboozled wraps the BambooHR API without the use of Rails dependencies."
|
13
|
+
spec.homepage = "http://github.com/Skookum/bamboozled"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.test_files = spec.files.grep(%r{^(spec)/})
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.required_ruby_version = '>= 2.0'
|
21
|
+
|
22
|
+
spec.add_runtime_dependency('httparty')
|
23
|
+
spec.add_runtime_dependency('json')
|
24
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
module Bamboozled
|
2
|
+
class Client
|
3
|
+
include HTTParty
|
4
|
+
base_uri 'api.bamboohr.com'
|
5
|
+
|
6
|
+
def initialize(subdomain, api_key)
|
7
|
+
@subdomain, @api_key = subdomain, api_key
|
8
|
+
end
|
9
|
+
|
10
|
+
def all_employees(fields = nil)
|
11
|
+
fields = all_fields if fields.nil?
|
12
|
+
r = request("employees/directory?fields=#{fields}")
|
13
|
+
r['employees']
|
14
|
+
end
|
15
|
+
|
16
|
+
def employee(id, fields = nil)
|
17
|
+
fields = all_fields if fields.nil?
|
18
|
+
request("employees/#{id}?fields=#{fields}")
|
19
|
+
end
|
20
|
+
|
21
|
+
# Tabular data
|
22
|
+
[:job_info, :employment_status, :compensation, :dependents, :contacts].each do |action|
|
23
|
+
define_method("employee_#{action}") do |argument_id|
|
24
|
+
request("employees/#{argument_id}/tables/#{action.to_s.gsub(/_(.)/) {|e| $1.upcase}}")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Reports
|
29
|
+
def report(number, format = 'JSON', fd = true)
|
30
|
+
request("reports/#{number}?format=#{format.upcase}&fd=#{fd.yesno}")
|
31
|
+
end
|
32
|
+
|
33
|
+
# def custom_report(options, format = 'JSON')
|
34
|
+
# post("reports/custom?format=#{format.upcase}", nil)
|
35
|
+
# end
|
36
|
+
|
37
|
+
# Time Off Requests
|
38
|
+
def time_off_requests(options = {})
|
39
|
+
allowed_parameters = [:id, :action, :employeeId, :start, :end, :type, :status]
|
40
|
+
options = options.keep_if { |k,_| allowed_parameters.include? k }
|
41
|
+
|
42
|
+
# Convert non string dates to strings.
|
43
|
+
[:start, :end].each do |action|
|
44
|
+
options[action] = options[action].strftime("%F") if options[action] && !options[action].is_a?(String)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Make sure all statuses are allowed
|
48
|
+
if options[:status]
|
49
|
+
allowed_statuses = %w(approved denied superceded requested canceled)
|
50
|
+
options[:status] = Array(options[:status]).keep_if { |v| allowed_statuses.include? v }.join(",")
|
51
|
+
end
|
52
|
+
|
53
|
+
request("time_off/requests?#{URI.encode_www_form(options)}")
|
54
|
+
end
|
55
|
+
|
56
|
+
def estimate_time_off(employee_id, end_date)
|
57
|
+
end_date = end_date.strftime("%F") unless end_date.is_a?(String)
|
58
|
+
request("employees/#{employee_id}/time_off/calculator?end=#{end_date}")
|
59
|
+
end
|
60
|
+
|
61
|
+
def whos_out(start_date, end_date = nil)
|
62
|
+
start_date = start_date.strftime("%F") unless start_date.is_a?(String)
|
63
|
+
end_date = end_date.strftime("%F") unless end_date.nil? || end_date.is_a?(String)
|
64
|
+
request("time_off/whos_out?start=#{start_date}&end=#{end_date}")
|
65
|
+
end
|
66
|
+
|
67
|
+
def default_fields
|
68
|
+
%w(displayName firstName lastName jobTitle workPhone mobilePhone workEmail department location photoUploaded photoUrl canUploadPhoto).join(',')
|
69
|
+
end
|
70
|
+
|
71
|
+
def all_fields
|
72
|
+
%w(address1 address2 age bestEmail birthday city country dateOfBirth department division eeo employeeNumber employmentHistoryStatus ethnicity exempt firstName flsaCode fullName1 fullName2 fullName3 fullName4 fullName5 displayName gender hireDate homeEmail homePhone id jobTitle lastChanged lastName location maritalStatus middleName mobilePhone nickname payChangeReason payGroup payGroupId payRate payRateEffectiveDate payType ssn sin state stateCode status supervisor supervisorId supervisorEId terminationDate workEmail workPhone workPhonePlusExtension workPhoneExtension zipcode photoUploaded rehireDate standardHoursPerWeek bonusDate bonusAmount bonusReason bonusComment commissionDate commisionDate commissionAmount commissionComment).join(',')
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def request(path, fields = nil)
|
78
|
+
fields = all_fields if fields.nil?
|
79
|
+
self.class.get("#{path_prefix}#{path}", basic_auth: auth, headers: headers)
|
80
|
+
end
|
81
|
+
|
82
|
+
def post(path, data)
|
83
|
+
self.class.post("#{path_prefix}#{path}", body: data, basic_auth: auth, headers: headers)
|
84
|
+
end
|
85
|
+
|
86
|
+
def headers
|
87
|
+
{ 'Accept' => 'application/json' }
|
88
|
+
end
|
89
|
+
|
90
|
+
def auth
|
91
|
+
{ username: @api_key, password: "x" }
|
92
|
+
end
|
93
|
+
|
94
|
+
def path_prefix
|
95
|
+
"/api/gateway.php/#{@subdomain}/v1/"
|
96
|
+
end
|
97
|
+
|
98
|
+
# def self.get_all_stores
|
99
|
+
# get("/v1/stores")
|
100
|
+
# end
|
101
|
+
|
102
|
+
# def self.get_stores_by_zip(zip)
|
103
|
+
# get("/v1/stores(postalCode=#{zip})")
|
104
|
+
# end
|
105
|
+
|
106
|
+
# def self.get_stores_by_zip_and_distance(zip, distance)
|
107
|
+
# get("/v1/stores(area(#{zip},#{distance}))")
|
108
|
+
# end
|
109
|
+
|
110
|
+
# def self.get_product_by_sku(sku)
|
111
|
+
# get("/v1/products/#{sku}.xml")
|
112
|
+
# end
|
113
|
+
|
114
|
+
# def self.get_products(filter)
|
115
|
+
# response = get(URI.escape("/v1/products(#{filter})"))
|
116
|
+
# response["products"]["product"]
|
117
|
+
# end
|
118
|
+
|
119
|
+
# def self.method_missing(method_id, *args)
|
120
|
+
# if match = /get_products_by_([_a-zA-Z]\w*)/.match(method_id.to_s)
|
121
|
+
# attribute_names = match.captures.last.split('_and_')
|
122
|
+
|
123
|
+
# request = ""
|
124
|
+
# attribute_names.each_with_index { |name, idx| request = request + name + "=" + args[idx] + (attribute_names.length-1 == idx ? "" : "&") }
|
125
|
+
|
126
|
+
# get_products(request)
|
127
|
+
# else
|
128
|
+
# super
|
129
|
+
# end
|
130
|
+
# end
|
131
|
+
end
|
132
|
+
end
|
data/lib/bamboozled.rb
ADDED
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bamboozled
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mark Rickert
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-06-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httparty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Bamboozled wraps the BambooHR API without the use of Rails dependencies.
|
42
|
+
email:
|
43
|
+
- mjar81@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- ".gitignore"
|
49
|
+
- Gemfile
|
50
|
+
- Gemfile.lock
|
51
|
+
- bamboozled.gemspec
|
52
|
+
- lib/bamboozled.rb
|
53
|
+
- lib/bamboozled/client.rb
|
54
|
+
- lib/bamboozled/version.rb
|
55
|
+
- lib/bamboozled/yesno.rb
|
56
|
+
homepage: http://github.com/Skookum/bamboozled
|
57
|
+
licenses:
|
58
|
+
- MIT
|
59
|
+
metadata: {}
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 2.3.0
|
77
|
+
signing_key:
|
78
|
+
specification_version: 4
|
79
|
+
summary: A Ruby Wrapper for the BambooHR API http://www.bamboohr.com/
|
80
|
+
test_files: []
|
81
|
+
has_rdoc:
|