foursquare2 1.8.2 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
data/Readme.md CHANGED
@@ -119,6 +119,7 @@ See [the documentation](http://rubydoc.info/gems/foursquare2/frames) or [foursqu
119
119
  client.propose_venue_edit
120
120
  client.managed_venues
121
121
  client.managed_venue_stats
122
+ client.venues_timeseries
122
123
  client.add_special
123
124
  client.add_campaign
124
125
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.2
1
+ 1.9.0
data/foursquare2.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "foursquare2"
8
- s.version = "1.8.2"
8
+ s.version = "1.9.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 = "2012-09-01"
12
+ s.date = "2012-11-10"
13
13
  s.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."
14
14
  s.email = ["muellermr@gmail.com", "email@marcomoura.com"]
15
15
  s.extra_rdoc_files = [
@@ -63,6 +63,7 @@ Gem::Specification.new do |s|
63
63
  "test/fixtures/specials/special_created.json",
64
64
  "test/fixtures/tips/search_tips.json",
65
65
  "test/fixtures/tips/tip.json",
66
+ "test/fixtures/users/leaderboard.json",
66
67
  "test/fixtures/users/search_users.json",
67
68
  "test/fixtures/users/user.json",
68
69
  "test/fixtures/users/user_lists.json",
@@ -96,7 +97,7 @@ Gem::Specification.new do |s|
96
97
  s.homepage = "http://github.com/mattmueller/foursquare2"
97
98
  s.licenses = ["MIT"]
98
99
  s.require_paths = ["lib"]
99
- s.rubygems_version = "1.8.10"
100
+ s.rubygems_version = "1.8.23"
100
101
  s.summary = "Foursquare API v2 gem in the spirit of the original foursquare gem"
101
102
 
102
103
  if s.respond_to? :specification_version then
data/lib/foursquare2.rb CHANGED
@@ -6,6 +6,10 @@ directory = File.expand_path(File.dirname(__FILE__))
6
6
  module Foursquare2
7
7
  class << self
8
8
 
9
+ FIELDS = [ :client_id, :client_secret, :api_version,
10
+ :ssl, :connection_middleware, :locale ]
11
+ attr_accessor(*FIELDS)
12
+
9
13
  def filter tips, term
10
14
  tip = []
11
15
  unless tips.nil?
@@ -16,6 +20,11 @@ module Foursquare2
16
20
  Hashie::Mash.new({:count => tip.count, :items => tip })
17
21
  end
18
22
 
23
+ def configure
24
+ yield self
25
+ true
26
+ end
27
+
19
28
  end
20
29
 
21
30
  require 'foursquare2/campaigns'
@@ -23,7 +23,7 @@ module Foursquare2
23
23
  include Lists
24
24
  include Events
25
25
 
26
- attr_reader :client_id, :client_secret, :oauth_token, :api_version
26
+ attr_reader :client_id, :client_secret, :oauth_token, :api_version, :locale
27
27
 
28
28
  #Initialize the client class that will be used for all foursquare API requests. Note that either a valid user oauth token OR a valid client_id + secret is required.
29
29
  #
@@ -38,12 +38,13 @@ module Foursquare2
38
38
  # @option options Hash :ssl Additional SSL options (like the path to certificate file)
39
39
 
40
40
  def initialize(options={})
41
- @client_id = options[:client_id]
42
- @client_secret = options[:client_secret]
41
+ @client_id = options[:client_id] || Foursquare2.client_id
42
+ @client_secret = options[:client_secret] || Foursquare2.client_secret
43
43
  @oauth_token = options[:oauth_token]
44
- @api_version = options[:api_version]
45
- @ssl = options[:ssl].nil? ? Hash.new : options[:ssl]
46
- @connection_middleware = options.fetch(:connection_middleware, [])
44
+ @api_version = options[:api_version] || Foursquare2.api_version
45
+ @locale = options[:locale] || Foursquare2.locale
46
+ @ssl = options[:ssl] || Foursquare2.ssl || Hash.new
47
+ @connection_middleware = options[:connection_middleware] || Foursquare2.connection_middleware || []
47
48
  @connection_middleware += DEFAULT_CONNECTION_MIDDLEWARE
48
49
  end
49
50
 
@@ -59,6 +60,7 @@ module Foursquare2
59
60
  params[:client_secret] = @client_secret if @client_secret
60
61
  params[:oauth_token] = @oauth_token if @oauth_token
61
62
  params[:v] = @api_version if @api_version
63
+ params[:locale] = @locale if @locale
62
64
  @connection ||= Faraday::Connection.new(:url => api_url, :ssl => @ssl, :params => params, :headers => default_headers) do |builder|
63
65
  @connection_middleware.each do |middleware|
64
66
  builder.use *middleware
@@ -1,6 +1,18 @@
1
1
  module Foursquare2
2
2
  module Users
3
3
 
4
+ # Get user's leaderboard details
5
+ #
6
+ # @param [Hash] options
7
+ # @option options Integer :neighbors Number of friends' scores adjacent to your score
8
+
9
+ def leaderboard(options={})
10
+ response = connection.get do |req|
11
+ req.url "users/leaderboard", options
12
+ end
13
+ return_error_or_body(response, response.body.response)
14
+ end
15
+
4
16
  # Get information about a user
5
17
  #
6
18
  # @param [Integer] user_id - User to get information for.
@@ -199,5 +199,22 @@ module Foursquare2
199
199
  end
200
200
  return_error_or_body(response, response.body.response)
201
201
  end
202
+
203
+ # Get daily venue stats for a list of venues over a time range.
204
+ # Client instance should represent an OAuth user who is the venues owner.
205
+ #
206
+ # @param [Hash] options
207
+ # @option options Array[String] :venueId - A list of venue ids to retrieve series data for.
208
+ # @option options Integer :startAt - Required. The start of the time range to retrieve stats for (seconds since epoch).
209
+ # @option options Integer :endAt - The end of the time range to retrieve stats for (seconds since epoch). If omitted, the current time is assumed.
210
+ # @option options String :fields - Specifies which fields to return. May be one or more of totalCheckins, newCheckins, uniqueVisitors, sharing, genders, ages, hours, separated by commas.
211
+
212
+ def venues_timeseries(options={})
213
+ options[:venueId] = options[:venueId].join(',') # Transforms the array into a 'comma-separated list' of ids.
214
+ response = connection.get do |req|
215
+ req.url "venues/timeseries", options
216
+ end
217
+ return_error_or_body(response, response.body.response)
218
+ end
202
219
  end
203
220
  end
@@ -0,0 +1,74 @@
1
+ {
2
+ "meta": {
3
+ "code": 200
4
+ },
5
+ "notifications": [
6
+ {
7
+ "type": "notificationTray",
8
+ "item": {
9
+ "unreadCount": 1
10
+ }
11
+ }
12
+ ],
13
+ "response": {
14
+ "leaderboard": {
15
+ "count": 3,
16
+ "items": [
17
+ {
18
+ "user": {
19
+ "id": "14839073",
20
+ "firstName": "Neeraj",
21
+ "lastName": "P N",
22
+ "relationship": "friend",
23
+ "photo": {
24
+ "prefix": "https://irs0.4sqi.net/img/user/",
25
+ "suffix": "/C1WP30SUDZUCZC2X.jpg"
26
+ }
27
+ },
28
+ "scores": {
29
+ "recent": 18,
30
+ "max": 115,
31
+ "checkinsCount": 5
32
+ },
33
+ "rank": 26
34
+ },
35
+ {
36
+ "user": {
37
+ "id": "25052241",
38
+ "firstName": "Rony",
39
+ "lastName": "Varghese",
40
+ "relationship": "self",
41
+ "photo": {
42
+ "prefix": "https://irs1.4sqi.net/img/user/",
43
+ "suffix": "/HE1OX3T3S3HN5OI4.jpg"
44
+ }
45
+ },
46
+ "scores": {
47
+ "recent": 16,
48
+ "max": 123,
49
+ "checkinsCount": 4
50
+ },
51
+ "rank": 27
52
+ },
53
+ {
54
+ "user": {
55
+ "id": "32747767",
56
+ "firstName": "Georgy",
57
+ "lastName": "Koshy",
58
+ "relationship": "friend",
59
+ "photo": {
60
+ "prefix": "https://irs0.4sqi.net/img/user/",
61
+ "suffix": "/blank_boy.png"
62
+ }
63
+ },
64
+ "scores": {
65
+ "recent": 16,
66
+ "max": 94,
67
+ "checkinsCount": 8
68
+ },
69
+ "rank": 27
70
+ }
71
+ ]
72
+ }
73
+ }
74
+ }
data/test/test_client.rb CHANGED
@@ -1,7 +1,44 @@
1
1
  require 'helper'
2
2
 
3
3
  class TestClient < Test::Unit::TestCase
4
-
4
+
5
+ context "when configuring the client at a class level" do
6
+ should "use the class-assigned attributes for new instances" do
7
+ Foursquare2.configure do |config|
8
+ config.client_id = 'awesome'
9
+ config.client_secret = 'sauce'
10
+ config.api_version = 5551234
11
+ config.ssl = true
12
+ end
13
+ client = Foursquare2::Client.new
14
+ client.client_id.should == 'awesome'
15
+ client.client_secret.should == 'sauce'
16
+ client.api_version.should == 5551234
17
+ client.ssl.should == true
18
+ end
19
+
20
+ should 'use the class-assigned middleware if provided' do
21
+ Foursquare2.configure do |config|
22
+ config.connection_middleware = [:middleware]
23
+ end
24
+ Faraday::Builder.any_instance.expects(:use).at_least_once
25
+ Faraday::Builder.any_instance.expects(:use) \
26
+ .with(:middleware)
27
+ client = Foursquare2::Client.new
28
+ client.connection
29
+ end
30
+
31
+ teardown do
32
+ Foursquare2.configure do |config|
33
+ config.client_id = nil
34
+ config.client_secret = nil
35
+ config.api_version = nil
36
+ config.connection_middleware = nil
37
+ config.ssl = nil
38
+ end
39
+ end
40
+ end
41
+
5
42
  context "when instantiating a client instance" do
6
43
  should "use the correct url for api requests" do
7
44
  @client = Foursquare2::Client.new
@@ -18,19 +55,24 @@ class TestClient < Test::Unit::TestCase
18
55
  @client.client_id.should == 'awesome'
19
56
  @client.client_secret.should == 'sauce'
20
57
  end
21
-
58
+
22
59
  should "retain api version for requests" do
23
60
  @client = Foursquare2::Client.new(:api_version => '20120505')
24
61
  @client.api_version.should == "20120505"
25
62
  end
26
63
 
64
+ should "retain api locale for requests" do
65
+ @client = Foursquare2::Client.new(:locale => 'es')
66
+ @client.locale.should == "es"
67
+ end
68
+
27
69
  should "retain SSL option for requests when you don't pass it as param" do
28
70
  @client = Foursquare2::Client.new(:client_id => 'awesome', :client_secret => 'sauce')
29
71
  @client.ssl.should == {}
30
72
  end
31
-
73
+
32
74
  should "retain SSL option for requests" do
33
- @client = Foursquare2::Client.new(:client_id => 'awesome', :client_secret => 'sauce', :ssl => {:ca_file => 'path_to_ca_file'})
75
+ @client = Foursquare2::Client.new(:client_id => 'awesome', :client_secret => 'sauce', :ssl => {:ca_file => 'path_to_ca_file'})
34
76
  @client.ssl[:ca_file].should == 'path_to_ca_file'
35
77
  end
36
78
 
@@ -63,7 +105,7 @@ class TestClient < Test::Unit::TestCase
63
105
  should "raise Foursquare2::Error." do
64
106
  response = Faraday::Response.new(:body => fixture_file('error.json', :parse => true))
65
107
  client = Foursquare2::Client.new
66
-
108
+
67
109
  assert_raises(Foursquare2::APIError) do
68
110
  client.return_error_or_body(response, response.body)
69
111
  end
data/test/test_users.rb CHANGED
@@ -7,6 +7,12 @@ class TestUsers < Test::Unit::TestCase
7
7
  @client = foursquare_test_client
8
8
  end
9
9
 
10
+ should "fetch user's leaderboard" do
11
+ stub_get("https://api.foursquare.com/v2/users/leaderboard?oauth_token=#{@client.oauth_token}&neighbors=2", "users/leaderboard.json", )
12
+ leaderboard = @client.leaderboard(:neighbors => 2)
13
+ leaderboard.leaderboard['count'].should == 3
14
+ end
15
+
10
16
  should "fetch info for a single user" do
11
17
  stub_get("https://api.foursquare.com/v2/users/self?oauth_token=#{@client.oauth_token}", "users/user.json")
12
18
  user = @client.user('self')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foursquare2
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.2
4
+ version: 1.9.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-09-01 00:00:00.000000000Z
13
+ date: 2012-11-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: faraday
17
- requirement: &70235098690600 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: '0.8'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70235098690600
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '0.8'
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: faraday_middleware
28
- requirement: &70235098689440 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ! '>='
@@ -33,10 +38,15 @@ dependencies:
33
38
  version: '0.8'
34
39
  type: :runtime
35
40
  prerelease: false
36
- version_requirements: *70235098689440
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0.8'
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: hashie
39
- requirement: &70235098687800 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
52
  - - ~>
@@ -44,10 +54,15 @@ dependencies:
44
54
  version: '1.0'
45
55
  type: :runtime
46
56
  prerelease: false
47
- version_requirements: *70235098687800
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: '1.0'
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: awesome_print
50
- requirement: &70235098686020 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
68
  - - ! '>='
@@ -55,10 +70,15 @@ dependencies:
55
70
  version: '0'
56
71
  type: :development
57
72
  prerelease: false
58
- version_requirements: *70235098686020
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
59
79
  - !ruby/object:Gem::Dependency
60
80
  name: shoulda
61
- requirement: &70235098682920 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
62
82
  none: false
63
83
  requirements:
64
84
  - - ! '>='
@@ -66,10 +86,15 @@ dependencies:
66
86
  version: '0'
67
87
  type: :development
68
88
  prerelease: false
69
- version_requirements: *70235098682920
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
70
95
  - !ruby/object:Gem::Dependency
71
96
  name: bundler
72
- requirement: &70235098680680 !ruby/object:Gem::Requirement
97
+ requirement: !ruby/object:Gem::Requirement
73
98
  none: false
74
99
  requirements:
75
100
  - - ~>
@@ -77,10 +102,15 @@ dependencies:
77
102
  version: '1.0'
78
103
  type: :development
79
104
  prerelease: false
80
- version_requirements: *70235098680680
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '1.0'
81
111
  - !ruby/object:Gem::Dependency
82
112
  name: jeweler
83
- requirement: &70235098678820 !ruby/object:Gem::Requirement
113
+ requirement: !ruby/object:Gem::Requirement
84
114
  none: false
85
115
  requirements:
86
116
  - - ~>
@@ -88,10 +118,15 @@ dependencies:
88
118
  version: '1.5'
89
119
  type: :development
90
120
  prerelease: false
91
- version_requirements: *70235098678820
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ version: '1.5'
92
127
  - !ruby/object:Gem::Dependency
93
128
  name: rcov
94
- requirement: &70235098676620 !ruby/object:Gem::Requirement
129
+ requirement: !ruby/object:Gem::Requirement
95
130
  none: false
96
131
  requirements:
97
132
  - - ! '>='
@@ -99,10 +134,15 @@ dependencies:
99
134
  version: '0'
100
135
  type: :development
101
136
  prerelease: false
102
- version_requirements: *70235098676620
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
103
143
  - !ruby/object:Gem::Dependency
104
144
  name: fakeweb
105
- requirement: &70235098675260 !ruby/object:Gem::Requirement
145
+ requirement: !ruby/object:Gem::Requirement
106
146
  none: false
107
147
  requirements:
108
148
  - - ~>
@@ -110,10 +150,15 @@ dependencies:
110
150
  version: '1.3'
111
151
  type: :development
112
152
  prerelease: false
113
- version_requirements: *70235098675260
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ~>
157
+ - !ruby/object:Gem::Version
158
+ version: '1.3'
114
159
  - !ruby/object:Gem::Dependency
115
160
  name: jnunemaker-matchy
116
- requirement: &70235098661440 !ruby/object:Gem::Requirement
161
+ requirement: !ruby/object:Gem::Requirement
117
162
  none: false
118
163
  requirements:
119
164
  - - ~>
@@ -121,10 +166,15 @@ dependencies:
121
166
  version: '0.4'
122
167
  type: :development
123
168
  prerelease: false
124
- version_requirements: *70235098661440
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ~>
173
+ - !ruby/object:Gem::Version
174
+ version: '0.4'
125
175
  - !ruby/object:Gem::Dependency
126
176
  name: json_pure
127
- requirement: &70235098660120 !ruby/object:Gem::Requirement
177
+ requirement: !ruby/object:Gem::Requirement
128
178
  none: false
129
179
  requirements:
130
180
  - - ~>
@@ -132,10 +182,15 @@ dependencies:
132
182
  version: '1.4'
133
183
  type: :development
134
184
  prerelease: false
135
- version_requirements: *70235098660120
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ~>
189
+ - !ruby/object:Gem::Version
190
+ version: '1.4'
136
191
  - !ruby/object:Gem::Dependency
137
192
  name: multi_json
138
- requirement: &70235098658060 !ruby/object:Gem::Requirement
193
+ requirement: !ruby/object:Gem::Requirement
139
194
  none: false
140
195
  requirements:
141
196
  - - <
@@ -146,7 +201,15 @@ dependencies:
146
201
  version: 0.0.5
147
202
  type: :development
148
203
  prerelease: false
149
- version_requirements: *70235098658060
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ none: false
206
+ requirements:
207
+ - - <
208
+ - !ruby/object:Gem::Version
209
+ version: 2.0.0
210
+ - - ! '>='
211
+ - !ruby/object:Gem::Version
212
+ version: 0.0.5
150
213
  description: Gives access to all endpoints in version 2 of foursquare's API with syntax
151
214
  that will be familiar to those who used the original foursquare gem by Jeremy Welch.
152
215
  email:
@@ -204,6 +267,7 @@ files:
204
267
  - test/fixtures/specials/special_created.json
205
268
  - test/fixtures/tips/search_tips.json
206
269
  - test/fixtures/tips/tip.json
270
+ - test/fixtures/users/leaderboard.json
207
271
  - test/fixtures/users/search_users.json
208
272
  - test/fixtures/users/user.json
209
273
  - test/fixtures/users/user_lists.json
@@ -248,7 +312,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
248
312
  version: '0'
249
313
  segments:
250
314
  - 0
251
- hash: -2014267550921023463
315
+ hash: -1147232695662133352
252
316
  required_rubygems_version: !ruby/object:Gem::Requirement
253
317
  none: false
254
318
  requirements:
@@ -257,7 +321,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
257
321
  version: '0'
258
322
  requirements: []
259
323
  rubyforge_project:
260
- rubygems_version: 1.8.10
324
+ rubygems_version: 1.8.23
261
325
  signing_key:
262
326
  specification_version: 3
263
327
  summary: Foursquare API v2 gem in the spirit of the original foursquare gem