fountain 0.0.5 → 0.0.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/fountain.rb +3 -0
- data/lib/fountain/api/applicants.rb +104 -5
- data/lib/fountain/api/request_helper.rb +15 -10
- data/lib/fountain/booked_slot.rb +60 -0
- data/lib/fountain/gem_version.rb +1 -1
- data/lib/fountain/secure_document.rb +61 -0
- data/lib/fountain/transition.rb +35 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3f653218c512db55d5962968cd24d27ddd397d9
|
4
|
+
data.tar.gz: 4de91be1284cec1b666cff24fa6f125faf00f272
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 134cd04804537aa3e18752ff099491bd99e92391eef01b95c10d9b02856ea7d514eca255cf412ddb9e611dcfd496b1d75513e502610f43cd023ddfa192cf1192
|
7
|
+
data.tar.gz: f3b60a48988a06d3727e5e292b7a690e1d9430f52c6c8c93d777c2c84d688fc4e2a3a911fc086fa2a1cbfe9c561cec31d9cf6f39e0fa83174e168272d63c8ea2
|
data/lib/fountain.rb
CHANGED
@@ -19,9 +19,12 @@ end
|
|
19
19
|
require 'fountain/applicant'
|
20
20
|
require 'fountain/applicants'
|
21
21
|
require 'fountain/background_check'
|
22
|
+
require 'fountain/booked_slot'
|
22
23
|
require 'fountain/document_signature'
|
23
24
|
require 'fountain/funnel'
|
25
|
+
require 'fountain/secure_document'
|
24
26
|
require 'fountain/stage'
|
27
|
+
require 'fountain/transition'
|
25
28
|
|
26
29
|
require 'fountain/api/request_helper'
|
27
30
|
require 'fountain/api/applicants'
|
@@ -4,7 +4,7 @@ module Fountain
|
|
4
4
|
# Fountain Applicant API
|
5
5
|
#
|
6
6
|
class Applicants
|
7
|
-
|
7
|
+
extend RequestHelper
|
8
8
|
|
9
9
|
#
|
10
10
|
# List applicants
|
@@ -14,8 +14,8 @@ module Fountain
|
|
14
14
|
# stage - Filter applicants by stage type
|
15
15
|
# labels - MUST be URL-encoded
|
16
16
|
# cursor - Cursor parameter for cursor-based pagination
|
17
|
-
# @return [
|
18
|
-
def list(filter_options = {})
|
17
|
+
# @return [Fountain::Applicants]
|
18
|
+
def self.list(filter_options = {})
|
19
19
|
response = request_json(
|
20
20
|
'/v2/applicants',
|
21
21
|
body: Util.slice_hash(
|
@@ -27,7 +27,58 @@ module Fountain
|
|
27
27
|
end
|
28
28
|
|
29
29
|
#
|
30
|
-
#
|
30
|
+
# Create an Applicant
|
31
|
+
# @param [String] name Full name of the applicant
|
32
|
+
# @param [String] email Email address of the applicant
|
33
|
+
# @param [String] phone_number Phone number (does not have to be USA)
|
34
|
+
# @param [Hash] create_options A hash of optional parameters
|
35
|
+
# data - must be passed in a data object/array
|
36
|
+
# secure_data - See 'Secure Fields' section of
|
37
|
+
# https://developer.fountain.com/docs/post-apiv2applicants
|
38
|
+
# funnel_id - Create applicant under a certain opening (funnel)
|
39
|
+
# stage_id - Create applicant under a certain stage
|
40
|
+
# skip_automated_actions - `true` if you want to skip automated
|
41
|
+
# actions when advancing the applicant
|
42
|
+
# @return [Fountain::Applicant]
|
43
|
+
def self.create(name, email, phone_number, create_options = {})
|
44
|
+
filtered_params = Util.slice_hash(
|
45
|
+
create_options,
|
46
|
+
:data, :secure_data, :funnel_id, :stage_id, :skip_automated_actions
|
47
|
+
)
|
48
|
+
response = request_json(
|
49
|
+
'/v2/applicants',
|
50
|
+
method: :post,
|
51
|
+
body: {
|
52
|
+
name: name, email: email, phone_number: phone_number
|
53
|
+
}.merge(filtered_params)
|
54
|
+
)
|
55
|
+
Fountain::Applicant.new response
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
# Delete an Applicant
|
60
|
+
# @param [String] applicant_id ID of the Fountain applicant
|
61
|
+
# @return [Boolean]
|
62
|
+
def self.delete(applicant_id)
|
63
|
+
response = request(
|
64
|
+
"/v2/applicants/#{applicant_id}",
|
65
|
+
method: :delete
|
66
|
+
)
|
67
|
+
check_response response
|
68
|
+
true
|
69
|
+
end
|
70
|
+
|
71
|
+
#
|
72
|
+
# Get Applicant Info
|
73
|
+
# @param [String] applicant_id ID of the Fountain applicant
|
74
|
+
# @return [Fountain::Applicant]
|
75
|
+
def self.get(applicant_id)
|
76
|
+
response = request_json("/v2/applicants/#{applicant_id}")
|
77
|
+
Fountain::Applicant.new response
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
81
|
+
# Update Applicant Info
|
31
82
|
# @param [String] applicant_id ID of the Fountain applicant
|
32
83
|
# @param [Hash] update_options A hash of options to update applicant
|
33
84
|
# name
|
@@ -40,7 +91,7 @@ module Fountain
|
|
40
91
|
# on_hold_reason
|
41
92
|
# @return [Fountain::Applicant]
|
42
93
|
#
|
43
|
-
def update(applicant_id, update_options = {})
|
94
|
+
def self.update(applicant_id, update_options = {})
|
44
95
|
response = request_json(
|
45
96
|
"/v2/applicants/#{applicant_id}",
|
46
97
|
method: :put,
|
@@ -52,6 +103,54 @@ module Fountain
|
|
52
103
|
)
|
53
104
|
Fountain::Applicant.new response
|
54
105
|
end
|
106
|
+
|
107
|
+
#
|
108
|
+
# Get Applicant Documents
|
109
|
+
# @param [String] applicant_id ID of the Fountain applicant
|
110
|
+
# @return [[Fountain::SecureDocument]]
|
111
|
+
def self.get_secure_documents(applicant_id)
|
112
|
+
response = request_json("/v2/applicants/#{applicant_id}/secure_documents")
|
113
|
+
response['secure_documents'].map { |hash| Fountain::SecureDocument.new hash }
|
114
|
+
end
|
115
|
+
|
116
|
+
#
|
117
|
+
# Advance an Applicant
|
118
|
+
# @param [String] applicant_id ID of the Fountain applicant
|
119
|
+
# @param [Hash] advance_options A hash of options to advance applicant
|
120
|
+
# skip_automated_actions - `true` if you want to skip automated
|
121
|
+
# actions when advancing the applicant
|
122
|
+
# stage_id - Destination stage's ID. If not provided, the applicant
|
123
|
+
# will advance to the next stage by default.
|
124
|
+
def self.advance_applicant(applicant_id, advance_options = {})
|
125
|
+
response = request(
|
126
|
+
"/v2/applicants/#{applicant_id}/advance",
|
127
|
+
method: :put,
|
128
|
+
body: Util.slice_hash(
|
129
|
+
advance_options,
|
130
|
+
:skip_automated_actions, :stage_id
|
131
|
+
)
|
132
|
+
)
|
133
|
+
check_response response, Net::HTTPNoContent
|
134
|
+
true
|
135
|
+
end
|
136
|
+
|
137
|
+
#
|
138
|
+
# Get Interview Sessions
|
139
|
+
# @param [String] applicant_id ID of the Fountain applicant
|
140
|
+
# @return [[Fountain::BookedSlot]]
|
141
|
+
def self.get_interview_sessions(applicant_id)
|
142
|
+
response = request_json("/v2/applicants/#{applicant_id}/booked_slots")
|
143
|
+
response['booked_slots'].map { |hash| Fountain::BookedSlot.new hash }
|
144
|
+
end
|
145
|
+
|
146
|
+
#
|
147
|
+
# Get Transition History
|
148
|
+
# @param [String] applicant_id ID of the Fountain applicant
|
149
|
+
# @return [[Fountain::Transition]]
|
150
|
+
def self.get_transition_history(applicant_id)
|
151
|
+
response = request_json("/v2/applicants/#{applicant_id}/transitions")
|
152
|
+
response['transitions'].map { |hash| Fountain::Transition.new hash }
|
153
|
+
end
|
55
154
|
end
|
56
155
|
end
|
57
156
|
end
|
@@ -17,15 +17,16 @@ module Fountain
|
|
17
17
|
}.freeze
|
18
18
|
|
19
19
|
def request_json(path, options = {})
|
20
|
+
expected_response = options.delete :expected_response
|
20
21
|
response = request path, options
|
21
|
-
check_response response
|
22
|
+
check_response response, expected_response
|
22
23
|
parse_response response.body
|
23
24
|
end
|
24
25
|
|
25
26
|
def request(path, options = {})
|
26
27
|
options = DEFAULT_REQUEST_OPTIONS.merge(options)
|
27
28
|
|
28
|
-
raise Fountain::InvalidMethodError unless %i[get post put].include? options[:method]
|
29
|
+
raise Fountain::InvalidMethodError unless %i[get post put delete].include? options[:method]
|
29
30
|
|
30
31
|
http = create_http(options)
|
31
32
|
req = create_request(path, options)
|
@@ -34,9 +35,10 @@ module Fountain
|
|
34
35
|
|
35
36
|
private
|
36
37
|
|
37
|
-
def check_response(response)
|
38
|
+
def check_response(response, expected_response = nil)
|
39
|
+
expected_response ||= Net::HTTPOK
|
38
40
|
case response
|
39
|
-
when
|
41
|
+
when expected_response then nil
|
40
42
|
when Net::HTTPUnauthorized then raise Fountain::AuthenticationError
|
41
43
|
when Net::HTTPNotFound then raise Fountain::NotFoundError
|
42
44
|
else raise HTTPError, "Invalid http response code: #{response.code}"
|
@@ -66,12 +68,11 @@ module Fountain
|
|
66
68
|
headers = get_headers(options)
|
67
69
|
body = options[:body]
|
68
70
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
else
|
74
|
-
create_get_request path, headers, body
|
71
|
+
case options[:method]
|
72
|
+
when :post then create_post_request path, headers, body
|
73
|
+
when :put then create_put_request path, headers, body
|
74
|
+
when :delete then create_delete_request path, headers
|
75
|
+
else create_get_request path, headers, body
|
75
76
|
end
|
76
77
|
end
|
77
78
|
|
@@ -87,6 +88,10 @@ module Fountain
|
|
87
88
|
req
|
88
89
|
end
|
89
90
|
|
91
|
+
def create_delete_request(path, headers)
|
92
|
+
Net::HTTP::Delete.new(path, headers)
|
93
|
+
end
|
94
|
+
|
90
95
|
def create_get_request(path, headers, body)
|
91
96
|
path += '?' + body.map { |k, v| "#{k}=#{v}" }.join('&') if body
|
92
97
|
Net::HTTP::Get.new(path, headers)
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Fountain
|
2
|
+
#
|
3
|
+
# Fountain Booked Slot
|
4
|
+
#
|
5
|
+
class BookedSlot
|
6
|
+
# Raw booked slot data
|
7
|
+
attr_reader :raw_data
|
8
|
+
|
9
|
+
#
|
10
|
+
# @param [Hash] data Raw booked slot data
|
11
|
+
#
|
12
|
+
def initialize(data)
|
13
|
+
@raw_data = Util.stringify_hash_keys data
|
14
|
+
end
|
15
|
+
|
16
|
+
# Booked slot ID
|
17
|
+
def id
|
18
|
+
raw_data['id']
|
19
|
+
end
|
20
|
+
|
21
|
+
# Start time
|
22
|
+
def start_time
|
23
|
+
Time.parse raw_data['start_time']
|
24
|
+
end
|
25
|
+
|
26
|
+
# End time
|
27
|
+
def end_time
|
28
|
+
Time.parse raw_data['end_time']
|
29
|
+
end
|
30
|
+
|
31
|
+
# Location
|
32
|
+
def location
|
33
|
+
raw_data['location']
|
34
|
+
end
|
35
|
+
|
36
|
+
# Recruiter
|
37
|
+
def recruiter
|
38
|
+
raw_data['recruiter']
|
39
|
+
end
|
40
|
+
|
41
|
+
# Instructions
|
42
|
+
def instructions
|
43
|
+
raw_data['instructions']
|
44
|
+
end
|
45
|
+
|
46
|
+
# Showed up
|
47
|
+
def showed_up
|
48
|
+
raw_data['showed_up'] == 'true'
|
49
|
+
end
|
50
|
+
|
51
|
+
def inspect
|
52
|
+
format(
|
53
|
+
'#<%<class_name>s:0x%<object_id>p @id="%<id>s">',
|
54
|
+
class_name: self.class.name,
|
55
|
+
object_id: object_id,
|
56
|
+
id: id
|
57
|
+
)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/fountain/gem_version.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
module Fountain
|
2
|
+
#
|
3
|
+
# Fountain Secure Document
|
4
|
+
#
|
5
|
+
class SecureDocument
|
6
|
+
# Raw document data
|
7
|
+
attr_reader :raw_data
|
8
|
+
|
9
|
+
#
|
10
|
+
# @param [Hash] data Raw secure document data
|
11
|
+
#
|
12
|
+
def initialize(data)
|
13
|
+
@raw_data = Util.stringify_hash_keys data
|
14
|
+
end
|
15
|
+
|
16
|
+
# Secure document ID
|
17
|
+
def id
|
18
|
+
raw_data['id']
|
19
|
+
end
|
20
|
+
|
21
|
+
# Name
|
22
|
+
def name
|
23
|
+
raw_data['name']
|
24
|
+
end
|
25
|
+
|
26
|
+
# FriendlyName
|
27
|
+
def friendly_name
|
28
|
+
raw_data['friendly_name']
|
29
|
+
end
|
30
|
+
|
31
|
+
# Filename
|
32
|
+
def filename
|
33
|
+
raw_data['filename']
|
34
|
+
end
|
35
|
+
|
36
|
+
# Public URL
|
37
|
+
def public_url
|
38
|
+
raw_data['public_url']
|
39
|
+
end
|
40
|
+
|
41
|
+
# Size
|
42
|
+
def size
|
43
|
+
raw_data['size']
|
44
|
+
end
|
45
|
+
|
46
|
+
# Stage
|
47
|
+
def stage
|
48
|
+
Stage.new raw_data['stage']
|
49
|
+
end
|
50
|
+
|
51
|
+
def inspect
|
52
|
+
format(
|
53
|
+
'#<%<class_name>s:0x%<object_id>p @id="%<id>s" @name="%<name>s">',
|
54
|
+
class_name: self.class.name,
|
55
|
+
object_id: object_id,
|
56
|
+
id: id,
|
57
|
+
name: name
|
58
|
+
)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Fountain
|
2
|
+
#
|
3
|
+
# Fountain Transition
|
4
|
+
#
|
5
|
+
class Transition
|
6
|
+
# Raw transition data
|
7
|
+
attr_reader :raw_data
|
8
|
+
|
9
|
+
#
|
10
|
+
# @param [Hash] data Raw transition data
|
11
|
+
#
|
12
|
+
def initialize(data)
|
13
|
+
@raw_data = Util.stringify_hash_keys data
|
14
|
+
end
|
15
|
+
|
16
|
+
# Stage title
|
17
|
+
def stage_title
|
18
|
+
raw_data['stage_title']
|
19
|
+
end
|
20
|
+
|
21
|
+
# Created at
|
22
|
+
def created_at
|
23
|
+
Time.parse raw_data['created_at']
|
24
|
+
end
|
25
|
+
|
26
|
+
def inspect
|
27
|
+
format(
|
28
|
+
'#<%<class_name>s:0x%<object_id>p @stage_title="%<title>s">',
|
29
|
+
class_name: self.class.name,
|
30
|
+
object_id: object_id,
|
31
|
+
title: stage_title
|
32
|
+
)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fountain
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- abrom
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -117,11 +117,14 @@ files:
|
|
117
117
|
- lib/fountain/applicant.rb
|
118
118
|
- lib/fountain/applicants.rb
|
119
119
|
- lib/fountain/background_check.rb
|
120
|
+
- lib/fountain/booked_slot.rb
|
120
121
|
- lib/fountain/configuration.rb
|
121
122
|
- lib/fountain/document_signature.rb
|
122
123
|
- lib/fountain/funnel.rb
|
123
124
|
- lib/fountain/gem_version.rb
|
125
|
+
- lib/fountain/secure_document.rb
|
124
126
|
- lib/fountain/stage.rb
|
127
|
+
- lib/fountain/transition.rb
|
125
128
|
- lib/fountain/util.rb
|
126
129
|
homepage: https://github.com/Studiosity/fountain-ruby
|
127
130
|
licenses:
|