foursquare2 1.4.2 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -22,3 +22,7 @@ group :development do
22
22
  gem 'json_pure', '~> 1.4'
23
23
  gem 'multi_json', '>= 0.0.5', '< 2.0.0'
24
24
  end
25
+
26
+ group :test do
27
+ gem 'mocha'
28
+ end
data/Gemfile.lock CHANGED
@@ -15,6 +15,9 @@ GEM
15
15
  rake
16
16
  jnunemaker-matchy (0.4.0)
17
17
  json_pure (1.5.1)
18
+ metaclass (0.0.1)
19
+ mocha (0.11.4)
20
+ metaclass (~> 0.0.1)
18
21
  multi_json (1.0.2)
19
22
  multipart-post (1.1.5)
20
23
  rake (0.9.2.2)
@@ -34,6 +37,7 @@ DEPENDENCIES
34
37
  jeweler (~> 1.5)
35
38
  jnunemaker-matchy (~> 0.4)
36
39
  json_pure (~> 1.4)
40
+ mocha
37
41
  multi_json (>= 0.0.5, < 2.0.0)
38
42
  rcov
39
43
  shoulda
data/Readme.md CHANGED
@@ -20,6 +20,9 @@ Currently this gem does not handle the oauth2 authentication flow for you, use t
20
20
 
21
21
  client = Foursquare2::Client.new(:oauth_token => 'user_oauth_token')
22
22
 
23
+ ### Instantiate a client (With versioning)
24
+
25
+ client = Foursquare2::Client.new(:api_version => '20120505')
23
26
 
24
27
  ### Examples
