board-client 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/board-client.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{board-client}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Guterl"]
12
- s.date = %q{2011-04-05}
12
+ s.date = %q{2011-05-03}
13
13
  s.description = %q{A ruby wrapper for the board platform.}
14
14
  s.email = %q{mguterl@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -26,16 +26,10 @@ Gem::Specification.new do |s|
26
26
  "VERSION",
27
27
  "board-client.gemspec",
28
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
29
  "lib/board/candidate_search.rb",
35
30
  "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",
31
+ "lib/board/request.rb",
32
+ "spec/board/candidate_search_spec.rb",
39
33
  "spec/board/client_spec.rb",
40
34
  "spec/spec.opts",
41
35
  "spec/spec_helper.rb"
@@ -45,9 +39,7 @@ Gem::Specification.new do |s|
45
39
  s.rubygems_version = %q{1.5.2}
46
40
  s.summary = %q{A ruby wrapper for the board platform}
47
41
  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",
42
+ "spec/board/candidate_search_spec.rb",
51
43
  "spec/board/client_spec.rb",
52
44
  "spec/spec_helper.rb"
53
45
  ]
@@ -1,69 +1,44 @@
1
1
  module Board
2
2
 
3
- class CandidateSearch < API::Base
3
+ class CandidateSearch
4
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
5
+ attr_reader :errors
24
6
 
25
- def total_pages
26
- (total / per_page.to_f).ceil
7
+ def initialize(client, params = {})
8
+ @client = client
9
+ @params = params
10
+ @errors = []
27
11
  end
28
12
 
29
13
  def results
30
- response['results']
31
- end
32
-
33
- def total
34
- response['total']
14
+ initial_search['results']
35
15
  end
36
16
 
37
- def per_page
38
- params[:per_page] || DEFAULT_PER_PAGE
39
- end
17
+ def each_result
18
+ total = initial_search['total']
19
+ pages = (total / 10.0).ceil
40
20
 
41
- def page
42
- params[:page]
43
- end
21
+ initial_search['results'].each { |r| yield r }
44
22
 
45
- def page=(value)
46
- params[:page] = value
23
+ (2..pages).each do |page|
24
+ search = @client.candidate_searches(@params.merge(:page => page))
25
+ results = search['results']
26
+ results.each { |r| yield r }
27
+ end
47
28
  end
48
29
 
49
30
  def valid?
50
- response && (errors.nil? || errors.size == 0)
31
+ perform_search and @errors.empty?
51
32
  end
52
33
 
53
- attr_reader :errors
54
-
55
34
  private
56
35
 
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)
36
+ def initial_search
37
+ @initial_search ||= @client.candidate_searches(@params)
38
+ rescue Board::Request::Error => e
39
+ @errors = Yajl::Parser.parse(e.response.body)
66
40
  end
41
+ alias perform_search initial_search
67
42
 
68
43
  end
69
44
 
data/lib/board/client.rb CHANGED
@@ -1,17 +1,13 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
-
4
- require 'rest_client'
5
1
  require 'yajl'
6
2
 
7
- require 'board/api'
3
+ require 'board/request'
4
+ require 'board/candidate_search'
8
5
 
9
6
  module Board
10
-
11
- autoload :CandidateSearch, 'board/candidate_search'
12
-
13
7
  class Client
14
8
 
9
+ include Request
10
+
15
11
  class << self
16
12
  attr_accessor :default_url
17
13
  end
@@ -22,18 +18,29 @@ module Board
22
18
  @url = url
23
19
  end
24
20
 
25
- def candidate_invitations
26
- @candidate_invitations ||= API::CandidateInvitations.new(@api_key, @url)
21
+ def candidate_searches(params)
22
+ get "/candidate_searches", params
27
23
  end
28
24
 
29
- def users
30
- @users ||= API::Users.new(@api_key, @url)
25
+ def find_user(params)
26
+ get "/users", params
31
27
  end
32
28
 
33
- def candidate_search(params)
34
- API::CandidateSearches.new(@api_key, @url).create(params)
29
+ def mark_user_invalid(params)
30
+ get "/users/invalid", params
35
31
  end
36
32
 
37
- end
33
+ def unsubscribe(params)
34
+ get "/users/unsubscribe", params
35
+ end
38
36
 
