foursquare2 1.1.2 → 1.2.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.
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
-