peoplegroup-connectors 0.1.42 → 0.1.47

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69635f6af5c75821defe1c7268775bb1ef296b86f6997ab84023211455697113
4
- data.tar.gz: 493843154a961f0be043a1824368452fda93fa2348b750be30559def0387437a
3
+ metadata.gz: ab4d070d633d4a4ba0e14f99661249d4ba905c53805bbf0de2d79f73509256b1
4
+ data.tar.gz: 1d961037f0ef2181d76850de6507803a2274dd631877028a1422621bab4c08b5
5
5
  SHA512:
6
- metadata.gz: a404cb091f97fe756341e3ba044f8508b0cc571170e6404b5222df121a1baa8743904db256d5d8ed36a6c5781dd07e890c37b76bcc7823eea157617c780bdfda
7
- data.tar.gz: 49149ea99d968ec58b782b5076b730d4bc3157b680ac33e097c8091eb3cd296629be50713e8c8ccf48cd4e7d5ec4ea1661da7018cf243ecd5c9fd059361b2b27
6
+ metadata.gz: 6c3862beed5ca490783a2404ac40af0df8411ae249c05e73a919aaa30eb809dc1253135e657af23a5e45dc79464d279f97decd5eff58ec59215f23924a0781fb
7
+ data.tar.gz: bfe7f83f6ee1371742139d3dcd36ecc792ad63d4ac3aac876f3cbda8f133465df375b0c3462e4b3e084d9ee81046e210623d02373dcffd06115419390fefb30c
@@ -5,6 +5,8 @@ require 'bamboozled'
5
5
  module PeopleGroup
6
6
  module Connectors
7
7
  class Bamboo
8
+ EmployeeNotFoundError = Class.new(StandardError)
9
+
8
10
  def initialize(use_report: false)
9
11
  @use_report = use_report
10
12
  @client = Bamboozled.client(subdomain: 'gitlab', api_key: ENV['BAMBOO_API_KEY'])
@@ -14,10 +16,24 @@ module PeopleGroup
14
16
  employees.find { |emp| emp['id'] == id.to_s }
15
17
  end
16
18
 
19
+ def get_employee_details!(id)
20
+ employee_details = get_employee_details(id)
21
+ raise EmployeeNotFoundError, "No employee found with id #{id}" if employee_details.nil?
22
+
23
+ employee_details
24
+ end
25
+
17
26
  def get_employee(id)
18
27
  @client.employee.find(id, %w[firstName lastName jobTitle supervisor hireDate country location department division workEmail customCostCenter])
19
28
  end
20
29
 
30
+ def get_employee!(id)
31
+ employee = get_employee(id)
32
+ raise EmployeeNotFoundError, "No employee found with id #{id}" if employee.nil?
33
+
34
+ employee
35
+ end
36
+
21
37
  def search_employee(name)
22
38
  return if name.empty?
23
39
 
@@ -34,11 +50,27 @@ module PeopleGroup
34
50
  end
35
51
  alias_method :search_team_member, :search_employee
36
52
 
53
+ def search_employee!(name)
54
+ employee = search_employee(name)
55
+ raise EmployeeNotFoundError, "No employee found with name #{name}" if employee.nil?
56
+
57
+ employee
58
+ end
59
+ alias_method :search_team_member!, :search_employee!
60
+
37
61
  def search_employee_by_field(field:, value:)
38
62
  employees.find { |employee| employee[field] == value.to_s }
39
63
  end
40
64
  alias_method :search_team_member_by_field, :search_employee_by_field
41
65
 
66
+ def search_employee_by_field!(field:, value:)
67
+ employee = search_employee_by_field(field: field, value: value)
68
+ raise EmployeeNotFoundError, "No employee found with #{field}: #{value}" if employee.nil?
69
+
70
+ employee
71
+ end
72
+ alias_method :search_team_member_by_field!, :search_employee_by_field!
73
+
42
74
  def slack_email_lookup_with_fallback(email)
43
75
  file_path = File.join(__dir__, '../../../data/email_mapper.yml')
44
76
  email_mapper = YAML.load_file(file_path)
@@ -48,19 +80,47 @@ module PeopleGroup
48
80
  employees.find { |employee| employee['workEmail'] == email }
49
81
  end
50
82
 
83
+ def slack_email_lookup_with_fallback!(email)
84
+ employee = slack_email_lookup_with_fallback(email)
85
+ raise EmployeeNotFoundError, "No employee found with Slack email #{email}" if employee.nil?
86
+
87
+ employee
88
+ end
89
+
51
90
  def fetch_manager(team_member)
52
91
  active_team_members.find { |tm| tm['id'] == team_member['supervisorEId'] }
53
92
  end
54
93
 
94
+ def fetch_manager!(team_member)
95
+ manager = fetch_manager(team_member)
96
+ raise EmployeeNotFoundError, "Manager not found for employee #{team_member['id']}" if manager.nil?
97
+
98
+ manager
99
+ end
100
+
55
101
  def fetch_manager_for_id(team_member_id)
56
102
  team_member = get_employee_details(team_member_id)
57
103
  active_team_members.find { |tm| tm['id'] == team_member['supervisorEId'] }
58
104
  end
59
105
 
106
+ def fetch_manager_for_id!(team_member_id)
107
+ manager = fetch_manager_for_id(team_member_id)
108
+ raise EmployeeNotFoundError, "No manager found with id #{team_member_id}" if manager.nil?
109
+
110
+ manager
111
+ end
112
+
60
113
  def fetch_second_level_manager(team_member)
61
114
  fetch_manager(fetch_manager(team_member))
62
115
  end
63
116
 
117
+ def fetch_second_level_manager!(team_member)
118
+ manager = fetch_second_level_manager(team_member)
119
+ raise EmployeeNotFoundError, "No second level manager found for employee #{team_member['id']}" if manager.nil?
120
+
121
+ manager
122
+ end
123
+
64
124
  def create_employee(employee_details_hash)
65
125
  @client.employee.add(employee_details_hash)
66
126
  end
@@ -78,7 +138,11 @@ module PeopleGroup
78
138
  end
79
139
 
80
140
  def fields
81
- @fields ||= (Bamboozled::API::FieldCollection.all_names + @client.meta.fields.map { |f| f['alias'] }).compact.uniq
141
+ return @fields if @fields
142
+
143
+ @fields = (Bamboozled::API::FieldCollection.all_names + @client.meta.fields.map { |f| f['alias'] }).compact.uniq
144
+ @fields.delete('flsaCode') # temp fix for problems with BambooHR
145
+ @fields
82
146
  end
83
147
 
84
148
  def employees
@@ -130,6 +194,14 @@ module PeopleGroup
130
194
  @client.employee.table_data(employee_id, 'employmentStatus')
131
195
  end
132
196
 
197
+ def time_off_types
198
+ @time_off_types ||= @client.meta.time_off_types
199
+ end
200
+
201
+ def time_off_type(name)
202
+ time_off_types['timeOffTypes'].find { |type| type['name'] == name }
203
+ end
204
+
133
205
  def job_details(employee_id)
134
206
  @client.employee.table_data(employee_id, 'jobInfo')
135
207
  end
@@ -25,7 +25,7 @@ module PeopleGroup
25
25
  end
26
26
 
27
27
  def retry_on_error(&block)
28
- Utils.retry_on_error(errors: [Google::Apis::ServerError], delay: 1, &block)
28
+ Utils.retry_on_error(errors: [Google::Apis::ServerError], delay: 3, max_attempts: 4, &block)
29
29
  end
30
30
  end
31
31
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module PeopleGroup
4
4
  module Connectors
5
- VERSION = '0.1.42'
5
+ VERSION = '0.1.47'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: peoplegroup-connectors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.42
4
+ version: 0.1.47
5
5
  platform: ruby
6
6
  authors:
7
7
  - lien van den steen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-06 00:00:00.000000000 Z
11
+ date: 2021-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gitlab
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: google_drive
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '3.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '3.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: slack-ruby-client
43
43
  requirement: !ruby/object:Gem::Requirement