37
+ def create_candidate_invitation(params)
38
+ post "/candidate_invitations", params
39
+ end
40
+
41
+ def find_candidate(candidate_id)
42
+ get "/candidates/#{candidate_id}", {}
43
+ end
44
+
45
+ end
39
46
  end
@@ -0,0 +1,68 @@
1
+ module Board
2
+ module Request
3
+
4
+ class Error < StandardError
5
+ attr_reader :response
6
+
7
+ def initialize(response)
8
+ @response = response
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def post(path, params)
15
+ request path, params, :post
16
+ end
17
+
18
+ def get(path, params)
19
+ request path, params, :get
20
+ end
21
+
22
+ def request(path, params, method)
23
+ params.merge!(:user_credentials => @api_key)
24
+
25
+ response = case method
26
+ when :get
27
+ uri = URI.parse(@url + path + "?" + hash_to_query_string(params))
28
+ Net::HTTP.get_response(uri)
29
+ when :post
30
+ uri = URI.parse(@url + path)
31
+ Net::HTTP.post_form(uri, params)
32
+ end
33
+
34
+ if response.code =~ /2../
35
+ Yajl::Parser.parse(response.body)
36
+ else
37
+ raise Error.new(response)
38
+ end
39
+ end
40
+
41
+ def hash_to_query_string(hash)
42
+ params = ''
43
+ stack = []
44
+
45
+ hash.each do |k, v|
46
+ if v.is_a?(Hash)
47
+ stack << [k,v]
48
+ else
49
+ params << "#{k}=#{v}&"
50
+ end
51
+ end
52
+
53
+ stack.each do |parent, hash|
54
+ hash.each do |k, v|
55
+ if v.is_a?(Hash)
56
+ stack << ["#{parent}[#{k}]", v]
57
+ else
58
+ params << "#{parent}[#{k}]=#{v}&"
59
+ end
60
+ end
61
+ end
62
+
63
+ params.chop! # trailing &
64
+ params
65
+ end
66
+
67
+ end
68
+ end
@@ -1,80 +1,42 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Board::API::CandidateSearches do
3
+ describe Board::CandidateSearch do
4
4
 
5
+ let(:search) { Board::CandidateSearch.new(client, :keywords => 'ruby') }
5
6
  let(:client) { Board::Client.new('VALID_KEY') }
6
7
 
7
8
  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
- }).
9
+ stub_request(:get, "http://board.recruitmilitary.com:443/api/v1/candidate_searches?keywords=ruby&user_credentials=VALID_KEY").
14
10
  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
- }).
11
+ stub_request(:get, "http://board.recruitmilitary.com:443/api/v1/candidate_searches?keywords=ruby&page=2&user_credentials=VALID_KEY").
21
12
  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
- }).
13
+ stub_request(:get, "http://board.recruitmilitary.com:443/api/v1/candidate_searches?per_page=501&user_credentials=VALID_KEY").
28
14
  to_return(:body => %q{[["per_page", "must be less than or equal to 500"]]},
29
15
  :status => 422)
30
16
  end
31
17
 
32
18
  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
19
  it 'returns the correct number of results' do
49
20
  search.results.size.should == 10
50
21
  end
51
22
 
52
- it 'returns the correct number of total pages' do
53
- search.total_pages.should == 2
54
- end
55
-
56
23
  it 'iterates through all results' do
57
24
  results = []
58
25
  search.each_result do |result|
59
26
  results << result
60
27
  end
61
- results.size.should == search.total
28
+ results.size.should == 15
62
29
  end
63
-
64
30
  end
65
31
 
66
32
  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
33
+ let(:search) { Board::CandidateSearch.new(client, :per_page => '501') }
73
34
 
74
35
  it 'returns a collection of errors' do
36
+ search.valid?
37
+
75
38
  search.errors.should == [["per_page", "must be less than or equal to 500"]]
76
39
  end
77
-
78
40
  end
79
41
 
80
42
  end
@@ -1,11 +1,32 @@
1
1
  require 'spec_helper'
2
2
 
3
+ module RequestTracking
4
+
5
+ class Request < Struct.new(:path, :params, :method); end
6
+
7
+ def request(path, params, method)
8
+ requests << Request.new(path, params, method)
9
+ end
10
+
11
+ def requests
12
+ @requests ||= []
13
+ end
14
+
15
+ end
16
+
3
17
  describe Board::Client do
