workable 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 +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +11 -4
- data/lib/workable/client.rb +12 -1
- data/lib/workable/errors.rb +1 -0
- data/lib/workable/version.rb +1 -1
- data/spec/fixtures.rb +21 -0
- data/spec/lib/workable/client_spec.rb +31 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7eaebf59a51c6219ca5f278a91b99226b043fa1d
|
4
|
+
data.tar.gz: f41c7493529160c2d7e134b0aeb1d3284b5218e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 840612f71285030a314ab414b8facd077e0cbc8eac8076353a8ab4a4b835c954c9000d9454ceda93b19b0cf97b7154fad33e95ff109a27f2d72196217b3a8cd7
|
7
|
+
data.tar.gz: 3231f81122c3170a0d461eed5c95733b0cd9fe85381ced8834eacb1988d873bcf65e7e5497d21f1e5bdab5e72b6eec72afd05bccb6837b63c80c4ff924cb6172
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
[](https://codeclimate.com/github/emq/workable)
|
4
4
|
[](https://travis-ci.org/emq/workable)
|
5
5
|
[](https://coveralls.io/r/emq/workable?branch=master)
|
6
|
+
[](http://badge.fury.io/rb/workable)
|
7
|
+
[](https://gemnasium.com/emq/workable)
|
6
8
|
|
7
9
|
Dead-simple Ruby API client for [workable.com][1]. No extra runtime dependencies. Ruby >= 1.9.3.
|
8
10
|
|
@@ -35,20 +37,25 @@ Internal interface / api is in early stage, so far you can:
|
|
35
37
|
|
36
38
|
``` ruby
|
37
39
|
client = Workable::Client.new(api_key: 'api_key', subdomain: 'your_subdomain')
|
40
|
+
|
41
|
+
# takes optional phase argument (string): 'published' (default), 'draft', 'closed' or 'archived'
|
38
42
|
client.jobs # => [#<Workable::Job>, #<Workable::Job>]
|
39
43
|
|
40
44
|
shortcode = 'job_shortcode'
|
41
45
|
|
42
46
|
# API queries are not cached (at all) - it's up to you to cache results one way or another
|
43
47
|
|
44
|
-
client.
|
45
|
-
client.
|
48
|
+
client.stages # => Array of hashes
|
49
|
+
client.job_details(shortcode) # => #<Workable::Job>
|
50
|
+
client.job_questions(shortcode) # => Array of hashes
|
51
|
+
client.job_candidates(shortcode, stage_slug) # => Array of hashes (skip stage_slug for all stages)
|
46
52
|
|
47
53
|
# Possible errors (each one inherits from Workable::Errors::WorkableError)
|
48
54
|
Workable::Errors::InvalidConfiguration # missing api_key / subdomain
|
49
|
-
Workable::Errors::NotAuthorized
|
55
|
+
Workable::Errors::NotAuthorized # wrong api key
|
50
56
|
Workable::Errors::InvalidResponse # something when wrong during the request?
|
51
|
-
Workable::Errors::NotFound
|
57
|
+
Workable::Errors::NotFound # 404 from workable
|
58
|
+
Workable::Errors::RequestToLong # When the requested result takes to long to calculate, try limiting your query
|
52
59
|
```
|
53
60
|
|
54
61
|
## Missing/Todo
|
data/lib/workable/client.rb
CHANGED
@@ -15,10 +15,19 @@ module Workable
|
|
15
15
|
Job.new(get_request"jobs/#{shortcode}")
|
16
16
|
end
|
17
17
|
|
18
|
-
def job_candidates(shortcode)
|
18
|
+
def job_candidates(shortcode, stage_slug = nil)
|
19
|
+
shortcode = "#{shortcode}/#{stage_slug}" unless stage_slug.nil?
|
19
20
|
get_request("jobs/#{shortcode}/candidates")['candidates']
|
20
21
|
end
|
21
22
|
|
23
|
+
def job_questions(shortcode)
|
24
|
+
get_request("jobs/#{shortcode}/questions")['questions']
|
25
|
+
end
|
26
|
+
|
27
|
+
def stages
|
28
|
+
get_request("stages")['stages']
|
29
|
+
end
|
30
|
+
|
22
31
|
private
|
23
32
|
|
24
33
|
attr_reader :api_key, :subdomain
|
@@ -47,6 +56,8 @@ module Workable
|
|
47
56
|
raise Errors::NotAuthorized, response.body
|
48
57
|
when 404
|
49
58
|
raise Errors::NotFound, response.body
|
59
|
+
when 503
|
60
|
+
raise Errors::RequestToLong, response.body
|
50
61
|
when proc { |code| code != 200 }
|
51
62
|
raise Errors::InvalidResponse, "Response code: #{response.code}"
|
52
63
|
end
|
data/lib/workable/errors.rb
CHANGED
data/lib/workable/version.rb
CHANGED
data/spec/fixtures.rb
CHANGED
@@ -115,3 +115,24 @@ def job_candidates_json_fixture
|
|
115
115
|
]
|
116
116
|
})
|
117
117
|
end
|
118
|
+
|
119
|
+
def stages_json_fixture
|
120
|
+
JSON.generate({"stages" => [
|
121
|
+
{"slug"=>"sourced", "name"=>"Sourced", "kind"=>"sourced", "position"=>1},
|
122
|
+
{"slug"=>"applied", "name"=>"Applied", "kind"=>"applied", "position"=>2},
|
123
|
+
{"slug"=>"soft-talk", "name"=>"Soft Talk", "kind"=>"interview", "position"=>3},
|
124
|
+
{"slug"=>"wait", "name"=>"Wait", "kind"=>"shortlisted", "position"=>4},
|
125
|
+
{"slug"=>"assessment", "name"=>"Assessment", "kind"=>"assessment", "position"=>5},
|
126
|
+
{"slug"=>"review", "name"=>"Review", "kind"=>"assessment", "position"=>6},
|
127
|
+
{"slug"=>"tech-talk", "name"=>"Tech Talk", "kind"=>"interview", "position"=>7},
|
128
|
+
{"slug"=>"prepare", "name"=>"Prepare", "kind"=>"interview", "position"=>8},
|
129
|
+
{"slug"=>"ready", "name"=>"Ready", "kind"=>"shortlisted", "position"=>9},
|
130
|
+
{"slug"=>"later", "name"=>"Later", "kind"=>"shortlisted", "position"=>10}
|
131
|
+
]})
|
132
|
+
end
|
133
|
+
|
134
|
+
def job_questions_json_fixture
|
135
|
+
JSON.generate({"questions" => [
|
136
|
+
{"key"=>"fe8", "body"=>"How many fingers do you have?", "type"=>"free_text"}
|
137
|
+
]})
|
138
|
+
end
|
@@ -58,6 +58,18 @@ describe Workable::Client do
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
describe '#job_questions' do
|
62
|
+
let(:client){ described_class.new(api_key: 'test', subdomain: 'subdomain') }
|
63
|
+
|
64
|
+
it 'returns questions for given job' do
|
65
|
+
stub_request(:get, "https://www.workable.com/spi/v2/accounts/subdomain/jobs/03FF356C8B/questions")
|
66
|
+
.to_return(status: 200, body: job_questions_json_fixture, headers: {})
|
67
|
+
|
68
|
+
expect(client.job_questions('03FF356C8B')).to be_kind_of(Array)
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
61
73
|
describe '#candidates' do
|
62
74
|
let(:client){ described_class.new(api_key: 'test', subdomain: 'subdomain') }
|
63
75
|
|
@@ -67,6 +79,25 @@ describe Workable::Client do
|
|
67
79
|
|
68
80
|
expect(client.job_candidates('03FF356C8B')).to be_kind_of(Array)
|
69
81
|
end
|
82
|
+
|
83
|
+
it 'raises exception on to long requests' do
|
84
|
+
stub_request(:get, "https://www.workable.com/spi/v2/accounts/subdomain/jobs?phase=published")
|
85
|
+
.to_return(status: 503, body: '{"error":"Not authorized"}', headers: {})
|
86
|
+
|
87
|
+
expect { client.jobs }.to raise_error(Workable::Errors::RequestToLong)
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
describe '#stages' do
|
93
|
+
let(:client){ described_class.new(api_key: 'test', subdomain: 'subdomain') }
|
94
|
+
|
95
|
+
it 'returns array of stages' do
|
96
|
+
stub_request(:get, "https://www.workable.com/spi/v2/accounts/subdomain/stages")
|
97
|
+
.to_return(status: 200, body: stages_json_fixture, headers: {})
|
98
|
+
|
99
|
+
expect(client.stages).to be_kind_of(Array)
|
100
|
+
end
|
70
101
|
end
|
71
102
|
|
72
103
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rafał Wojsznis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -90,6 +90,7 @@ files:
|
|
90
90
|
- ".gitignore"
|
91
91
|
- ".rspec"
|
92
92
|
- ".travis.yml"
|
93
|
+
- CHANGELOG.md
|
93
94
|
- Gemfile
|
94
95
|
- LICENSE.txt
|
95
96
|
- README.md
|
@@ -124,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
125
|
version: '0'
|
125
126
|
requirements: []
|
126
127
|
rubyforge_project:
|
127
|
-
rubygems_version: 2.4.
|
128
|
+
rubygems_version: 2.4.6
|
128
129
|
signing_key:
|
129
130
|
specification_version: 4
|
130
131
|
summary: Dead-simple Ruby API client for workable.com
|