teamtailor 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: c9464bec7bd58b5a5b47dc4cd5fd2aa91710f82602f658d4a1981cff33d42bc1
4
- data.tar.gz: f1e218de0ce3dd7ebb78ebdd29c44ad2bfb49680b226186a18b5f18e23d2c654
3
+ metadata.gz: ca640f45eb147f4845e8f8416728ca7037d827c1e4bcb297cb7f02e15182805a
4
+ data.tar.gz: 89dacf02df2d3e7030ae54a700a7f85e5394930d5e773cc586ba639d4ab176fa
5
5
  SHA512:
6
- metadata.gz: db6d877077e001925903a29694918110f02c85bdb3e3c10bc80df415bf5f9b0e463e2f606380f9c26f391e49ea0f6cb86416989afe00df4883df335fac947794
7
- data.tar.gz: a27532d72dd0cfd872392af29ff3e81665a1fd61ff27f065801f815fc14b2928d72950e5cef3b14e27fd058308faaba2afd5ed1285c4c67ada6826599a841e39
6
+ metadata.gz: ff38baf2344ed08916fc5f8e46f3a58ba19a7fceb335d8abd73ab8a155a769c36a8ee18ec9d94044ffe0e64a61d357680e5a933791743d4831e5b960e61f1070
7
+ data.tar.gz: b1cf2365d600ea53d6998faef1ef9d4ac884c63f109b16d91af58b2166e6fce817f316d53c7e026179f0ff16ef14c5695b32f9982548b8464bcc1988c6cf89e3
data/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ ## Unreleased
2
+
3
+ ## v0.2.0 - 2020-03-31
4
+
5
+ - Add support for accessing relationships on records (`1218aa`)
6
+ - Add support for including relationships when querying the API (`90f25d`)
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- teamtailor (0.1.0)
4
+ teamtailor (0.2.0)
5
5
  typhoeus (~> 1.3.1)
6
6
 
7
7
  GEM
@@ -10,7 +10,7 @@ module Teamtailor
10
10
  @api_version = api_version
11
11
  end
12
12
 
13
- def candidates(page: 1)
13
+ def candidates(page: 1, include: [])
14
14
  Teamtailor::Request.new(
15
15
  base_url: base_url,
16
16
  api_token: api_token,
@@ -18,12 +18,13 @@ module Teamtailor
18
18
  path: '/v1/candidates',
19
19
  params: {
20
20
  'page[number]' => page,
21
- 'page[size]' => 30
21
+ 'page[size]' => 30,
22
+ 'include' => include.join(',')
22
23
  }
23
24
  ).call
24
25
  end
25
26
 
26
- def jobs(page: 1)
27
+ def jobs(page: 1, include: [])
27
28
  Teamtailor::Request.new(
28
29
  base_url: base_url,
29
30
  api_token: api_token,
@@ -31,12 +32,13 @@ module Teamtailor
31
32
  path: '/v1/jobs',
32
33
  params: {
33
34
  'page[number]' => page,
34
- 'page[size]' => 30
35
+ 'page[size]' => 30,
36
+ 'include' => include.join(',')
35
37
  }
36
38
  ).call
37
39
  end
38
40
 
39
- def users(page: 1)
41
+ def users(page: 1, include: [])
40
42
  Teamtailor::Request.new(
41
43
  base_url: base_url,
42
44
  api_token: api_token,
@@ -44,7 +46,8 @@ module Teamtailor
44
46
  path: '/v1/users',
45
47
  params: {
46
48
  'page[number]' => page,
47
- 'page[size]' => 30
49
+ 'page[size]' => 30,
50
+ 'include' => include.join(',')
48
51
  }
49
52
  ).call
50
53
  end
@@ -24,4 +24,6 @@ module Teamtailor
24
24
  class JSONError < ClientError; end
25
25
 
26
26
  class UnknownResponseTypeError < ClientError; end
27
+
28
+ class UnloadedRelationError < ClientError; end
27
29
  end