4
18
 
5
- let(:client) { Board::Client.new('VALID_KEY') }
19
+ let(:client) {
20
+ client = Board::Client.new('VALID_KEY')
21
+ client.extend(RequestTracking)
22
+ client
23
+ }
6
24
 
7
- describe "when creating" do
25
+ def last_request
26
+ @last_request ||= client.requests.last
27
+ end
8
28
 
29
+ describe "when creating" do
9
30
  context 'and missing an API key' do
10
31
  it 'should raise an error' do
11
32
  expect { Board::Client.new }.to raise_error
@@ -17,7 +38,69 @@ describe Board::Client do
17
38
  Board::Client.new('API_KEY')
18
39
  end
19
40
  end
41
+ end
42
+
43
+ describe '#candidate_searches' do
44
+ it 'performs the correct request' do
45
+ client.candidate_searches(:keywords => 'ruby', :location => 'Cincinnati')
46
+
47
+ last_request.path.should == '/candidate_searches'
48
+ last_request.method.should == :get
49
+ last_request.params.should == {
50
+ :keywords => "ruby",
51
+ :location => "Cincinnati",
52
+ }
53
+ end
54
+ end
55
+
56
+ describe '#find_user' do
57
+ it 'performs the correct request' do
58
+ client.find_user(:email => 'bob@rm.com')
59
+
60
+ last_request.path.should == '/users'
61
+ last_request.method.should == :get
62
+ last_request.params.should == { :email => 'bob@rm.com' }
63
+ end
64
+ end
20
65
 
66
+ describe '#mark_user_invalid' do
67
+ it 'performs the correct request' do
68
+ client.mark_user_invalid(:email => 'bob@rm.com')
69
+
70
+ last_request.path.should == '/users/invalid'
71
+ last_request.method.should == :get
72
+ last_request.params.should == { :email => 'bob@rm.com' }
73
+ end
74
+ end
75
+
76
+ describe '#unsubscribe' do
77
+ it 'performs the correct request' do
78
+ client.unsubscribe(:email => 'bob@rm.com')
79
+
80
+ last_request.path.should == '/users/unsubscribe'
81
+ last_request.method.should == :get
82
+ last_request.params.should == { :email => 'bob@rm.com' }
83
+ end
84
+ end
85
+
86
+ describe '#create_candidate_invitation' do
87
+ it 'performs the correct request' do
88
+ client.create_candidate_invitation(:email => 'bob@rm.com')
89
+
90
+ last_request.path.should == '/candidate_invitations'
91
+ last_request.method.should == :post
92
+ last_request.params.should == { :email => 'bob@rm.com' }
93
+ end
94
+ end
95
+
96
+ describe '#candidates' do
97
+ it 'performs the correct request' do
98
+ client.find_candidate(42)
99
+
100
+ last_request.path.should == '/candidates/42'
101
+ last_request.method.should == :get
102
+ last_request.params.should == {}
103
+ end
21
104
  end
22
105
 
23
106
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: board-client
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Michael Guterl
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-05 00:00:00 -04:00
18
+ date: 2011-05-03 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -133,16 +133,10 @@ files:
133
133
  - VERSION
134
134
  - board-client.gemspec
135
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
136
  - lib/board/candidate_search.rb
142
137
  - 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
138
+ - lib/board/request.rb
139
+ - spec/board/candidate_search_spec.rb
146
140
  - spec/board/client_spec.rb
147
141
  - spec/spec.opts
148
142
  - spec/spec_helper.rb
@@ -181,8 +175,6 @@ signing_key:
181
175
  specification_version: 3
182
176
  summary: A ruby wrapper for the board platform
183
177
  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
178
+ - spec/board/candidate_search_spec.rb
187
179
  - spec/board/client_spec.rb
188
180
  - spec/spec_helper.rb
@@ -1,49 +0,0 @@
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
@@ -1,11 +0,0 @@
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
@@ -1,11 +0,0 @@
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
@@ -1,21 +0,0 @@
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 DELETED
@@ -1,10 +0,0 @@
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
@@ -1,40 +0,0 @@
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
@@ -1,49 +0,0 @@
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