kombo 1.2.4 → 1.2.6
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 +4 -4
- data/lib/kombo/ats.rb +159 -0
- data/lib/kombo/general.rb +2 -2
- data/lib/kombo/models/operations/getatsapplications_request.rb +1 -1
- data/lib/kombo/models/operations/getatsnotes_request.rb +82 -0
- data/lib/kombo/models/operations/getatsnotes_request.rbi +31 -0
- data/lib/kombo/models/operations/getatsnotes_response.rb +56 -0
- data/lib/kombo/models/operations/getatsnotes_response.rbi +19 -0
- data/lib/kombo/models/operations.rb +2 -0
- data/lib/kombo/models/shared/author.rb +48 -0
- data/lib/kombo/models/shared/author.rbi +21 -0
- data/lib/kombo/models/shared/getatsnotespositiveresponse.rb +39 -0
- data/lib/kombo/models/shared/getatsnotespositiveresponse.rbi +15 -0
- data/lib/kombo/models/shared/getatsnotespositiveresponse_data.rb +36 -0
- data/lib/kombo/models/shared/getatsnotespositiveresponse_data.rbi +15 -0
- data/lib/kombo/models/shared/getatsnotespositiveresponse_result.rb +84 -0
- data/lib/kombo/models/shared/getatsnotespositiveresponse_result.rbi +37 -0
- data/lib/kombo/models/shared/integration_tool.rb +1 -1
- data/lib/kombo/models/shared/name.rb +1 -0
- data/lib/kombo/models/shared/postatscandidatesrequestbody_bullhorn.rb +6 -2
- data/lib/kombo/models/shared/postatscandidatesrequestbody_bullhorn.rbi +2 -0
- data/lib/kombo/models/shared/postatscandidatesrequestbody_piloga_candidate.rb +7 -2
- data/lib/kombo/models/shared/postatscandidatesrequestbody_piloga_candidate.rbi +2 -0
- data/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_bullhorn.rb +6 -2
- data/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_bullhorn.rbi +2 -0
- data/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_piloga_candidate.rb +7 -2
- data/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_piloga_candidate.rbi +2 -0
- data/lib/kombo/models/shared.rb +4 -0
- data/lib/kombo/sdkconfiguration.rb +3 -3
- data/lib/kombo/utils/retries.rb +41 -2
- metadata +14 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f1d62fe13c777a7af8ce1c1ea7daefb12712e382c80d62160518bc6d0036f57b
|
|
4
|
+
data.tar.gz: f8f8276c723737693c090b6795963fb17abc86f80bf42df9f11eea17039b7b2d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 91b868c3b56fa2c91b012b7f40d5d805e8072f59022a3a58b72f07063104a85465be035f8233f4e0caf3f47110288a5f8a01b246ba5d94d3fc46252d57a126e9
|
|
7
|
+
data.tar.gz: 6f9f47991a114c47ae6d3afcef6c42380a7d0ae74e79e44285db547a7b4785581ea86f4c2524b49a7331de42cf308f8cff68a25245af38af1e57440a48907690
|
data/lib/kombo/ats.rb
CHANGED
|
@@ -3755,6 +3755,165 @@ module Kombo
|
|
|
3755
3755
|
end
|
|
3756
3756
|
|
|
3757
3757
|
|
|
3758
|
+
sig { params(integration_id: T.nilable(::String), cursor: T.nilable(::String), page_size: T.nilable(::Integer), updated_after: T.nilable(::DateTime), include_deleted: T.nilable(T::Boolean), ignore_unsupported_filters: T.nilable(T::Boolean), ids: T.nilable(T::Array[::String]), remote_ids: T.nilable(T::Array[::String]), candidate_ids: T.nilable(T::Array[::String]), application_ids: T.nilable(T::Array[::String]), timeout_ms: T.nilable(Integer), http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])).returns(Models::Operations::GetAtsNotesResponse) }
|
|
3759
|
+
def get_ats_notes(integration_id: nil, cursor: nil, page_size: nil, updated_after: nil, include_deleted: nil, ignore_unsupported_filters: nil, ids: nil, remote_ids: nil, candidate_ids: nil, application_ids: nil, timeout_ms: nil, http_headers: nil)
|
|
3760
|
+
# get_ats_notes - Get notes
|
|
3761
|
+
# Retrieve all notes.
|
|
3762
|
+
#
|
|
3763
|
+
# Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`
|
|
3764
|
+
request = Models::Operations::GetAtsNotesRequest.new(
|
|
3765
|
+
integration_id: integration_id,
|
|
3766
|
+
cursor: cursor,
|
|
3767
|
+
page_size: page_size,
|
|
3768
|
+
updated_after: updated_after,
|
|
3769
|
+
include_deleted: include_deleted,
|
|
3770
|
+
ignore_unsupported_filters: ignore_unsupported_filters,
|
|
3771
|
+
ids: ids,
|
|
3772
|
+
remote_ids: remote_ids,
|
|
3773
|
+
candidate_ids: candidate_ids,
|
|
3774
|
+
application_ids: application_ids
|
|
3775
|
+
)
|
|
3776
|
+
url, params = @sdk_configuration.get_server_details
|
|
3777
|
+
base_url = Utils.template_url(url, params)
|
|
3778
|
+
url = "#{base_url}/ats/notes"
|
|
3779
|
+
headers = Utils.get_headers(request, @sdk_configuration.globals)
|
|
3780
|
+
headers = T.cast(headers, T::Hash[String, String])
|
|
3781
|
+
query_params = Utils.get_query_params(Models::Operations::GetAtsNotesRequest, request, nil, @sdk_configuration.globals)
|
|
3782
|
+
headers['Accept'] = 'application/json'
|
|
3783
|
+
headers['user-agent'] = @sdk_configuration.user_agent
|
|
3784
|
+
|
|
3785
|
+
security = @sdk_configuration.security_source&.call
|
|
3786
|
+
|
|
3787
|
+
timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
|
|
3788
|
+
timeout ||= @sdk_configuration.timeout
|
|
3789
|
+
|
|
3790
|
+
|
|
3791
|
+
connection = @sdk_configuration.client
|
|
3792
|
+
|
|
3793
|
+
hook_ctx = SDKHooks::HookContext.new(
|
|
3794
|
+
config: @sdk_configuration,
|
|
3795
|
+
base_url: base_url,
|
|
3796
|
+
oauth2_scopes: nil,
|
|
3797
|
+
operation_id: 'GetAtsNotes',
|
|
3798
|
+
security_source: @sdk_configuration.security_source
|
|
3799
|
+
)
|
|
3800
|
+
|
|
3801
|
+
error = T.let(nil, T.nilable(StandardError))
|
|
3802
|
+
http_response = T.let(nil, T.nilable(Faraday::Response))
|
|
3803
|
+
|
|
3804
|
+
|
|
3805
|
+
begin
|
|
3806
|
+
http_response = T.must(connection).get(url) do |req|
|
|
3807
|
+
req.headers.merge!(headers)
|
|
3808
|
+
req.options.timeout = timeout unless timeout.nil?
|
|
3809
|
+
req.params = query_params
|
|
3810
|
+
Utils.configure_request_security(req, security)
|
|
3811
|
+
http_headers&.each do |key, value|
|
|
3812
|
+
req.headers[key.to_s] = value
|
|
3813
|
+
end
|
|
3814
|
+
|
|
3815
|
+
@sdk_configuration.hooks.before_request(
|
|
3816
|
+
hook_ctx: SDKHooks::BeforeRequestHookContext.new(
|
|
3817
|
+
hook_ctx: hook_ctx
|
|
3818
|
+
),
|
|
3819
|
+
request: req
|
|
3820
|
+
)
|
|
3821
|
+
end
|
|
3822
|
+
rescue StandardError => e
|
|
3823
|
+
error = e
|
|
3824
|
+
ensure
|
|
3825
|
+
if http_response.nil? || Utils.error_status?(http_response.status)
|
|
3826
|
+
http_response = @sdk_configuration.hooks.after_error(
|
|
3827
|
+
error: error,
|
|
3828
|
+
hook_ctx: SDKHooks::AfterErrorHookContext.new(
|
|
3829
|
+
hook_ctx: hook_ctx
|
|
3830
|
+
),
|
|
3831
|
+
response: http_response
|
|
3832
|
+
)
|
|
3833
|
+
else
|
|
3834
|
+
http_response = @sdk_configuration.hooks.after_success(
|
|
3835
|
+
hook_ctx: SDKHooks::AfterSuccessHookContext.new(
|
|
3836
|
+
hook_ctx: hook_ctx
|
|
3837
|
+
),
|
|
3838
|
+
response: http_response
|
|
3839
|
+
)
|
|
3840
|
+
end
|
|
3841
|
+
|
|
3842
|
+
if http_response.nil?
|
|
3843
|
+
raise error if !error.nil?
|
|
3844
|
+
raise 'no response'
|
|
3845
|
+
end
|
|
3846
|
+
end
|
|
3847
|
+
|
|
3848
|
+
content_type = http_response.headers.fetch('Content-Type', 'application/octet-stream')
|
|
3849
|
+
if Utils.match_status_code(http_response.status, ['200'])
|
|
3850
|
+
if Utils.match_content_type(content_type, 'application/json')
|
|
3851
|
+
http_response = @sdk_configuration.hooks.after_success(
|
|
3852
|
+
hook_ctx: SDKHooks::AfterSuccessHookContext.new(
|
|
3853
|
+
hook_ctx: hook_ctx
|
|
3854
|
+
),
|
|
3855
|
+
response: http_response
|
|
3856
|
+
)
|
|
3857
|
+
response_data = http_response.env.response_body
|
|
3858
|
+
obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Shared::GetAtsNotesPositiveResponse)
|
|
3859
|
+
response = Models::Operations::GetAtsNotesResponse.new(
|
|
3860
|
+
status_code: http_response.status,
|
|
3861
|
+
content_type: content_type,
|
|
3862
|
+
raw_response: http_response,
|
|
3863
|
+
get_ats_notes_positive_response: T.unsafe(obj)
|
|
3864
|
+
)
|
|
3865
|
+
sdk = self
|
|
3866
|
+
|
|
3867
|
+
response.next_page = proc do
|
|
3868
|
+
next_cursor = Janeway.enum_for('$.data.next', JSON.parse(response_data)).search
|
|
3869
|
+
if next_cursor.nil?
|
|
3870
|
+
next nil
|
|
3871
|
+
else
|
|
3872
|
+
next_cursor = next_cursor[0]
|
|
3873
|
+
if next_cursor.nil?
|
|
3874
|
+
next nil
|
|
3875
|
+
end
|
|
3876
|
+
end
|
|
3877
|
+
|
|
3878
|
+
sdk.get_ats_notes(
|
|
3879
|
+
integration_id: request.integration_id,
|
|
3880
|
+
cursor: next_cursor,
|
|
3881
|
+
page_size: request.page_size,
|
|
3882
|
+
updated_after: request.updated_after,
|
|
3883
|
+
include_deleted: request.include_deleted,
|
|
3884
|
+
ignore_unsupported_filters: request.ignore_unsupported_filters,
|
|
3885
|
+
ids: request.ids,
|
|
3886
|
+
remote_ids: request.remote_ids,
|
|
3887
|
+
candidate_ids: request.candidate_ids,
|
|
3888
|
+
application_ids: request.application_ids,
|
|
3889
|
+
http_headers: http_headers
|
|
3890
|
+
)
|
|
3891
|
+
end
|
|
3892
|
+
|
|
3893
|
+
|
|
3894
|
+
return response
|
|
3895
|
+
else
|
|
3896
|
+
raise ::Kombo::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
|
|
3897
|
+
end
|
|
3898
|
+
else
|
|
3899
|
+
if Utils.match_content_type(content_type, 'application/json')
|
|
3900
|
+
http_response = @sdk_configuration.hooks.after_success(
|
|
3901
|
+
hook_ctx: SDKHooks::AfterSuccessHookContext.new(
|
|
3902
|
+
hook_ctx: hook_ctx
|
|
3903
|
+
),
|
|
3904
|
+
response: http_response
|
|
3905
|
+
)
|
|
3906
|
+
response_data = http_response.env.response_body
|
|
3907
|
+
obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::KomboAtsError)
|
|
3908
|
+
obj.raw_response = http_response
|
|
3909
|
+
raise obj
|
|
3910
|
+
else
|
|
3911
|
+
raise ::Kombo::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
|
|
3912
|
+
end
|
|
3913
|
+
end
|
|
3914
|
+
end
|
|
3915
|
+
|
|
3916
|
+
|
|
3758
3917
|
sig { params(body: Models::Shared::PostAtsImportTrackedApplicationRequestBody, integration_id: T.nilable(::String), timeout_ms: T.nilable(Integer), http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])).returns(Models::Operations::PostAtsImportTrackedApplicationResponse) }
|
|
3759
3918
|
def import_tracked_application(body:, integration_id: nil, timeout_ms: nil, http_headers: nil)
|
|
3760
3919
|
# import_tracked_application - Import tracked application
|
data/lib/kombo/general.rb
CHANGED
|
@@ -390,7 +390,7 @@ module Kombo
|
|
|
390
390
|
# |HoorayHR|`hoorayhr/api`|[HoorayHR API](https://api.hoorayhr.io/documentation/). We automatically authenticate all requests and use `https://api.hoorayhr.io` as the base URL.|
|
|
391
391
|
# |HR Office|`hroffice/soap`|[HROffice SOAP API](https://api.hroffice.nl/HROfficeCoreService.asmx). We automatically authenticate all requests and wrap them in a SOAP envelope. Build the request `Body` with the raw XML parameters for your operation (e.g., `\<languageId\>1\</languageId\>`). Use `/` as your `path`. Set your `method` to `POST`. You need to specify the `api_options` object and set `operation_name` to the SOAP operation you want to call (e.g., `GetAllJobByLanguage`).|
|
|
392
392
|
# |HR WORKS|`hrworks/v2`|HRWorks's v2 [API](https://developers.hrworks.de/2.0/endpoints). We automatically authenticate all requests using the customer credentials.|
|
|
393
|
-
# |HR4YOU|`hr4you/v2`|[HR4YOU's v2 API](https://apiprodemo.hr4you.org/api2/docs). We automatically authenticate all requests and use the customers provided base URL (e.g
|
|
393
|
+
# |HR4YOU|`hr4you/v2`|[HR4YOU's v2 API](https://apiprodemo.hr4you.org/api2/docs). We automatically authenticate all requests and use the customers provided base URL (e.g. `https://your-company.hr4you.org/` or a custom domain).|
|
|
394
394
|
# |Humaans|`humaans/api`|Humaans' [API](https://docs.humaans.io/api/). We automatically authenticate all requests using the API key and use `https://app.humaans.io/api` as the base URL.|
|
|
395
395
|
# |iCIMS|`icims/default`|[iCIMS Default API](https://developer-community.icims.com/). We automatically authenticate all requests and use `https://api.icims.com/customers/\{customer_id\}` as the base url.|
|
|
396
396
|
# |InRecruiting by Zucchetti|`inrecruiting/default`|[inRecruiting's v3 API](https://inrecruiting.intervieweb.it/api-docs/). We automatically authenticate all requests and use the customers domain as base URL|
|
|
@@ -460,7 +460,7 @@ module Kombo
|
|
|
460
460
|
# |Planday|`planday/api`|Planday's [HR API v1.0](https://openapi.planday.com/api/hr?version=v1.0). We automatically authenticate all requests and use `https://openapi.planday.com` as the base URL.|
|
|
461
461
|
# |Recruit CRM|`recruitcrm/api`|We use `https://api.recruitcrm.io` as the base URL. Find the official docs [here](https://docs.recruitcrm.io/docs/rcrm-api-reference/ZG9jOjMyNzk0NA-getting-started).|
|
|
462
462
|
# |RecruiterFlow|`recruiterflow/v1`|RecruiterFlow API [docs](https://docs.recruiterflow.com/). We automatically authenticate all requests using the RF-Api-Key header and use `https://api.recruiterflow.com` as the base URL.|
|
|
463
|
-
# |Remote|`remotecom/default`|Remote's [API](https://remote.com/resources/api/getting-started). We automatically authenticate all requests using provided credentials.|
|
|
463
|
+
# |Remote|`remotecom/default`|Remote's [API](https://remote.com/resources/api/getting-started). We automatically authenticate all requests using provided credentials. The base URL is `https://gateway.remote.com/v1` for production API keys (prefixed `ra_live_`), or `https://gateway.remote-sandbox.com/v1` for sandbox API keys.|
|
|
464
464
|
# |rexx systems|`rexx/default`|Rexx's HRIS export API. There is only one endpoint: `Get /`|
|
|
465
465
|
# |Rippling|`rippling/api`|Rippling's [API](https://developer.rippling.com/documentation). We automatically authenticate all requests and use `https://api.rippling.com/platform/api` or`https://rest.ripplingapis.com` as the base URL.|
|
|
466
466
|
# |Sage HR|`sagehr/api`|Sage HR's [API](https://developer.sage.com/hr/reference/api-ref). We automatically authenticate all requests and use `https://\{subdomain\}.sage.hr/api` as the base URL.|
|
|
@@ -28,7 +28,7 @@ module Kombo
|
|
|
28
28
|
# | --- | --- | --- |
|
|
29
29
|
# | `candidate` | n/a | ✓ Yes |
|
|
30
30
|
# | `candidate` → `tags` | ✗ No | ✗ No |
|
|
31
|
-
# | `current_stage` |
|
|
31
|
+
# | `current_stage` | ✗ No | ✗ No |
|
|
32
32
|
# | `job` | ✗ No | ✗ No |
|
|
33
33
|
# | `interviews` | ✓ Yes | ✓ Yes |
|
|
34
34
|
# | `offers` | ✓ Yes | ✓ Yes |
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: true
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Kombo
|
|
8
|
+
module Models
|
|
9
|
+
module Operations
|
|
10
|
+
|
|
11
|
+
class GetAtsNotesRequest
|
|
12
|
+
extend T::Sig
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
# ID of the integration you want to interact with.
|
|
16
|
+
field :integration_id, Crystalline::Nilable.new(::String), { 'header': { 'field_name': 'X-Integration-Id', 'style': 'simple', 'explode': false } }
|
|
17
|
+
# An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response.
|
|
18
|
+
field :cursor, Crystalline::Nilable.new(::String), { 'query_param': { 'field_name': 'cursor', 'style': 'form', 'explode': true } }
|
|
19
|
+
# Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record's own `changed_at` field remains unchanged.
|
|
20
|
+
#
|
|
21
|
+
# If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.
|
|
22
|
+
#
|
|
23
|
+
# For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).
|
|
24
|
+
#
|
|
25
|
+
# For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below.
|
|
26
|
+
#
|
|
27
|
+
# | Path | Added/Removed | Linked Record |
|
|
28
|
+
# | --- | --- | --- |
|
|
29
|
+
# | `author` | ✗ No | ✗ No |
|
|
30
|
+
# | `application` | ✗ No | ✗ No |
|
|
31
|
+
# | `candidate` | ✗ No | ✗ No |
|
|
32
|
+
#
|
|
33
|
+
# _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._
|
|
34
|
+
field :updated_after, Crystalline::Nilable.new(::DateTime), { 'query_param': { 'field_name': 'updated_after', 'style': 'form', 'explode': true } }
|
|
35
|
+
# Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
|
|
36
|
+
field :ids, Crystalline::Nilable.new(Crystalline::Array.new(::String)), { 'query_param': { 'field_name': 'ids', 'style': 'form', 'explode': false } }
|
|
37
|
+
# Filter by a comma-separated list of remote IDs.
|
|
38
|
+
field :remote_ids, Crystalline::Nilable.new(Crystalline::Array.new(::String)), { 'query_param': { 'field_name': 'remote_ids', 'style': 'form', 'explode': false } }
|
|
39
|
+
# Filter by a comma-separated list of candidate IDs. Prefer filtering by `candidate_ids` when you want to download the full context available for a candidate, across all their applications.
|
|
40
|
+
field :candidate_ids, Crystalline::Nilable.new(Crystalline::Array.new(::String)), { 'query_param': { 'field_name': 'candidate_ids', 'style': 'form', 'explode': false } }
|
|
41
|
+
# Filter by a comma-separated list of application IDs. Use filtering by `application_ids` only if you want the context available for specific applications. Results do not include notes that only link to the candidate, but not the application.
|
|
42
|
+
field :application_ids, Crystalline::Nilable.new(Crystalline::Array.new(::String)), { 'query_param': { 'field_name': 'application_ids', 'style': 'form', 'explode': false } }
|
|
43
|
+
# The number of results to return per page. Maximum is 250.
|
|
44
|
+
field :page_size, Crystalline::Nilable.new(::Integer), { 'query_param': { 'field_name': 'page_size', 'style': 'form', 'explode': true } }
|
|
45
|
+
# By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too.
|
|
46
|
+
field :include_deleted, Crystalline::Nilable.new(Crystalline::Boolean.new), { 'query_param': { 'field_name': 'include_deleted', 'style': 'form', 'explode': true } }
|
|
47
|
+
# When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results.
|
|
48
|
+
field :ignore_unsupported_filters, Crystalline::Nilable.new(Crystalline::Boolean.new), { 'query_param': { 'field_name': 'ignore_unsupported_filters', 'style': 'form', 'explode': true } }
|
|
49
|
+
|
|
50
|
+
sig { params(integration_id: T.nilable(::String), cursor: T.nilable(::String), updated_after: T.nilable(::DateTime), ids: T.nilable(T::Array[::String]), remote_ids: T.nilable(T::Array[::String]), candidate_ids: T.nilable(T::Array[::String]), application_ids: T.nilable(T::Array[::String]), page_size: T.nilable(::Integer), include_deleted: T.nilable(T::Boolean), ignore_unsupported_filters: T.nilable(T::Boolean)).void }
|
|
51
|
+
def initialize(integration_id: nil, cursor: nil, updated_after: nil, ids: nil, remote_ids: nil, candidate_ids: nil, application_ids: nil, page_size: 100, include_deleted: false, ignore_unsupported_filters: false)
|
|
52
|
+
@integration_id = integration_id
|
|
53
|
+
@cursor = cursor
|
|
54
|
+
@updated_after = updated_after
|
|
55
|
+
@ids = ids
|
|
56
|
+
@remote_ids = remote_ids
|
|
57
|
+
@candidate_ids = candidate_ids
|
|
58
|
+
@application_ids = application_ids
|
|
59
|
+
@page_size = page_size
|
|
60
|
+
@include_deleted = include_deleted
|
|
61
|
+
@ignore_unsupported_filters = ignore_unsupported_filters
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
65
|
+
def ==(other)
|
|
66
|
+
return false unless other.is_a? self.class
|
|
67
|
+
return false unless @integration_id == other.integration_id
|
|
68
|
+
return false unless @cursor == other.cursor
|
|
69
|
+
return false unless @updated_after == other.updated_after
|
|
70
|
+
return false unless @ids == other.ids
|
|
71
|
+
return false unless @remote_ids == other.remote_ids
|
|
72
|
+
return false unless @candidate_ids == other.candidate_ids
|
|
73
|
+
return false unless @application_ids == other.application_ids
|
|
74
|
+
return false unless @page_size == other.page_size
|
|
75
|
+
return false unless @include_deleted == other.include_deleted
|
|
76
|
+
return false unless @ignore_unsupported_filters == other.ignore_unsupported_filters
|
|
77
|
+
true
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Kombo::Models::Operations::GetAtsNotesRequest
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Kombo::Models::Operations::GetAtsNotesRequest
|
|
11
|
+
def integration_id(); end
|
|
12
|
+
def integration_id=(str_); end
|
|
13
|
+
def cursor(); end
|
|
14
|
+
def cursor=(str_); end
|
|
15
|
+
def updated_after(); end
|
|
16
|
+
def updated_after=(str_); end
|
|
17
|
+
def ids(); end
|
|
18
|
+
def ids=(str_); end
|
|
19
|
+
def remote_ids(); end
|
|
20
|
+
def remote_ids=(str_); end
|
|
21
|
+
def candidate_ids(); end
|
|
22
|
+
def candidate_ids=(str_); end
|
|
23
|
+
def application_ids(); end
|
|
24
|
+
def application_ids=(str_); end
|
|
25
|
+
def page_size(); end
|
|
26
|
+
def page_size=(str_); end
|
|
27
|
+
def include_deleted(); end
|
|
28
|
+
def include_deleted=(str_); end
|
|
29
|
+
def ignore_unsupported_filters(); end
|
|
30
|
+
def ignore_unsupported_filters=(str_); end
|
|
31
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: true
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Kombo
|
|
8
|
+
module Models
|
|
9
|
+
module Operations
|
|
10
|
+
|
|
11
|
+
class GetAtsNotesResponse
|
|
12
|
+
extend T::Sig
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
sig { returns(T.proc.returns(T.nilable(GetAtsNotesResponse))) }
|
|
15
|
+
attr_accessor :next_page
|
|
16
|
+
|
|
17
|
+
# HTTP response content type for this operation
|
|
18
|
+
field :content_type, ::String
|
|
19
|
+
# HTTP response status code for this operation
|
|
20
|
+
field :status_code, ::Integer
|
|
21
|
+
# Raw HTTP response; suitable for custom response parsing
|
|
22
|
+
field :raw_response, ::Faraday::Response
|
|
23
|
+
# GET /ats/notes Positive response
|
|
24
|
+
field :get_ats_notes_positive_response, Crystalline::Nilable.new(Models::Shared::GetAtsNotesPositiveResponse)
|
|
25
|
+
|
|
26
|
+
sig { params(content_type: ::String, status_code: ::Integer, raw_response: ::Faraday::Response, get_ats_notes_positive_response: T.nilable(Models::Shared::GetAtsNotesPositiveResponse)).void }
|
|
27
|
+
def initialize(content_type:, status_code:, raw_response:, get_ats_notes_positive_response: nil)
|
|
28
|
+
@content_type = content_type
|
|
29
|
+
@status_code = status_code
|
|
30
|
+
@raw_response = raw_response
|
|
31
|
+
@get_ats_notes_positive_response = get_ats_notes_positive_response
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
35
|
+
def ==(other)
|
|
36
|
+
return false unless other.is_a? self.class
|
|
37
|
+
return false unless @content_type == other.content_type
|
|
38
|
+
return false unless @status_code == other.status_code
|
|
39
|
+
return false unless @raw_response == other.raw_response
|
|
40
|
+
return false unless @get_ats_notes_positive_response == other.get_ats_notes_positive_response
|
|
41
|
+
true
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def each
|
|
45
|
+
page = self
|
|
46
|
+
loop do
|
|
47
|
+
yield page
|
|
48
|
+
next_page = page.next_page.call if page.next_page
|
|
49
|
+
break if next_page.nil?
|
|
50
|
+
page = T.must(next_page)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Kombo::Models::Operations::GetAtsNotesResponse
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Kombo::Models::Operations::GetAtsNotesResponse
|
|
11
|
+
def content_type(); end
|
|
12
|
+
def content_type=(str_); end
|
|
13
|
+
def status_code(); end
|
|
14
|
+
def status_code=(str_); end
|
|
15
|
+
def raw_response(); end
|
|
16
|
+
def raw_response=(str_); end
|
|
17
|
+
def get_ats_notes_positive_response(); end
|
|
18
|
+
def get_ats_notes_positive_response=(str_); end
|
|
19
|
+
end
|
|
@@ -30,6 +30,8 @@ module Kombo
|
|
|
30
30
|
autoload :GetAtsInterviewsResponse, 'kombo/models/operations/getatsinterviews_response.rb'
|
|
31
31
|
autoload :GetAtsJobsRequest, 'kombo/models/operations/getatsjobs_request.rb'
|
|
32
32
|
autoload :GetAtsJobsResponse, 'kombo/models/operations/getatsjobs_response.rb'
|
|
33
|
+
autoload :GetAtsNotesRequest, 'kombo/models/operations/getatsnotes_request.rb'
|
|
34
|
+
autoload :GetAtsNotesResponse, 'kombo/models/operations/getatsnotes_response.rb'
|
|
33
35
|
autoload :GetAtsOffersRequest, 'kombo/models/operations/getatsoffers_request.rb'
|
|
34
36
|
autoload :GetAtsOffersResponse, 'kombo/models/operations/getatsoffers_response.rb'
|
|
35
37
|
autoload :GetAtsRejectionReasonsRequest, 'kombo/models/operations/getatsrejectionreasons_request.rb'
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: true
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Kombo
|
|
8
|
+
module Models
|
|
9
|
+
module Shared
|
|
10
|
+
|
|
11
|
+
class Author
|
|
12
|
+
extend T::Sig
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
# The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing.
|
|
16
|
+
field :id, ::String, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('id'), required: true } }
|
|
17
|
+
# The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key.
|
|
18
|
+
field :remote_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('remote_id'), required: true } }
|
|
19
|
+
# First name of the user.
|
|
20
|
+
field :first_name, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('first_name'), required: true } }
|
|
21
|
+
# Last name of the user.
|
|
22
|
+
field :last_name, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('last_name'), required: true } }
|
|
23
|
+
# Email of the user. If the email address is invalid, it will be set to null.
|
|
24
|
+
field :email, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('email') } }
|
|
25
|
+
|
|
26
|
+
sig { params(id: ::String, remote_id: T.nilable(::String), first_name: T.nilable(::String), last_name: T.nilable(::String), email: T.nilable(::String)).void }
|
|
27
|
+
def initialize(id:, remote_id: nil, first_name: nil, last_name: nil, email: nil)
|
|
28
|
+
@id = id
|
|
29
|
+
@remote_id = remote_id
|
|
30
|
+
@first_name = first_name
|
|
31
|
+
@last_name = last_name
|
|
32
|
+
@email = email
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
36
|
+
def ==(other)
|
|
37
|
+
return false unless other.is_a? self.class
|
|
38
|
+
return false unless @id == other.id
|
|
39
|
+
return false unless @remote_id == other.remote_id
|
|
40
|
+
return false unless @first_name == other.first_name
|
|
41
|
+
return false unless @last_name == other.last_name
|
|
42
|
+
return false unless @email == other.email
|
|
43
|
+
true
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Kombo::Models::Shared::Author
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Kombo::Models::Shared::Author
|
|
11
|
+
def id(); end
|
|
12
|
+
def id=(str_); end
|
|
13
|
+
def remote_id(); end
|
|
14
|
+
def remote_id=(str_); end
|
|
15
|
+
def first_name(); end
|
|
16
|
+
def first_name=(str_); end
|
|
17
|
+
def last_name(); end
|
|
18
|
+
def last_name=(str_); end
|
|
19
|
+
def email(); end
|
|
20
|
+
def email=(str_); end
|
|
21
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: true
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Kombo
|
|
8
|
+
module Models
|
|
9
|
+
module Shared
|
|
10
|
+
|
|
11
|
+
class GetAtsNotesPositiveResponse
|
|
12
|
+
extend T::Sig
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
field :data, Models::Shared::GetAtsNotesPositiveResponseData, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('data'), required: true } }
|
|
17
|
+
|
|
18
|
+
field :status, ::String, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('status'), required: true } }
|
|
19
|
+
|
|
20
|
+
sig { params(data: Models::Shared::GetAtsNotesPositiveResponseData, status: ::String).void }
|
|
21
|
+
def initialize(data:, status: 'success')
|
|
22
|
+
@data = data
|
|
23
|
+
unless status == 'success'
|
|
24
|
+
raise ArgumentError, 'Invalid value for status'
|
|
25
|
+
end
|
|
26
|
+
@status = 'success'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
30
|
+
def ==(other)
|
|
31
|
+
return false unless other.is_a? self.class
|
|
32
|
+
return false unless @data == other.data
|
|
33
|
+
return false unless @status == other.status
|
|
34
|
+
true
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Kombo::Models::Shared::GetAtsNotesPositiveResponse
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Kombo::Models::Shared::GetAtsNotesPositiveResponse
|
|
11
|
+
def data(); end
|
|
12
|
+
def data=(str_); end
|
|
13
|
+
def status(); end
|
|
14
|
+
def status=(str_); end
|
|
15
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: true
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Kombo
|
|
8
|
+
module Models
|
|
9
|
+
module Shared
|
|
10
|
+
|
|
11
|
+
class GetAtsNotesPositiveResponseData
|
|
12
|
+
extend T::Sig
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
field :results, Crystalline::Array.new(Models::Shared::GetAtsNotesPositiveResponseResult), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('results'), required: true } }
|
|
17
|
+
# Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages.
|
|
18
|
+
field :next_, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('next'), required: true } }
|
|
19
|
+
|
|
20
|
+
sig { params(results: T::Array[Models::Shared::GetAtsNotesPositiveResponseResult], next_: T.nilable(::String)).void }
|
|
21
|
+
def initialize(results:, next_: nil)
|
|
22
|
+
@results = results
|
|
23
|
+
@next_ = next_
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
27
|
+
def ==(other)
|
|
28
|
+
return false unless other.is_a? self.class
|
|
29
|
+
return false unless @results == other.results
|
|
30
|
+
return false unless @next_ == other.next_
|
|
31
|
+
true
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Kombo::Models::Shared::GetAtsNotesPositiveResponseData
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Kombo::Models::Shared::GetAtsNotesPositiveResponseData
|
|
11
|
+
def results(); end
|
|
12
|
+
def results=(str_); end
|
|
13
|
+
def next_(); end
|
|
14
|
+
def next_=(str_); end
|
|
15
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: true
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Kombo
|
|
8
|
+
module Models
|
|
9
|
+
module Shared
|
|
10
|
+
|
|
11
|
+
class GetAtsNotesPositiveResponseResult
|
|
12
|
+
extend T::Sig
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
# The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing.
|
|
16
|
+
field :id, ::String, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('id'), required: true } }
|
|
17
|
+
# The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key.
|
|
18
|
+
field :remote_id, ::String, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('remote_id'), required: true } }
|
|
19
|
+
# The Kombo ID of the candidate this note is about. The ID can be used to retrieve the candidate from the `get candidates` endpoint.
|
|
20
|
+
field :candidate_id, ::String, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('candidate_id'), required: true } }
|
|
21
|
+
# The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated.
|
|
22
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
|
|
23
|
+
field :changed_at, ::DateTime, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('changed_at'), required: true, 'decoder': ::Kombo::Utils.datetime_from_iso_format(false) } }
|
|
24
|
+
# The Kombo ID of the application this note is about, when the note is tied to a specific application. Some systems attach notes to the candidate only, in which case this is `null`.
|
|
25
|
+
field :application_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('application_id'), required: true } }
|
|
26
|
+
# The Kombo ID of the user who authored the note. `null` for notes generated by the system rather than a specific user. The ID can be used to retrieve the user from the `get users` endpoint.
|
|
27
|
+
field :author_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('author_id'), required: true } }
|
|
28
|
+
# The note title from the ATS.
|
|
29
|
+
field :title, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('title'), required: true } }
|
|
30
|
+
# The note content from the ATS, passed through as-is. This may contain HTML markup when the source ATS stores it that way.
|
|
31
|
+
field :content_html, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('content_html'), required: true } }
|
|
32
|
+
# Whether the note requires elevated permissions to access in the source ATS (e.g. a `private`, `secret`, or `admin only` flag), meaning it is not visible to everyone with standard access to the candidate/application. `null` when the source ATS does not expose such a signal.
|
|
33
|
+
field :is_private, Crystalline::Nilable.new(Crystalline::Boolean.new), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('is_private'), required: true } }
|
|
34
|
+
# The date and time the object was created in the remote system.
|
|
35
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
|
|
36
|
+
field :remote_created_at, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('remote_created_at'), required: true, 'decoder': ::Kombo::Utils.datetime_from_iso_format(false) } }
|
|
37
|
+
# A timestamp retrieved from the remote system, describing when the resource was last updated.
|
|
38
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
|
|
39
|
+
field :remote_updated_at, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('remote_updated_at'), required: true, 'decoder': ::Kombo::Utils.datetime_from_iso_format(false) } }
|
|
40
|
+
# The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear.
|
|
41
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
|
|
42
|
+
field :remote_deleted_at, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('remote_deleted_at'), required: true, 'decoder': ::Kombo::Utils.datetime_from_iso_format(false) } }
|
|
43
|
+
|
|
44
|
+
field :author, Crystalline::Nilable.new(Models::Shared::Author), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('author'), required: true } }
|
|
45
|
+
|
|
46
|
+
sig { params(id: ::String, remote_id: ::String, candidate_id: ::String, changed_at: ::DateTime, application_id: T.nilable(::String), author_id: T.nilable(::String), title: T.nilable(::String), content_html: T.nilable(::String), is_private: T.nilable(T::Boolean), remote_created_at: T.nilable(::DateTime), remote_updated_at: T.nilable(::DateTime), remote_deleted_at: T.nilable(::DateTime), author: T.nilable(Models::Shared::Author)).void }
|
|
47
|
+
def initialize(id:, remote_id:, candidate_id:, changed_at:, application_id: nil, author_id: nil, title: nil, content_html: nil, is_private: nil, remote_created_at: nil, remote_updated_at: nil, remote_deleted_at: nil, author: nil)
|
|
48
|
+
@id = id
|
|
49
|
+
@remote_id = remote_id
|
|
50
|
+
@candidate_id = candidate_id
|
|
51
|
+
@changed_at = changed_at
|
|
52
|
+
@application_id = application_id
|
|
53
|
+
@author_id = author_id
|
|
54
|
+
@title = title
|
|
55
|
+
@content_html = content_html
|
|
56
|
+
@is_private = is_private
|
|
57
|
+
@remote_created_at = remote_created_at
|
|
58
|
+
@remote_updated_at = remote_updated_at
|
|
59
|
+
@remote_deleted_at = remote_deleted_at
|
|
60
|
+
@author = author
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
64
|
+
def ==(other)
|
|
65
|
+
return false unless other.is_a? self.class
|
|
66
|
+
return false unless @id == other.id
|
|
67
|
+
return false unless @remote_id == other.remote_id
|
|
68
|
+
return false unless @candidate_id == other.candidate_id
|
|
69
|
+
return false unless @changed_at == other.changed_at
|
|
70
|
+
return false unless @application_id == other.application_id
|
|
71
|
+
return false unless @author_id == other.author_id
|
|
72
|
+
return false unless @title == other.title
|
|
73
|
+
return false unless @content_html == other.content_html
|
|
74
|
+
return false unless @is_private == other.is_private
|
|
75
|
+
return false unless @remote_created_at == other.remote_created_at
|
|
76
|
+
return false unless @remote_updated_at == other.remote_updated_at
|
|
77
|
+
return false unless @remote_deleted_at == other.remote_deleted_at
|
|
78
|
+
return false unless @author == other.author
|
|
79
|
+
true
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Kombo::Models::Shared::GetAtsNotesPositiveResponseResult
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Kombo::Models::Shared::GetAtsNotesPositiveResponseResult
|
|
11
|
+
def id(); end
|
|
12
|
+
def id=(str_); end
|
|
13
|
+
def remote_id(); end
|
|
14
|
+
def remote_id=(str_); end
|
|
15
|
+
def candidate_id(); end
|
|
16
|
+
def candidate_id=(str_); end
|
|
17
|
+
def changed_at(); end
|
|
18
|
+
def changed_at=(str_); end
|
|
19
|
+
def application_id(); end
|
|
20
|
+
def application_id=(str_); end
|
|
21
|
+
def author_id(); end
|
|
22
|
+
def author_id=(str_); end
|
|
23
|
+
def title(); end
|
|
24
|
+
def title=(str_); end
|
|
25
|
+
def content_html(); end
|
|
26
|
+
def content_html=(str_); end
|
|
27
|
+
def is_private(); end
|
|
28
|
+
def is_private=(str_); end
|
|
29
|
+
def remote_created_at(); end
|
|
30
|
+
def remote_created_at=(str_); end
|
|
31
|
+
def remote_updated_at(); end
|
|
32
|
+
def remote_updated_at=(str_); end
|
|
33
|
+
def remote_deleted_at(); end
|
|
34
|
+
def remote_deleted_at=(str_); end
|
|
35
|
+
def author(); end
|
|
36
|
+
def author=(str_); end
|
|
37
|
+
end
|
|
@@ -29,6 +29,7 @@ module Kombo
|
|
|
29
29
|
TALENTSOFT = new('talentsoft')
|
|
30
30
|
TALENTSOFTCUSTOMER = new('talentsoftcustomer')
|
|
31
31
|
CONCLUDIS = new('concludis')
|
|
32
|
+
PERBILITYHELIX = new('perbilityhelix')
|
|
32
33
|
TALENTION = new('talention')
|
|
33
34
|
PILOGA = new('piloga')
|
|
34
35
|
ONLYFY = new('onlyfy')
|
|
@@ -185,7 +186,6 @@ module Kombo
|
|
|
185
186
|
OYSTERHR = new('oysterhr')
|
|
186
187
|
KIWIHR = new('kiwihr')
|
|
187
188
|
SQUARE = new('square')
|
|
188
|
-
PERBILITYHELIX = new('perbilityhelix')
|
|
189
189
|
LEAPSOME = new('leapsome')
|
|
190
190
|
LOKET = new('loket')
|
|
191
191
|
WORKFORCECOM = new('workforcecom')
|
|
@@ -39,6 +39,7 @@ module Kombo
|
|
|
39
39
|
ATS_OFFERS = new('ats_offers')
|
|
40
40
|
ATS_REJECTION_REASONS = new('ats_rejection_reasons')
|
|
41
41
|
ATS_ROLES = new('ats_roles')
|
|
42
|
+
ATS_NOTES = new('ats_notes')
|
|
42
43
|
LMS_USERS = new('lms_users')
|
|
43
44
|
LMS_COURSE_PROVIDERS = new('lms_course_providers')
|
|
44
45
|
LMS_SKILLS = new('lms_skills')
|
|
@@ -16,11 +16,14 @@ module Kombo
|
|
|
16
16
|
field :candidate, Crystalline::Nilable.new(Crystalline::Hash.new(Symbol, ::Object)), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('candidate') } }
|
|
17
17
|
# Fields that we will pass through to Bullhorn's `JobSubmission` object.
|
|
18
18
|
field :job_submission, Crystalline::Nilable.new(Crystalline::Hash.new(Symbol, ::Object)), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('job_submission') } }
|
|
19
|
+
# The remote ID of the Bullhorn `Candidate` the application should be filed on. When set, we skip Bullhorn's duplicate detection and use exactly this candidate, which lets you pick the right record when several candidates share an email address or phone number. The request fails if the candidate does not exist (or was deleted) in Bullhorn.
|
|
20
|
+
field :existing_candidate_remote_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('existing_candidate_remote_id') } }
|
|
19
21
|
|
|
20
|
-
sig { params(candidate: T.nilable(T::Hash[Symbol, ::Object]), job_submission: T.nilable(T::Hash[Symbol, ::Object])).void }
|
|
21
|
-
def initialize(candidate: nil, job_submission: nil)
|
|
22
|
+
sig { params(candidate: T.nilable(T::Hash[Symbol, ::Object]), job_submission: T.nilable(T::Hash[Symbol, ::Object]), existing_candidate_remote_id: T.nilable(::String)).void }
|
|
23
|
+
def initialize(candidate: nil, job_submission: nil, existing_candidate_remote_id: nil)
|
|
22
24
|
@candidate = candidate
|
|
23
25
|
@job_submission = job_submission
|
|
26
|
+
@existing_candidate_remote_id = existing_candidate_remote_id
|
|
24
27
|
end
|
|
25
28
|
|
|
26
29
|
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
@@ -28,6 +31,7 @@ module Kombo
|
|
|
28
31
|
return false unless other.is_a? self.class
|
|
29
32
|
return false unless @candidate == other.candidate
|
|
30
33
|
return false unless @job_submission == other.job_submission
|
|
34
|
+
return false unless @existing_candidate_remote_id == other.existing_candidate_remote_id
|
|
31
35
|
true
|
|
32
36
|
end
|
|
33
37
|
end
|
|
@@ -14,16 +14,21 @@ module Kombo
|
|
|
14
14
|
|
|
15
15
|
# The street address of the candidate.
|
|
16
16
|
field :street, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('street') } }
|
|
17
|
+
# The birth date of the candidate, written into the "Geburtsdatum" field of the application form. Format: `YYYY-MM-DD`
|
|
18
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
|
|
19
|
+
field :geburtsdatum, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('geburtsdatum'), 'decoder': ::Kombo::Utils.datetime_from_iso_format(true) } }
|
|
17
20
|
|
|
18
|
-
sig { params(street: T.nilable(::String)).void }
|
|
19
|
-
def initialize(street: nil)
|
|
21
|
+
sig { params(street: T.nilable(::String), geburtsdatum: T.nilable(::DateTime)).void }
|
|
22
|
+
def initialize(street: nil, geburtsdatum: nil)
|
|
20
23
|
@street = street
|
|
24
|
+
@geburtsdatum = geburtsdatum
|
|
21
25
|
end
|
|
22
26
|
|
|
23
27
|
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
24
28
|
def ==(other)
|
|
25
29
|
return false unless other.is_a? self.class
|
|
26
30
|
return false unless @street == other.street
|
|
31
|
+
return false unless @geburtsdatum == other.geburtsdatum
|
|
27
32
|
true
|
|
28
33
|
end
|
|
29
34
|
end
|
|
@@ -16,11 +16,14 @@ module Kombo
|
|
|
16
16
|
field :candidate, Crystalline::Nilable.new(Crystalline::Hash.new(Symbol, ::Object)), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('candidate') } }
|
|
17
17
|
# Fields that we will pass through to Bullhorn's `JobSubmission` object.
|
|
18
18
|
field :job_submission, Crystalline::Nilable.new(Crystalline::Hash.new(Symbol, ::Object)), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('job_submission') } }
|
|
19
|
+
# The remote ID of the Bullhorn `Candidate` the application should be filed on. When set, we skip Bullhorn's duplicate detection and use exactly this candidate, which lets you pick the right record when several candidates share an email address or phone number. The request fails if the candidate does not exist (or was deleted) in Bullhorn.
|
|
20
|
+
field :existing_candidate_remote_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('existing_candidate_remote_id') } }
|
|
19
21
|
|
|
20
|
-
sig { params(candidate: T.nilable(T::Hash[Symbol, ::Object]), job_submission: T.nilable(T::Hash[Symbol, ::Object])).void }
|
|
21
|
-
def initialize(candidate: nil, job_submission: nil)
|
|
22
|
+
sig { params(candidate: T.nilable(T::Hash[Symbol, ::Object]), job_submission: T.nilable(T::Hash[Symbol, ::Object]), existing_candidate_remote_id: T.nilable(::String)).void }
|
|
23
|
+
def initialize(candidate: nil, job_submission: nil, existing_candidate_remote_id: nil)
|
|
22
24
|
@candidate = candidate
|
|
23
25
|
@job_submission = job_submission
|
|
26
|
+
@existing_candidate_remote_id = existing_candidate_remote_id
|
|
24
27
|
end
|
|
25
28
|
|
|
26
29
|
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
@@ -28,6 +31,7 @@ module Kombo
|
|
|
28
31
|
return false unless other.is_a? self.class
|
|
29
32
|
return false unless @candidate == other.candidate
|
|
30
33
|
return false unless @job_submission == other.job_submission
|
|
34
|
+
return false unless @existing_candidate_remote_id == other.existing_candidate_remote_id
|
|
31
35
|
true
|
|
32
36
|
end
|
|
33
37
|
end
|
|
@@ -12,4 +12,6 @@ class Kombo::Models::Shared::PostAtsJobsJobIdApplicationsRequestBodyBullhorn
|
|
|
12
12
|
def candidate=(str_); end
|
|
13
13
|
def job_submission(); end
|
|
14
14
|
def job_submission=(str_); end
|
|
15
|
+
def existing_candidate_remote_id(); end
|
|
16
|
+
def existing_candidate_remote_id=(str_); end
|
|
15
17
|
end
|
|
@@ -14,16 +14,21 @@ module Kombo
|
|
|
14
14
|
|
|
15
15
|
# The street address of the candidate.
|
|
16
16
|
field :street, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('street') } }
|
|
17
|
+
# The birth date of the candidate, written into the "Geburtsdatum" field of the application form. Format: `YYYY-MM-DD`
|
|
18
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
|
|
19
|
+
field :geburtsdatum, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('geburtsdatum'), 'decoder': ::Kombo::Utils.datetime_from_iso_format(true) } }
|
|
17
20
|
|
|
18
|
-
sig { params(street: T.nilable(::String)).void }
|
|
19
|
-
def initialize(street: nil)
|
|
21
|
+
sig { params(street: T.nilable(::String), geburtsdatum: T.nilable(::DateTime)).void }
|
|
22
|
+
def initialize(street: nil, geburtsdatum: nil)
|
|
20
23
|
@street = street
|
|
24
|
+
@geburtsdatum = geburtsdatum
|
|
21
25
|
end
|
|
22
26
|
|
|
23
27
|
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
24
28
|
def ==(other)
|
|
25
29
|
return false unless other.is_a? self.class
|
|
26
30
|
return false unless @street == other.street
|
|
31
|
+
return false unless @geburtsdatum == other.geburtsdatum
|
|
27
32
|
true
|
|
28
33
|
end
|
|
29
34
|
end
|
data/lib/kombo/models/shared.rb
CHANGED
|
@@ -144,6 +144,9 @@ module Kombo
|
|
|
144
144
|
autoload :GetAtsJobsPositiveResponseStatus, 'kombo/models/shared/getatsjobspositiveresponse_status.rb'
|
|
145
145
|
autoload :GetAtsJobsPositiveResponseUnifiedType, 'kombo/models/shared/getatsjobspositiveresponse_unified_type.rb'
|
|
146
146
|
autoload :GetAtsJobsPositiveResponseVisibility, 'kombo/models/shared/getatsjobspositiveresponse_visibility.rb'
|
|
147
|
+
autoload :GetAtsNotesPositiveResponse, 'kombo/models/shared/getatsnotespositiveresponse.rb'
|
|
148
|
+
autoload :GetAtsNotesPositiveResponseData, 'kombo/models/shared/getatsnotespositiveresponse_data.rb'
|
|
149
|
+
autoload :GetAtsNotesPositiveResponseResult, 'kombo/models/shared/getatsnotespositiveresponse_result.rb'
|
|
147
150
|
autoload :GetAtsOffersPositiveResponse, 'kombo/models/shared/getatsofferspositiveresponse.rb'
|
|
148
151
|
autoload :GetAtsOffersPositiveResponseApplication, 'kombo/models/shared/getatsofferspositiveresponse_application.rb'
|
|
149
152
|
autoload :GetAtsOffersPositiveResponseCandidate, 'kombo/models/shared/getatsofferspositiveresponse_candidate.rb'
|
|
@@ -811,6 +814,7 @@ module Kombo
|
|
|
811
814
|
autoload :AttributeSubResult, 'kombo/models/shared/attribute_subresult.rb'
|
|
812
815
|
autoload :AttributeText, 'kombo/models/shared/attribute_text.rb'
|
|
813
816
|
autoload :AttributeStatus, 'kombo/models/shared/attribute_status.rb'
|
|
817
|
+
autoload :Author, 'kombo/models/shared/author.rb'
|
|
814
818
|
autoload :BankAccount, 'kombo/models/shared/bank_account.rb'
|
|
815
819
|
autoload :BenefitTypeId, 'kombo/models/shared/benefit_type_id.rb'
|
|
816
820
|
autoload :Break, 'kombo/models/shared/break_.rb'
|
|
@@ -97,9 +97,9 @@ module Kombo
|
|
|
97
97
|
@globals = globals.nil? ? {} : globals
|
|
98
98
|
@language = 'ruby'
|
|
99
99
|
@openapi_doc_version = '1.0.0'
|
|
100
|
-
@sdk_version = '1.2.
|
|
101
|
-
@gen_version = '2.
|
|
102
|
-
@user_agent = 'speakeasy-sdk/ruby 1.2.
|
|
100
|
+
@sdk_version = '1.2.6'
|
|
101
|
+
@gen_version = '2.928.0'
|
|
102
|
+
@user_agent = 'speakeasy-sdk/ruby 1.2.6 2.928.0 1.0.0 kombo'
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
sig { returns([String, T::Hash[Symbol, String]]) }
|
data/lib/kombo/utils/retries.rb
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
# frozen_string_literal: true
|
|
5
5
|
|
|
6
6
|
require 'faraday/retry'
|
|
7
|
+
require 'time'
|
|
7
8
|
require 'sorbet-runtime'
|
|
8
9
|
|
|
9
10
|
module Kombo
|
|
@@ -87,12 +88,50 @@ module Kombo
|
|
|
87
88
|
retry_options[:retry_if] = ->(_env, _exc) { Time.now < stop_time }
|
|
88
89
|
end
|
|
89
90
|
|
|
90
|
-
retry_options[:rate_limit_retry_header] = 'retry-after-ms'
|
|
91
|
-
retry_options[:header_parser_block] = ->(value) { value.to_f / 1000 }
|
|
92
91
|
end
|
|
93
92
|
|
|
94
93
|
retry_options
|
|
95
94
|
end
|
|
96
95
|
end
|
|
96
|
+
|
|
97
|
+
class RetryMiddleware < Faraday::Retry::Middleware
|
|
98
|
+
extend T::Sig
|
|
99
|
+
|
|
100
|
+
sig { params(retries: T.untyped, env: T.untyped).returns(T.untyped) }
|
|
101
|
+
def calculate_sleep_amount(retries, env)
|
|
102
|
+
retry_after = [calculate_retry_after(env), calculate_rate_limit_reset(env)].compact.max
|
|
103
|
+
retry_interval = calculate_retry_interval(retries)
|
|
104
|
+
return retry_interval if retry_after.nil?
|
|
105
|
+
|
|
106
|
+
# unlike the stock middleware, cap server delays at max_interval rather
|
|
107
|
+
# than abandoning the retry
|
|
108
|
+
[[retry_after, @options.max_interval].min, retry_interval].max
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
private
|
|
112
|
+
|
|
113
|
+
sig { params(env: T.untyped).returns(T.untyped) }
|
|
114
|
+
def calculate_retry_after(env)
|
|
115
|
+
response_headers = env[:response_headers]
|
|
116
|
+
return unless response_headers
|
|
117
|
+
|
|
118
|
+
ms_value = response_headers['retry-after-ms']
|
|
119
|
+
return ms_value.to_f / 1000 if ms_value&.match?(/\A\s*\d+\s*\z/)
|
|
120
|
+
|
|
121
|
+
value = response_headers['retry-after']
|
|
122
|
+
return if value.nil? || value.strip.empty?
|
|
123
|
+
return value.to_f if value.match?(/\A\s*\d+\s*\z/)
|
|
124
|
+
|
|
125
|
+
begin
|
|
126
|
+
Time.httpdate(value) - Time.now
|
|
127
|
+
rescue ArgumentError
|
|
128
|
+
begin
|
|
129
|
+
Time.iso8601(value) - Time.now
|
|
130
|
+
rescue ArgumentError
|
|
131
|
+
nil
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
97
136
|
end
|
|
98
137
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kombo
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kombo Technologies GmbH
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-08-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: base64
|
|
@@ -346,6 +346,10 @@ files:
|
|
|
346
346
|
- lib/kombo/models/operations/getatsjobs_request.rbi
|
|
347
347
|
- lib/kombo/models/operations/getatsjobs_response.rb
|
|
348
348
|
- lib/kombo/models/operations/getatsjobs_response.rbi
|
|
349
|
+
- lib/kombo/models/operations/getatsnotes_request.rb
|
|
350
|
+
- lib/kombo/models/operations/getatsnotes_request.rbi
|
|
351
|
+
- lib/kombo/models/operations/getatsnotes_response.rb
|
|
352
|
+
- lib/kombo/models/operations/getatsnotes_response.rbi
|
|
349
353
|
- lib/kombo/models/operations/getatsoffers_request.rb
|
|
350
354
|
- lib/kombo/models/operations/getatsoffers_request.rbi
|
|
351
355
|
- lib/kombo/models/operations/getatsoffers_response.rb
|
|
@@ -577,6 +581,8 @@ files:
|
|
|
577
581
|
- lib/kombo/models/shared/attribute_subresult.rbi
|
|
578
582
|
- lib/kombo/models/shared/attribute_text.rb
|
|
579
583
|
- lib/kombo/models/shared/attribute_text.rbi
|
|
584
|
+
- lib/kombo/models/shared/author.rb
|
|
585
|
+
- lib/kombo/models/shared/author.rbi
|
|
580
586
|
- lib/kombo/models/shared/bank_account.rb
|
|
581
587
|
- lib/kombo/models/shared/bank_account.rbi
|
|
582
588
|
- lib/kombo/models/shared/benefit_type_id.rb
|
|
@@ -893,6 +899,12 @@ files:
|
|
|
893
899
|
- lib/kombo/models/shared/getatsjobspositiveresponse_unified_type.rbi
|
|
894
900
|
- lib/kombo/models/shared/getatsjobspositiveresponse_visibility.rb
|
|
895
901
|
- lib/kombo/models/shared/getatsjobspositiveresponse_visibility.rbi
|
|
902
|
+
- lib/kombo/models/shared/getatsnotespositiveresponse.rb
|
|
903
|
+
- lib/kombo/models/shared/getatsnotespositiveresponse.rbi
|
|
904
|
+
- lib/kombo/models/shared/getatsnotespositiveresponse_data.rb
|
|
905
|
+
- lib/kombo/models/shared/getatsnotespositiveresponse_data.rbi
|
|
906
|
+
- lib/kombo/models/shared/getatsnotespositiveresponse_result.rb
|
|
907
|
+
- lib/kombo/models/shared/getatsnotespositiveresponse_result.rbi
|
|
896
908
|
- lib/kombo/models/shared/getatsofferspositiveresponse.rb
|
|
897
909
|
- lib/kombo/models/shared/getatsofferspositiveresponse.rbi
|
|
898
910
|
- lib/kombo/models/shared/getatsofferspositiveresponse_application.rb
|