25
28
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.2
1
+ 1.5.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.4.2"
8
+ s.version = "1.5.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-05-08"
12
+ s.date = "2012-06-17"
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 = [
@@ -2,6 +2,13 @@ require 'forwardable'
2
2
 
3
3
  module Foursquare2
4
4
  class Client
5
+ DEFAULT_CONNECTION_MIDDLEWARE = [
6
+ Faraday::Request::Multipart,
7
+ Faraday::Request::UrlEncoded,
8
+ FaradayMiddleware::Mashify,
9
+ FaradayMiddleware::ParseJson
10
+ ]
11
+
5
12
  extend Forwardable
6
13
 
7
14
  include Venues
@@ -12,7 +19,7 @@ module Foursquare2
12
19
  include Specials
13
20
  include Users
14
21
 
15
- attr_reader :client_id, :client_secret, :oauth_token
22
+ attr_reader :client_id, :client_secret, :oauth_token, :api_version
16
23
 
17
24
  #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.
18
25
  #
@@ -22,13 +29,18 @@ module Foursquare2
22
29
  # @option options String :client_id Your foursquare app's client_id
23
30
  # @option options String :client_secret Your foursquare app's client_secret
24
31
  # @option options String :oauth_token A valid oauth token for a user (or the 'secret' value from api v1)
32
+ # @option options String :api_version A date formatted as YYYYMMDD indicating the API version you intend to use
33
+ # @option options Array :connection_middleware A collection of different middleware to be applied when the connection is created
25
34
  # @option options Hash :ssl Additional SSL options (like the path to certificate file)
26
35
 
27
36
  def initialize(options={})
28
37
  @client_id = options[:client_id]
29
38
  @client_secret = options[:client_secret]
30
39
  @oauth_token = options[:oauth_token]
40
+ @api_version = options[:api_version]
31
41
  @ssl = options[:ssl].nil? ? Hash.new : options[:ssl]
42
+ @connection_middleware = options.fetch(:connection_middleware, [])
43
+ @connection_middleware += DEFAULT_CONNECTION_MIDDLEWARE
32
44
  end
33
45
 
34
46
  def ssl
@@ -42,15 +54,12 @@ module Foursquare2
42
54
  params[:client_id] = @client_id if @client_id
43
55
  params[:client_secret] = @client_secret if @client_secret
44
56
  params[:oauth_token] = @oauth_token if @oauth_token
57
+ params[:v] = @api_version if @api_version
45
58
  @connection ||= Faraday::Connection.new(:url => api_url, :ssl => @ssl, :params => params, :headers => default_headers) do |builder|
46
- builder.use Faraday::Request::Multipart
47
- builder.use Faraday::Request::UrlEncoded
48
-
49
- builder.use FaradayMiddleware::Mashify
50
- builder.use FaradayMiddleware::ParseJson
51
-
59
+ @connection_middleware.each do |middleware|
60
+ builder.use *middleware
61
+ end
52
62
  builder.adapter Faraday.default_adapter
53
-
54
63
  end
55
64
  end
56
65
 
data/test/helper.rb CHANGED
@@ -14,6 +14,7 @@ require 'fakeweb'
14
14
  require 'json'
15
15
  require 'hashie'
16
16
  require 'awesome_print'
17
+ require 'mocha'
17
18
 
18
19
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
19
20
  $LOAD_PATH.unshift(File.dirname(__FILE__))
data/test/test_client.rb CHANGED
@@ -2,7 +2,7 @@ require 'helper'
2
2
 
3
3
  class TestClient < Test::Unit::TestCase
4
4
 
5
- context "when instantiating a client instance" do
5
+ context "when instantiating a client instance" do
6
6
  should "use the correct url for api requests" do
7
7
  @client = Foursquare2::Client.new
8
8
  @client.api_url.should == 'https://api.foursquare.com/v2'
@@ -19,6 +19,11 @@ class TestClient < Test::Unit::TestCase
19
19
  @client.client_secret.should == 'sauce'
20
20
  end
21
21
 
22
+ should "retain api version for requests" do
23
+ @client = Foursquare2::Client.new(:api_version => '20120505')
24
+ @client.api_version.should == "20120505"
25
+ end
26
+
22
27
  should "retain SSL option for requests when you don't pass it as param" do
23
28
  @client = Foursquare2::Client.new(:client_id => 'awesome', :client_secret => 'sauce')
24
29
  @client.ssl.should == {}
@@ -28,6 +33,20 @@ class TestClient < Test::Unit::TestCase
28
33
  @client = Foursquare2::Client.new(:client_id => 'awesome', :client_secret => 'sauce', :ssl => {:ca_file => 'path_to_ca_file'})
29
34
  @client.ssl[:ca_file].should == 'path_to_ca_file'
30
35
  end
36
+
37
+ should "apply the middleware to the connection" do
38
+ middleware = [FaradayMiddleware::Instrumentation,
39
+ [FaradayMiddleware::ParseJson, {:content_type => /\bjson$/}]]
40
+ client = Foursquare2::Client.new(:connection_middleware => middleware)
41
+
42
+ Faraday::Builder.any_instance.expects(:use).at_least_once
43
+ Faraday::Builder.any_instance.expects(:use) \
44
+ .with(FaradayMiddleware::Instrumentation)
45
+ Faraday::Builder.any_instance.expects(:use) \
46
+ .with(FaradayMiddleware::ParseJson, {:content_type => /\bjson$/})
47
+
48
+ client.connection
49
+ end
31
50
  end
32
51
 
33
52
  context "When returning a successful response" do
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.4.2
4
+ version: 1.5.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-05-08 00:00:00.000000000Z
13
+ date: 2012-06-17 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: faraday
17
- requirement: &70329057858160 !ruby/object:Gem::Requirement
17
+ requirement: &70180411619020 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0.8'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70329057858160
25
+ version_requirements: *70180411619020
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: faraday_middleware
28
- requirement: &70329057857680 !ruby/object:Gem::Requirement
28
+ requirement: &70180411612380 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0.8'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70329057857680
36
+ version_requirements: *70180411612380
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: hashie
39
- requirement: &70329057857200 !ruby/object:Gem::Requirement
39
+ requirement: &70180411609000 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '1.0'
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *70329057857200
47
+ version_requirements: *70180411609000
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: awesome_print
50
- requirement: &70329057856720 !ruby/object:Gem::Requirement
50
+ requirement: &70180411602640 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *70329057856720
58
+ version_requirements: *70180411602640
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: shoulda
61
- requirement: &70329057856240 !ruby/object:Gem::Requirement
61
+ requirement: &70180411583840 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *70329057856240
69
+ version_requirements: *70180411583840
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: bundler
72
- requirement: &70329057855760 !ruby/object:Gem::Requirement
72
+ requirement: &70180411551580 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '1.0'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *70329057855760
80
+ version_requirements: *70180411551580
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: jeweler
83
- requirement: &70329057855280 !ruby/object:Gem::Requirement
83
+ requirement: &70180411546880 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ~>
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '1.5'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *70329057855280
91
+ version_requirements: *70180411546880
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: rcov
94
- requirement: &70329057871940 !ruby/object:Gem::Requirement
94
+ requirement: &70180407658900 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *70329057871940
102
+ version_requirements: *70180407658900
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: fakeweb
105
- requirement: &70329057871460 !ruby/object:Gem::Requirement
105
+ requirement: &70180407648380 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ~>
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '1.3'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *70329057871460
113
+ version_requirements: *70180407648380
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: jnunemaker-matchy
116
- requirement: &70329057870980 !ruby/object:Gem::Requirement
116
+ requirement: &70180407633840 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ~>
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: '0.4'
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *70329057870980
124
+ version_requirements: *70180407633840
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: json_pure
127
- requirement: &70329057870500 !ruby/object:Gem::Requirement
127
+ requirement: &70180407618500 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ~>
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: '1.4'
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *70329057870500
135
+ version_requirements: *70180407618500
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: multi_json
138
- requirement: &70329057870000 !ruby/object:Gem::Requirement
138
+ requirement: &70180407608020 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - <
@@ -146,7 +146,7 @@ dependencies:
146
146
  version: 0.0.5
147
147
  type: :development
148
148
  prerelease: false
149
- version_requirements: *70329057870000
149
+ version_requirements: *70180407608020
150
150
  description: Gives access to all endpoints in version 2 of foursquare's API with syntax
151
151
  that will be familiar to those who used the original foursquare gem by Jeremy Welch.
152
152
  email:
@@ -222,7 +222,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
222
222
  version: '0'
223
223
  segments:
224
224
  - 0
225
- hash: 3885395942000903583
225
+ hash: 1620543926034426764
226
226
  required_rubygems_version: !ruby/object:Gem::Requirement
227
227
  none: false
228
228
  requirements: