bamboozled 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,12 @@
1
+ # rdoc generated
2
+ rdoc
3
+
4
+ # yard generated
5
+ doc
6
+ .yardoc
7
+
8
+ # bundler
9
+ .bundle
10
+
11
+ # jeweler generated
12
+ pkg
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ group :development, :test do
6
+ gem 'bundler', '>= 1.6.2'
7
+ gem 'rake'
8
+ end
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
@@ -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
@@ -0,0 +1,3 @@
1
+ module Bamboozled
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,11 @@
1
+ class TrueClass
2
+ def yesno
3
+ "yes"
4
+ end
5
+ end
6
+
7
+ class FalseClass
8
+ def yesno
9
+ "no"
10
+ end
11
+ end
data/lib/bamboozled.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'httparty'
2
+ require 'json'
3
+ require 'uri'
4
+
5
+ Dir[File.dirname(__FILE__) + '/bamboozled/*.rb'].each do |file|
6
+ require file
7
+ end
8
+
9
+ module Bamboozled
10
+ end
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: