smartrecruiters 0.1.0 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 44b39ecc3ecdd78c5fa8ee62cac3fbb6b03bc35f8bd19c352f3203150c85bc86
4
- data.tar.gz: 0b55de968dc1c5f1142578505e59b13ebe39edd014703fcb964340a949aa75e1
3
+ metadata.gz: 30883b1307e170148c8183e487414ec7cee6bf1072a6c9ad3bac5132f97e647b
4
+ data.tar.gz: 6d0bd970d76244e299beea567b59e7ee6177d33a7562f6a3e2a65bdd955e2035
5
5
  SHA512:
6
- metadata.gz: e794c63737ea81c0510440cc435b3df51a7b12cba1cf4e980a27b79435140c009b686d0901cf90175c5cdd17fe4560cf7da5dfca5bb035785ba677b321373527
7
- data.tar.gz: 995acdd377323cff566c4cc11aed188ba0f67240bdc8da5c2261626f2e27707a28497efca2c344b28d09596564a6468ed962a00dd4435a0059a8ea786649c76b
6
+ metadata.gz: 4dbca1f2930a6dc92ebb19be2aa3f6b9e028ad1280683bed78f77b6446db653ec803cfe6411dd4e3e20185d5c69aa423ffb24cde9a08f722e5711daa0ad5b4e8
7
+ data.tar.gz: 69439dcf5fa3791ca0f93fcc69d58ea889cb284f5f9c691fe18c7d6c9ba9cc56f5167cc859dffce01dbdc0076239a8f0ef56984a27edf4f08a4cf7f8bae8325a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.0](https://www.github.com/davejcameron/smartrecruiters/compare/v0.1.0...v0.2.0) (2021-10-13)
4
+
5
+
6
+ ### Features
7
+
8
+ * Add access groups routes ([#7](https://www.github.com/davejcameron/smartrecruiters/issues/7)) ([81d6a34](https://www.github.com/davejcameron/smartrecruiters/commit/81d6a34e4466309f493f65aeeab6173d610b8dfb))
9
+ * add reports apis ([#5](https://www.github.com/davejcameron/smartrecruiters/issues/5)) ([343814b](https://www.github.com/davejcameron/smartrecruiters/commit/343814b8d1fd0d14c062030b958d67b307204c69))
10
+ * Add timeout and retry ([2d0d8f2](https://www.github.com/davejcameron/smartrecruiters/commit/2d0d8f23c57d522ea657e32b06b3da40a1822930))
11
+ * Add webhooks routes ([#6](https://www.github.com/davejcameron/smartrecruiters/issues/6)) ([b37bcda](https://www.github.com/davejcameron/smartrecruiters/commit/b37bcda13d43f96bf6ac4fac285dd87200b3a877))
12
+
3
13
  ## 0.1.0 (2021-10-09)
4
14
 
5
15
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- smartrecruiters (0.1.0)
4
+ smartrecruiters (0.2.0)
5
5
  faraday (~> 1.8)
6
6
  faraday_middleware (~> 1.1)
7
7
 
data/README.md CHANGED
@@ -37,7 +37,9 @@ client = SmartRecruiters::Client.new(api_key: ENV["SMARTRECRUITERS_API_KEY"], en
37
37
  ### Access Groups
38
38
 
39
39
  ```ruby
40
- client.access_groups
40
+ client.access_groups.list
41
+ client.access_groups.assign_users(group_id: "id", user_ids: ["user_id"])
42
+ client.access_groups.remove_user(group_id: "id", user_id: "id")
41
43
  ```
42
44
 
43
45
  ### Candidates
@@ -93,6 +95,10 @@ client.offers.retrieve_offers(candidate_id: "id", job_id: "id")
93
95
  ```ruby
94
96
  client.reports.list
95
97
  client.reports.retrieve(report_id: "id")
98
+ client.reports.retrieve_files(report_id: "id")
99
+ client.reports.generate_report(report_id: "id")
100
+ client.reports.retrieve_recent_file(report_id: "id")
101
+ client.reports.retrieve_recent_file_data(report_id: "id")
96
102
  ```
97
103
 
98
104
  ### Reviews
@@ -123,6 +129,19 @@ client.users.activation_email(user_id: "id")
123
129
  client.users.deactivate(user_id: "id")
124
130
  ```
125
131
 
132
+ ### Webhooks
133
+
134
+ ```ruby
135
+ client.webhooks.list
136
+ client.webhooks.create({})
137
+ client.webhooks.retrieve(webhook_id: "id")
138
+ client.webhooks.delete(webhook_id: "id")
139
+ client.webhooks.activate(webhook_id: "id")
140
+ client.webhooks.callbacks_log(webhook_id: "id")
141
+ client.webhooks.generate_secret(webhook_id: "id")
142
+ client.webhooks.retrieve_secret(webhook_id: "id")
143
+ ```
144
+
126
145
  ## Development
127
146
 
128
147
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -2,9 +2,13 @@
2
2
 
3
3
  require 'faraday'
4
4
  require 'faraday_middleware'
5
+ require 'json'
5
6
 
6
7
  module SmartRecruiters
7
8
  class Client
9
+ SMART_RECRUITERS_TIMEOUT = 128
10
+ SMART_RECRUITERS_RETRIES = 3
11
+
8
12
  SMART_RECRUITERS_BASE_PATHS = {
9
13
  'production' => 'https://api.smartrecruiters.com',
10
14
  'sandbox' => 'https://api.sandbox.smartrecruiters.com'
@@ -12,11 +16,16 @@ module SmartRecruiters
12
16
 
13
17
  attr_reader :api_key, :adapter
14
18
 
15
- def initialize(api_key:, adapter: Faraday.default_adapter, stubs: nil, environment: 'production')
19
+ def initialize(
20
+ api_key:,
21
+ adapter: Faraday.default_adapter,
22
+ stubs: nil,
23
+ environment: 'production'
24
+ )
16
25
  @api_key = api_key
17
- @adapter = adapter
18
26
  @environment = environment
19
27
 
28
+ @adapter = adapter
20
29
  @stubs = stubs
21
30
  end
22
31
 
@@ -52,16 +61,31 @@ module SmartRecruiters
52
61
  UsersResource.new(self)
53
62
  end
54
63
 
64
+ def webhooks
65
+ WebhooksResource.new(self)
66
+ end
67
+
55
68
  def connection
56
69
  @connection ||= Faraday.new do |conn|
57
70
  conn.url_prefix = SMART_RECRUITERS_BASE_PATHS[@environment]
58
71
  conn.headers['X-SmartToken'] = api_key
59
72
  conn.request :json
73
+ conn.request :retry, retry_options
60
74
 
61
75
  conn.response :json, content_type: 'application/json'
62
76
 
77
+ conn.options.timeout = SMART_RECRUITERS_TIMEOUT
63
78
  conn.adapter adapter, @stubs
64
79
  end
65
80
  end
81
+
82
+ private
83
+
84
+ def retry_options
85
+ {
86
+ max: SMART_RECRUITERS_RETRIES,
87
+ retry_statuses: [429]
88
+ }
89
+ end
66
90
  end
67
91
  end
@@ -6,13 +6,21 @@ module SmartRecruiters
6
6
 
7
7
  def self.from_response(response, type:)
8
8
  body = response.body
9
- new(
10
- content: body['content'].map { |attrs| type.new(attrs) },
11
- limit: body['limit'],
12
- offset: body['offset'],
13
- next_page_id: body['nextPageId'],
14
- total_found: body['totalFound']
15
- )
9
+
10
+ if body.is_a?(Array)
11
+ new(
12
+ content: body.map { |attrs| type.new(attrs) },
13
+ limit: nil, offset: nil, next_page_id: nil, total_found: nil
14
+ )
15
+ else
16
+ new(
17
+ content: body['content'].map { |attrs| type.new(attrs) },
18
+ limit: body['limit'],
19
+ offset: body['offset'],
20
+ next_page_id: body['nextPageId'],
21
+ total_found: body['totalFound']
22
+ )
23
+ end
16
24
  end
17
25
 
18
26
  def initialize(content:, limit:, offset:, next_page_id:, total_found:)
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SmartRecruiters
4
+ class CallbacksLog < Object
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SmartRecruiters
4
+ class Webhook < Object
5
+ end
6
+ end
@@ -2,8 +2,18 @@
2
2
 
3
3
  module SmartRecruiters
4
4
  class AccessGroupsResource < Resource
5
+ ACCESS_GROUP_API = 'user-api/v201804/access-groups'
6
+
5
7
  def list
6
- Collection.from_response get_request('user-api/v201804/access-groups'), type: AccessGroup
8
+ Collection.from_response get_request(ACCESS_GROUP_API.to_s), type: AccessGroup
9
+ end
10
+
11
+ def assign_users(group_id:, user_ids:)
12
+ Collection.from_response post_request("#{ACCESS_GROUP_API}/#{group_id}/users", body: user_ids), type: User
13
+ end
14
+
15
+ def remove_user(group_id:, user_id:)
16
+ delete_request("#{ACCESS_GROUP_API}/#{group_id}/users/#{user_id}")
7
17
  end
8
18
  end
9
19
  end
@@ -11,5 +11,22 @@ module SmartRecruiters
11
11
  def retrieve(report_id:)
12
12
  Report.new get_request("#{REPORT_API}/reports/#{report_id}").body
13
13
  end
14
+
15
+ def retrieve_files(report_id:)
16
+ Object.new get_request("#{REPORT_API}/reports/#{report_id}/files").body
17
+ end
18
+
19
+ def generate_report(report_id:)
20
+ Report.new post_request("#{REPORT_API}/reports/#{report_id}").body
21
+ end
22
+
23
+ def retrieve_recent_file(report_id:)
24
+ Report.new get_request("#{REPORT_API}/reports/#{report_id}/files/recent").body
25
+ end
26
+
27
+ def retrieve_recent_file_data(report_id:)
28
+ response = get_request("#{REPORT_API}/reports/#{report_id}/files/recent/data").body
29
+ Object.new JSON.parse(response)
30
+ end
14
31
  end
15
32
  end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SmartRecruiters
4
+ class WebhooksResource < Resource
5
+ WEBHOOK_API = 'webhooks-api/v201907'
6
+
7
+ def list(**params)
8
+ response = get_request("#{WEBHOOK_API}/subscriptions", params: params)
9
+ Collection.from_response(response, type: Webhook)
10
+ end
11
+
12
+ def create(**attributes)
13
+ Webhook.new post_request("#{WEBHOOK_API}/subscriptions", body: attributes).body
14
+ end
15
+
16
+ def retrieve(webhook_id:)
17
+ Webhook.new get_request("#{WEBHOOK_API}/subscriptions/#{webhook_id}").body
18
+ end
19
+
20
+ def delete(webhook_id:)
21
+ delete_request("#{WEBHOOK_API}/subscriptions/#{webhook_id}")
22
+ end
23
+
24
+ def activate(webhook_id:, **attributes)
25
+ put_request("#{WEBHOOK_API}/subscriptions/#{webhook_id}/activation", body: attributes)
26
+ end
27
+
28
+ def callbacks_log(webhook_id:, **params)
29
+ response = get_request("#{WEBHOOK_API}/subscriptions/#{webhook_id}/callbacks-log", params: params)
30
+ Collection.from_response(response, type: CallbacksLog)
31
+ end
32
+
33
+ def generate_secret(webhook_id:, **attributes)
34
+ Object.new post_request("#{WEBHOOK_API}/subscriptions/#{webhook_id}/secret-key", body: attributes).body
35
+ end
36
+
37
+ def retrieve_secret(webhook_id:)
38
+ Object.new get_request("#{WEBHOOK_API}/subscriptions/#{webhook_id}/secret-key").body
39
+ end
40
+ end
41
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SmartRecruiters
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -11,15 +11,16 @@ module SmartRecruiters
11
11
 
12
12
  autoload :AccessGroup, 'smartrecruiters/objects/access_group'
13
13
  autoload :Attachment, 'smartrecruiters/objects/attachment'
14
+ autoload :CallbacksLog, 'smartrecruiters/objects/callbacks_log'
14
15
  autoload :Candidate, 'smartrecruiters/objects/candidate'
15
16
  autoload :Interview, 'smartrecruiters/objects/interview'
16
-
17
17
  autoload :Job, 'smartrecruiters/objects/job'
18
18
  autoload :Offer, 'smartrecruiters/objects/offer'
19
19
  autoload :User, 'smartrecruiters/objects/user'
20
20
  autoload :Report, 'smartrecruiters/objects/report'
21
21
  autoload :Review, 'smartrecruiters/objects/review'
22
22
  autoload :SystemRole, 'smartrecruiters/objects/system_role'
23
+ autoload :Webhook, 'smartrecruiters/objects/webhook'
23
24
 
24
25
  autoload :AccessGroupsResource, 'smartrecruiters/resources/access_groups'
25
26
  autoload :CandidatesResource, 'smartrecruiters/resources/candidates'
@@ -31,4 +32,5 @@ module SmartRecruiters
31
32
  autoload :ReportsResource, 'smartrecruiters/resources/reports'
32
33
  autoload :ReviewsResource, 'smartrecruiters/resources/reviews'
33
34
  autoload :SystemRolesResource, 'smartrecruiters/resources/system_roles'
35
+ autoload :WebhooksResource, 'smartrecruiters/resources/webhooks'
34
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smartrecruiters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cameron
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-09 00:00:00.000000000 Z
11
+ date: 2021-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -107,6 +107,7 @@ files:
107
107
  - lib/smartrecruiters/object.rb
108
108
  - lib/smartrecruiters/objects/access_group.rb
109
109
  - lib/smartrecruiters/objects/attachment.rb
110
+ - lib/smartrecruiters/objects/callbacks_log.rb
110
111
  - lib/smartrecruiters/objects/candidate.rb
111
112
  - lib/smartrecruiters/objects/interview.rb
112
113
  - lib/smartrecruiters/objects/job.rb
@@ -115,6 +116,7 @@ files:
115
116
  - lib/smartrecruiters/objects/review.rb
116
117
  - lib/smartrecruiters/objects/system_role.rb
117
118
  - lib/smartrecruiters/objects/user.rb
119
+ - lib/smartrecruiters/objects/webhook.rb
118
120
  - lib/smartrecruiters/resource.rb
119
121
  - lib/smartrecruiters/resources/access_groups.rb
120
122
  - lib/smartrecruiters/resources/candidates.rb
@@ -126,6 +128,7 @@ files:
126
128
  - lib/smartrecruiters/resources/reviews.rb
127
129
  - lib/smartrecruiters/resources/system_roles.rb
128
130
  - lib/smartrecruiters/resources/users.rb
131
+ - lib/smartrecruiters/resources/webhooks.rb
129
132
  - lib/smartrecruiters/version.rb
130
133
  - smartrecruiters.gemspec
131
134
  homepage: https://github.com/davejcameron/smartrecruiters