board-client 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "rest-client", "~> 1.6.1"
4
+ gem "yajl-ruby", "~> 0.7.7"
5
+
6
+ group :test do
7
+ gem "rspec", "~> 1.3.0"
8
+ gem "webmock", "~> 1.3.5"
9
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.2.1)
5
+ crack (0.1.8)
6
+ mime-types (1.16)
7
+ rest-client (1.6.1)
8
+ mime-types (>= 1.16)
9
+ rspec (1.3.0)
10
+ webmock (1.3.5)
11
+ addressable (>= 2.1.1)
12
+ crack (>= 0.1.7)
13
+ yajl-ruby (0.7.7)
14
+
15
+ PLATFORMS
16
+ ruby
17
+
18
+ DEPENDENCIES
19
+ rest-client (~> 1.6.1)
20
+ rspec (~> 1.3.0)
21
+ webmock (~> 1.3.5)
22
+ yajl-ruby (~> 0.7.7)
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Michael Guterl
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # board-client
2
+
3
+ client = Board::Client.new('YOUR_API_KEY_HERE')
4
+
5
+ ## candidate searches
6
+
7
+ search = client.candidate_search(:keywords => "ruby",
8
+ :distance => 50,
9
+ :location => "Cincinnati, OH")
10
+
11
+ iterate through current page of results
12
+
13
+ search.results.each do |result|
14
+
15
+ end
16
+
17
+ iterate through all pages and yield result
18
+
19
+ search.each_result do |result|
20
+
21
+ end
22
+
23
+ ## invitations
24
+
25
+ invitation = client.create_invitation(:first_name => "Michael",
26
+ :last_name => "Jordan",
27
+ :email => "michael.jordan@nike.com")
28
+
29
+ ## Note on Patches/Pull Requests
30
+
31
+ * Fork the project.
32
+ * Make your feature addition or bug fix.
33
+ * Add tests for it. This is important so I don't break it in a
34
+ future version unintentionally.
35
+ * Commit, do not mess with rakefile, version, or history.
36
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
37
+ * Send me a pull request. Bonus points for topic branches.
38
+
39
+ ## Copyright
40
+
41
+ Copyright (c) 2010 Michael Guterl. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,46 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "board-client"
8
+ gem.summary = %Q{A ruby wrapper for the board platform}
9
+ gem.description = %Q{A ruby wrapper for the board platform.}
10
+ gem.email = "mguterl@gmail.com"
11
+ gem.homepage = "http://github.com/mguterl/board-client"
12
+ gem.authors = ["Michael Guterl"]
13
+ gem.add_dependency "rest-client", "~> 1.6.1"
14
+ gem.add_dependency "yajl-ruby", "~> 0.7.7"
15
+ gem.add_development_dependency "rspec", "~> 1.3.0"
16
+ gem.add_development_dependency "webmock", "~> 1.3.5"
17
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
18
+ end
19
+ Jeweler::GemcutterTasks.new
20
+ rescue LoadError
21
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
22
+ end
23
+
24
+ require 'spec/rake/spectask'
25
+ Spec::Rake::SpecTask.new(:spec) do |spec|
26
+ spec.libs << 'lib' << 'spec'
27
+ spec.spec_files = FileList['spec/**/*_spec.rb']
28
+ end
29
+
30
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
31
+ spec.libs << 'lib' << 'spec'
32
+ spec.pattern = 'spec/**/*_spec.rb'
33
+ spec.rcov = true
34
+ end
35
+
36
+ task :default => :spec
37
+
38
+ require 'rake/rdoctask'
39
+ Rake::RDocTask.new do |rdoc|
40
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
41
+
42
+ rdoc.rdoc_dir = 'rdoc'
43
+ rdoc.title = "board-client #{version}"
44
+ rdoc.rdoc_files.include('README*')
45
+ rdoc.rdoc_files.include('lib/**/*.rb')
46
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,82 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{board-client}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Michael Guterl"]
12
+ s.date = %q{2011-04-05}
13
+ s.description = %q{A ruby wrapper for the board platform.}
14
+ s.email = %q{mguterl@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE",
24
+ "README.md",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "board-client.gemspec",
28
+ "lib/board-client.rb",
29
+ "lib/board/api.rb",
30
+ "lib/board/api/base.rb",
31
+ "lib/board/api/candidate_invitations.rb",
32
+ "lib/board/api/candidate_searches.rb",
33
+ "lib/board/api/users.rb",
34
+ "lib/board/candidate_search.rb",
35
+ "lib/board/client.rb",
36
+ "spec/board/api/candidate_invitations_spec.rb",
37
+ "spec/board/api/candidate_searches_spec.rb",
38
+ "spec/board/api/users_spec.rb",
39
+ "spec/board/client_spec.rb",
40
+ "spec/spec.opts",
41
+ "spec/spec_helper.rb"
42
+ ]
43
+ s.homepage = %q{http://github.com/mguterl/board-client}
44
+ s.require_paths = ["lib"]
45
+ s.rubygems_version = %q{1.5.2}
46
+ s.summary = %q{A ruby wrapper for the board platform}
47
+ s.test_files = [
48
+ "spec/board/api/candidate_invitations_spec.rb",
49
+ "spec/board/api/candidate_searches_spec.rb",
50
+ "spec/board/api/users_spec.rb",
51
+ "spec/board/client_spec.rb",
52
+ "spec/spec_helper.rb"
53
+ ]
54
+
55
+ if s.respond_to? :specification_version then
56
+ s.specification_version = 3
57
+
58
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
59
+ s.add_runtime_dependency(%q<rest-client>, ["~> 1.6.1"])
60
+ s.add_runtime_dependency(%q<yajl-ruby>, ["~> 0.7.7"])
61
+ s.add_runtime_dependency(%q<rest-client>, ["~> 1.6.1"])
62
+ s.add_runtime_dependency(%q<yajl-ruby>, ["~> 0.7.7"])
63
+ s.add_development_dependency(%q<rspec>, ["~> 1.3.0"])
64
+ s.add_development_dependency(%q<webmock>, ["~> 1.3.5"])
65
+ else
66
+ s.add_dependency(%q<rest-client>, ["~> 1.6.1"])
67
+ s.add_dependency(%q<yajl-ruby>, ["~> 0.7.7"])
68
+ s.add_dependency(%q<rest-client>, ["~> 1.6.1"])
69
+ s.add_dependency(%q<yajl-ruby>, ["~> 0.7.7"])
70
+ s.add_dependency(%q<rspec>, ["~> 1.3.0"])
71
+ s.add_dependency(%q<webmock>, ["~> 1.3.5"])
72
+ end
73
+ else
74
+ s.add_dependency(%q<rest-client>, ["~> 1.6.1"])
75
+ s.add_dependency(%q<yajl-ruby>, ["~> 0.7.7"])
76
+ s.add_dependency(%q<rest-client>, ["~> 1.6.1"])
77
+ s.add_dependency(%q<yajl-ruby>, ["~> 0.7.7"])
78
+ s.add_dependency(%q<rspec>, ["~> 1.3.0"])
79
+ s.add_dependency(%q<webmock>, ["~> 1.3.5"])
80
+ end
81
+ end
82
+
@@ -0,0 +1,49 @@
1
+ module Board
2
+ module API
3
+
4
+ class Base
5
+
6
+ def initialize(api_key, base_url)
7
+ @api_key = api_key
8
+ @base_url = base_url
9
+ end
10
+
11
+ private
12
+
13
+ def get(*args)
14
+ request(:get, *args)
15
+ end
16
+
17
+ def post(*args)
18
+ request(:post, *args)
19
+ end
20
+
21
+ def request(http_method, *args)
22
+ path = args.shift
23
+ params = args.shift.merge(:user_credentials => @api_key)
24
+ url = @base_url + path
25
+
26
+ response = case http_method
27
+ when :get
28
+ RestClient.get(url, { :params => params, :accept => :json })
29
+ when :post
30
+ RestClient.post(url, encode_json(params), :content_type => :json, :accept => :json)
31
+ else
32
+ raise ArgumentError, "unknown http method: #{http_method}"
33
+ end
34
+
35
+ decode_json(response.body)
36
+ end
37
+
38
+ def encode_json(obj)
39
+ Yajl::Encoder.encode(obj)
40
+ end
41
+
42
+ def decode_json(json)
43
+ Yajl::Parser.parse(json)
44
+ end
45
+
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,11 @@
1
+ module Board::API
2
+
3
+ class CandidateInvitations < Base
4
+
5
+ def create(params)
6
+ post "/candidate_invitations", params
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,11 @@
1
+ module Board::API
2
+
3
+ class CandidateSearches < Base
4
+
5
+ def create(params)
6
+ Board::CandidateSearch.new(@api_key, @base_url, params)
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,21 @@
1
+ module Board
2
+ module API
3
+
4
+ class Users < Base
5
+
6
+ def find(params)
7
+ get "/users", params
8
+ end
9
+
10
+ def unsubscribe(params)
11
+ get "/users/unsubscribe", params
12
+ end
13
+
14
+ def invalid(params)
15
+ get "/users/invalid", params
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
data/lib/board/api.rb ADDED
@@ -0,0 +1,10 @@
1
+ module Board
2
+ module API
3
+
4
+ autoload :Base, 'board/api/base'
5
+ autoload :CandidateInvitations, 'board/api/candidate_invitations'
6
+ autoload :Users, 'board/api/users'
7
+ autoload :CandidateSearches, 'board/api/candidate_searches'
8
+
9
+ end
10
+ end
@@ -0,0 +1,70 @@
1
+ module Board
2
+
3
+ class CandidateSearch < API::Base
4
+
5
+ DEFAULT_PER_PAGE = 10
6
+
7
+ attr_reader :params
8
+
9
+ def initialize(*args)
10
+ @params = args.pop
11
+ self.page = params[:page] || 1
12
+ super
13
+ end
14
+
15
+ def each_result
16
+ (1..total_pages).each do |page|
17
+ self.page = page
18
+ results.each do |result|
19
+ yield result
20
+ end
21
+ clear
22
+ end
23
+ end
24
+
25
+ def total_pages
26
+ (total / per_page.to_f).ceil
27
+ end
28
+
29
+ def results
30
+ response['results']
31
+ end
32
+
33
+ def total
34
+ response['total']
35
+ end
36
+
37
+ def per_page
38
+ params[:per_page] || DEFAULT_PER_PAGE
39
+ end
40
+
41
+ def page
42
+ params[:page]
43
+ end
44
+
45
+ def page=(value)
46
+ params[:page] = value
47
+ end
48
+
49
+ def valid?
50
+ response && (errors.nil? || errors.size == 0)
51
+ end
52
+
53
+ attr_reader :errors
54
+
55
+ private
56
+
57
+ def clear
58
+ @response = nil
59
+ @errors = nil
60
+ end
61
+
62
+ def response
63
+ @response ||= get "/candidate_searches", params
64
+ rescue RestClient::Exception => e
65
+ @errors = decode_json(e.response)
66
+ end
67
+
68
+ end
69
+
70
+ end
@@ -0,0 +1,39 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'rest_client'
5
+ require 'yajl'
6
+
7
+ require 'board/api'
8
+
9
+ module Board
10
+
11
+ autoload :CandidateSearch, 'board/candidate_search'
12
+
13
+ class Client
14
+
15
+ class << self
16
+ attr_accessor :default_url
17
+ end
18
+ self.default_url = 'https://board.recruitmilitary.com/api/v1'
19
+
20
+ def initialize(api_key, url = Client.default_url)
21
+ @api_key = api_key
22
+ @url = url
23
+ end
24
+
25
+ def candidate_invitations
26
+ @candidate_invitations ||= API::CandidateInvitations.new(@api_key, @url)
27
+ end
28
+
29
+ def users
30
+ @users ||= API::Users.new(@api_key, @url)
31
+ end
32
+
33
+ def candidate_search(params)
34
+ API::CandidateSearches.new(@api_key, @url).create(params)
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1 @@
1
+ require 'board/client'
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe Board::API::CandidateInvitations do
4
+
5
+ let(:client) { Board::Client.new('VALID_KEY') }
6
+
7
+ before do
8
+ stub_request(:post, "https://board.recruitmilitary.com/api/v1/candidate_invitations").
9
+ with(:body => {
10
+ "first_name" => "Michael",
11
+ "email" => "michael.jordan@nike.com",
12
+ "last_name" => "Jordan",
13
+ "user_credentials" => "VALID_KEY"}).
14
+ to_return(:body => %q{{"created_at":"2010-09-21T17:51:23Z","accepted_at":null,"updated_at":"2010-09-21T17:51:23Z","secret_id":"5991a3d7c0fdfe0b6fa659ff8b5de18d","id":3,"last_name":"bar","organization_id":null,"first_name":"foo","email":"foo@bar.com"}})
15
+ end
16
+
17
+ describe "#create" do
18
+
19
+ context 'when successful' do
20
+ it 'should return a hash representing the saved invitation' do
21
+ response = client.candidate_invitations.create(:first_name => "Michael",
22
+ :last_name => "Jordan",
23
+ :email => "michael.jordan@nike.com")
24
+ response.should == {
25
+ "id" => 3,
26
+ "first_name" => "foo",
27
+ "last_name" => "bar",
28
+ "email" => "foo@bar.com",
29
+ "secret_id" => "5991a3d7c0fdfe0b6fa659ff8b5de18d",
30
+ "organization_id" => nil,
31
+ "accepted_at" => nil,
32
+ "created_at" => "2010-09-21T17:51:23Z",
33
+ "updated_at" => "2010-09-21T17:51:23Z",
34
+ }
35
+ end
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe Board::API::CandidateSearches do
4
+
5
+ let(:client) { Board::Client.new('VALID_KEY') }
6
+
7
+ before do
8
+ stub_request(:get, "https://board.recruitmilitary.com/api/v1/candidate_searches").
9
+ with(:query => {
10
+ 'user_credentials' => 'VALID_KEY',
11
+ 'keywords' => 'ruby',
12
+ 'page' => '1',
13
+ }).
14
+ to_return(:body => %q{{"results":[{"email":"candidate@recruitmilitary.com","zip_code":null,"last_activity_at":"2010-11-24T14:13:26Z","phone":null,"state":"OH","last_name":"Smith","first_name":"Rodolfo","resume_url":null,"location":"Hagenesside, OH","city":"Hagenesside"},{"email":"benton@effertz.info","zip_code":null,"last_activity_at":"2010-11-16T14:13:26Z","phone":null,"state":"OH","last_name":"Bins","first_name":"Alfred","resume_url":null,"location":"East Elizabeth, OH","city":"East Elizabeth"},{"email":"melba@armstrong.us","zip_code":null,"last_activity_at":"2010-11-22T14:13:27Z","phone":null,"state":"OH","last_name":"Pouros","first_name":"Warren","resume_url":null,"location":"Margemouth, OH","city":"Margemouth"},{"email":"yvette@lynch.name","zip_code":null,"last_activity_at":"2010-11-25T14:13:27Z","phone":null,"state":"OH","last_name":"Denesik","first_name":"Isai","resume_url":null,"location":"Lake Othaton, OH","city":"Lake Othaton"},{"email":"hipolito.mosciski@schoenbrown.uk","zip_code":null,"last_activity_at":"2010-11-25T14:13:28Z","phone":null,"state":"OH","last_name":"Paucek","first_name":"Cristina","resume_url":"https://localhost/resumes/1/resume.pdf","location":"East Aiden, OH","city":"East Aiden"},{"email":"lydia@cassin.name","zip_code":null,"last_activity_at":"2010-11-13T14:13:29Z","phone":null,"state":"OH","last_name":"Johnson","first_name":"Marianna","resume_url":null,"location":"Bartonhaven, OH","city":"Bartonhaven"},{"email":"gabe@price.ca","zip_code":null,"last_activity_at":"2010-11-16T14:13:29Z","phone":null,"state":"OH","last_name":"Wolf","first_name":"Idell","resume_url":"https://localhost/resumes/2/resume.pdf","location":"South Angelinestad, OH","city":"South Angelinestad"},{"email":"monserrat_douglas@zemlakbrekke.biz","zip_code":null,"last_activity_at":"2010-11-16T14:13:30Z","phone":null,"state":"OH","last_name":"Shanahan","first_name":"Zelda","resume_url":null,"location":"Mosesstad, OH","city":"Mosesstad"},{"email":"vada.hauck@gaylordbosco.co.uk","zip_code":null,"last_activity_at":"2010-11-12T14:13:30Z","phone":null,"state":"OH","last_name":"Bergstrom","first_name":"Anabelle","resume_url":null,"location":"Cliffordhaven, OH","city":"Cliffordhaven"},{"email":"maeve@abernathywaelchi.info","zip_code":null,"last_activity_at":"2010-12-01T14:13:31Z","phone":null,"state":"OH","last_name":"Gibson","first_name":"Rubie","resume_url":null,"location":"New Tre, OH","city":"New Tre"}],"page":1,"total":15}})
15
+ stub_request(:get, "https://board.recruitmilitary.com/api/v1/candidate_searches").
16
+ with(:query => {
17
+ 'user_credentials' => 'VALID_KEY',
18
+ 'keywords' => 'ruby',
19
+ 'page' => '2',
20
+ }).
21
+ to_return(:body => %q{{"results":[{"email":"candidate@recruitmilitary.com","zip_code":null,"last_activity_at":"2010-11-24T14:13:26Z","phone":null,"state":"OH","last_name":"Smith","first_name":"Rodolfo","resume_url":null,"location":"Hagenesside, OH","city":"Hagenesside"},{"email":"benton@effertz.info","zip_code":null,"last_activity_at":"2010-11-16T14:13:26Z","phone":null,"state":"OH","last_name":"Bins","first_name":"Alfred","resume_url":null,"location":"East Elizabeth, OH","city":"East Elizabeth"},{"email":"melba@armstrong.us","zip_code":null,"last_activity_at":"2010-11-22T14:13:27Z","phone":null,"state":"OH","last_name":"Pouros","first_name":"Warren","resume_url":null,"location":"Margemouth, OH","city":"Margemouth"},{"email":"yvette@lynch.name","zip_code":null,"last_activity_at":"2010-11-25T14:13:27Z","phone":null,"state":"OH","last_name":"Denesik","first_name":"Isai","resume_url":null,"location":"Lake Othaton, OH","city":"Lake Othaton"},{"email":"hipolito.mosciski@schoenbrown.uk","zip_code":null,"last_activity_at":"2010-11-25T14:13:28Z","phone":null,"state":"OH","last_name":"Paucek","first_name":"Cristina","resume_url":"https://localhost/resumes/1/resume.pdf","location":"East Aiden, OH","city":"East Aiden"}],"page":2,"total":15}})
22
+ stub_request(:get, "https://board.recruitmilitary.com/api/v1/candidate_searches").
23
+ with(:query => {
24
+ 'user_credentials' => 'VALID_KEY',
25
+ 'per_page' => '501',
26
+ 'page' => '1',
27
+ }).
28
+ to_return(:body => %q{[["per_page", "must be less than or equal to 500"]]},
29
+ :status => 422)
30
+ end
31
+
32
+ describe "searching", "when valid" do
33
+
34
+ let(:search) { client.candidate_search(:keywords => "ruby") }
35
+
36
+ it 'is valid' do
37
+ search.should be_valid
38
+ end
39
+
40
+ it 'returns the number of search results' do
41
+ search.total.should == 15
42
+ end
43
+
44
+ it 'returns the page' do
45
+ search.page.should == 1
46
+ end
47
+
48
+ it 'returns the correct number of results' do
49
+ search.results.size.should == 10
50
+ end
51
+
52
+ it 'returns the correct number of total pages' do
53
+ search.total_pages.should == 2
54
+ end
55
+
56
+ it 'iterates through all results' do
57
+ results = []
58
+ search.each_result do |result|
59
+ results << result
60
+ end
61
+ results.size.should == search.total
62
+ end
63
+
64
+ end
65
+
66
+ describe "searching", "when invalid" do
67
+
68
+ let(:search) { client.candidate_search(:per_page => 501) }
69
+
70
+ before do
71
+ search.should_not be_valid
72
+ end
73
+
74
+ it 'returns a collection of errors' do
75
+ search.errors.should == [["per_page", "must be less than or equal to 500"]]
76
+ end
77
+
78
+ end
79
+
80
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe Board::API::Users do
4
+
5
+ let(:client) { Board::Client.new('VALID_KEY') }
6
+
7
+ before do
8
+ stub_request(:get, "https://board.recruitmilitary.com/api/v1/users?email=jerry@seinfeld.com&user_credentials=VALID_KEY").
9
+ to_return(:body => %q{[{"id":1,"last_name":"Seinfeld","first_name":"Jerry","email":"jerry@seinfeld.com"}]})
10
+
11
+ stub_request(:get, "https://board.recruitmilitary.com/api/v1/users/unsubscribe?email=jerry@seinfeld.com&user_credentials=VALID_KEY").
12
+ to_return(:body => %q{{"unsubscribed_at":"2010-11-17T15:09:57-05:00"}})
13
+
14
+ stub_request(:get, "https://board.recruitmilitary.com/api/v1/users/invalid?email=jerry@seinfeld.com&user_credentials=VALID_KEY").
15
+ to_return(:body => %q{{"email_invalid_at":"2010-11-17T15:09:57-05:00"}})
16
+ end
17
+
18
+ describe "#find" do
19
+
20
+ it 'should return an array of hashes' do
21
+ response = client.users.find(:email => 'jerry@seinfeld.com')
22
+
23
+ response.should == [{ "id" => 1,
24
+ "last_name" => "Seinfeld",
25
+ "first_name" => "Jerry",
26
+ "email" => "jerry@seinfeld.com"}]
27
+ end
28
+
29
+ end
30
+
31
+ describe "#unsubscribe" do
32
+
33
+ it 'should return a date' do
34
+ response = client.users.unsubscribe(:email => 'jerry@seinfeld.com')
35
+
36
+ response.should == { 'unsubscribed_at' => "2010-11-17T15:09:57-05:00" }
37
+ end
38
+
39
+ end
40
+
41
+ describe "#invalid" do
42
+ it 'returns the date the user was marked invalid' do
43
+ response = client.users.invalid(:email => 'jerry@seinfeld.com')
44
+
45
+ response.should == { 'email_invalid_at' => '2010-11-17T15:09:57-05:00' }
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe Board::Client do
4
+
5
+ let(:client) { Board::Client.new('VALID_KEY') }
6
+
7
+ describe "when creating" do
8
+
9
+ context 'and missing an API key' do
10
+ it 'should raise an error' do
11
+ expect { Board::Client.new }.to raise_error
12
+ end
13
+ end
14
+
15
+ context "with an API key" do
16
+ it 'should not raise an error' do
17
+ Board::Client.new('API_KEY')
18
+ end
19
+ end
20
+
21
+ end
22
+
23
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'board-client'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+ require 'webmock/rspec'
7
+
8
+ require 'yajl/json_gem' # required for webmock
9
+
10
+ Spec::Runner.configure do |config|
11
+ config.include WebMock
12
+ end
metadata ADDED
@@ -0,0 +1,188 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: board-client
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Michael Guterl
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-04-05 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ hash: 13
28
+ segments:
29
+ - 1
30
+ - 6
31
+ - 1
32
+ version: 1.6.1
33
+ version_requirements: *id001
34
+ name: rest-client
35
+ prerelease: false
36
+ type: :runtime
37
+ - !ruby/object:Gem::Dependency
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ hash: 13
44
+ segments:
45
+ - 0
46
+ - 7
47
+ - 7
48
+ version: 0.7.7
49
+ version_requirements: *id002
50
+ name: yajl-ruby
51
+ prerelease: false
52
+ type: :runtime
53
+ - !ruby/object:Gem::Dependency
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ hash: 13
60
+ segments:
61
+ - 1
62
+ - 6
63
+ - 1
64
+ version: 1.6.1
65
+ version_requirements: *id003
66
+ name: rest-client
67
+ prerelease: false
68
+ type: :runtime
69
+ - !ruby/object:Gem::Dependency
70
+ requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ hash: 13
76
+ segments:
77
+ - 0
78
+ - 7
79
+ - 7
80
+ version: 0.7.7
81
+ version_requirements: *id004
82
+ name: yajl-ruby
83
+ prerelease: false
84
+ type: :runtime
85
+ - !ruby/object:Gem::Dependency
86
+ requirement: &id005 !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ hash: 27
92
+ segments:
93
+ - 1
94
+ - 3
95
+ - 0
96
+ version: 1.3.0
97
+ version_requirements: *id005
98
+ name: rspec
99
+ prerelease: false
100
+ type: :development
101
+ - !ruby/object:Gem::Dependency
102
+ requirement: &id006 !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ~>
106
+ - !ruby/object:Gem::Version
107
+ hash: 17
108
+ segments:
109
+ - 1
110
+ - 3
111
+ - 5
112
+ version: 1.3.5
113
+ version_requirements: *id006
114
+ name: webmock
115
+ prerelease: false
116
+ type: :development
117
+ description: A ruby wrapper for the board platform.
118
+ email: mguterl@gmail.com
119
+ executables: []
120
+
121
+ extensions: []
122
+
123
+ extra_rdoc_files:
124
+ - LICENSE
125
+ - README.md
126
+ files:
127
+ - .document
128
+ - Gemfile
129
+ - Gemfile.lock
130
+ - LICENSE
131
+ - README.md
132
+ - Rakefile
133
+ - VERSION
134
+ - board-client.gemspec
135
+ - lib/board-client.rb
136
+ - lib/board/api.rb
137
+ - lib/board/api/base.rb
138
+ - lib/board/api/candidate_invitations.rb
139
+ - lib/board/api/candidate_searches.rb
140
+ - lib/board/api/users.rb
141
+ - lib/board/candidate_search.rb
142
+ - lib/board/client.rb
143
+ - spec/board/api/candidate_invitations_spec.rb
144
+ - spec/board/api/candidate_searches_spec.rb
145
+ - spec/board/api/users_spec.rb
146
+ - spec/board/client_spec.rb
147
+ - spec/spec.opts
148
+ - spec/spec_helper.rb
149
+ has_rdoc: true
150
+ homepage: http://github.com/mguterl/board-client
151
+ licenses: []
152
+
153
+ post_install_message:
154
+ rdoc_options: []
155
+
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ hash: 3
164
+ segments:
165
+ - 0
166
+ version: "0"
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ none: false
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ hash: 3
173
+ segments:
174
+ - 0
175
+ version: "0"
176
+ requirements: []
177
+
178
+ rubyforge_project:
179
+ rubygems_version: 1.5.2
180
+ signing_key:
181
+ specification_version: 3
182
+ summary: A ruby wrapper for the board platform
183
+ test_files:
184
+ - spec/board/api/candidate_invitations_spec.rb
185
+ - spec/board/api/candidate_searches_spec.rb
186
+ - spec/board/api/users_spec.rb
187
+ - spec/board/client_spec.rb
188
+ - spec/spec_helper.rb