cb-api 0.0.3
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.
- data/README.md +12 -0
- data/lib/cb.rb +52 -0
- data/lib/cb/clients/category_api.rb +36 -0
- data/lib/cb/clients/company_api.rb +33 -0
- data/lib/cb/clients/education_api.rb +27 -0
- data/lib/cb/clients/employee_types_api.rb +39 -0
- data/lib/cb/clients/job_api.rb +50 -0
- data/lib/cb/clients/job_application_api.rb +35 -0
- data/lib/cb/clients/recommendation_api.rb +78 -0
- data/lib/cb/config.rb +64 -0
- data/lib/cb/job_search_criteria.rb +102 -0
- data/lib/cb/models/cb_category.rb +22 -0
- data/lib/cb/models/cb_company.rb +133 -0
- data/lib/cb/models/cb_education.rb +25 -0
- data/lib/cb/models/cb_employee_type.rb +12 -0
- data/lib/cb/models/cb_job.rb +67 -0
- data/lib/cb/models/cb_job_application.rb +29 -0
- data/lib/cb/utils/api.rb +74 -0
- data/lib/cb/utils/country.rb +22 -0
- data/lib/cb/utils/fluid_attributes.rb +16 -0
- data/lib/cb/utils/meta_values.rb +13 -0
- data/lib/cb/version.rb +3 -0
- metadata +101 -0
data/README.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
cb-api
|
2
|
+
================
|
3
|
+
|
4
|
+
A gem that's going to house our internal API interactions.
|
5
|
+
|
6
|
+
|
7
|
+
TODO
|
8
|
+
==================
|
9
|
+
1. Error handling
|
10
|
+
2. Figure out base CbApi internactions with child classes
|
11
|
+
2.1 CbApi should handle errors, and setting standard fields (response time, errors, etc)
|
12
|
+
2.2 CbApi should extract the base fields from the json packet (meaning sub classes don't have to parse them)
|
data/lib/cb.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'cb/config'
|
2
|
+
Dir[File.dirname(__FILE__) + '/cb/utils/*.rb'].each {| file| require file }
|
3
|
+
Dir[File.dirname(__FILE__) + '/cb/clients/*.rb'].each {| file| require file }
|
4
|
+
Dir[File.dirname(__FILE__) + '/cb/models/*.rb'].each {| file| require file }
|
5
|
+
require 'cb/job_search_criteria'
|
6
|
+
|
7
|
+
module Cb
|
8
|
+
def self.configure
|
9
|
+
yield configuration
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.configuration
|
13
|
+
@configuration ||= Cb::Config.new
|
14
|
+
@configuration.set_default_api_uris
|
15
|
+
|
16
|
+
return @configuration
|
17
|
+
end
|
18
|
+
|
19
|
+
# Convenience methods, in case you're lazy... like me :)
|
20
|
+
###############################################################
|
21
|
+
def self.job
|
22
|
+
Cb::JobApi
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.job_search_criteria
|
26
|
+
Cb::JobSearchCriteria.new()
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.category
|
30
|
+
Cb::CategoryApi
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.company
|
34
|
+
Cb::CompanyApi
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.education_code
|
38
|
+
Cb::EducationApi
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.recommendation
|
42
|
+
Cb::RecommendationApi
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.job_application
|
46
|
+
Cb::JobApplicationApi
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.country
|
50
|
+
Cb::Utils::Country
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
module Cb
|
4
|
+
class CategoryApi
|
5
|
+
def self.search
|
6
|
+
my_api = Cb::Utils::Api.new()
|
7
|
+
cb_response = my_api.cb_get(Cb.configuration.uri_job_category_search)
|
8
|
+
json_hash = JSON.parse(cb_response.response.body)
|
9
|
+
|
10
|
+
categoryList = []
|
11
|
+
json_hash["ResponseCategories"]["Categories"]["Category"].each do |cat|
|
12
|
+
categoryList << CbCategory.new(cat)
|
13
|
+
end
|
14
|
+
return categoryList
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.search_by_host_site(host_site)
|
18
|
+
my_api = Cb::Utils::Api.new()
|
19
|
+
cb_response = my_api.cb_get(Cb.configuration.uri_job_category_search, :query => {:CountryCode => host_site})
|
20
|
+
json_hash = JSON.parse(cb_response.response.body)
|
21
|
+
|
22
|
+
categoryList = []
|
23
|
+
unless json_hash.empty?
|
24
|
+
if json_hash["ResponseCategories"]["Categories"]["Category"].is_a?(Array)
|
25
|
+
json_hash["ResponseCategories"]["Categories"]["Category"].each do |cat|
|
26
|
+
categoryList << CbCategory.new(cat)
|
27
|
+
end
|
28
|
+
elsif json_hash["ResponseCategories"]["Categories"]["Category"].is_a?(Hash) && json_hash.length < 2
|
29
|
+
categoryList << CbCategory.new(json_hash["ResponseCategories"]["Categories"]["Category"])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
return categoryList
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Cb
|
4
|
+
class CompanyApi
|
5
|
+
#############################################################
|
6
|
+
## Retrieve a company by did
|
7
|
+
##
|
8
|
+
## For detailed information around this API please visit:
|
9
|
+
## http://api.careerbuilder.com/CompanyDetailsInfo.aspx
|
10
|
+
#############################################################
|
11
|
+
def self.find_by_did(did)
|
12
|
+
my_api = Cb::Utils::Api.new()
|
13
|
+
cb_response = my_api.cb_get(Cb.configuration.uri_company_find, :query => {:CompanyDID => did})
|
14
|
+
json_hash = JSON.parse(cb_response.response.body)
|
15
|
+
|
16
|
+
company = CbCompany.new(json_hash['Results']['CompanyProfileDetail'])
|
17
|
+
my_api.append_api_responses(company, json_hash['Results'])
|
18
|
+
|
19
|
+
return company
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.find_for(obj)
|
23
|
+
if obj.is_a?(String)
|
24
|
+
did = obj
|
25
|
+
elsif obj.is_a?(Cb::CbJob)
|
26
|
+
did = obj.company_did
|
27
|
+
end
|
28
|
+
did ||= ''
|
29
|
+
|
30
|
+
find_by_did did unless did.empty?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Cb
|
4
|
+
class EducationApi
|
5
|
+
#############################################################
|
6
|
+
## Retrieve Education codes by country code
|
7
|
+
##
|
8
|
+
## For detailed information around this API please visit:
|
9
|
+
## http://api.careerbuilder.com/EducationCodes.aspx
|
10
|
+
#############################################################
|
11
|
+
def self.get_for(country)
|
12
|
+
Cb::Utils::Country.is_valid? country ? country : 'US'
|
13
|
+
|
14
|
+
my_api = Cb::Utils::Api.new()
|
15
|
+
cb_response = my_api.cb_get(Cb.configuration.uri_education_code, :query => {:countrycode => country})
|
16
|
+
json_hash = JSON.parse(cb_response.response.body)
|
17
|
+
|
18
|
+
codes = []
|
19
|
+
json_hash['ResponseEducationCodes']['EducationCodes']['Education'].each do | education |
|
20
|
+
codes << Cb::CbEducation.new(education)
|
21
|
+
end
|
22
|
+
my_api.append_api_responses(codes, json_hash['ResponseEducationCodes'])
|
23
|
+
|
24
|
+
return codes
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
module Cb
|
4
|
+
class EmployeeTypesApi
|
5
|
+
|
6
|
+
def self.search
|
7
|
+
my_api = Cb::Utils::Api.new()
|
8
|
+
cb_response = my_api.cb_get(Cb.configuration.uri_employee_types)
|
9
|
+
|
10
|
+
return array_of_objects_from_hash(cb_response)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.search_by_host_site(hostsite)
|
14
|
+
my_api = Cb::Utils::Api.new()
|
15
|
+
cb_response = my_api.cb_get(Cb.configuration.uri_employee_types, :query => {:CountryCode => hostsite})
|
16
|
+
|
17
|
+
return array_of_objects_from_hash(cb_response)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def self.array_of_objects_from_hash(cb_response)
|
22
|
+
json_hash = JSON.parse(cb_response.response.body)
|
23
|
+
|
24
|
+
employee_types = []
|
25
|
+
unless json_hash.empty?
|
26
|
+
if json_hash["ResponseEmployeeTypes"]["EmployeeTypes"]["EmployeeType"].is_a?(Array)
|
27
|
+
json_hash["ResponseEmployeeTypes"]["EmployeeTypes"]["EmployeeType"].each do |et|
|
28
|
+
employee_types << CbEmployeeType.new(et)
|
29
|
+
end
|
30
|
+
elsif json_hash["ResponseEmployeeTypes"]["EmployeeTypes"]["EmployeeType"].is_a?(Hash) && json_hash.length < 2
|
31
|
+
employee_types << CbEmployeeType.new(json_hash["ResponseEmployeeTypes"]["EmployeeTypes"]["EmployeeType"])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
return employee_types
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Cb
|
4
|
+
class JobApi
|
5
|
+
#############################################################
|
6
|
+
## Run a job search against the given criteria
|
7
|
+
##
|
8
|
+
## For detailed information around this API please visit:
|
9
|
+
## http://api.careerbuilder.com/JobSearchInfo.aspx
|
10
|
+
#############################################################
|
11
|
+
def self.search(*args)
|
12
|
+
args = args[0] if args.is_a?(Array) && args.count == 1
|
13
|
+
|
14
|
+
my_api = Cb::Utils::Api.new()
|
15
|
+
cb_response = my_api.cb_get(Cb.configuration.uri_job_search, :query => args)
|
16
|
+
json_hash = JSON.parse(cb_response.response.body)
|
17
|
+
|
18
|
+
jobs = []
|
19
|
+
unless json_hash['ResponseJobSearch']['Results'].nil?
|
20
|
+
json_hash['ResponseJobSearch']['Results']['JobSearchResult'].each do | cur_job |
|
21
|
+
jobs << CbJob.new(cur_job)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
my_api.append_api_responses(jobs, json_hash['ResponseJobSearch'])
|
25
|
+
|
26
|
+
return jobs
|
27
|
+
end
|
28
|
+
|
29
|
+
#############################################################
|
30
|
+
## Retrieve a job by did
|
31
|
+
##
|
32
|
+
## For detailed information around this API please visit:
|
33
|
+
## http://api.careerbuilder.com/JobInfo.aspx
|
34
|
+
#############################################################
|
35
|
+
def self.find_by_did(did, params = {})
|
36
|
+
my_api = Cb::Utils::Api.new()
|
37
|
+
params[:did] = did
|
38
|
+
if params["showjobskin"].nil?
|
39
|
+
params["showjobskin"] = "Full"
|
40
|
+
end
|
41
|
+
cb_response = my_api.cb_get(Cb.configuration.uri_job_find, :query => params)
|
42
|
+
json_hash = JSON.parse(cb_response.response.body)
|
43
|
+
|
44
|
+
job = CbJob.new(json_hash['ResponseJob']['Job'])
|
45
|
+
my_api.append_api_responses(job, json_hash['ResponseJob'])
|
46
|
+
|
47
|
+
return job
|
48
|
+
end
|
49
|
+
end # JobApi
|
50
|
+
end # Cb
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Cb
|
4
|
+
class JobApplicationApi
|
5
|
+
#############################################################
|
6
|
+
## Get job application information
|
7
|
+
##
|
8
|
+
## For detailed information around this API please visit:
|
9
|
+
## http://api.careerbuilder.com/ApplicationInfo.aspx
|
10
|
+
#############################################################
|
11
|
+
|
12
|
+
def self.get_for(job_did, site_id = '', co_brand = '')
|
13
|
+
my_api = Cb::Utils::Api.new()
|
14
|
+
cb_response = my_api.cb_get(Cb.configuration.uri_job_application, :query => {:JobDID => job_did, :SiteID => site_id, :CoBrand => co_brand})
|
15
|
+
json_hash = JSON.parse(cb_response.response.body)
|
16
|
+
|
17
|
+
job_application = CbJobApplication.new(json_hash['ResponseBlankApplication']['BlankApplication'])
|
18
|
+
my_api.append_api_responses(job_application, json_hash['ResponseBlankApplication'])
|
19
|
+
|
20
|
+
return job_application
|
21
|
+
end
|
22
|
+
|
23
|
+
#############################################################
|
24
|
+
## Submit a job application
|
25
|
+
##
|
26
|
+
## For detailed information around this API please visit:
|
27
|
+
## http://api.careerbuilder.com/ApplicationInfo.aspx
|
28
|
+
#############################################################
|
29
|
+
|
30
|
+
# def self.submit(did)
|
31
|
+
|
32
|
+
# end
|
33
|
+
|
34
|
+
end # JobApplicationApi
|
35
|
+
end # Cb
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Cb
|
4
|
+
class RecommendationApi
|
5
|
+
#############################################################
|
6
|
+
## Get recommendations for a job
|
7
|
+
##
|
8
|
+
## For detailed information around this API please visit:
|
9
|
+
## http://api.careerbuilder.com/Recommendations.aspx
|
10
|
+
#############################################################
|
11
|
+
def self.for_job(did, site_id = '', co_brand = '')
|
12
|
+
my_api = Cb::Utils::Api.new()
|
13
|
+
cb_response = my_api.cb_get(Cb.configuration.uri_recommendation_for_job,
|
14
|
+
:query => {:JobDID => did, :SiteID => site_id, :CoBrand => co_brand})
|
15
|
+
json_hash = JSON.parse(cb_response.response.body)
|
16
|
+
|
17
|
+
jobs = []
|
18
|
+
unless json_hash['ResponseRecommendJob']['RecommendJobResults'].nil?
|
19
|
+
json_hash['ResponseRecommendJob']['RecommendJobResults']['RecommendJobResult'].each do |cur_job|
|
20
|
+
jobs << CbJob.new(cur_job)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
my_api.append_api_responses(jobs, json_hash['ResponseRecommendJob'])
|
24
|
+
my_api.append_api_responses(jobs, json_hash['ResponseRecommendJob']['Request'])
|
25
|
+
|
26
|
+
return jobs
|
27
|
+
end
|
28
|
+
|
29
|
+
#############################################################
|
30
|
+
## Get recommendations for a user
|
31
|
+
##
|
32
|
+
## For detailed information around this API please visit:
|
33
|
+
## http://api.careerbuilder.com/Recommendations.aspx
|
34
|
+
#############################################################
|
35
|
+
def self.for_user(external_id, site_id = '', co_brand = '')
|
36
|
+
my_api = Cb::Utils::Api.new()
|
37
|
+
cb_response = my_api.cb_get(Cb.configuration.uri_recommendation_for_user,
|
38
|
+
:query => {:ExternalID => external_id, :SiteID => site_id, :CoBrand => co_brand,
|
39
|
+
:HostSite => Cb.configuration.host_site})
|
40
|
+
json_hash = JSON.parse(cb_response.response.body)
|
41
|
+
|
42
|
+
jobs = []
|
43
|
+
unless json_hash['ResponseRecommendUser']['RecommendJobResults'].nil?
|
44
|
+
json_hash['ResponseRecommendUser']['RecommendJobResults']['RecommendJobResult'].each do |cur_job|
|
45
|
+
jobs << CbJob.new(cur_job)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
my_api.append_api_responses(jobs, json_hash['ResponseRecommendUser'])
|
49
|
+
my_api.append_api_responses(jobs, json_hash['ResponseRecommendUser']['Request'])
|
50
|
+
|
51
|
+
return jobs
|
52
|
+
end
|
53
|
+
|
54
|
+
#############################################################
|
55
|
+
## Get recommendations for a company
|
56
|
+
##
|
57
|
+
## For detailed information around this API please visit:
|
58
|
+
## http://api.careerbuilder.com/Recommendations.aspx
|
59
|
+
#############################################################
|
60
|
+
def self.for_company(company_did)
|
61
|
+
my_api = Cb::Utils::Api.new()
|
62
|
+
cb_response = my_api.cb_get(Cb.configuration.uri_recommendation_for_company,
|
63
|
+
:query => {:CompanyDID => company_did})
|
64
|
+
json_hash = JSON.parse(cb_response.response.body)
|
65
|
+
|
66
|
+
jobs = []
|
67
|
+
unless json_hash['Results']['JobRecommendation'].nil?
|
68
|
+
json_hash['Results']['JobRecommendation']['Jobs'].each do |cur_job|
|
69
|
+
jobs << CbJob.new(cur_job)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
my_api.append_api_responses(jobs, json_hash['Results'])
|
73
|
+
my_api.append_api_responses(jobs, json_hash['Results']['JobRecommendation'])
|
74
|
+
|
75
|
+
return jobs
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/cb/config.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
module Cb
|
2
|
+
class Config
|
3
|
+
attr_accessor :dev_key, :time_out, :use_json, :host_site,
|
4
|
+
:uri_job_search, :uri_job_find,
|
5
|
+
:uri_company_find, :uri_job_category_search,
|
6
|
+
:uri_education_code, :uri_employee_types,
|
7
|
+
:uri_recommendation_for_job, :uri_recommendation_for_user,
|
8
|
+
:uri_recommendation_for_company,
|
9
|
+
:uri_job_application
|
10
|
+
#:uri_job_application_submit
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
Cb::Utils::Country.inject_convenience_methods
|
14
|
+
set_defaults
|
15
|
+
end
|
16
|
+
|
17
|
+
def set_default_api_uris
|
18
|
+
@uri_job_category_search ||= '/v1/categories'
|
19
|
+
@uri_employee_types ||= '/v1/employeetypes'
|
20
|
+
@uri_company_find ||= '/Employer/CompanyDetails'
|
21
|
+
@uri_job_search ||= '/v1/JobSearch'
|
22
|
+
@uri_job_find ||= '/v1/Job'
|
23
|
+
@uri_education_code ||= '/v1/EducationCodes'
|
24
|
+
@uri_recommendation_for_job ||= '/v1/Recommendations/ForJob'
|
25
|
+
@uri_recommendation_for_user ||= '/v1/Recommendations/ForUser'
|
26
|
+
@uri_recommendation_for_company ||= '/Employer/JobRecommendation'
|
27
|
+
@uri_job_application ||= '/v1/application/blank'
|
28
|
+
#@uri_job_application_submit ||= '/v1/application/submit'
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_hash
|
32
|
+
{
|
33
|
+
:uri_job_category_search => @uri_job_category_search,
|
34
|
+
:uri_employee_types => @uri_employee_types,
|
35
|
+
:dev_key => @dev_key,
|
36
|
+
:host_site => @host_site,
|
37
|
+
:time_out => @time_out,
|
38
|
+
:use_json => @use_json,
|
39
|
+
:uri_job_search => @uri_job_search,
|
40
|
+
:uri_job_find => @uri_job_find,
|
41
|
+
:uri_company_find => @uri_company_find,
|
42
|
+
:uri_education_code => @uri_education_code,
|
43
|
+
:uri_recommendation_for_job => @uri_recommendation_for_job,
|
44
|
+
:uri_recommendation_for_user => @uri_recommendation_for_user,
|
45
|
+
:uri_recommendation_for_company => @uri_recommendation_for_company,
|
46
|
+
:uri_job_application => @uri_job_application
|
47
|
+
# :uri_job_application_submit => @uri_job_application_submit
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
#################################################################
|
53
|
+
|
54
|
+
def set_defaults
|
55
|
+
|
56
|
+
@dev_key = 'ruby-cb-api' # Get a developer key at http://api.careerbuilder.com
|
57
|
+
@time_out = 5
|
58
|
+
@use_json = true
|
59
|
+
@host_site = Cb.country.US
|
60
|
+
|
61
|
+
set_default_api_uris
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module Cb
|
2
|
+
# Trying to simplify the large number of inputs our job search api accepts
|
3
|
+
# For indepth information around all of the different inputs, please visit:
|
4
|
+
# http://api.careerbuilder.com/JobSearchInfo.aspx
|
5
|
+
####################################################################################
|
6
|
+
class JobSearchCriteria
|
7
|
+
extend Cb::Utils::FluidAttributes
|
8
|
+
|
9
|
+
fluid_attr_accessor :advanced_grouping, :boolean_operator, :category, :co_brand, :company_did,
|
10
|
+
:company_did_csv, :company_name, :company_name_boost, :country_code,
|
11
|
+
:education_code, :employer_type, :enable_company_collapse, :exclude_company_names,
|
12
|
+
:exclude_job_titles, :exclude_keywords, :exclude_national, :exclude_mlms,
|
13
|
+
:exclude_product, :facet_category, :facet_company, :facet_city, :facet_state,
|
14
|
+
:facet_city_state, :facet_pay, :facet_normalized_company_did, :host_site,
|
15
|
+
:include_company_children, :industry_codes, :job_title, :keywords, :location,
|
16
|
+
:normalized_company_did, :normalized_company_did_boost_params,
|
17
|
+
:normalized_company_name, :onet, :order_by, :order_direction, :page_number,
|
18
|
+
:partner_id, :pay_high, :pay_info_only, :pay_low, :per_page, :posted_within,
|
19
|
+
:product, :radius, :records_per_group, :relocate_jobs, :soc, :school_id,
|
20
|
+
:search_all_countries, :search_view, :show_categories, :show_apply_requirements,
|
21
|
+
:apply_requirements, :single_onet, :site_entity, :site_id, :skills, :specific_education,
|
22
|
+
:spoken_language, :tags, :talent_network_did, :url_compression_service, :use_facets,
|
23
|
+
:str_crit
|
24
|
+
|
25
|
+
def search
|
26
|
+
Cb::JobApi.search(self.to_hash)
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_hash
|
30
|
+
ret = {}
|
31
|
+
|
32
|
+
ret.merge!(:AdvancedGroupingMode => @advanced_grouping) unless @advanced_grouping.nil?
|
33
|
+
ret.merge!(:BooleanOperator => @boolean_operator) unless @boolean_operator.nil?
|
34
|
+
ret.merge!(:Category => @category) unless @category.nil?
|
35
|
+
ret.merge!(:CoBrand => @co_brand) unless @co_brand.nil?
|
36
|
+
ret.merge!(:CompanyDID => @company_did) unless @company_did.nil?
|
37
|
+
ret.merge!(:CompanyDIDCSV => @company_did_csv) unless @company_did_csv.nil?
|
38
|
+
ret.merge!(:CompanyName => @company_name) unless @company_name.nil?
|
39
|
+
ret.merge!(:CompanyNameBoostParams => @company_name_boost) unless @company_name_boost.nil?
|
40
|
+
ret.merge!(:CountryCode => @country_code) unless @country_code.nil?
|
41
|
+
ret.merge!(:EducationCode => @education_code) unless @education_code.nil?
|
42
|
+
ret.merge!(:EmpType => @employer_type) unless @employer_type.nil?
|
43
|
+
ret.merge!(:EnableCompanyCollapse => @enable_company_collapse) unless @enable_company_collapse.nil?
|
44
|
+
ret.merge!(:ExcludeCompanyNames => @exclude_company_names) unless @exclude_company_names.nil?
|
45
|
+
ret.merge!(:ExcludeJobTitles => @exclude_job_titles) unless @exclude_job_titles.nil?
|
46
|
+
ret.merge!(:ExcludeKeywords => @exclude_keywords) unless @exclude_keywords.nil?
|
47
|
+
ret.merge!(:ExcludeNational => @exclude_national) unless @exclude_national.nil?
|
48
|
+
ret.merge!(:ExcludeNonTraditionalJobs => @exclude_mlms) unless @exclude_mlms.nil?
|
49
|
+
ret.merge!(:ExcludeProductID => @exclude_product) unless @exclude_product.nil?
|
50
|
+
ret.merge!(:FacetCategory => @facet_category) unless @facet_category.nil?
|
51
|
+
ret.merge!(:FacetCompany => @facet_company) unless @facet_company.nil?
|
52
|
+
ret.merge!(:FacetCity => @facet_city) unless @facet_city.nil?
|
53
|
+
ret.merge!(:FacetState => @facet_state) unless @facet_state.nil?
|
54
|
+
ret.merge!(:FacetCityState => @facet_city_state) unless @facet_city_state.nil?
|
55
|
+
ret.merge!(:FacetPay => @facet_pay) unless @facet_pay.nil?
|
56
|
+
ret.merge!(:FacetNormalizedCompanyDID => @facet_normalized_company_did) unless @facet_normalized_company_did.nil?
|
57
|
+
ret.merge!(:HostSite => @host_site) unless @host_site.nil?
|
58
|
+
ret.merge!(:IncludeCompanyChildren => @include_company_children) unless @include_company_children.nil?
|
59
|
+
ret.merge!(:IndustryCodes => @industry_codes) unless @industry_codes.nil?
|
60
|
+
ret.merge!(:JobTitle => @job_title) unless @job_title.nil?
|
61
|
+
ret.merge!(:Keywords => @keywords) unless @keywords.nil?
|
62
|
+
ret.merge!(:Location => @location) unless @location.nil?
|
63
|
+
ret.merge!(:NormalizedCompanyDID => @normalized_company_did) unless @normalized_company_did.nil?
|
64
|
+
ret.merge!(:NormalizedCompanyDIDBoostParams => @normalized_company_did_boost_params) unless @normalized_company_did_boost_params.nil?
|
65
|
+
ret.merge!(:NormalizedCompanyName => @normalized_company_name) unless @normalized_company_name.nil?
|
66
|
+
ret.merge!(:ONetCode => @onet) unless @onet.nil?
|
67
|
+
ret.merge!(:OrderBy => @order_by) unless @order_by.nil?
|
68
|
+
ret.merge!(:OrderDirection => @order_direction) unless @order_direction.nil?
|
69
|
+
ret.merge!(:PageNumber => @page_number) unless @page_number.nil?
|
70
|
+
ret.merge!(:PartnerID => @partner_id) unless @partner_id.nil?
|
71
|
+
ret.merge!(:PayHigh => @pay_high) unless @pay_high.nil?
|
72
|
+
ret.merge!(:PayInfoOnly => @pay_info_only) unless @pay_info_only.nil?
|
73
|
+
ret.merge!(:PayLow => @pay_low) unless @pay_low.nil?
|
74
|
+
ret.merge!(:PerPage => @per_page) unless @per_page.nil?
|
75
|
+
ret.merge!(:PostedWithin => @posted_within) unless @posted_within.nil?
|
76
|
+
ret.merge!(:ProductID => @product) unless @product.nil?
|
77
|
+
ret.merge!(:Radius => @radius) unless @radius.nil?
|
78
|
+
ret.merge!(:RecordsPerGroup => @records_per_group) unless @records_per_group.nil?
|
79
|
+
ret.merge!(:RelocateJobs => @relocate_jobs) unless @relocate_jobs.nil?
|
80
|
+
ret.merge!(:SOCCode => @soc) unless @soc.nil?
|
81
|
+
ret.merge!(:SchoolSiteID => @school_id) unless @school_id.nil?
|
82
|
+
ret.merge!(:SearchAllCountries => @search_all_countries) unless @search_all_countries.nil?
|
83
|
+
ret.merge!(:SearchView => @search_view) unless @search_view.nil?
|
84
|
+
ret.merge!(:ShowCategories => @show_categories) unless @show_categories.nil?
|
85
|
+
ret.merge!(:ShowApplyRequirements => @show_apply_requirements) unless @show_apply_requirements.nil?
|
86
|
+
ret.merge!(:ApplyRequirements => @apply_requirements) unless @apply_requirements.nil?
|
87
|
+
ret.merge!(:SingleONetSearch => @single_onet) unless @single_onet.nil?
|
88
|
+
ret.merge!(:SiteEntity => @site_entity) unless @site_entity.nil?
|
89
|
+
ret.merge!(:SiteID => @site_id) unless @site_id.nil?
|
90
|
+
ret.merge!(:Skills => @skills) unless @skills.nil?
|
91
|
+
ret.merge!(:SpecificEducation => @specific_education) unless @specific_education.nil?
|
92
|
+
ret.merge!(:SpokenLanguage => @spoken_language) unless @spoken_language.nil?
|
93
|
+
ret.merge!(:Tags => @tags) unless @tags.nil?
|
94
|
+
ret.merge!(:TalentNetworkDID => @talent_network_did) unless @talent_network_did.nil?
|
95
|
+
ret.merge!(:UrlCompressionService => @url_compression_service) unless @url_compression_service.nil?
|
96
|
+
ret.merge!(:UseFacets => @use_facets) unless @use_facets.nil?
|
97
|
+
ret.merge!(:strcrit => @str_crit) unless @str_crit.nil?
|
98
|
+
|
99
|
+
return ret
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Cb
|
2
|
+
class CbCategory
|
3
|
+
attr_accessor :code, :name, :language
|
4
|
+
def initialize(args={})
|
5
|
+
@code = args["Code"] || ""
|
6
|
+
@name = args["Name"]["#text"] || ""
|
7
|
+
@language = args["Name"]["@language"] || ""
|
8
|
+
end
|
9
|
+
|
10
|
+
def CategoryName()
|
11
|
+
return @name if @name.present?
|
12
|
+
end
|
13
|
+
|
14
|
+
def CategoryCode()
|
15
|
+
return @code if @code.present?
|
16
|
+
end
|
17
|
+
|
18
|
+
def CategoryLanguage()
|
19
|
+
return @language if @language.present?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
module Cb
|
2
|
+
class CbCompany
|
3
|
+
attr_accessor :did, :name, :hh_name, :url, :size, :type, :year_founded,
|
4
|
+
:news_feed, :overview, :total_jobs, :headquarters, :host_sites, :s_drive,
|
5
|
+
:industry,
|
6
|
+
|
7
|
+
:image_file, :header_image, :footer_image, :logo, :photos, :my_photos,
|
8
|
+
:bright_cove_video,
|
9
|
+
|
10
|
+
:twitter_url, :linked_in_url, :facebook_url, :facebook_widget,
|
11
|
+
:linked_in_widget, :twitter_widget,
|
12
|
+
|
13
|
+
:benefits, :benefits_label, :history, :contact, :contact_label, :links,
|
14
|
+
:vision, :vision_label, :products, :products_label, :career_opps, :career_opps_label,
|
15
|
+
:culture, :culture_label, :addresses, :bulletin_board, :testimonials,
|
16
|
+
:college, :college_label, :diversity, :diversity_label, :people, :people_label,
|
17
|
+
|
18
|
+
:extra_custom_tab, :tab_header_bg_color, :tab_header_text_color, :tab_header_hover_color,
|
19
|
+
:side_bar_header_color, :button_color, :button_text_color, :gutter_bg_color,
|
20
|
+
:my_content_tabs, :info_tabs, :is_enhance, :is_military, :is_premium
|
21
|
+
|
22
|
+
def initialize(args = {})
|
23
|
+
return if args.nil?
|
24
|
+
|
25
|
+
# General
|
26
|
+
################################################################
|
27
|
+
@did = args['CompanyDID'] || ''
|
28
|
+
@name = args['CompanyName'] || ''
|
29
|
+
@hh_name = args['HHName'] || ''
|
30
|
+
@url = args['URL'] || ''
|
31
|
+
@size = args['CompanySize'] || ''
|
32
|
+
@type = args['CompanyType'] || ''
|
33
|
+
@year_founded = args['YearFounded'] || ''
|
34
|
+
@news_feed = args['NewsFeed'] || ''
|
35
|
+
@overview = args['Overview'] || ''
|
36
|
+
@total_jobs = args['TotalNumberJobs'] || ''
|
37
|
+
@headquarters = args['Headquarter'] || ''
|
38
|
+
@host_sites = args['HostSites'] || ''
|
39
|
+
@s_drive = args['SDrive'] || ''
|
40
|
+
@industry = args['IndustryType'] || ''
|
41
|
+
|
42
|
+
# Images
|
43
|
+
################################################################
|
44
|
+
@logo = args['CompanyLogo'] || ''
|
45
|
+
@header_image = args['HeaderImage'] || ''
|
46
|
+
@footer_image = args['FooterImage'] || ''
|
47
|
+
@image_file = args['ImageFile'] || ''
|
48
|
+
|
49
|
+
@photos = args['CompanyPhotos']['PhotoList'] || ''
|
50
|
+
@my_photos = args['MyPhotos'] || ''
|
51
|
+
|
52
|
+
# Videos
|
53
|
+
################################################################
|
54
|
+
@bright_cove_video = args['BrightcoveVideo'] || ''
|
55
|
+
|
56
|
+
# Social sites
|
57
|
+
################################################################
|
58
|
+
@facebook_url = args['FBPageURL'] || args['FacebookURL'] || ''
|
59
|
+
@facebook_widget = args['FacebookWidget'] || ''
|
60
|
+
@twitter_url = args['TwitterURL'] || ''
|
61
|
+
@twitter_widget = args['TwitterWidget'] || ''
|
62
|
+
@linked_in_url = args['LinkedURL'] || ''
|
63
|
+
@linked_in_widget = args['LinkedInWidget'] || ''
|
64
|
+
|
65
|
+
# Detailed information (blobs)
|
66
|
+
################################################################
|
67
|
+
@history = args['HistoryBody'] || ''
|
68
|
+
@people = args['PeopleBody'] || ''
|
69
|
+
@people_label = args['PeopleLabel'] || ''
|
70
|
+
@contact = args['ContactBody'] || ''
|
71
|
+
@contact_label = args['ContactLabel'] || ''
|
72
|
+
@benefits = args['BenefitsBody'] || ''
|
73
|
+
@benefits_label = args['BenefitsLabel'] || ''
|
74
|
+
@vision = args['VisionBody'] || ''
|
75
|
+
@vision_label = args['VisionLabel'] || ''
|
76
|
+
@products = args['ProductsBody'] || ''
|
77
|
+
@products_label = args['ProductsLabel'] || ''
|
78
|
+
@career_opps = args['CareerOpportunitiesBody'] || ''
|
79
|
+
@career_opps_label = args['CareerOpportunitiesLabel'] || ''
|
80
|
+
@culture = args['CultureBody'] || ''
|
81
|
+
@culture_label = args['CultureLabel'] || ''
|
82
|
+
@bulletin_board = args['CompanyBulletinBoard']['bulletinboards'] || ''
|
83
|
+
@testimonials = args['Testimonials']['Testimonials'] || ''
|
84
|
+
@addresses = []
|
85
|
+
if args.has_key?('CompanyAddress')
|
86
|
+
unless args['CompanyAddress'].empty? || args['CompanyAddress']['AddressList'].nil?
|
87
|
+
args['CompanyAddress']['AddressList']['Address'].each do |cur_addr|
|
88
|
+
@addresses << CbCompany::CbAddress.new(cur_addr)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
@college = args['CollegeBody'] || ''
|
93
|
+
@college_label = args['CollegeLabel'] || ''
|
94
|
+
@diversity = args['DiversityBody'] || ''
|
95
|
+
@diversity_label = args['DiversityLabel'] || ''
|
96
|
+
@links = args['CompanyLinksCollection']['companylinks'] || ''
|
97
|
+
|
98
|
+
# tabs, colors, buttons, headers, etc
|
99
|
+
################################################################
|
100
|
+
@extra_custom_tab = args['ExtraCustomTab'] || ''
|
101
|
+
@tab_header_bg_color = args['TabHeaderBGColor'] || ''
|
102
|
+
@tab_header_text_color = args['TabHeaderTextColor'] || ''
|
103
|
+
@tab_header_hover_color = args['TabHeaderHoverColor'] || ''
|
104
|
+
@side_bar_header_color = args['SidebarHeaderColor'] || ''
|
105
|
+
@button_color = args['ButtonColor'] || ''
|
106
|
+
@button_text_color = args['ButtonTextColor'] || ''
|
107
|
+
@gutter_bg_color = args['GutterBGColor'] || ''
|
108
|
+
@my_content_tabs = args['MyContent']['MyContentTabs'] || ''
|
109
|
+
@info_tabs = args['InfoTabs']['InfoTabs'] || ''
|
110
|
+
@is_enhance = args['isEnhance'] || ''
|
111
|
+
@is_military = args['MilitaryIcon'] || ''
|
112
|
+
@is_premium = args['PremiumProfile'] || ''
|
113
|
+
end
|
114
|
+
|
115
|
+
# CbAddress # CbCompany has a collection of these
|
116
|
+
################################################################
|
117
|
+
class CbAddress
|
118
|
+
attr_accessor :street, :city, :state, :country, :zip
|
119
|
+
|
120
|
+
def initialize(args = {})
|
121
|
+
begin
|
122
|
+
@street = args['Street'] || ''
|
123
|
+
@city = args['City'] || ''
|
124
|
+
@state = args['State'] || ''
|
125
|
+
@country = args['Country'] || ''
|
126
|
+
@zip = args['ZIPCode'] || ''
|
127
|
+
rescue
|
128
|
+
# failed to load address
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end #CbAddress
|
132
|
+
end #CbCompany
|
133
|
+
end #Cb
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Cb
|
2
|
+
class CbEducation
|
3
|
+
attr_accessor :code, :text, :language
|
4
|
+
|
5
|
+
##############################################################
|
6
|
+
## This object stores Education Codes having to do with a
|
7
|
+
## country. The API objects dealing with job, will populate
|
8
|
+
## one or many of this object.
|
9
|
+
##
|
10
|
+
## For more information, please visit:
|
11
|
+
## http://api.careerbuilder.com/v1/educationcodes
|
12
|
+
##############################################################
|
13
|
+
def initialize(args = {})
|
14
|
+
return if args.nil?
|
15
|
+
|
16
|
+
@code = args['Code'] || ''
|
17
|
+
@language = args['Name']['@language'] unless args['Name'].nil?
|
18
|
+
@text = args['Name']['#text'] unless args['Name'].nil?
|
19
|
+
|
20
|
+
# I have got to find a better way to do this
|
21
|
+
@language ||= ''
|
22
|
+
@text ||= ''
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Cb
|
2
|
+
class CbJob
|
3
|
+
attr_accessor :did, :title, :pay,
|
4
|
+
:company_name, :company_did, :company_details_url, :company_image_url, :company,
|
5
|
+
:description_teaser, :location, :distance, :latitude, :longitude,
|
6
|
+
:description, :requirements, :employment_type,
|
7
|
+
:details_url, :service_url, :similar_jobs_url, :apply_url,
|
8
|
+
:begin_date, :end_date, :posted_date,
|
9
|
+
:relevancy, :state, :city
|
10
|
+
|
11
|
+
##############################################################
|
12
|
+
## This general purpose object stores anything having to do
|
13
|
+
## with a job. The API objects dealing with job, will populate
|
14
|
+
## one or many of this object.
|
15
|
+
##############################################################
|
16
|
+
def initialize(args = {})
|
17
|
+
return if args.nil?
|
18
|
+
|
19
|
+
# General
|
20
|
+
@did = args['DID'] || args['JobDID'] || ''
|
21
|
+
@title = args['JobTitle'] || args['Title'] || ''
|
22
|
+
@employment_type = args['EmploymentType'] || ''
|
23
|
+
@latitude = args['LocationLatitude'] || ''
|
24
|
+
@longitude = args['LocationLongitude'] || ''
|
25
|
+
@pay = args['Pay'] || ''
|
26
|
+
|
27
|
+
# Job Search related
|
28
|
+
@description_teaser = args['DescriptionTeaser'] || ''
|
29
|
+
@posted_date = args['PostedDate'] || ''
|
30
|
+
@distance = args['Distance'] || ''
|
31
|
+
@details_url = args['JobDetailsURL'] || ''
|
32
|
+
@service_url = args['JobServiceURL'] || ''
|
33
|
+
@location = args['Location'] || ''
|
34
|
+
@similar_jobs_url = args['SimilarJobsURL'] || ''
|
35
|
+
|
36
|
+
# Job Details related
|
37
|
+
@description = args['Description'] || args['JobDescription'] || ''
|
38
|
+
@requirements = args['JobRequirements'] || ''
|
39
|
+
@begin_date = args['BeginDate'] || ''
|
40
|
+
@end_date = args['EndDate'] || ''
|
41
|
+
@apply_url = args['ApplyURL'] || ''
|
42
|
+
|
43
|
+
# Company related
|
44
|
+
@company_name = args['Company'] || ''
|
45
|
+
@company_did = args['CompanyDID'] || ''
|
46
|
+
@company_details_url = args['CompanyDetailsURL'] || ''
|
47
|
+
@company_image_url = args['CompanyImageURL'] || ''
|
48
|
+
|
49
|
+
# Recommendations related
|
50
|
+
@relevancy = args['Relevancy'] || ''
|
51
|
+
@state = args['Location']['State'] unless args['Location'].nil? || args['Location']['State'].nil?
|
52
|
+
@city = args['Location']['City'] unless args['Location'].nil? || args['Location']['City'].nil?
|
53
|
+
@company_name = args['Company']['CompanyName'] unless args['Company'].nil? || args['Company']['CompanyName'].nil?
|
54
|
+
@company_details_url = args['Company']['CompanyDetailsURL'] unless args['Company'].nil? || args['Company']['CompanyDetailsURL'].nil?
|
55
|
+
end
|
56
|
+
|
57
|
+
def find_company
|
58
|
+
if @company
|
59
|
+
return @company
|
60
|
+
else
|
61
|
+
@company = Cb::CompanyApi.find_for self
|
62
|
+
|
63
|
+
return @company
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Cb
|
2
|
+
class CbJobApplication
|
3
|
+
attr_accessor :job_did, :site_id, :co_brand, :apply_url, :title, :total_questions,
|
4
|
+
:total_required_questions, :questions, :submit_service_url
|
5
|
+
|
6
|
+
##############################################################
|
7
|
+
## This general purpose object stores anything having to do
|
8
|
+
## with an application. The API objects dealing with application,
|
9
|
+
## will populate this object.
|
10
|
+
##############################################################
|
11
|
+
def initialize(args = {})
|
12
|
+
return if args.nil?
|
13
|
+
|
14
|
+
@job_did = args['JobDID'] || ''
|
15
|
+
@site_id = args['SiteID'] || ''
|
16
|
+
@co_brand = args['CoBrand'] || ''
|
17
|
+
@apply_url = args['ApplyURL'] || ''
|
18
|
+
@title = args['JobTitle'] || ''
|
19
|
+
@total_questions = args['TotalQuestions'] || ''
|
20
|
+
@total_required_questions = args['TotalRequiredQuestions'] || ''
|
21
|
+
@questions = args['Questions'] || ''
|
22
|
+
@submit_service_url = args['ApplicationSubmitServiceURL'] || ''
|
23
|
+
|
24
|
+
#TODO
|
25
|
+
# Questions needs to be an array of data containers (of question)
|
26
|
+
|
27
|
+
end
|
28
|
+
end # CbJobApplication
|
29
|
+
end # Cb
|
data/lib/cb/utils/api.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'HTTParty'
|
2
|
+
|
3
|
+
module Cb::Utils
|
4
|
+
class Api
|
5
|
+
include HTTParty
|
6
|
+
base_uri 'http://api.careerbuilder.com'
|
7
|
+
#debug_output $stderr
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
self.class.default_params :developerkey => Cb.configuration.dev_key,
|
11
|
+
:outputjson => Cb.configuration.use_json.to_s
|
12
|
+
|
13
|
+
self.class.default_timeout Cb.configuration.time_out
|
14
|
+
end
|
15
|
+
|
16
|
+
def cb_get(*args, &block)
|
17
|
+
self.class.get(*args, &block)
|
18
|
+
end
|
19
|
+
|
20
|
+
def append_api_responses(obj, resp)
|
21
|
+
if obj.respond_to?('cb_response')
|
22
|
+
meta_class = obj.cb_response
|
23
|
+
else
|
24
|
+
meta_class = Cb::Utils::MetaValues.new()
|
25
|
+
end
|
26
|
+
|
27
|
+
resp.each do | api_key, api_value |
|
28
|
+
meta_name = get_meta_name_for api_key
|
29
|
+
|
30
|
+
unless meta_name.empty?
|
31
|
+
if meta_name == 'errors' && api_value.is_a?(Hash)
|
32
|
+
api_value = api_value.values
|
33
|
+
elsif is_numeric?(api_value)
|
34
|
+
api_value = api_value.to_i
|
35
|
+
end
|
36
|
+
|
37
|
+
meta_class.class.send(:attr_reader, meta_name)
|
38
|
+
meta_class.instance_variable_set(:"@#{meta_name}", api_value)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
obj.class.send(:attr_reader, 'cb_response')
|
43
|
+
obj.instance_variable_set(:@cb_response, meta_class)
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
#############################################################################
|
48
|
+
|
49
|
+
def is_numeric?(obj)
|
50
|
+
true if Float(obj) rescue false
|
51
|
+
end
|
52
|
+
|
53
|
+
def get_meta_name_for(api_key)
|
54
|
+
key_map = {
|
55
|
+
'Errors' => 'errors',
|
56
|
+
'TimeResponseSent' => 'time_sent',
|
57
|
+
'TimeElapsed' => 'time_elapsed',
|
58
|
+
'TotalPages' => 'total_pages',
|
59
|
+
'TotalCount' => 'total_count',
|
60
|
+
'FirstItemIndex' => 'first_item_index',
|
61
|
+
'LastItemIndex' => 'last_item_index',
|
62
|
+
'CountryCode' => 'country_code',
|
63
|
+
'DeveloperKey' => 'developer_key',
|
64
|
+
'SiteID' => 'site_id',
|
65
|
+
'CoBrand' => 'co_brand',
|
66
|
+
'CountLimit' => 'count_limit',
|
67
|
+
'MinQualityLimit' => 'min_quality',
|
68
|
+
'RecommendationsAvailable' => 'recs_available'
|
69
|
+
}
|
70
|
+
|
71
|
+
key_map["#{api_key}"] ||= ''
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Cb::Utils::Country
|
2
|
+
# These aren't all country codes. We get it. Our naming scheme didn't hold up over time.
|
3
|
+
def self.get_supported
|
4
|
+
%w(AH BE CA CC CE CH CN CP CS CY DE DK E1 ER ES EU F1
|
5
|
+
FR GC GR I1 IE IN IT J1 JC JS LJ M1 MY NL NO PD PI
|
6
|
+
PL RM RO RX S1 SE SF SG T1 T2 UK US WH WM WR)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.is_valid?(country)
|
10
|
+
get_supported.include? country
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.inject_convenience_methods
|
14
|
+
get_supported.each do | country |
|
15
|
+
unless self.respond_to? "#{country}"
|
16
|
+
self.define_singleton_method "#{country}" do
|
17
|
+
return country
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Cb::Utils::FluidAttributes
|
2
|
+
def fluid_attr_accessor(*names)
|
3
|
+
names.each do |name|
|
4
|
+
define_method :"#{name}" do | *args |
|
5
|
+
return instance_variable_get(:"@#{name}") if args.length == 0
|
6
|
+
|
7
|
+
if args.length == 1
|
8
|
+
instance_variable_set(:"@#{name}", args[0])
|
9
|
+
return self
|
10
|
+
end
|
11
|
+
|
12
|
+
raise ArgumentError.new("Wrong number of arguments (#{args.length} for 1)")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Cb::Utils
|
2
|
+
class MetaValues
|
3
|
+
# This class will be dynamically constructed at run time.
|
4
|
+
# I don't want values that don't make sense to the API call you made to be accessible
|
5
|
+
# I'm not dynamically creating the class because we may want to add functionality at some point
|
6
|
+
|
7
|
+
# This class, with its dynamically created attr_accr's will be dynamically appended to api
|
8
|
+
# entities, like job and company. It will contain things like errors, time elapsed, and
|
9
|
+
# any other meta values that the API may return.
|
10
|
+
|
11
|
+
# The mapping for allowed values, and what they translate to on this object live in Cb::Utils::Api
|
12
|
+
end
|
13
|
+
end
|
data/lib/cb/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cb-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jesse Retchko
|
9
|
+
- Chris Little
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2013-04-17 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: httparty
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.8.1
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 0.8.1
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: json
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ~>
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: 1.7.6
|
39
|
+
type: :runtime
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.7.6
|
47
|
+
description: Ruby wrapper for Careerbuilder Public API.
|
48
|
+
email:
|
49
|
+
- Jesse.Retchko@Careerbuilder.com
|
50
|
+
- Chris.Little@Careerbuilder.com
|
51
|
+
executables: []
|
52
|
+
extensions: []
|
53
|
+
extra_rdoc_files: []
|
54
|
+
files:
|
55
|
+
- lib/cb/clients/category_api.rb
|
56
|
+
- lib/cb/clients/company_api.rb
|
57
|
+
- lib/cb/clients/education_api.rb
|
58
|
+
- lib/cb/clients/employee_types_api.rb
|
59
|
+
- lib/cb/clients/job_api.rb
|
60
|
+
- lib/cb/clients/job_application_api.rb
|
61
|
+
- lib/cb/clients/recommendation_api.rb
|
62
|
+
- lib/cb/config.rb
|
63
|
+
- lib/cb/job_search_criteria.rb
|
64
|
+
- lib/cb/models/cb_category.rb
|
65
|
+
- lib/cb/models/cb_company.rb
|
66
|
+
- lib/cb/models/cb_education.rb
|
67
|
+
- lib/cb/models/cb_employee_type.rb
|
68
|
+
- lib/cb/models/cb_job.rb
|
69
|
+
- lib/cb/models/cb_job_application.rb
|
70
|
+
- lib/cb/utils/api.rb
|
71
|
+
- lib/cb/utils/country.rb
|
72
|
+
- lib/cb/utils/fluid_attributes.rb
|
73
|
+
- lib/cb/utils/meta_values.rb
|
74
|
+
- lib/cb/version.rb
|
75
|
+
- lib/cb.rb
|
76
|
+
- README.md
|
77
|
+
homepage: http://api.careerbuilder.com
|
78
|
+
licenses: []
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
requirements: []
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 1.8.24
|
98
|
+
signing_key:
|
99
|
+
specification_version: 3
|
100
|
+
summary: Ruby wrapper around Careerbuilder Public API.
|
101
|
+
test_files: []
|