cb-api 0.0.3 → 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.
- data/README.md +44 -8
- data/lib/cb.rb +4 -0
- data/lib/cb/clients/job_api.rb +21 -6
- data/lib/cb/job_search_criteria.rb +9 -82
- data/lib/cb/utils/api.rb +14 -1
- data/lib/cb/utils/fluid_attributes.rb +9 -1
- data/lib/cb/utils/string.rb +10 -0
- data/lib/cb/version.rb +1 -1
- metadata +7 -6
data/README.md
CHANGED
@@ -1,12 +1,48 @@
|
|
1
|
-
|
1
|
+
First things first. You're going to need to get a developer key from Careerbuilder. You can obtain a key at http://api.careerbuilder.com/RequestDevKey.aspx.
|
2
|
+
|
3
|
+
Now that you have a key, lets get to the good stuff.
|
4
|
+
|
5
|
+
You can find an example rails site that uses the gem here:
|
6
|
+
https://github.com/cbdr/ruby-cb-api-demo
|
7
|
+
|
8
|
+
Configuration
|
2
9
|
================
|
10
|
+
Set your dev key, and any other configuration settings in a place that will run prior to your API calls.
|
11
|
+
|
12
|
+
Cb.configure do | config |
|
13
|
+
config.dev_key = 'your-dev-key-goes-here'
|
14
|
+
config.time_out = 5
|
15
|
+
end
|
16
|
+
|
17
|
+
Job Search
|
18
|
+
================
|
19
|
+
There's a couple ways to go about conducting a job search.
|
20
|
+
|
21
|
+
Option 1:
|
3
22
|
|
4
|
-
|
23
|
+
search = Cb.job_search_criteria.location('Atlanta, GA').radius(10).search()
|
5
24
|
|
25
|
+
Option 2:
|
6
26
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
27
|
+
crit = Cb.job_search_criteria
|
28
|
+
crit.location = 'Atlanta, GA'
|
29
|
+
crit.radius = 10
|
30
|
+
search = crit.search()
|
31
|
+
|
32
|
+
Either way, you will get back an array of CbJob.
|
33
|
+
|
34
|
+
search.each | job | do
|
35
|
+
puts job.title
|
36
|
+
puts job.company_name
|
37
|
+
puts job.instance_variables
|
38
|
+
end
|
39
|
+
|
40
|
+
You will also get meta data regarding the search itself (helpful for pagination).
|
41
|
+
|
42
|
+
puts search.cb_response.total_pages
|
43
|
+
puts search.cb_response.total_count
|
44
|
+
puts search.cb_response.errors # Hopefully this is nil! If it's not nil, it will be an array of error messages.
|
45
|
+
|
46
|
+
Coming Soon
|
47
|
+
================
|
48
|
+
More documentation!
|
data/lib/cb.rb
CHANGED
data/lib/cb/clients/job_api.rb
CHANGED
@@ -2,6 +2,7 @@ require 'json'
|
|
2
2
|
|
3
3
|
module Cb
|
4
4
|
class JobApi
|
5
|
+
|
5
6
|
#############################################################
|
6
7
|
## Run a job search against the given criteria
|
7
8
|
##
|
@@ -10,7 +11,6 @@ module Cb
|
|
10
11
|
#############################################################
|
11
12
|
def self.search(*args)
|
12
13
|
args = args[0] if args.is_a?(Array) && args.count == 1
|
13
|
-
|
14
14
|
my_api = Cb::Utils::Api.new()
|
15
15
|
cb_response = my_api.cb_get(Cb.configuration.uri_job_search, :query => args)
|
16
16
|
json_hash = JSON.parse(cb_response.response.body)
|
@@ -32,12 +32,10 @@ module Cb
|
|
32
32
|
## For detailed information around this API please visit:
|
33
33
|
## http://api.careerbuilder.com/JobInfo.aspx
|
34
34
|
#############################################################
|
35
|
-
def self.
|
35
|
+
def self.find_by_criteria(criteria)
|
36
36
|
my_api = Cb::Utils::Api.new()
|
37
|
-
params
|
38
|
-
|
39
|
-
params["showjobskin"] = "Full"
|
40
|
-
end
|
37
|
+
params = my_api.class.criteria_to_hash(criteria)
|
38
|
+
|
41
39
|
cb_response = my_api.cb_get(Cb.configuration.uri_job_find, :query => params)
|
42
40
|
json_hash = JSON.parse(cb_response.response.body)
|
43
41
|
|
@@ -46,5 +44,22 @@ module Cb
|
|
46
44
|
|
47
45
|
return job
|
48
46
|
end
|
47
|
+
|
48
|
+
def self.find_by_did(did)
|
49
|
+
criteria = Cb::JobDetailsCriteria.new()
|
50
|
+
criteria.did = did
|
51
|
+
return find_by_criteria(criteria)
|
52
|
+
end
|
49
53
|
end # JobApi
|
54
|
+
|
55
|
+
class JobDetailsCriteria
|
56
|
+
extend Cb::Utils::FluidAttributes
|
57
|
+
|
58
|
+
fluid_attr_accessor :did, :show_job_skin, :site_id, :cobrand, :show_apply_requirements
|
59
|
+
|
60
|
+
def find
|
61
|
+
Cb.job.find_by_did(self.did, self)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
50
65
|
end # Cb
|
@@ -6,97 +6,24 @@ module Cb
|
|
6
6
|
class JobSearchCriteria
|
7
7
|
extend Cb::Utils::FluidAttributes
|
8
8
|
|
9
|
-
fluid_attr_accessor :
|
10
|
-
:company_did_csv, :company_name, :
|
11
|
-
:education_code, :
|
12
|
-
:exclude_job_titles, :exclude_keywords, :exclude_national, :
|
13
|
-
:
|
9
|
+
fluid_attr_accessor :advanced_grouping_mode, :boolean_operator, :category, :co_brand, :company_did,
|
10
|
+
:company_did_csv, :company_name, :company_name_boost_params, :country_code,
|
11
|
+
:education_code, :emp_type, :enable_company_collapse, :exclude_company_names,
|
12
|
+
:exclude_job_titles, :exclude_keywords, :exclude_national, :exclude_non_traditional_jobs,
|
13
|
+
:exclude_product_id, :facet_category, :facet_company, :facet_city, :facet_state,
|
14
14
|
:facet_city_state, :facet_pay, :facet_normalized_company_did, :host_site,
|
15
15
|
:include_company_children, :industry_codes, :job_title, :keywords, :location,
|
16
16
|
:normalized_company_did, :normalized_company_did_boost_params,
|
17
|
-
:normalized_company_name, :
|
17
|
+
:normalized_company_name, :onet_code, :order_by, :order_direction, :page_number,
|
18
18
|
:partner_id, :pay_high, :pay_info_only, :pay_low, :per_page, :posted_within,
|
19
|
-
:
|
19
|
+
:product_id, :radius, :records_per_group, :relocate_jobs, :soc_code, :school_site_id,
|
20
20
|
:search_all_countries, :search_view, :show_categories, :show_apply_requirements,
|
21
|
-
:apply_requirements, :
|
21
|
+
:apply_requirements, :single_onet_search, :site_entity, :site_id, :skills, :specific_education,
|
22
22
|
:spoken_language, :tags, :talent_network_did, :url_compression_service, :use_facets,
|
23
23
|
:str_crit
|
24
24
|
|
25
25
|
def search
|
26
|
-
Cb::JobApi.search(self
|
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
|
26
|
+
Cb::JobApi.search(Cb::Utils::Api.criteria_to_hash(self))
|
100
27
|
end
|
101
28
|
end
|
102
29
|
end
|
data/lib/cb/utils/api.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'httparty'
|
2
2
|
|
3
3
|
module Cb::Utils
|
4
4
|
class Api
|
@@ -43,6 +43,19 @@ module Cb::Utils
|
|
43
43
|
obj.instance_variable_set(:@cb_response, meta_class)
|
44
44
|
end
|
45
45
|
|
46
|
+
def self.criteria_to_hash(criteria)
|
47
|
+
params = Hash.new
|
48
|
+
if criteria.respond_to?(:instance_variables)
|
49
|
+
criteria.instance_variables.each do |var|
|
50
|
+
var_name = var.to_s
|
51
|
+
var_name.slice!(0)
|
52
|
+
var_name_hash_safe = var_name.camelize
|
53
|
+
params["#{var_name_hash_safe}"] = criteria.instance_variable_get(var)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
return params
|
57
|
+
end
|
58
|
+
|
46
59
|
private
|
47
60
|
#############################################################################
|
48
61
|
|
@@ -1,7 +1,9 @@
|
|
1
1
|
module Cb::Utils::FluidAttributes
|
2
|
+
|
2
3
|
def fluid_attr_accessor(*names)
|
3
4
|
names.each do |name|
|
4
|
-
|
5
|
+
|
6
|
+
define_method :"#{name}" do | *args |
|
5
7
|
return instance_variable_get(:"@#{name}") if args.length == 0
|
6
8
|
|
7
9
|
if args.length == 1
|
@@ -11,6 +13,12 @@ module Cb::Utils::FluidAttributes
|
|
11
13
|
|
12
14
|
raise ArgumentError.new("Wrong number of arguments (#{args.length} for 1)")
|
13
15
|
end
|
16
|
+
|
17
|
+
define_method :"#{name}=" do |*args|
|
18
|
+
instance_variable_set(:"@#{name}", args[0]) if args.length == 1
|
19
|
+
return self
|
20
|
+
raise ArgumentError, "Wrong number of arguments (#{args.length} for 1)"
|
21
|
+
end
|
14
22
|
end
|
15
23
|
end
|
16
24
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class String
|
2
|
+
|
3
|
+
# Modified from Rails ActiveSupport::Inflector
|
4
|
+
# Source: activesupport/lib/active_support/inflector/methods.rb, line 55
|
5
|
+
# Documentation: http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-camelize
|
6
|
+
def camelize()
|
7
|
+
self.sub!(/^[a-z\d]*/) { $&.capitalize }
|
8
|
+
self.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$2.capitalize}" }.gsub('/', '::')
|
9
|
+
end
|
10
|
+
end
|
data/lib/cb/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cb-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,24 +10,24 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-05-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
|
-
- -
|
20
|
+
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.
|
22
|
+
version: '0.10'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
none: false
|
27
27
|
requirements:
|
28
|
-
- -
|
28
|
+
- - ~>
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: 0.
|
30
|
+
version: '0.10'
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
32
|
name: json
|
33
33
|
requirement: !ruby/object:Gem::Requirement
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- lib/cb/utils/country.rb
|
72
72
|
- lib/cb/utils/fluid_attributes.rb
|
73
73
|
- lib/cb/utils/meta_values.rb
|
74
|
+
- lib/cb/utils/string.rb
|
74
75
|
- lib/cb/version.rb
|
75
76
|
- lib/cb.rb
|
76
77
|
- README.md
|