foursquare2 1.1.2 → 1.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
- 1.1.2
1
+ 1.2.0
data/foursquare2.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{foursquare2}
8
- s.version = "1.1.2"
8
+ s.version = "1.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 = ["Matt Mueller", "Marco Moura"]
12
- s.date = %q{2011-10-07}
12
+ s.date = %q{2011-10-20}
13
13
  s.description = %q{Gives access to all endpoints in version 2 of foursquare's API with syntax that will be familiar to those who used the original foursquare gem by Jeremy Welch.}
14
14
  s.email = ["muellermr@gmail.com", "email@marcomoura.com"]
15
15
  s.extra_rdoc_files = [
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
25
25
  "VERSION",
26
26
  "foursquare2.gemspec",
27
27
  "lib/foursquare2.rb",
28
+ "lib/foursquare2/api_error.rb",
28
29
  "lib/foursquare2/checkins.rb",
29
30
  "lib/foursquare2/client.rb",
30
31
  "lib/foursquare2/hash.rb",
@@ -36,6 +37,7 @@ Gem::Specification.new do |s|
36
37
  "lib/foursquare2/venues.rb",
37
38
  "test/config.rb",
38
39
  "test/fixtures/checkin.json",
40
+ "test/fixtures/error.json",
39
41
  "test/fixtures/explore_venues.json",
40
42
  "test/fixtures/friend_checkins.json",
41
43
  "test/fixtures/no_venues_by_tip.json",
@@ -0,0 +1,19 @@
1
+ module Foursquare2
2
+ class APIError < StandardError
3
+
4
+ attr_reader :code
5
+ attr_reader :detail
6
+ attr_reader :type
7
+
8
+ def initialize(error)
9
+ @code = error.code
10
+ @detail = error.errorDetail
11
+ @type = error.errorType
12
+ end
13
+
14
+ def message
15
+ "#{@type}: #{@detail} (#{@code})"
16
+ end
17
+
18
+ end
19
+ end
@@ -60,7 +60,11 @@ module Foursquare2
60
60
  # Added just for convenience to avoid having to traverse farther down the response just to get to returned data.
61
61
 
62
62
  def return_error_or_body(response, response_body)
63
- response.body.meta.code == 200 ? response_body : response.body
63
+ if response.body.meta.code == 200
64
+ response_body
65
+ else
66
+ raise Foursquare2::APIError.new(response.body.meta)
67
+ end
64
68
  end
65
69
 
66
70
  private
data/lib/foursquare2.rb CHANGED
@@ -27,6 +27,7 @@ module Foursquare2
27
27
  require 'foursquare2/venues'
28
28
  require 'foursquare2/client'
29
29
  require 'foursquare2/hash'
30
+ require 'foursquare2/api_error'
30
31
 
31
32
  end
32
33
 
@@ -0,0 +1,2 @@
1
+ { "meta": { "code": 500, "errorType": "error", "errorDetail": "An error occured" } }
2
+
data/test/helper.rb CHANGED
@@ -11,6 +11,7 @@ require 'test/unit'
11
11
  require 'shoulda'
12
12
  require 'matchy'
13
13
  require 'fakeweb'
14
+ require 'json'
14
15
 
15
16
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
17
  $LOAD_PATH.unshift(File.dirname(__FILE__))
@@ -27,10 +28,17 @@ def foursquare_url(url)
27
28
  url =~ /^http/ ? url : "http://api.foursquare.com/v2#{url}"
28
29
  end
29
30
 
30
- def fixture_file(filename)
31
+ def fixture_file(filename, options={})
31
32
  return '' if filename == ''
32
33
  file_path = File.expand_path(File.dirname(__FILE__) + '/fixtures/' + filename)
33
- File.read(file_path)
34
+ fixture = File.read(file_path)
35
+
36
+ case File.extname(file_path)
37
+ when '.json'
38
+ options[:parse] ? JSON.parse(fixture) : fixture
39
+ else
40
+ fixture
41
+ end
34
42
  end
35
43
 
36
44
  def stub_get(url, filename, options={})
data/test/test_client.rb CHANGED
@@ -29,4 +29,26 @@ class TestClient < Test::Unit::TestCase
29
29
  @client.ssl[:ca_file].should == 'path_to_ca_file'
30
30
  end
31
31
  end
32
+
33
+ context "When returning a successful response" do
34
+ should "return the response body as a Hash." do
35
+ response = Faraday::Response.new(:body => fixture_file('search_venues.json', :parse => true))
36
+ client = Foursquare2::Client.new
37
+
38
+ subject = client.return_error_or_body(response, response.body.response)
39
+ subject.should eql(response.body.response)
40
+ end
41
+ end
42
+
43
+ context "When returning a unsucessful response(error)" do
44
+ should "raise Foursquare2::Error." do
45
+ response = Faraday::Response.new(:body => fixture_file('error.json', :parse => true))
46
+ client = Foursquare2::Client.new
47
+
48
+ assert_raises(Foursquare2::APIError) do
49
+ client.return_error_or_body(response, response.body)
50
+ end
51
+ end
52
+ end
53
+
32
54
  end
metadata CHANGED
@@ -1,221 +1,158 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: foursquare2
3
- version: !ruby/object:Gem::Version
4
- hash: 23
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.0
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 1
9
- - 2
10
- version: 1.1.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Matt Mueller
14
9
  - Marco Moura
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2011-10-07 00:00:00 -05:00
13
+ date: 2011-10-20 00:00:00.000000000 -05:00
20
14
  default_executable:
21
- dependencies:
22
- - !ruby/object:Gem::Dependency
23
- type: :runtime
24
- requirement: &id001 !ruby/object:Gem::Requirement
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: faraday
18
+ requirement: &10737380 !ruby/object:Gem::Requirement
25
19
  none: false
26
- requirements:
20
+ requirements:
27
21
  - - <
28
- - !ruby/object:Gem::Version
29
- hash: 27
30
- segments:
31
- - 0
32
- - 8
33
- version: "0.8"
34
- - - ">="
35
- - !ruby/object:Gem::Version
36
- hash: 7
37
- segments:
38
- - 0
39
- - 6
40
- version: "0.6"
41
- name: faraday
42
- version_requirements: *id001
43
- prerelease: false
44
- - !ruby/object:Gem::Dependency
22
+ - !ruby/object:Gem::Version
23
+ version: '0.8'
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0.6'
45
27
  type: :runtime
46
- requirement: &id002 !ruby/object:Gem::Requirement
28
+ prerelease: false
29
+ version_requirements: *10737380
30
+ - !ruby/object:Gem::Dependency
31
+ name: faraday_middleware
32
+ requirement: &10695760 !ruby/object:Gem::Requirement
47
33
  none: false
48
- requirements:
34
+ requirements:
49
35
  - - <
50
- - !ruby/object:Gem::Version
51
- hash: 27
52
- segments:
53
- - 0
54
- - 8
55
- version: "0.8"
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 7
59
- segments:
60
- - 0
61
- - 6
62
- version: "0.6"
63
- name: faraday_middleware
64
- version_requirements: *id002
65
- prerelease: false
66
- - !ruby/object:Gem::Dependency
36
+ - !ruby/object:Gem::Version
37
+ version: '0.8'
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0.6'
67
41
  type: :runtime
68
- requirement: &id003 !ruby/object:Gem::Requirement
42
+ prerelease: false
43
+ version_requirements: *10695760
44
+ - !ruby/object:Gem::Dependency
45
+ name: hashie
46
+ requirement: &10691680 !ruby/object:Gem::Requirement
69
47
  none: false
70
- requirements:
48
+ requirements:
71
49
  - - ~>
72
- - !ruby/object:Gem::Version
73
- hash: 15
74
- segments:
75
- - 1
76
- - 0
77
- version: "1.0"
78
- name: hashie
79
- version_requirements: *id003
50
+ - !ruby/object:Gem::Version
51
+ version: '1.0'
52
+ type: :runtime
80
53
  prerelease: false
81
- - !ruby/object:Gem::Dependency
82
- type: :development
83
- requirement: &id004 !ruby/object:Gem::Requirement
84
- none: false
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- hash: 3
89
- segments:
90
- - 0
91
- version: "0"
54
+ version_requirements: *10691680
55
+ - !ruby/object:Gem::Dependency
92
56
  name: shoulda
93
- version_requirements: *id004
94
- prerelease: false
95
- - !ruby/object:Gem::Dependency
57
+ requirement: &10689700 !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
96
63
  type: :development
97
- requirement: &id005 !ruby/object:Gem::Requirement
64
+ prerelease: false
65
+ version_requirements: *10689700
66
+ - !ruby/object:Gem::Dependency
67
+ name: bundler
68
+ requirement: &10654920 !ruby/object:Gem::Requirement
98
69
  none: false
99
- requirements:
70
+ requirements:
100
71
  - - ~>
101
- - !ruby/object:Gem::Version
102
- hash: 15
103
- segments:
104
- - 1
105
- - 0
106
- version: "1.0"
107
- name: bundler
108
- version_requirements: *id005
109
- prerelease: false
110
- - !ruby/object:Gem::Dependency
72
+ - !ruby/object:Gem::Version
73
+ version: '1.0'
111
74
  type: :development
112
- requirement: &id006 !ruby/object:Gem::Requirement
75
+ prerelease: false
76
+ version_requirements: *10654920
77
+ - !ruby/object:Gem::Dependency
78
+ name: jeweler
79
+ requirement: &10651560 !ruby/object:Gem::Requirement
113
80
  none: false
114
- requirements:
81
+ requirements:
115
82
  - - ~>
116
- - !ruby/object:Gem::Version
117
- hash: 5
118
- segments:
119
- - 1
120
- - 5
121
- version: "1.5"
122
- name: jeweler
123
- version_requirements: *id006
124
- prerelease: false
125
- - !ruby/object:Gem::Dependency
83
+ - !ruby/object:Gem::Version
84
+ version: '1.5'
126
85
  type: :development
127
- requirement: &id007 !ruby/object:Gem::Requirement
128
- none: false
129
- requirements:
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- hash: 3
133
- segments:
134
- - 0
135
- version: "0"
136
- name: rcov
137
- version_requirements: *id007
138
86
  prerelease: false
139
- - !ruby/object:Gem::Dependency
87
+ version_requirements: *10651560
88
+ - !ruby/object:Gem::Dependency
89
+ name: rcov
90
+ requirement: &10634900 !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
140
96
  type: :development
141
- requirement: &id008 !ruby/object:Gem::Requirement
97
+ prerelease: false
98
+ version_requirements: *10634900
99
+ - !ruby/object:Gem::Dependency
100
+ name: fakeweb
101
+ requirement: &10632100 !ruby/object:Gem::Requirement
142
102
  none: false
143
- requirements:
103
+ requirements:
144
104
  - - ~>
145
- - !ruby/object:Gem::Version
146
- hash: 9
147
- segments:
148
- - 1
149
- - 3
150
- version: "1.3"
151
- name: fakeweb
152
- version_requirements: *id008
153
- prerelease: false
154
- - !ruby/object:Gem::Dependency
105
+ - !ruby/object:Gem::Version
106
+ version: '1.3'
155
107
  type: :development
156
- requirement: &id009 !ruby/object:Gem::Requirement
108
+ prerelease: false
109
+ version_requirements: *10632100
110
+ - !ruby/object:Gem::Dependency
111
+ name: jnunemaker-matchy
112
+ requirement: &10630160 !ruby/object:Gem::Requirement
157
113
  none: false
158
- requirements:
114
+ requirements:
159
115
  - - ~>
160
- - !ruby/object:Gem::Version
161
- hash: 3
162
- segments:
163
- - 0
164
- - 4
165
- version: "0.4"
166
- name: jnunemaker-matchy
167
- version_requirements: *id009
168
- prerelease: false
169
- - !ruby/object:Gem::Dependency
116
+ - !ruby/object:Gem::Version
117
+ version: '0.4'
170
118
  type: :development
171
- requirement: &id010 !ruby/object:Gem::Requirement
119
+ prerelease: false
120
+ version_requirements: *10630160
121
+ - !ruby/object:Gem::Dependency
122
+ name: json_pure
123
+ requirement: &10623100 !ruby/object:Gem::Requirement
172
124
  none: false
173
- requirements:
125
+ requirements:
174
126
  - - ~>
175
- - !ruby/object:Gem::Version
176
- hash: 7
177
- segments:
178
- - 1
179
- - 4
180
- version: "1.4"
181
- name: json_pure
182
- version_requirements: *id010
183
- prerelease: false
184
- - !ruby/object:Gem::Dependency
127
+ - !ruby/object:Gem::Version
128
+ version: '1.4'
185
129
  type: :development
186
- requirement: &id011 !ruby/object:Gem::Requirement
130
+ prerelease: false
131
+ version_requirements: *10623100
132
+ - !ruby/object:Gem::Dependency
133
+ name: multi_json
134
+ requirement: &10621360 !ruby/object:Gem::Requirement
187
135
  none: false
188
- requirements:
136
+ requirements:
189
137
  - - <
190
- - !ruby/object:Gem::Version
191
- hash: 15
192
- segments:
193
- - 2
194
- - 0
195
- - 0
138
+ - !ruby/object:Gem::Version
196
139
  version: 2.0.0
197
- - - ">="
198
- - !ruby/object:Gem::Version
199
- hash: 21
200
- segments:
201
- - 0
202
- - 0
203
- - 5
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
204
142
  version: 0.0.5
205
- name: multi_json
206
- version_requirements: *id011
143
+ type: :development
207
144
  prerelease: false
208
- description: Gives access to all endpoints in version 2 of foursquare's API with syntax that will be familiar to those who used the original foursquare gem by Jeremy Welch.
209
- email:
145
+ version_requirements: *10621360
146
+ description: Gives access to all endpoints in version 2 of foursquare's API with syntax
147
+ that will be familiar to those who used the original foursquare gem by Jeremy Welch.
148
+ email:
210
149
  - muellermr@gmail.com
211
150
  - email@marcomoura.com
212
151
  executables: []
213
-
214
152
  extensions: []
215
-
216
- extra_rdoc_files:
153
+ extra_rdoc_files:
217
154
  - LICENSE.txt
218
- files:
155
+ files:
219
156
  - .document
220
157
  - Gemfile
221
158
  - Gemfile.lock
@@ -225,6 +162,7 @@ files:
225
162
  - VERSION
226
163
  - foursquare2.gemspec
227
164
  - lib/foursquare2.rb
165
+ - lib/foursquare2/api_error.rb
228
166
  - lib/foursquare2/checkins.rb
229
167
  - lib/foursquare2/client.rb
230
168
  - lib/foursquare2/hash.rb
@@ -236,6 +174,7 @@ files:
236
174
  - lib/foursquare2/venues.rb
237
175
  - test/config.rb
238
176
  - test/fixtures/checkin.json
177
+ - test/fixtures/error.json
239
178
  - test/fixtures/explore_venues.json
240
179
  - test/fixtures/friend_checkins.json
241
180
  - test/fixtures/no_venues_by_tip.json
@@ -262,37 +201,31 @@ files:
262
201
  - test/test_venues.rb
263
202
  has_rdoc: true
264
203
  homepage: http://github.com/mattmueller/foursquare2
265
- licenses:
204
+ licenses:
266
205
  - MIT
267
206
  post_install_message:
268
207
  rdoc_options: []
269
-
270
- require_paths:
208
+ require_paths:
271
209
  - lib
272
- required_ruby_version: !ruby/object:Gem::Requirement
210
+ required_ruby_version: !ruby/object:Gem::Requirement
273
211
  none: false
274
- requirements:
275
- - - ">="
276
- - !ruby/object:Gem::Version
277
- hash: 3
278
- segments:
212
+ requirements:
213
+ - - ! '>='
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ segments:
279
217
  - 0
280
- version: "0"
281
- required_rubygems_version: !ruby/object:Gem::Requirement
218
+ hash: 273972918968587298
219
+ required_rubygems_version: !ruby/object:Gem::Requirement
282
220
  none: false
283
- requirements:
284
- - - ">="
285
- - !ruby/object:Gem::Version
286
- hash: 3
287
- segments:
288
- - 0
289
- version: "0"
221
+ requirements:
222
+ - - ! '>='
223
+ - !ruby/object:Gem::Version
224
+ version: '0'
290
225
  requirements: []
291
-
292
226
  rubyforge_project:
293
227
  rubygems_version: 1.6.2
294
228
  signing_key:
295
229
  specification_version: 3
296
230
  summary: Foursquare API v2 gem in the spirit of the original foursquare gem
297
231
  test_files: []
298
-