gowalla 0.3.0 → 0.4.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/.document +5 -0
- data/.gitignore +25 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +43 -0
- data/LICENSE +20 -0
- data/README.md +96 -0
- data/Rakefile +14 -0
- data/changelog.md +33 -0
- data/gowalla.gemspec +30 -0
- data/lib/gowalla.rb +26 -22
- data/lib/gowalla/checkins.rb +31 -0
- data/lib/gowalla/client.rb +22 -176
- data/lib/gowalla/flags.rb +42 -0
- data/lib/gowalla/items.rb +22 -0
- data/lib/gowalla/spots.rb +67 -0
- data/lib/gowalla/trips.rb +27 -0
- data/lib/gowalla/users.rb +91 -0
- data/lib/gowalla/version.rb +3 -0
- data/test/checkins_test.rb +18 -0
- data/test/client_test.rb +72 -0
- data/test/fixtures/categories.json +1826 -0
- data/test/fixtures/category.json +8 -0
- data/test/fixtures/challenges.json +191 -0
- data/test/fixtures/checkin.json +21 -0
- data/test/fixtures/events.json +185 -0
- data/test/fixtures/find_spots.json +620 -0
- data/test/fixtures/find_trips.json +695 -0
- data/test/fixtures/flag.json +23 -0
- data/test/fixtures/flags.json +31 -0
- data/test/fixtures/friend_requests.json +21 -0
- data/test/fixtures/friends.json +3 -0
- data/test/fixtures/friends_recent.json +243 -0
- data/test/fixtures/item.json +8 -0
- data/test/fixtures/item_events.json +35 -0
- data/test/fixtures/items.json +100 -0
- data/test/fixtures/me.json +49 -0
- data/test/fixtures/missing_items.json +1 -0
- data/test/fixtures/new_spot.json +49 -0
- data/test/fixtures/photos.json +88 -0
- data/test/fixtures/pins.json +81 -0
- data/test/fixtures/potential_twitter_friends.json +2090 -0
- data/test/fixtures/spot.json +251 -0
- data/test/fixtures/spots.json +557 -0
- data/test/fixtures/spots_by_category.json +620 -0
- data/test/fixtures/spots_urls.json +26 -0
- data/test/fixtures/stamps.json +284 -0
- data/test/fixtures/top_spots.json +64 -0
- data/test/fixtures/trip.json +22 -0
- data/test/fixtures/trips.json +881 -0
- data/test/fixtures/user.json +43 -0
- data/test/fixtures/users.json +46 -0
- data/test/fixtures/vaulted_items.json +12 -0
- data/test/fixtures/visited_spots.json +1 -0
- data/test/flags_test.rb +46 -0
- data/test/helper.rb +6 -6
- data/test/items_test.rb +26 -0
- data/test/spots_test.rb +70 -0
- data/test/trips_test.rb +25 -0
- data/test/users_test.rb +83 -0
- metadata +177 -29
- data/test/gowalla_test.rb +0 -214
data/.document
ADDED
data/.gitignore
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
## MAC OS
|
2
|
+
.DS_Store
|
3
|
+
|
4
|
+
## TEXTMATE
|
5
|
+
*.tmproj
|
6
|
+
tmtags
|
7
|
+
|
8
|
+
## EMACS
|
9
|
+
*~
|
10
|
+
\#*
|
11
|
+
.\#*
|
12
|
+
|
13
|
+
## VIM
|
14
|
+
*.swp
|
15
|
+
|
16
|
+
## PROJECT::GENERAL
|
17
|
+
coverage
|
18
|
+
rdoc
|
19
|
+
pkg
|
20
|
+
*.gem
|
21
|
+
.yardopts
|
22
|
+
.yardoc
|
23
|
+
.bundle
|
24
|
+
|
25
|
+
## PROJECT::SPECIFIC
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
gowalla (0.4.0)
|
5
|
+
faraday (~> 0.4.5)
|
6
|
+
faraday_middleware
|
7
|
+
hashie (~> 0.2.0)
|
8
|
+
multi_json (~> 0.0.4)
|
9
|
+
oauth2
|
10
|
+
|
11
|
+
GEM
|
12
|
+
remote: http://rubygems.org/
|
13
|
+
specs:
|
14
|
+
addressable (2.2.1)
|
15
|
+
fakeweb (1.3.0)
|
16
|
+
faraday (0.4.6)
|
17
|
+
addressable (>= 2.1.1)
|
18
|
+
rack (>= 1.0.1)
|
19
|
+
faraday_middleware (0.0.4)
|
20
|
+
faraday (~> 0.4.5)
|
21
|
+
hashie (0.2.2)
|
22
|
+
jnunemaker-matchy (0.4.0)
|
23
|
+
multi_json (0.0.4)
|
24
|
+
oauth2 (0.0.13)
|
25
|
+
faraday (~> 0.4.1)
|
26
|
+
multi_json (>= 0.0.4)
|
27
|
+
rack (1.2.1)
|
28
|
+
shoulda (2.10.3)
|
29
|
+
|
30
|
+
PLATFORMS
|
31
|
+
ruby
|
32
|
+
|
33
|
+
DEPENDENCIES
|
34
|
+
bundler (>= 1.0.0)
|
35
|
+
fakeweb
|
36
|
+
faraday (~> 0.4.5)
|
37
|
+
faraday_middleware
|
38
|
+
gowalla!
|
39
|
+
hashie (~> 0.2.0)
|
40
|
+
jnunemaker-matchy (~> 0.4.0)
|
41
|
+
multi_json (~> 0.0.4)
|
42
|
+
oauth2
|
43
|
+
shoulda (~> 2.10.0)
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Wynn Netherland
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
# Gowalla
|
2
|
+
|
3
|
+
Ruby wrapper for the [Gowalla API](http://gowalla.com/api/docs).
|
4
|
+
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
sudo gem install gowalla
|
9
|
+
|
10
|
+
## Get your API key
|
11
|
+
|
12
|
+
Be sure and get your API key: [http://gowalla.com/api/keys](http://gowalla.com/api/keys)
|
13
|
+
|
14
|
+
## Usage
|
15
|
+
|
16
|
+
### Instantiate a client (Basic Auth)
|
17
|
+
|
18
|
+
gowalla = Gowalla::Client.new(:username => 'pengwynn', :password => 'somepassword', :api_key => 'your_api_key')
|
19
|
+
|
20
|
+
### or configure once
|
21
|
+
|
22
|
+
Gowalla.configure do |config|
|
23
|
+
config.api_key = 'your_api_key'
|
24
|
+
config.username = 'pengwynn'
|
25
|
+
config.password = 'somepassword'
|
26
|
+
end
|
27
|
+
gowalla = Gowalla::Client.new
|
28
|
+
|
29
|
+
### Instantiate a client (OAuth2)
|
30
|
+
|
31
|
+
For OAuth2, you'll need to specify a callback URL when you [set up your app and get your API keys](http://gowalla.com/api/keys).
|
32
|
+
|
33
|
+
Let's create the client in a protected method in our controller:
|
34
|
+
|
35
|
+
protected
|
36
|
+
def client
|
37
|
+
Gowalla::Client.new (
|
38
|
+
:api_key => "your_api_key",
|
39
|
+
:api_secret => "your_api_secret",
|
40
|
+
:access_token => session[:access_token]
|
41
|
+
)
|
42
|
+
end
|
43
|
+
|
44
|
+
We need to get an access token. Perhaps in an a before filter where you need to access Gowalla:
|
45
|
+
|
46
|
+
redirect(@client.web_server.authorize_url(:redirect_uri => redirect_uri, :state => 1))
|
47
|
+
|
48
|
+
or if you need read-write access:
|
49
|
+
|
50
|
+
redirect(@client.web_server.authorize_url(:redirect_uri => redirect_uri, :state => 1, :scope => 'read-write))
|
51
|
+
|
52
|
+
You'll need a callback route to catch the code coming back from Gowalla after a user grants you access and this must match what you specified when you created your app on Gowalla:
|
53
|
+
|
54
|
+
get '/auth/gowalla/callback' do
|
55
|
+
session[:access_token] = client.web_server.get_access_token(params[:code], :redirect_uri => redirect_uri).token
|
56
|
+
|
57
|
+
if session[:access_token]
|
58
|
+
redirect '/auth/gowalla/test'
|
59
|
+
else
|
60
|
+
"Error retrieving access token."
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
Now that we have an access token we can use the client to make calls, just like we would with Basic Auth. You can checkout a basic [Sinatra example](http://gist.github.com/454283).
|
65
|
+
|
66
|
+
#### Examples
|
67
|
+
|
68
|
+
gowalla.user('pengwynn')
|
69
|
+
=> <#Hashie::Mash accept_url="/friendships/accept?user_id=1707" activity_url="/users/1707/events" bio="Web designer and Ruby developer." events_url="/users/1707/events" fb_id=605681706 first_name="Wynn" friends_count=27 friends_only=false friends_url="/users/1707/friends" hometown="Aubrey, TX" image_url="http://s3.amazonaws.com/static.gowalla.com/users/1707-standard.jpg?1262011383" is_friend=false items_count=5 items_url="/users/1707/items" last_name="Netherland" last_visit=<#Hashie::Mash comment="Closing every account I have " created_at="2010/01/26 15:31:46 +0000" spot=<#Hashie::Mash image_url="http://static.gowalla.com/categories/186-standard.png" name="Bank Of America" small_image_url="http://static.gowalla.com/categories/186-small-standard.png" url="/spots/164052"name="Wynn Netherland" pins_count=3 pins_url="/users/1707/pins" reject_url="/friendships/reject?user_id=1707" request_url="/friendships/request?user_id=1707" stamps_count=15 stamps_url="/users/1707/stamps" top_spots_url="/users/1707/top_spots" twitter_username="pengwynn" url="/users/1707" username="pengwynn" vaulted_kinds_count=0 visited_spots_count=15 website="http://wynnnetherland.com">
|
70
|
+
|
71
|
+
|
72
|
+
Details for the current user
|
73
|
+
|
74
|
+
gowalla.user
|
75
|
+
|
76
|
+
Details for another user
|
77
|
+
|
78
|
+
gowalla.user('bradleyjoyce')
|
79
|
+
gowalla.user(1707)
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
## Note on Patches/Pull Requests
|
84
|
+
|
85
|
+
* Fork the project.
|
86
|
+
* Make your feature addition or bug fix.
|
87
|
+
* Add tests for it. This is important so I don't break it in a
|
88
|
+
future version unintentionally.
|
89
|
+
* Commit, do not mess with rakefile, version, or history.
|
90
|
+
(if you want to have your own version, that is fine but
|
91
|
+
bump version in a commit by itself I can ignore when I pull)
|
92
|
+
* Send me a pull request. Bonus points for topic branches.
|
93
|
+
|
94
|
+
## Copyright
|
95
|
+
|
96
|
+
Copyright (c) 2010 Wynn Netherland. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require "shoulda/tasks"
|
3
|
+
require "rake/testtask"
|
4
|
+
require 'bundler'
|
5
|
+
|
6
|
+
Bundler::GemHelper.install_tasks
|
7
|
+
|
8
|
+
Rake::TestTask.new(:test) do |test|
|
9
|
+
test.ruby_opts = ["-rubygems"] if defined? Gem
|
10
|
+
test.libs << "lib" << "test"
|
11
|
+
test.pattern = "test/**/*_test.rb"
|
12
|
+
end
|
13
|
+
|
14
|
+
task :default => :test
|
data/changelog.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# Changelog
|
2
|
+
## 0.4.0 September 28, 2010
|
3
|
+
* faraday_middleware gem renamed
|
4
|
+
* refactor api methods into individual container classes
|
5
|
+
* Additional user method support (visited spots, pins)
|
6
|
+
* Problem reporting via flags
|
7
|
+
* Patch from [armanddp](http://github.com/armanddp) for Ruby 1.9, Bundler
|
8
|
+
## 0.3.0 August 9, 2010
|
9
|
+
* Added checkin API
|
10
|
+
* Patch from [mattt](http://github.com/mattt) for Flag Spots API
|
11
|
+
## 0.2.1 June 28, 2010
|
12
|
+
* Use Faraday middleware for JSON parsing, Mash creation
|
13
|
+
## 0.2.0 June 27, 2010
|
14
|
+
* Refactored to use Faraday
|
15
|
+
* Now supports OAuth2
|
16
|
+
## 0.1.4 May 6, 2010
|
17
|
+
* Updated accepts header
|
18
|
+
* Added patch from [Ruben Fonseca](http://github.com/rubenfonseca) to check in at a spot
|
19
|
+
## 0.1.3 March 7, 2010
|
20
|
+
* Updated README with correct config call
|
21
|
+
* Applied patch from [Kacy Fortner](http://github.com/kacy) to add vaulted items and missing items calls
|
22
|
+
* Applied patches from [Eric Hutzelman](http://github.com/ehutzelman) to clean up fixtures, changed api methods
|
23
|
+
## 0.1.2 March 3, 2010
|
24
|
+
|
25
|
+
* Applied patch from [Ruben Fonseca](http://github.com/rubenfonseca) to search within a given bounds
|
26
|
+
* Applied patch from [Eric Hutzelman](http://github.com/ehutzelman) to clean up config
|
27
|
+
|
28
|
+
## 0.1.0 February 8, 2010
|
29
|
+
|
30
|
+
* Updates for released API
|
31
|
+
|
32
|
+
## 0.0.1 January 28, 2010
|
33
|
+
* Initial version
|
data/gowalla.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path("../lib/gowalla/version", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = %q{gowalla}
|
6
|
+
s.version = Gowalla::VERSION
|
7
|
+
s.authors = ["Wynn Netherland", "Eric Hutzelman"]
|
8
|
+
s.email = %q{wynn.netherland@gmail.com}
|
9
|
+
s.summary = %q{Wrapper for the Gowalla API}
|
10
|
+
s.description = %q{Ruby wrapper for the Gowalla API}
|
11
|
+
s.homepage = %q{http://wynnnetherland.com/projects/gowalla/}
|
12
|
+
|
13
|
+
s.add_dependency 'oauth2'
|
14
|
+
s.add_dependency 'faraday', '~> 0.4.5'
|
15
|
+
s.add_dependency 'hashie', '~> 0.2.0'
|
16
|
+
s.add_dependency 'multi_json', '~> 0.0.4'
|
17
|
+
s.add_dependency 'faraday_middleware'
|
18
|
+
|
19
|
+
s.add_development_dependency 'shoulda', '~> 2.10.0'
|
20
|
+
s.add_development_dependency 'jnunemaker-matchy', '~> 0.4.0'
|
21
|
+
s.add_development_dependency 'fakeweb'
|
22
|
+
s.add_development_dependency "bundler", ">= 1.0.0"
|
23
|
+
|
24
|
+
s.required_rubygems_version = ">= 1.3.6"
|
25
|
+
s.platform = Gem::Platform::RUBY
|
26
|
+
s.require_path = 'lib'
|
27
|
+
s.files = `git ls-files`.split("\n")
|
28
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
29
|
+
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
30
|
+
end
|
data/lib/gowalla.rb
CHANGED
@@ -9,24 +9,6 @@ directory = File.expand_path(File.dirname(__FILE__))
|
|
9
9
|
Hash.send :include, Hashie::HashExtensions
|
10
10
|
|
11
11
|
module Gowalla
|
12
|
-
|
13
|
-
VERSION = "0.3.0".freeze
|
14
|
-
|
15
|
-
# config/initializers/gowalla.rb (for instance)
|
16
|
-
#
|
17
|
-
# Gowalla.configure do |config|
|
18
|
-
# config.api_key = 'api_key'
|
19
|
-
# config.username = 'username'
|
20
|
-
# config.password = 'password'
|
21
|
-
# end
|
22
|
-
#
|
23
|
-
# elsewhere
|
24
|
-
#
|
25
|
-
# client = Gowalla::Client.new
|
26
|
-
def self.configure
|
27
|
-
yield self
|
28
|
-
true
|
29
|
-
end
|
30
12
|
|
31
13
|
class << self
|
32
14
|
attr_accessor :api_key
|
@@ -34,12 +16,34 @@ module Gowalla
|
|
34
16
|
attr_accessor :password
|
35
17
|
attr_accessor :api_secret
|
36
18
|
attr_accessor :test_mode
|
37
|
-
|
19
|
+
|
20
|
+
# config/initializers/gowalla.rb (for instance)
|
21
|
+
#
|
22
|
+
# Gowalla.configure do |config|
|
23
|
+
# config.api_key = 'api_key'
|
24
|
+
# config.username = 'username'
|
25
|
+
# config.password = 'password'
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# elsewhere
|
29
|
+
#
|
30
|
+
# client = Gowalla::Client.new
|
31
|
+
def configure
|
32
|
+
yield self
|
33
|
+
true
|
34
|
+
end
|
35
|
+
|
38
36
|
def test_mode?
|
39
37
|
!!self.test_mode
|
40
38
|
end
|
41
39
|
end
|
42
|
-
|
43
|
-
end
|
44
40
|
|
45
|
-
require
|
41
|
+
require 'gowalla/spots'
|
42
|
+
require 'gowalla/items'
|
43
|
+
require 'gowalla/trips'
|
44
|
+
require 'gowalla/checkins'
|
45
|
+
require 'gowalla/flags'
|
46
|
+
require 'gowalla/users'
|
47
|
+
require 'gowalla/client'
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Gowalla
|
2
|
+
module Checkins
|
3
|
+
|
4
|
+
# Fetch info for a checkin
|
5
|
+
#
|
6
|
+
# @param [Integer] id Checkin ID
|
7
|
+
# @return [Hashie::Mash] checkin info
|
8
|
+
def checkin_info(id)
|
9
|
+
connection.get("/checkins/#{id}").body
|
10
|
+
end
|
11
|
+
|
12
|
+
# Check in at a spot
|
13
|
+
#
|
14
|
+
# @option details [Integer] :spot_id Spot ID
|
15
|
+
# @option details [Float] :lat Latitude of spot
|
16
|
+
# @option details [Float] :lng Longitude of spot
|
17
|
+
# @option details [String] :comment Checkin comment
|
18
|
+
# @option details [Boolean] :post_to_twitter Post Checkin to Twitter
|
19
|
+
# @option details [Boolean] :post_to_facebook Post Checkin to Facebook
|
20
|
+
def checkin(details={})
|
21
|
+
checkin_path = "/checkins"
|
22
|
+
checkin_path += "/test" if Gowalla.test_mode?
|
23
|
+
response = connection.post do |req|
|
24
|
+
req.url checkin_path
|
25
|
+
req.body = details
|
26
|
+
end
|
27
|
+
response.body
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
data/lib/gowalla/client.rb
CHANGED
@@ -3,11 +3,18 @@ require 'forwardable'
|
|
3
3
|
module Gowalla
|
4
4
|
class Client
|
5
5
|
extend Forwardable
|
6
|
-
|
6
|
+
|
7
|
+
include Spots
|
8
|
+
include Users
|
9
|
+
include Items
|
10
|
+
include Trips
|
11
|
+
include Checkins
|
12
|
+
include Flags
|
13
|
+
|
7
14
|
attr_reader :username, :api_key, :api_secret
|
8
|
-
|
15
|
+
|
9
16
|
def_delegators :oauth_client, :web_server, :authorize_url, :access_token_url
|
10
|
-
|
17
|
+
|
11
18
|
def initialize(options={})
|
12
19
|
@api_key = options[:api_key] || Gowalla.api_key
|
13
20
|
@api_secret = options[:api_secret] || Gowalla.api_secret
|
@@ -17,176 +24,15 @@ module Gowalla
|
|
17
24
|
connection.basic_auth(@username, password) unless @api_secret
|
18
25
|
connection.token_auth(@access_token) if @access_token
|
19
26
|
end
|
20
|
-
|
21
|
-
# Retrieve information about a specific user
|
22
|
-
#
|
23
|
-
# @param [String] user_id (authenticated basic auth user) User ID (screen name)
|
24
|
-
# @return [Hashie::Mash] User info
|
25
|
-
def user(user_id=nil)
|
26
|
-
user_id ||= username
|
27
|
-
connection.get("/users/#{user_id}").body
|
28
|
-
end
|
29
|
-
|
30
|
-
# Retrieve information about a specific item
|
31
|
-
#
|
32
|
-
# @param [Integer] id Item ID
|
33
|
-
# @return [Hashie::Mash] item info
|
34
|
-
def item(id)
|
35
|
-
connection.get("/items/#{id}").body
|
36
|
-
end
|
37
27
|
|
38
|
-
# Retrieve a list of the stamps the user has collected
|
39
|
-
#
|
40
|
-
# @param [String] user_id (authenticated basic auth user) User ID (screen name)
|
41
|
-
# @param [Integer] limit (20) limit per page
|
42
|
-
# @return [Hashie::Mash] stamps info
|
43
|
-
def stamps(user_id=self.username, limit=20)
|
44
|
-
response = connection.get do |req|
|
45
|
-
req.url "/users/#{user_id}/stamps", :limit => limit
|
46
|
-
end
|
47
|
-
response.body.stamps
|
48
|
-
end
|
49
|
-
|
50
|
-
# Retrieve a list of spots the user has visited most often
|
51
|
-
#
|
52
|
-
# @param [String] user_id (authenticated basic auth user) User ID (screen name)
|
53
|
-
# @return [Hashie::Mash] item info
|
54
|
-
def top_spots(user_id=self.username)
|
55
|
-
connection.get("/users/#{user_id}/top_spots").body.top_spots
|
56
|
-
end
|
57
|
-
|
58
|
-
# Retrieve information about a specific trip
|
59
|
-
#
|
60
|
-
# @param [Integer] trip_id Trip ID
|
61
|
-
# @return [Hashie::Mash] trip info
|
62
|
-
def trip(trip_id)
|
63
|
-
connection.get("/trips/#{trip_id}").body
|
64
|
-
end
|
65
|
-
|
66
|
-
# Retrieve information about a specific spot
|
67
|
-
#
|
68
|
-
# @param [Integer] spot_id Spot ID
|
69
|
-
# @return [Hashie::Mash] Spot info
|
70
|
-
def spot(spot_id)
|
71
|
-
connection.get("/spots/#{spot_id}").body
|
72
|
-
end
|
73
|
-
|
74
|
-
# Retrieve a list of check-ins at a particular spot. Shows only the activity that is visible to a given user.
|
75
|
-
#
|
76
|
-
# @param [Integer] spot_id Spot ID
|
77
|
-
# @return [Hashie::Mash] Spot info
|
78
|
-
def spot_events(spot_id)
|
79
|
-
connection.get("/spots/#{spot_id}/events").body.activity
|
80
|
-
end
|
81
|
-
|
82
|
-
# Retrieve a list of items available at a particular spot
|
83
|
-
#
|
84
|
-
# @param [Integer] spot_id Spot ID
|
85
|
-
# @return [Hashie::Mash] Spot info
|
86
|
-
def spot_items(spot_id)
|
87
|
-
connection.get("/spots/#{spot_id}/items").body.items
|
88
|
-
end
|
89
|
-
|
90
|
-
# Retrieve a list of flags for a particular spot
|
91
|
-
#
|
92
|
-
# @param [Integer] spot_id Spot ID
|
93
|
-
# @return [Hashie::Mash] Array of Flags
|
94
|
-
def spot_flags(spot_id)
|
95
|
-
connection.get("/spots/#{spot_id}/flags").body.flags
|
96
|
-
end
|
97
|
-
|
98
|
-
# Retrieve a list of flags
|
99
|
-
#
|
100
|
-
# @return [<Hashie::Mash>] Flag info
|
101
|
-
def list_flags(options={})
|
102
|
-
connection.get("/flags").body.flags
|
103
|
-
end
|
104
|
-
|
105
|
-
# Retrieve information about a particular flag
|
106
|
-
#
|
107
|
-
# @param [Integer] flag_id Flag ID
|
108
|
-
# @return [Hashie::Mash] Flag info
|
109
|
-
def flag(flag_id)
|
110
|
-
connection.get("/flags/#{flag_id}").body
|
111
|
-
end
|
112
|
-
|
113
|
-
# Retrieve a list of spots within a specified distance of a location
|
114
|
-
#
|
115
|
-
# @option options [Float] :latitude Latitude of search location
|
116
|
-
# @option options [Float] :longitude Longitude of search location
|
117
|
-
# @option options [Integer] :radius Search radius (in meters)
|
118
|
-
# @return [Hashie::Mash] spots info
|
119
|
-
def list_spots(options={})
|
120
|
-
query = format_geo_options(options)
|
121
|
-
response = connection.get do |req|
|
122
|
-
req.url "/spots", query
|
123
|
-
end
|
124
|
-
response.body.spots
|
125
|
-
end
|
126
|
-
|
127
|
-
# List of trips
|
128
|
-
#
|
129
|
-
# @return [<Hashie::Mash>] trip info
|
130
|
-
def trips(options={})
|
131
|
-
if user_id = options.delete(:user_id)
|
132
|
-
options[:user_url] = "/users/#{user_id}"
|
133
|
-
end
|
134
|
-
query = format_geo_options(options)
|
135
|
-
response = connection.get do |req|
|
136
|
-
req.url "/trips", query
|
137
|
-
end
|
138
|
-
response.body.trips
|
139
|
-
end
|
140
|
-
|
141
|
-
# Lists all spot categories
|
142
|
-
#
|
143
|
-
# @return [<Hashie::Mash>] category info
|
144
|
-
def categories
|
145
|
-
connection.get("/categories").body.spot_categories
|
146
|
-
end
|
147
|
-
|
148
|
-
# Retrieve information about a specific category
|
149
|
-
#
|
150
|
-
# @param [Integer] id Category ID
|
151
|
-
# @return [Hashie::Mash] category info
|
152
|
-
def category(id)
|
153
|
-
connection.get("/categories/#{id}").body
|
154
|
-
end
|
155
|
-
|
156
|
-
# Fetch info for a checkin
|
157
|
-
#
|
158
|
-
# @param [Integer] id Checkin ID
|
159
|
-
# @return [Hashie::Mash] checkin info
|
160
|
-
def checkin_info(id)
|
161
|
-
connection.get("/checkins/#{id}").body
|
162
|
-
end
|
163
|
-
|
164
|
-
# Check in at a spot
|
165
|
-
#
|
166
|
-
# @option details [Integer] :spot_id Spot ID
|
167
|
-
# @option details [Float] :lat Latitude of spot
|
168
|
-
# @option details [Float] :lng Longitude of spot
|
169
|
-
# @option details [String] :comment Checkin comment
|
170
|
-
# @option details [Boolean] :post_to_twitter Post Checkin to Twitter
|
171
|
-
# @option details [Boolean] :post_to_facebook Post Checkin to Facebook
|
172
|
-
def checkin(details={})
|
173
|
-
checkin_path = "/checkins"
|
174
|
-
checkin_path += "/test" if Gowalla.test_mode?
|
175
|
-
response = connection.post do |req|
|
176
|
-
req.url checkin_path
|
177
|
-
req.body = details
|
178
|
-
end
|
179
|
-
response.body
|
180
|
-
end
|
181
|
-
|
182
28
|
# Check for missing access token
|
183
29
|
#
|
184
30
|
# @return [Boolean] whether or not to redirect to get an access token
|
185
31
|
def needs_access?
|
186
32
|
@api_secret and @access_token.to_s == ''
|
187
33
|
end
|
188
|
-
|
189
|
-
# Raw HTTP connection, either Faraday::Connection
|
34
|
+
|
35
|
+
# Raw HTTP connection, either Faraday::Connection
|
190
36
|
#
|
191
37
|
# @return [Faraday::Connection]
|
192
38
|
def connection
|
@@ -198,18 +44,18 @@ module Gowalla
|
|
198
44
|
builder.use Faraday::Response::MultiJson
|
199
45
|
builder.use Faraday::Response::Mashify
|
200
46
|
end
|
201
|
-
|
47
|
+
|
202
48
|
end
|
203
|
-
|
49
|
+
|
204
50
|
# Provides raw access to the OAuth2 Client
|
205
51
|
#
|
206
|
-
# @return [OAuth2::Client]
|
52
|
+
# @return [OAuth2::Client]
|
207
53
|
def oauth_client
|
208
54
|
if @oauth_client
|
209
55
|
@oauth_client
|
210
56
|
else
|
211
57
|
conn ||= Faraday::Connection.new \
|
212
|
-
:url => "https://api.gowalla.com",
|
58
|
+
:url => "https://api.gowalla.com",
|
213
59
|
:headers => default_headers
|
214
60
|
|
215
61
|
oauth= OAuth2::Client.new(api_key, api_secret, oauth_options = {
|
@@ -223,7 +69,7 @@ module Gowalla
|
|
223
69
|
end
|
224
70
|
|
225
71
|
private
|
226
|
-
|
72
|
+
|
227
73
|
# @private
|
228
74
|
def format_geo_options(options={})
|
229
75
|
options[:lat] = "+#{options[:lat]}" if options[:lat].to_i > 0
|
@@ -233,17 +79,17 @@ module Gowalla
|
|
233
79
|
end
|
234
80
|
options
|
235
81
|
end
|
236
|
-
|
82
|
+
|
237
83
|
# @private
|
238
84
|
def default_headers
|
239
85
|
headers = {
|
240
|
-
:accept => 'application/json',
|
86
|
+
:accept => 'application/json',
|
241
87
|
:user_agent => 'Ruby gem',
|
242
88
|
'X-Gowalla-API-Key' => api_key
|
243
89
|
}
|
244
90
|
end
|
245
|
-
|
246
|
-
|
91
|
+
|
92
|
+
|
247
93
|
end
|
248
|
-
|
94
|
+
|
249
95
|
end
|