@@ -1,31 +1,23 @@
1
- module Teamtailor
2
- class Candidate
3
- def initialize(payload)
4
- @payload = payload
5
- end
1
+ # frozen_string_literal: true
6
2
 
3
+ require 'teamtailor/record'
4
+
5
+ module Teamtailor
6
+ class Candidate < Record
7
7
  def self.deserialize(value)
8
8
  new(value)
9
9
  end
10
10
 
11
11
  def serialize
12
- payload
12
+ data
13
13
  end
14
14
 
15
15
  def id
16
- payload.dig('id').to_i
16
+ data.dig('id').to_i
17
17
  end
18
18
 
19
19
  def connected?
20
- payload.dig('attributes', 'connected')
20
+ data.dig('attributes', 'connected')
21
21
  end
22
-
23
- def method_missing(m)
24
- payload.dig('attributes', m.to_s.gsub('_', '-'))
25
- end
26
-
27
- private
28
-
29
- attr_reader :payload
30
22
  end
31
23
  end
@@ -1,31 +1,19 @@
1
- module Teamtailor
2
- class Job
3
- def initialize(payload)
4
- @payload = payload
5
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'teamtailor/record'
6
4
 
5
+ module Teamtailor
6
+ class Job < Record
7
7
  def self.deserialize(value)
8
8
  new(value)
9
9
  end
10
10
 
11
11
  def serialize
12
- payload
13
- end
14
-
15
- def id
16
- payload.dig('id').to_i
12
+ data
17
13
  end
18
14
 
19
15
  def careersite_job_url
20
- payload.dig('links', 'careersite-job-url')
21
- end
22
-
23
- def method_missing(m)
24
- payload.dig('attributes', m.to_s.gsub('_', '-'))
16
+ data.dig('links', 'careersite-job-url')
25
17
  end
26
-
27
- private
28
-
29
- attr_reader :payload
30
18
  end
31
19
  end
@@ -1,27 +1,19 @@
1
- module Teamtailor
2
- class User
3
- def initialize(payload)
4
- @payload = payload
5
- end
1
+ # frozen_string_literal: true
6
2
 
3
+ require 'teamtailor/record'
4
+
5
+ module Teamtailor
6
+ class User < Record
7
7
  def self.deserialize(value)
8
8
  new(value)
9
9
  end
10
10
 
11
11
  def serialize
12
- payload
12
+ data
13
13
  end
14
14
 
15
15
  def id
16
- payload.dig('id').to_i
16
+ data.dig('id').to_i
17
17
  end
18
-
19
- def method_missing(m)
20
- payload.dig('attributes', m.to_s.gsub('_', '-'))
21
- end
22
-
23
- private
24
-
25
- attr_reader :payload
26
18
  end
27
19
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'teamtailor/relationship'
3
4
  require 'teamtailor/parser/candidate'
4
5
  require 'teamtailor/parser/job'
5
6
  require 'teamtailor/parser/user'
@@ -13,12 +14,12 @@ module Teamtailor
13
14
  def parse
14
15
  data.map do |record|
15
16
  case record&.dig('type')
16
- when 'candidates' then Teamtailor::Candidate.new(record)
17
- when 'jobs' then Teamtailor::Job.new(record)
18
- when 'users' then Teamtailor::User.new(record)
17
+ when 'candidates' then Teamtailor::Candidate.new(record, included)
18
+ when 'jobs' then Teamtailor::Job.new(record, included)
19
+ when 'users' then Teamtailor::User.new(record, included)
19
20
 
20
21
  else
21
- raise Teamtailor::UnknownResponseTypeError.new(record&.dig('type'))
22
+ raise Teamtailor::UnknownResponseTypeError, record&.dig('type')
22
23
  end
23
24
  end
24
25
  end
@@ -34,5 +35,9 @@ module Teamtailor
34
35
  def data
35
36
  [payload&.dig('data')].flatten
36
37
  end
38
+
39
+ def included
40
+ payload&.dig('included')
41
+ end
37
42
  end
38
43
  end
@@ -0,0 +1,30 @@
1
+ module Teamtailor
2
+ class Record
3
+ def initialize(data, included = {})
4
+ @data = data
5
+ @included = included
6
+ end
7
+
8
+ def method_missing(m)
9
+ if m == :id
10
+ data.dig('id').to_i
11
+ elsif relationship_keys.include?(m.to_s.gsub('_', '-'))
12
+ build_relationship(m.to_s.gsub('_', '-'))
13
+ else
14
+ data.dig('attributes', m.to_s.gsub('_', '-'))
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ attr_reader :data, :included
21
+
22
+ def build_relationship(name)
23
+ Teamtailor::Relationship.new(name, data.dig('relationships'), included)
24
+ end
25
+
26
+ def relationship_keys
27
+ data.dig('relationships')&.keys || {}
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Teamtailor
4
+ class Relationship
5
+ def initialize(relation_name, relationships = {}, included = {})
6
+ @relation_name = relation_name
7
+ @relationships = relationships
8
+ @included = included
9
+ end
10
+
11
+ def loaded?
12
+ !record_id.nil?
13
+ end
14
+
15
+ def record
16
+ raise Teamtailor::UnloadedRelationError unless loaded?
17
+
18
+ record_json = included.find do |k|
19
+ k['id'] == record_id && k['type'] == record_type
20
+ end
21
+
22
+ Teamtailor::Parser.parse({ 'data' => record_json }).first
23
+ end
24
+
25
+ private
26
+
27
+ def record_id
28
+ relationships&.dig(relation_name, 'data', 'id')
29
+ end
30
+
31
+ def record_type
32
+ relationships&.dig(relation_name, 'data', 'type')
33
+ end
34
+
35
+ attr_reader :relation_name, :relationships, :included
36
+ end
37
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Teamtailor
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
data/teamtailor.gemspec CHANGED
@@ -14,8 +14,8 @@ Gem::Specification.new do |spec|
14
14
  spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
15
15
 
16
16
  spec.metadata['homepage_uri'] = spec.homepage
17
- spec.metadata['source_code_uri'] = 'https://github.com/bzf/teamtailor-gem'
18
- spec.metadata['changelog_uri'] = 'https://github.com/bzf/teamtailor-gem/master/CHANGELOG.md'
17
+ spec.metadata['source_code_uri'] = 'https://github.com/bzf/teamtailor-rb'
18
+ spec.metadata['changelog_uri'] = 'https://github.com/bzf/teamtailor-rb/master/CHANGELOG.md'
19
19
 
20
20
  spec.add_development_dependency 'rspec', '~> 3.2'
21
21
  spec.add_dependency 'typhoeus', '~> 1.3.1'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teamtailor
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
  - André Ligné
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-27 00:00:00.000000000 Z
11
+ date: 2020-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -48,6 +48,7 @@ files:
48
48
  - ".gitignore"
49
49
  - ".rspec"
50
50
  - ".travis.yml"
51
+ - CHANGELOG.md
51
52
  - Gemfile
52
53
  - Gemfile.lock
53
54
  - LICENSE.txt
@@ -63,6 +64,8 @@ files:
63
64
  - lib/teamtailor/parser/candidate.rb
64
65
  - lib/teamtailor/parser/job.rb
65
66
  - lib/teamtailor/parser/user.rb
67
+ - lib/teamtailor/record.rb
68
+ - lib/teamtailor/relationship.rb
66
69
  - lib/teamtailor/request.rb
67
70
  - lib/teamtailor/version.rb
68
71
  - teamtailor.gemspec
@@ -71,8 +74,8 @@ licenses:
71
74
  - MIT
72
75
  metadata:
73
76
  homepage_uri: https://github.com/bzf/teamtailor-gem
74
- source_code_uri: https://github.com/bzf/teamtailor-gem
75
- changelog_uri: https://github.com/bzf/teamtailor-gem/master/CHANGELOG.md
77
+ source_code_uri: https://github.com/bzf/teamtailor-rb
78
+ changelog_uri: https://github.com/bzf/teamtailor-rb/master/CHANGELOG.md
76
79
  post_install_message:
77
80
  rdoc_options: []
78
81
  require_paths: