clinch-talent 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9b5486316763cbab65df5a15009613e813ba2952
4
+ data.tar.gz: d6943caad4eaa320c306eb644d9cfbb29ba17400
5
+ SHA512:
6
+ metadata.gz: 003c861644586a07cad13ea769185eb0c7bd8d43178ce1378282e4de1ffc81434935d12075b2ad074d6bdfcff6e227aad363e98b8179fa12f72ba9fc21e10d92
7
+ data.tar.gz: 65aa448502cd2fd3d2caace83b4c9033e9a5ae58a9205216549a56055080d9371e753a7bd1c43b0915a02102771222dbe98bb1c176e13d5c9e320301fe28afbf
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ .idea/
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.3
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+ gem 'rake'
3
+ gemspec
@@ -0,0 +1,61 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ clinch-talent (0.1)
5
+ json_api_client (~> 1.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activemodel (4.2.5)
11
+ activesupport (= 4.2.5)
12
+ builder (~> 3.1)
13
+ activesupport (4.2.5)
14
+ i18n (~> 0.7)
15
+ json (~> 1.7, >= 1.7.7)
16
+ minitest (~> 5.1)
17
+ thread_safe (~> 0.3, >= 0.3.4)
18
+ tzinfo (~> 1.1)
19
+ addressable (2.4.0)
20
+ builder (3.2.2)
21
+ crack (0.4.3)
22
+ safe_yaml (~> 1.0.0)
23
+ faraday (0.9.2)
24
+ multipart-post (>= 1.2, < 3)
25
+ faraday_middleware (0.10.0)
26
+ faraday (>= 0.7.4, < 0.10)
27
+ hashdiff (0.2.3)
28
+ i18n (0.7.0)
29
+ json (1.8.3)
30
+ json_api_client (1.0.1)
31
+ activemodel (>= 3.2.0)
32
+ activesupport (>= 3.2.0)
33
+ addressable (~> 2.2)
34
+ faraday (>= 0.8.0)
35
+ faraday_middleware (~> 0.9)
36
+ metaclass (0.0.4)
37
+ minitest (5.8.3)
38
+ mocha (1.1.0)
39
+ metaclass (~> 0.0.1)
40
+ multipart-post (2.0.0)
41
+ rake (10.4.2)
42
+ safe_yaml (1.0.4)
43
+ thread_safe (0.3.5)
44
+ tzinfo (1.2.2)
45
+ thread_safe (~> 0.1)
46
+ webmock (1.22.3)
47
+ addressable (>= 2.3.6)
48
+ crack (>= 0.3.2)
49
+ hashdiff
50
+
51
+ PLATFORMS
52
+ ruby
53
+
54
+ DEPENDENCIES
55
+ clinch-talent!
56
+ mocha (~> 1.1)
57
+ rake
58
+ webmock
59
+
60
+ BUNDLED WITH
61
+ 1.10.6
@@ -0,0 +1,38 @@
1
+ # clinch-talent-ruby
2
+ A ruby client for the Clinch Talent API. Glues the json-api-client gem with HMAC signing and predefined models.
3
+
4
+ [![Build Status](https://travis-ci.org/ClinchIO/clinch-ruby-client.svg)](https://travis-ci.org/ClinchIO/clinch-ruby-client)
5
+
6
+ ##Getting Started
7
+
8
+ This Ruby client allows developers to connect to the Clinch Talent API to access their data. In order to use the client you must have a valid Clinch Talent account and valid API keys. The steps to obtain keys can be found in the [developer documentation](http://dev.clinch.io/docs/api_getting_started).
9
+
10
+ ##Using the Gem
11
+
12
+ Install the gem:
13
+
14
+ ```
15
+
16
+ gem install clinch-talent
17
+
18
+ ```
19
+
20
+ Require the gem:
21
+
22
+ ```ruby
23
+
24
+ require 'clinch-talent'
25
+
26
+ ```
27
+
28
+ Use the gem to get candidate data:
29
+
30
+ ```ruby
31
+
32
+ ClinchTalent::Base.config("YOUR-KEY", "YOUR-SECRET")
33
+ ClinchTalent::Candidate.all # Get data for the collection of candidates
34
+ ClinchTalent::Candidate.find('candidate-id') # Get data for an individual candidate using the candidate's ID
35
+
36
+ ```
37
+
38
+ Run these tests with rake test
@@ -0,0 +1,6 @@
1
+ require 'rake/testtask'
2
+
3
+ task default: :test
4
+ Rake::TestTask.new do |t|
5
+ t.pattern = 'test/clinch_talent/*_test.rb'
6
+ end
@@ -0,0 +1,18 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'clinch-talent'
3
+ s.version = '0.1'
4
+ s.date = '2015-12-11'
5
+ s.summary = 'A ruby client for the Clinch Talent API'
6
+ s.description = 'A ruby client for the Clinch Talent API. Requests are HMAC signed. Responses are in JSON API format (https://jsonapi.org). See https://dev.clinch.io/v1.0/docs/api_getting_started'
7
+ s.authors = ['Damien Glancy', 'Peter Keogh', 'Steve Quinlan']
8
+ s.email = 'damien@clinch.io'
9
+ s.homepage = 'http://rubygems.org/gems/clinch-talent'
10
+ s.license = 'MIT'
11
+ s.add_dependency 'json_api_client', '~> 1.0'
12
+ s.add_development_dependency 'mocha', '~> 1.1'
13
+ s.add_development_dependency 'webmock'
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- test/*`.split("\n")
17
+ s.require_paths = ['lib']
18
+ end
@@ -0,0 +1 @@
1
+ require 'clinch_talent'
@@ -0,0 +1,7 @@
1
+ require 'json_api_client'
2
+ require 'faraday'
3
+
4
+ require 'clinch_talent/hmac_signing_middleware'
5
+ require 'clinch_talent/base'
6
+ require 'clinch_talent/candidate'
7
+ require 'clinch_talent/social_profile'
@@ -0,0 +1,10 @@
1
+ module ClinchTalent
2
+ class Base < ::JsonApiClient::Resource
3
+ def self.config(access_id, secret, options = {})
4
+ self.site = options[:site] || 'https://api.clinchtalent.com/v1/'
5
+ self.connection do |connection|
6
+ connection.use HmacSigningMiddleware, {access_id: access_id, secret: secret}
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ module ClinchTalent
2
+ class Candidate < Base
3
+
4
+ end
5
+ end
@@ -0,0 +1,93 @@
1
+ module ClinchTalent
2
+ class HmacSigningMiddleware < Faraday::Middleware
3
+ def initialize(app, options, &block)
4
+ super(app)
5
+ @options = options
6
+ @block = block
7
+ end
8
+
9
+ def call(env)
10
+ env.request_headers['Content-MD5'] = calculated_md5(env)
11
+ env.request_headers['DATE'] = Time.now.utc.httpdate
12
+ env.request_headers['Authorization'] = "APIAuth #{@options[:access_id]}:#{hmac_signature(env, @options[:secret])}"
13
+ @app.call(env)
14
+ end
15
+ private
16
+ def calculated_md5(env)
17
+ # if env.request.body
18
+ # body = env.request.body
19
+ # else
20
+ # body = ''
21
+ # end
22
+ #excluding the body as part of the md5'ing
23
+ md5_base64digest('')
24
+ end
25
+
26
+ def md5_base64digest(string)
27
+ if Digest::MD5.respond_to?(:base64digest)
28
+ Digest::MD5.base64digest(string)
29
+ else
30
+ b64_encode(Digest::MD5.digest(string))
31
+ end
32
+ end
33
+
34
+ def b64_encode(string)
35
+ if Base64.respond_to?(:strict_encode64)
36
+ Base64.strict_encode64(string)
37
+ else
38
+ # Fall back to stripping out newlines on Ruby 1.8.
39
+ Base64.encode64(string).gsub(/\n/, '')
40
+ end
41
+ end
42
+
43
+ def fetch_headers(env)
44
+ capitalize_keys env.request_headers
45
+ end
46
+
47
+ def capitalize_keys(hsh)
48
+ capitalized_hash = {}
49
+ hsh.each_pair {|k,v| capitalized_hash[k.to_s.upcase] = v }
50
+ capitalized_hash
51
+ end
52
+
53
+ def hmac_signature(env, secret_key)
54
+ canonical_string = canonical_string(env)
55
+ digest = OpenSSL::Digest.new('sha1')
56
+ b64_encode(OpenSSL::HMAC.digest(digest, secret_key, canonical_string))
57
+ end
58
+
59
+ def canonical_string(env)
60
+ [ content_type(env),
61
+ content_md5(env),
62
+ parse_uri(env.url.to_s),
63
+ timestamp(env)
64
+ ].join(',')
65
+ end
66
+
67
+ def timestamp(env)
68
+ value = find_header(env, %w(DATE HTTP_DATE))
69
+ value.nil? ? '' : value
70
+ end
71
+
72
+ def content_type(env)
73
+ value = find_header(env, %w(CONTENT-TYPE CONTENT_TYPE HTTP_CONTENT_TYPE))
74
+ value.nil? ? '' : value
75
+ end
76
+
77
+ def content_md5(env)
78
+ value = find_header(env, %w(CONTENT-MD5 CONTENT_MD5 HTTP-CONTENT-MD5 HTTP_CONTENT_MD5))
79
+ value.nil? ? '' : value
80
+ end
81
+
82
+ def find_header(env, keys)
83
+ keys.map {|key| env.request_headers[key] }.compact.first
84
+ end
85
+
86
+ def parse_uri(uri)
87
+ uri_without_host = uri.gsub(/https?:\/\/[^(,|\?|\/)]*/, '')
88
+ return '/' if uri_without_host.empty?
89
+ uri_without_host
90
+ end
91
+
92
+ end
93
+ end
@@ -0,0 +1,5 @@
1
+ module ClinchTalent
2
+ class SocialProfile < Base
3
+
4
+ end
5
+ end
@@ -0,0 +1,22 @@
1
+ require_relative '../test_helper'
2
+
3
+ module ClinchTalent
4
+ class CandidateTest < Minitest::Test
5
+ def test_signing
6
+ Time.stubs(:now).returns(Time.new(2014, 01, 01, 01, 01, 01))
7
+
8
+ # Having problem stubbing the body response, so not doing this now
9
+
10
+ stub_request(:get, 'https://api.clinchtalent.com/v1/candidates?include=social_profile').
11
+ with(:headers => {'Accept' => 'application/vnd.api+json',
12
+ 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
13
+ 'Authorization' => 'APIAuth access_id:mCPWePkgbJo3G9JSDrtdtQrKGek=',
14
+ 'Content-Md5' => '1B2M2Y8AsgTpgAmY7PhCfg==',
15
+ 'Content-Type' => 'application/vnd.api+json',
16
+ 'Date' => 'Wed, 01 Jan 2014 01:01:01 GMT',
17
+ 'User-Agent' => 'Faraday v0.9.2'})
18
+ ClinchTalent::Base.config('access_id', 'secret')
19
+ ClinchTalent::Candidate.includes(:social_profile).all
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require_relative '../lib/clinch_talent'
4
+ require 'faraday'
5
+ require 'json_api_client'
6
+ require 'mocha'
7
+ require 'minitest/autorun'
8
+ require 'mocha/mini_test'
9
+ require 'json'
10
+ require 'webmock/minitest'
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: clinch-talent
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Damien Glancy
8
+ - Peter Keogh
9
+ - Steve Quinlan
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2015-12-11 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: json_api_client
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '1.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '1.0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: mocha
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '1.1'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '1.1'
43
+ - !ruby/object:Gem::Dependency
44
+ name: webmock
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ description: A ruby client for the Clinch Talent API. Requests are HMAC signed. Responses
58
+ are in JSON API format (https://jsonapi.org). See https://dev.clinch.io/v1.0/docs/api_getting_started
59
+ email: damien@clinch.io
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - ".gitignore"
65
+ - ".travis.yml"
66
+ - Gemfile
67
+ - Gemfile.lock
68
+ - README.md
69
+ - Rakefile
70
+ - clinch-talent.gemspec
71
+ - lib/clinch-talent.rb
72
+ - lib/clinch_talent.rb
73
+ - lib/clinch_talent/base.rb
74
+ - lib/clinch_talent/candidate.rb
75
+ - lib/clinch_talent/hmac_signing_middleware.rb
76
+ - lib/clinch_talent/social_profile.rb
77
+ - test/clinch_talent/candidate_test.rb
78
+ - test/test_helper.rb
79
+ homepage: http://rubygems.org/gems/clinch-talent
80
+ licenses:
81
+ - MIT
82
+ metadata: {}
83
+ post_install_message:
84
+ rdoc_options: []
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubyforge_project:
99
+ rubygems_version: 2.4.5.1
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: A ruby client for the Clinch Talent API
103
+ test_files:
104
+ - test/clinch_talent/candidate_test.rb
105
+ - test/test_helper.rb