foursquare2 1.4.2 → 1.5.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/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: