peoplegroup-connectors 0.1.78 → 0.1.82

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: adc2b43dab4c8b9d48332ebc2063feee381bf5ec66a84676120e8e2a8eb0f6a0
4
- data.tar.gz: 6a12ebc1139c679011ba70f42ba5db4e71cf4bd28285e6ddac876cd90ba25063
3
+ metadata.gz: 64e2231a0ed45cc92728919124d1cbf226a1bc73da16496a8a11ad26eac66d87
4
+ data.tar.gz: f32eb6f0495b7ab5b43b1eb3b3c8e30a0632c9647fcc70cb1c6c14fb43422df1
5
5
  SHA512:
6
- metadata.gz: e881b3f798039ab1cbc1b1749d1a50680345f635d5f31c5e61fa8f82844815bd4a86667ed902fd2732ee6426050a95721780d2dacdce527573725660cd828583
7
- data.tar.gz: 47d8d0fcf90791ac18ba3404a7d0d719f0db89a2a275c82e88590421a4da847ce3922a102216634a67f61b7f52799d0a3da292ff75a76eb46aa24cb4f6354ec4
6
+ metadata.gz: ba26f83613dd2c32b3fc84da0f5c351d0fd15abda9061e4ab2645f2e492ef7a4d9e5768922a3a7b033f6a7aa3fb5ffad60c41c4bd3034ce01298234cd4ef5297
7
+ data.tar.gz: 6d4a5d234bd3d6ae65633a1f488c86d521f0d3678beabf0495f44545e1751bc5c49135fc755467e6068ac3b6b7b1fd69e5ee109f2c46e90c386413c8196c6706
@@ -4,3 +4,7 @@
4
4
  bamboo_email: kjohnston
5
5
  - slack_email: jmeshell
6
6
  bamboo_email: jporter
7
+ - slack_email: mjacob
8
+ bamboo_email: mgomez
9
+ - slack_email: nprecilla
10
+ bamboo_email: ngarcia
@@ -84,7 +84,7 @@ module PeopleGroup
84
84
  end
85
85
 
86
86
  def update_variable(project, key, value, **opts)
87
- retry_on_error { @client.update_variable(project, key, value, opts) }
87
+ retry_on_error { @client.update_variable(project, key, value, **opts) }
88
88
  end
89
89
 
90
90
  def find_or_create_epic(group_id, title, options = {})
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The HRIS module makes Workday responses look like BambooHR responses
4
+ module PeopleGroup
5
+ module Connectors
6
+ class Hris
7
+ def initialize
8
+ @workday = Workday.new
9
+ end
10
+
11
+ def employees
12
+ @workday.workers.map { |worker| format_worker(worker) }
13
+ end
14
+
15
+ private
16
+
17
+ # Convert Workday worker to BambooHR employee
18
+ def format_worker(worker)
19
+ {
20
+ 'id' => worker.dig(:worker_data, :worker_id),
21
+ 'firstName' => worker.dig(:worker_data, :personal_data, :name_data, :legal_name_data, :name_detail_data, :first_name),
22
+ 'lastName' => worker.dig(:worker_data, :personal_data, :name_data, :legal_name_data, :name_detail_data, :last_name),
23
+ 'preferredName' => worker.dig(:worker_data, :personal_data, :name_data, :preferred_name_data, :name_detail_data, :first_name),
24
+ 'customPreferredLastName' => worker.dig(:worker_data, :personal_data, :name_data, :preferred_name_data, :name_detail_data, :last_name),
25
+ **format_emails(worker),
26
+ 'status' => worker.dig(:worker_data, :employment_data, :worker_status_data, :active) == '1' ? 'Active' : 'Inactive',
27
+ 'hireDate' => worker.dig(:worker_data, :employment_data, :worker_status_data, :hire_date).to_s,
28
+ 'jobTitle' => worker.dig(:worker_data, :employment_data, :worker_job_data, :position_data, :position_title)
29
+ }
30
+ end
31
+
32
+ def format_emails(worker)
33
+ formatted_emails = {
34
+ 'workEmail' => nil,
35
+ 'homeEmail' => nil
36
+ }
37
+
38
+ email_addresses = worker.dig(:worker_data, :personal_data, :contact_data, :email_address_data)
39
+
40
+ return formatted_emails if email_addresses.nil?
41
+
42
+ # If there is only one email, Workday returns a hash
43
+ # If there are more than one, Workday returns an array of hashes
44
+ # rubocop:disable Style/ArrayCoercion
45
+ email_addresses = [email_addresses] unless email_addresses.is_a?(Array)
46
+ # rubocop:enable Style/ArrayCoercion
47
+
48
+ email_addresses.each do |email_address_data|
49
+ email_type = email_address_data.dig(:usage_data, :type_data, :type_reference, :id).second
50
+ formatted_emails['workEmail'] = email_address_data[:email_address] if email_type == 'WORK'
51
+ formatted_emails['homeEmail'] = email_address_data[:email_address] if email_type == 'HOME'
52
+ end
53
+
54
+ formatted_emails
55
+ end
56
+ end
57
+ end
58
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module PeopleGroup
4
4
  module Connectors
5
- VERSION = '0.1.78'
5
+ VERSION = '0.1.82'
6
6
  end
7
7
  end
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'savon'
4
+
5
+ module PeopleGroup
6
+ module Connectors
7
+ class Workday
8
+ attr_accessor :client, :subdomain, :tenant
9
+
10
+ API_VERSION = 'v37.0'
11
+ MAX_RESULTS_PER_PAGE = 999
12
+
13
+ EmployeeNotFoundError = Class.new(StandardError)
14
+
15
+ def initialize
16
+ @subdomain = ENV['WORKDAY_SUBDOMAIN']
17
+ @tenant = ENV['WORKDAY_TENANT']
18
+ isu_username = ENV['WORKDAY_ISU_USERNAME']
19
+ isu_password = ENV['WORKDAY_ISU_PASSWORD']
20
+ soap_debug_logs_enabled = ENV['WORKDAY_SOAP_DEBUG_LOGS'].present?
21
+
22
+ @client = Savon.client(
23
+ wsdl: "https://#{@subdomain}.workday.com/ccx/service/#{@tenant}/Human_Resources/#{API_VERSION}?wsdl",
24
+ log: soap_debug_logs_enabled,
25
+ wsse_auth: ["#{isu_username}@#{@tenant}", isu_password],
26
+ pretty_print_xml: true,
27
+ convert_request_keys_to: :camelcase,
28
+ env_namespace: :env,
29
+ namespace_identifier: nil,
30
+ namespaces: {
31
+ 'xmlns' => nil,
32
+ 'xmlns:env' => 'http://schemas.xmlsoap.org/soap/envelope/',
33
+ 'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema',
34
+ 'xmlns:wsse' => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'
35
+ }
36
+ )
37
+ end
38
+
39
+ def workers
40
+ retry_on_error do
41
+ @workers ||= auto_paginated_call(:get_workers, { message_tag: 'wd:Get_Workers_Request', attributes: attributes })
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def retry_on_error(&block)
48
+ Utils.retry_on_error(errors: [Net::ReadTimeout], delay: 3, &block)
49
+ end
50
+
51
+ def auto_paginated_call(operation_name, locals = {}, &block)
52
+ data = nil
53
+ page = 1
54
+
55
+ loop do
56
+ message = locals[:message] || {}
57
+ message_with_pagination_parameters = { **message, **pagination_parameters(page) }
58
+ response = @client.call(operation_name, { **locals, message: message_with_pagination_parameters }, &block)
59
+
60
+ # The response hash contains only one key named after the operation performed
61
+ # eg. get_workers_response
62
+ _operation_response_name, operation_result = response.to_hash.first
63
+
64
+ page = operation_result.dig(:response_results, :page).to_i
65
+ total_pages = operation_result.dig(:response_results, :total_pages).to_i
66
+
67
+ # The operation data hash contains only one key named after the Workday object(s) retrieved
68
+ # eg. worker
69
+ _object_label, partial_data = operation_result[:response_data].first
70
+
71
+ if page == 1
72
+ data = partial_data
73
+ else
74
+ data.concat(partial_data)
75
+ end
76
+
77
+ break if page == total_pages
78
+
79
+ page += 1
80
+ end
81
+
82
+ data
83
+ end
84
+
85
+ def pagination_parameters(page = 1, results_per_page = MAX_RESULTS_PER_PAGE)
86
+ {
87
+ 'wd:Response_Filter' => {
88
+ 'wd:Page' => page,
89
+ 'wd:Count' => results_per_page
90
+ }
91
+ }
92
+ end
93
+
94
+ def attributes
95
+ {
96
+ 'xmlns:wd' => 'urn:com.workday/bsvc',
97
+ 'wd:version' => API_VERSION
98
+ }
99
+ end
100
+ end
101
+ end
102
+ end
@@ -7,6 +7,8 @@ require_relative 'connectors/slack'
7
7
  require_relative 'connectors/pto_roots'
8
8
  require_relative 'connectors/bamboo'
9
9
  require_relative 'connectors/greenhouse'
10
+ require_relative 'connectors/workday'
11
+ require_relative 'connectors/hris'
10
12
  require_relative 'utils'
11
13
 
12
14
  module PeopleGroup
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.78
4
+ version: 0.1.82
5
5
  platform: ruby
6
6
  authors:
7
7
  - lien van den steen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-21 00:00:00.000000000 Z
11
+ date: 2021-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gitlab
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '2.5'
97
+ - !ruby/object:Gem::Dependency
98
+ name: savon
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 2.12.1
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 2.12.1
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rspec
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -179,9 +193,11 @@ files:
179
193
  - lib/peoplegroup/connectors/gitlab.rb
180
194
  - lib/peoplegroup/connectors/google_sheets.rb
181
195
  - lib/peoplegroup/connectors/greenhouse.rb
196
+ - lib/peoplegroup/connectors/hris.rb
182
197
  - lib/peoplegroup/connectors/pto_roots.rb
183
198
  - lib/peoplegroup/connectors/slack.rb
184
199
  - lib/peoplegroup/connectors/version.rb
200
+ - lib/peoplegroup/connectors/workday.rb
185
201
  - lib/peoplegroup/utils.rb
186
202
  homepage: https://gitlab.com/gitlab-com/people-group/peopleops-eng/connectors-gem
187
203
  licenses:
@@ -190,7 +206,7 @@ metadata:
190
206
  homepage_uri: https://gitlab.com/gitlab-com/people-group/peopleops-eng/connectors-gem
191
207
  source_code_uri: https://gitlab.com/gitlab-com/people-group/peopleops-eng/connectors-gem
192
208
  changelog_uri: https://gitlab.com/gitlab-com/people-group/peopleops-eng/connectors-gem
193
- post_install_message:
209
+ post_install_message:
194
210
  rdoc_options: []
195
211
  require_paths:
196
212
  - lib
@@ -205,8 +221,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
221
  - !ruby/object:Gem::Version
206
222
  version: '0'
207
223
  requirements: []
208
- rubygems_version: 3.1.4
209
- signing_key:
224
+ rubygems_version: 3.2.3
225
+ signing_key:
210
226
  specification_version: 4
211
227
  summary: Library for our shared connectors.
212
228
  test_files: []