foursquare2 1.8.2 → 1.9.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/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