careerjet-rb 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6ee3a2c3089cb6ca38d8d573baba736c22ef2b25
4
+ data.tar.gz: 03fff161949b59f47a212dc8ec4e90aff8eef853
5
+ SHA512:
6
+ metadata.gz: 7a40877bc50ab5a04f824233740fede6ab3c0e7e107a2710cab67e3f8d3aa299bb4e611d1ac762bfe416e887defdee1daeb13184dbc906ce571f857d29e22cbe
7
+ data.tar.gz: 095a3f2b5c616bd83a562bee5c5bf4714c23ddac695de42c1e256ceab035894755b9e21c41bf485a0ab87391c3bc76d4a71d31c712d2774625ea4743f38e1ab0
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ /pkg
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --colour
2
+ --format progress
3
+ --backtrace
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ script: "bundle exec rake"
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - ree
7
+ gemfile:
8
+ - Gemfile
9
+ notifications:
10
+ recipients:
11
+ - efremov.sergey@gmail.com
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,83 @@
1
+ # Careerjet RB
2
+
3
+ It's ruby wrapper for [Careerjet](http://www.careerjet.com)'s API.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'careerjet-rb', :require => "careerjet"
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install careerjet-rb
18
+
19
+ ## Usage
20
+
21
+ ```ruby
22
+ > Careerjet.search :locale => :en_US, :keywords => 'ruby', :page => 1
23
+ => #<Careerjet::Mash hits=5704 jobs=[<..>] pages=286 response_time=0.0434670448303223 type="JOBS">
24
+ ```
25
+
26
+ You will get [Hashie::Mash](https://github.com/intridea/hashie#mash) as a response,
27
+ so you can get all data via convenient methods:
28
+
29
+ ```ruby
30
+ > Careerjet.search(:locale => :en_US, :keywords => 'ruby', :page => 1).jobs.first
31
+ #<Careerjet::Mash company="Company Name" date="Wed, 17 Apr 2013 00:00:00 GMT" description=" <..>" url="http://...">
32
+ ```
33
+
34
+
35
+ ### Search Params
36
+
37
+ * `locale`: Locale of search, if locale not specified — using `:en_US`
38
+
39
+ * `keywords`: Keywords to search in job offers.
40
+
41
+ * `location`: Location to search job offers in.
42
+
43
+ * `sort`: Type of sort. Can be: `relevance` (default) — most relevant first, `date` — freshest offer first and `salary` — biggest salary first.
44
+
45
+ * `start_num`: Number of first offer returned in entire result space. Should be >= 1 and <= Number of hits.
46
+
47
+ * `pagesize`: Number of offers returned in one call.
48
+
49
+ * `page`: Number of the asked page. Should be >=1. If this value is set, the eventually given `start_num` is overrided.
50
+
51
+ * `contracttype`: Character code for contract type.`p` — permanent job, `c` — contract, `t` — temporary, `i` — training, `v` — voluntary, none — all contract types.
52
+
53
+ * `contractperiod`: Character code for contract work period. `f` — full time, `p` — part time, none — all work period.
54
+
55
+ ## Thanks
56
+
57
+ This gem was inspired by [careerjet](https://github.com/kostia/careerjet) gem from [kostia](https://github.com/kostia).
58
+
59
+ ## License
60
+
61
+ Copyright (c) 2012-2013 Sergey Efremov, Kostiantyn Kahanskyi
62
+
63
+ MIT License
64
+
65
+ Permission is hereby granted, free of charge, to any person obtaining
66
+ a copy of this software and associated documentation files (the
67
+ "Software"), to deal in the Software without restriction, including
68
+ without limitation the rights to use, copy, modify, merge, publish,
69
+ distribute, sublicense, and/or sell copies of the Software, and to
70
+ permit persons to whom the Software is furnished to do so, subject to
71
+ the following conditions:
72
+
73
+ The above copyright notice and this permission notice shall be
74
+ included in all copies or substantial portions of the Software.
75
+
76
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
77
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
78
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
79
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
80
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
81
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
82
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
83
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
@@ -0,0 +1,22 @@
1
+ require File.expand_path('../lib/careerjet/version', __FILE__)
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.name = 'careerjet-rb'
5
+ gem.version = Careerjet.version
6
+ gem.description = "Ruby wrapper for Careerjet's API"
7
+ gem.summary = "Ruby wrapper for Careerjet's API"
8
+ gem.homepage = 'https://github.com/ResumUP/careerjet-rb'
9
+ gem.authors = ['Sergey Efremov', 'Kostiantyn Kahanskyi']
10
+ gem.email = %w[efremov.sergey@gmail.com kostiantyn.kahanskyi@googlemail.com]
11
+ gem.license = 'MIT'
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.require_paths = %w[lib]
14
+ gem.add_dependency 'multi_json'
15
+ gem.add_dependency 'rest-client'
16
+ gem.add_dependency 'hashie'
17
+ gem.add_development_dependency 'pry'
18
+ gem.add_development_dependency 'rake'
19
+ gem.add_development_dependency 'rspec'
20
+ gem.add_development_dependency 'webmock'
21
+ gem.add_development_dependency 'yajl-ruby' # To avoid warning from MultiJson
22
+ end
data/lib/careerjet.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'careerjet/constants'
2
+ require 'careerjet/errors'
3
+ require 'careerjet/client'
4
+ require 'careerjet/mash'
5
+ require 'careerjet/version'
6
+
7
+ module Careerjet
8
+
9
+ def self.search(params)
10
+ results = Careerjet::Client.new(params).search
11
+
12
+ Careerjet::Mash.from_json results
13
+ end
14
+ end
@@ -0,0 +1,49 @@
1
+ require 'rest_client'
2
+
3
+ module Careerjet
4
+ class Client
5
+
6
+ attr_accessor :params
7
+
8
+ def initialize(params)
9
+ @params = params || {}
10
+
11
+ set_locale
12
+ check_params
13
+ end
14
+
15
+ def check_params
16
+ unless Careerjet::LOCALES.keys.include?(@params[:locale_code])
17
+ raise Careerjet::UnknownLocale, "Not supported locale '#{@params[:locale_code]}'"
18
+ end
19
+
20
+ @params.each_key do |k|
21
+ unless Careerjet::ALLOWED_FIELDS.include? k
22
+ raise InvalidParam, "Unknown param key `#{k}'"
23
+ end
24
+ end
25
+ end
26
+
27
+ def search
28
+ response = RestClient.get [Careerjet::DOMAIN, 'search'].join('/'), params: @params
29
+ raise_errors response
30
+
31
+ response.body
32
+ end
33
+
34
+ def set_locale
35
+ @params[:locale_code] = @params[:locale_code] || @params[:locale] || :en_US
36
+ @params.delete(:locale)
37
+ end
38
+
39
+ def raise_errors response
40
+ case response.code.to_i
41
+ when 400..405
42
+ raise Careerjet::NotFoundError, "(#{response.code}): #{response.message}"
43
+ when 500..503
44
+ raise Careerjet::UnavailableError, "(#{response.code}): #{response.message}"
45
+ end
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,74 @@
1
+ module Careerjet
2
+ DOMAIN = "http://public.api.careerjet.net"
3
+
4
+ ALLOWED_FIELDS = [:keywords, :location, :sort, :start_num, :pagesize, :page,
5
+ :contracttype, :contractperiod, :locale_code]
6
+
7
+ LOCALES = {
8
+ :cs_CZ => 'http://www.careerjet.cz' ,
9
+ :da_DK => 'http://www.careerjet.dk' ,
10
+ :de_AT => 'http://www.careerjet.at' ,
11
+ :de_CH => 'http://www.careerjet.ch' ,
12
+ :de_DE => 'http://www.careerjet.de' ,
13
+ :en_AE => 'http://www.careerjet.ae' ,
14
+ :en_AU => 'http://www.careerjet.com.au' ,
15
+ :en_CA => 'http://www.careerjet.ca' ,
16
+ :en_CN => 'http://en.careerjet.cn' ,
17
+ :en_HK => 'http://www.careerjet.hk' ,
18
+ :en_IE => 'http://www.careerjet.ie' ,
19
+ :en_IN => 'http://www.careerjet.co.in' ,
20
+ :en_MY => 'http://www.careerjet.com.my' ,
21
+ :en_NZ => 'http://www.careerjet.co.nz' ,
22
+ :en_OM => 'http://www.careerjet.com.om' ,
23
+ :en_PH => 'http://www.careerjet.ph' ,
24
+ :en_PK => 'http://www.careerjet.com.pk' ,
25
+ :en_QA => 'http://www.careerjet.com.qa' ,
26
+ :en_SG => 'http://www.careerjet.sg' ,
27
+ :en_GB => 'http://www.careerjet.co.uk' ,
28
+ :en_US => 'http://www.careerjet.com' ,
29
+ :en_ZA => 'http://www.careerjet.co.za' ,
30
+ :en_TW => 'http://www.careerjet.com.tw' ,
31
+ :en_VN => 'http://www.careerjet.vn' ,
32
+ :es_AR => 'http://www.opcionempleo.com.ar' ,
33
+ :es_BO => 'http://www.opcionempleo.com.bo' ,
34
+ :es_CL => 'http://www.opcionempleo.cl' ,
35
+ :es_CR => 'http://www.opcionempleo.co.cr' ,
36
+ :es_DO => 'http://www.opcionempleo.com.do' ,
37
+ :es_EC => 'http://www.opcionempleo.ec' ,
38
+ :es_ES => 'http://www.opcionempleo.com' ,
39
+ :es_GT => 'http://www.opcionempleo.com.gt' ,
40
+ :es_MX => 'http://www.opcionempleo.com.mx' ,
41
+ :es_PA => 'http://www.opcionempleo.com.pa' ,
42
+ :es_PE => 'http://www.opcionempleo.com.pe' ,
43
+ :es_PR => 'http://www.opcionempleo.com.pr' ,
44
+ :es_PY => 'http://www.opcionempleo.com.py' ,
45
+ :es_UY => 'http://www.opcionempleo.com.uy' ,
46
+ :es_VE => 'http://www.opcionempleo.com.ve' ,
47
+ :fi_FI => 'http://www.careerjet.fi' ,
48
+ :fr_CA => 'http://fr.careerjet.ca' ,
49
+ :fr_BE => 'http://www.optioncarriere.be' ,
50
+ :fr_CH => 'http://www.optioncarriere.ch' ,
51
+ :fr_FR => 'http://www.optioncarriere.com' ,
52
+ :fr_LU => 'http://www.optioncarriere.lu' ,
53
+ :fr_MA => 'http://www.optioncarriere.ma' ,
54
+ :hu_HU => 'http://www.careerjet.hu' ,
55
+ :it_IT => 'http://www.careerjet.it' ,
56
+ :ja_JP => 'http://www.careerjet.jp' ,
57
+ :ko_KR => 'http://www.careerjet.co.kr' ,
58
+ :nl_BE => 'http://www.careerjet.be' ,
59
+ :nl_NL => 'http://www.careerjet.nl' ,
60
+ :no_NO => 'http://www.careerjet.no' ,
61
+ :pl_PL => 'http://www.careerjet.pl' ,
62
+ :pt_PT => 'http://www.careerjet.pt' ,
63
+ :pt_BR => 'http://www.careerjet.com.br' ,
64
+ :ru_RU => 'http://www.careerjet.ru' ,
65
+ :ru_UA => 'http://www.careerjet.com.ua' ,
66
+ :sv_SE => 'http://www.careerjet.se' ,
67
+ :sk_SK => 'http://www.careerjet.sk' ,
68
+ :tr_TR => 'http://www.careerjet.com.tr' ,
69
+ :uk_UA => 'http://www.careerjet.ua' ,
70
+ :vi_VN => 'http://www.careerjet.com.vn' ,
71
+ :zh_CN => 'http://www.careerjet.cn' ,
72
+ }
73
+
74
+ end
@@ -0,0 +1,9 @@
1
+ module Careerjet
2
+
3
+ class UnknownLocale < ArgumentError; end
4
+ class InvalidParam < ArgumentError; end
5
+
6
+ class UnavailableError < StandardError; end
7
+ class NotFoundError < StandardError; end
8
+
9
+ end
@@ -0,0 +1,11 @@
1
+ require 'hashie'
2
+ require 'multi_json'
3
+
4
+ module Careerjet
5
+ class Mash < ::Hashie::Mash
6
+ def self.from_json(json_string)
7
+ result_hash = ::MultiJson.decode(json_string)
8
+ new(result_hash)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ module Careerjet
2
+ def self.version
3
+ '0.1.0'
4
+ end
5
+ end
@@ -0,0 +1,27 @@
1
+ require 'webmock/rspec'
2
+ require 'careerjet'
3
+
4
+ describe Careerjet do
5
+ it "should request Careejet's search API with correct domain and given params" do
6
+ resp = {'hits' => 1, 'response_time' => 0.001, 'type' => 'JOBS', 'pages' => 1}
7
+ stub_http_request(:get, 'http://public.api.careerjet.net/search?keywords=rails&locale_code=en_US&page=1').to_return(
8
+ :body => MultiJson.encode(resp))
9
+
10
+ results = Careerjet.search(:locale => :en_US, :keywords => 'rails', :page => 1)
11
+
12
+ results.hits.should eql 1
13
+ results.response_time.should eql 0.001
14
+ end
15
+
16
+ it 'should raise appropriate error on unknown locale' do
17
+ lambda do
18
+ Careerjet.search :locale => :foo_Bar
19
+ end.should raise_error(Careerjet::UnknownLocale)
20
+ end
21
+
22
+ it 'should validate given params' do
23
+ lambda do
24
+ Careerjet.search :locale => :en_US, :keywords => 'rails', :foo => 'bar'
25
+ end.should raise_error(Careerjet::InvalidParam)
26
+ end
27
+ end
metadata ADDED
@@ -0,0 +1,172 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: careerjet-rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sergey Efremov
8
+ - Kostiantyn Kahanskyi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: multi_json
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rest-client
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: hashie
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: pry
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rake
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rspec
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: webmock
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: yajl-ruby
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: Ruby wrapper for Careerjet's API
127
+ email:
128
+ - efremov.sergey@gmail.com
129
+ - kostiantyn.kahanskyi@googlemail.com
130
+ executables: []
131
+ extensions: []
132
+ extra_rdoc_files: []
133
+ files:
134
+ - .gitignore
135
+ - .rspec
136
+ - .travis.yml
137
+ - Gemfile
138
+ - README.md
139
+ - Rakefile
140
+ - careerejet.gemspec
141
+ - lib/careerjet.rb
142
+ - lib/careerjet/client.rb
143
+ - lib/careerjet/constants.rb
144
+ - lib/careerjet/errors.rb
145
+ - lib/careerjet/mash.rb
146
+ - lib/careerjet/version.rb
147
+ - spec/careerjet_spec.rb
148
+ homepage: https://github.com/ResumUP/careerjet-rb
149
+ licenses:
150
+ - MIT
151
+ metadata: {}
152
+ post_install_message:
153
+ rdoc_options: []
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ requirements: []
167
+ rubyforge_project:
168
+ rubygems_version: 2.0.3
169
+ signing_key:
170
+ specification_version: 4
171
+ summary: Ruby wrapper for Careerjet's API
172
+ test_files: []