whatser 0.2.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.
Files changed (60) hide show
  1. data/.document +5 -0
  2. data/Gemfile +12 -0
  3. data/Gemfile.lock +34 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +310 -0
  6. data/Rakefile +53 -0
  7. data/VERSION +1 -0
  8. data/lib/whatser/api/batch.rb +0 -0
  9. data/lib/whatser/api/facebook.rb +13 -0
  10. data/lib/whatser/api/foursquare.rb +5 -0
  11. data/lib/whatser/api/gowalla.rb +5 -0
  12. data/lib/whatser/api/response.rb +84 -0
  13. data/lib/whatser/api/service.rb +15 -0
  14. data/lib/whatser/api/twitter.rb +13 -0
  15. data/lib/whatser/client.rb +54 -0
  16. data/lib/whatser/configuration.rb +15 -0
  17. data/lib/whatser/errors.rb +4 -0
  18. data/lib/whatser/net/http.rb +26 -0
  19. data/lib/whatser/net/oauth.rb +41 -0
  20. data/lib/whatser/resources/activity_feed.rb +20 -0
  21. data/lib/whatser/resources/check_in.rb +25 -0
  22. data/lib/whatser/resources/city.rb +16 -0
  23. data/lib/whatser/resources/collection.rb +68 -0
  24. data/lib/whatser/resources/data_source.rb +24 -0
  25. data/lib/whatser/resources/detail.rb +40 -0
  26. data/lib/whatser/resources/follow.rb +42 -0
  27. data/lib/whatser/resources/media.rb +41 -0
  28. data/lib/whatser/resources/poi.rb +74 -0
  29. data/lib/whatser/resources/resource.rb +53 -0
  30. data/lib/whatser/resources/review.rb +40 -0
  31. data/lib/whatser/resources/subscription.rb +12 -0
  32. data/lib/whatser/resources/tag.rb +32 -0
  33. data/lib/whatser/resources/user.rb +81 -0
  34. data/lib/whatser.rb +38 -0
  35. data/test/helper.rb +25 -0
  36. data/test/test_activity_feed.rb +20 -0
  37. data/test/test_check_in.rb +28 -0
  38. data/test/test_city.rb +16 -0
  39. data/test/test_client.rb +84 -0
  40. data/test/test_collection.rb +28 -0
  41. data/test/test_configuration.rb +26 -0
  42. data/test/test_data_source.rb +35 -0
  43. data/test/test_detail.rb +38 -0
  44. data/test/test_facebook.rb +7 -0
  45. data/test/test_follow.rb +33 -0
  46. data/test/test_foursquare.rb +7 -0
  47. data/test/test_gowalla.rb +7 -0
  48. data/test/test_hondius.rb +12 -0
  49. data/test/test_http.rb +40 -0
  50. data/test/test_oauth.rb +37 -0
  51. data/test/test_poi.rb +75 -0
  52. data/test/test_resource.rb +73 -0
  53. data/test/test_response.rb +44 -0
  54. data/test/test_review.rb +37 -0
  55. data/test/test_subscription.rb +11 -0
  56. data/test/test_tag.rb +32 -0
  57. data/test/test_twitter.rb +7 -0
  58. data/test/test_user.rb +53 -0
  59. data/whatser.gemspec +140 -0
  60. metadata +236 -0
@@ -0,0 +1,26 @@
1
+ module Whatser
2
+ module Http
3
+ include HTTParty
4
+
5
+ def self.included(base)
6
+ base_uri base.api_uri
7
+ end
8
+
9
+ def request(verb, path, params={}, options={})
10
+ response = HTTParty.send( verb, compose_url(path), request_options( params ) )
11
+ Whatser::Response.new( response.body, {:code => response.code}.merge(options) )
12
+ end
13
+
14
+ private
15
+
16
+ def compose_url(path)
17
+ "#{api_uri}#{path}"
18
+ end
19
+
20
+ def request_options(params={})
21
+ params ||= {}
22
+ return { :query => {:oauth_token => oauth_token}.merge(params[:query] || {}),
23
+ :body => params[:body] }
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,41 @@
1
+ require 'oauth2'
2
+
3
+ module Whatser
4
+ module OAuth
5
+ def oauth_client
6
+ OAuth2::Client.new(api_key, api_secret, :site => api_uri)
7
+ end
8
+
9
+ def get_oauth_token(code, params={})
10
+ oauth_client.web_server.get_access_token( code, params)
11
+ end
12
+
13
+ def oauth_authorize_url(params={})
14
+ oauth_client.web_server.authorize_url(params)
15
+ end
16
+
17
+ def login(email, password)
18
+ request( :get, '/oauth/access_token', {:query => password_grant_params(email, password)}, :auth => :key, :keys => auth_keys )
19
+ end
20
+
21
+ private
22
+
23
+ def auth_keys
24
+ ['access_token','refresh_token','expires_in']
25
+ end
26
+
27
+ def hash_to_query(hash)
28
+ hash.collect do |key, value|
29
+ "#{key}=#{value}"
30
+ end * '&'
31
+ end
32
+
33
+ def password_grant_params(email, password)
34
+ {'grant_type' => 'password',
35
+ 'client_id' => api_key,
36
+ 'client_secret' => api_secret,
37
+ 'username' => email,
38
+ 'password' => password}
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,20 @@
1
+ module Whatser
2
+ class ActivityFeed < Whatser::Resource
3
+ attr_accessor :user_id,:user_name,:user_avatar,:poi_id,:poi_name,:object_id,:object_name,:object_avatar
4
+ attr_accessor :city,:message,:created_At
5
+
6
+ class << self
7
+ def mine(params={})
8
+ user('me', params)
9
+ end
10
+
11
+ def global(params={})
12
+ api_request :get, "/api/users/activity_feed", {:query => params}
13
+ end
14
+
15
+ def user(user_id, params={})
16
+ api_request :get, "/api/users/#{user_id}/activity_feed", {:query => params}
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,25 @@
1
+ module Whatser
2
+ class CheckIn < Whatser::Resource
3
+ attr_accessor :id,:user_id,:poi_id
4
+ attr_accessor :name,:lat,:lng,:check_in_at,:check_out_at,:rating,:message
5
+ attr_accessor :locate_user, :gowalla_share, :foursquare_share
6
+
7
+ class << self
8
+ def list(opts={})
9
+ api_request :get, "/api/check_ins", {:query => opts}
10
+ end
11
+
12
+ def create(poi_id, params={})
13
+ api_request :post, "/api/poi/#{poi_id}/check_ins", {:body => {'check_in' => params} }
14
+ end
15
+ end
16
+
17
+ def save
18
+ self.class.create( self.poi_id, self.to_params )
19
+ end
20
+
21
+ def to_params
22
+ {:lat => lat, :lng => lng, :locate => locate_user, :gowalla => gowalla_share, :foursquare => foursquare_share, :check_in_at => check_in_at, :check_out_at => check_out_at}
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,16 @@
1
+ module Whatser
2
+ class City < Whatser::Resource
3
+ attr_accessor :name,:count
4
+ alias :collections_count :count
5
+
6
+ class << self
7
+ def mine(params={})
8
+ api_request :get, "/api/users/me/black/book/cities", {:query => params}
9
+ end
10
+
11
+ def user(user_id, params={})
12
+ api_request :get, "/api/users/#{user_id}/black/book/cities", {:query => params}
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,68 @@
1
+ module Whatser
2
+ class Collection < Whatser::Resource
3
+ include Enumerable
4
+
5
+ attr_accessor :data,:city,:city_name
6
+
7
+ class << self
8
+ def mine(opts={})
9
+ collect_api_request :get, "/api/users/me/black/book", {:query => opts}
10
+ end
11
+
12
+ def list(user_id, opts={})
13
+ collect_api_request :get, "/api/users/#{user_id}/black/book", {:query => opts}
14
+ end
15
+
16
+ def add(poi_id, opts={})
17
+ api_request :post, "/api/poi/#{poi_id}/black/book", {:body => ''}, :model => Whatser::Poi
18
+ end
19
+
20
+ def delete(poi_id)
21
+ api_request :delete, "/api/poi/#{poi_id}/black/book", {:body => ''}, :model => Whatser::Poi
22
+ end
23
+
24
+ private
25
+
26
+ def collect_api_request(verb, path, opts={})
27
+ res = api_request(verb, path, opts, :model => Whatser::Poi)
28
+ collection = Whatser::Collection.new(res.data)
29
+
30
+ collection.data = res.data
31
+ res.data = collection
32
+ return res
33
+ end
34
+ end
35
+
36
+ def add(poi_id, opts={})
37
+ Whatser::Collection.add(poi_id, opts)
38
+ end
39
+
40
+ def delete(poi_id)
41
+ Whatser::Collection.delete(poi_id, opts)
42
+ end
43
+
44
+ def initialize(collection_data=nil)
45
+ self.data = collection_data || []
46
+ set_city
47
+ end
48
+
49
+ def each(&block)
50
+ (data || []).each(&block)
51
+ end
52
+
53
+ def size
54
+ (data || []).size
55
+ end
56
+
57
+ private
58
+
59
+ def set_city
60
+ self.city ||= []
61
+ data.each do |poi|
62
+ next unless poi.is_a?(Whatser::Poi)
63
+ self.city << poi.city unless city.include?(poi.city)
64
+ end
65
+ self.city_name = city.join(", ")
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,24 @@
1
+ module Whatser
2
+ class DataSource < Whatser::Resource
3
+ attr_accessor :id
4
+ attr_accessor :name,:price,:review_count,:media_count,:collection_count,:poi_count
5
+ attr_accessor :users
6
+
7
+ class << self
8
+ def list(opts={})
9
+ api_request :get, "/api/data_sources", {:query => opts}
10
+ end
11
+
12
+ def for_users(user_id, opts={})
13
+ user_id = user_id.is_a?(Array) ? user_id.join(',') : user_id
14
+ api_request :get, "/api/data_sources", {:query => {:user_id => user_id}.merge(opts || {})}
15
+ end
16
+ end
17
+
18
+ def subscription_url(opts={})
19
+ url = "#{self.class.client.api_uri}/payments/data_sources/#{id}/orders/new?oauth_token=#{self.class.client.oauth_token}"
20
+ url = "#{url}&#{opts.to_params}" unless opts.blank?
21
+ url
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,40 @@
1
+ module Whatser
2
+ class Detail < Whatser::Resource
3
+ attr_accessor :id,:user_id,:poi_id
4
+ attr_accessor :data,:created_at
5
+
6
+ class << self
7
+ def list(poi_id, opts={})
8
+ api_request :get, "/api/poi/#{poi_id}/details", {:query => opts}
9
+ end
10
+
11
+ def find(poi_id, id, opts={})
12
+ api_request :get, "/api/poi/#{poi_id}/details/#{id}", {:query => opts}
13
+ end
14
+
15
+ def create(poi_id, params={})
16
+ api_request :post, "/api/poi/#{poi_id}/details", {:body => {'detail' => params} }
17
+ end
18
+
19
+ def delete(poi_id, id)
20
+ api_request :delete, "/api/poi/#{poi_id}/details/#{id}"
21
+ end
22
+ end
23
+
24
+ def save
25
+ if id.blank?
26
+ self.class.create(poi_id, to_params)
27
+ else
28
+ api_request :put, "/api/poi/#{poi_id}/details/#{id}", {:body => {'detail' => to_params} }
29
+ end
30
+ end
31
+
32
+ def delete
33
+ self.class.delete(poi_id, id)
34
+ end
35
+
36
+ def to_params
37
+ {:data => data}
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,42 @@
1
+ module Whatser
2
+ class Follow < Whatser::Resource
3
+ attr_accessor :id
4
+ attr_accessor :name,:avatar_pic,:location
5
+ attr_accessor :promoted,:premium,:collections_count
6
+ attr_accessor :following,:followed,:foaf_count,:foaf
7
+
8
+ class << self
9
+ def list(opts={})
10
+ api_request :get, "/api/follows", {:query => opts}
11
+ end
12
+
13
+ def suggested(opts={})
14
+ api_request :get, "/api/users/suggested", {:query => opts}
15
+ end
16
+
17
+ def create(user_id, opts={})
18
+ api_request :post, "/api/follows/#{user_id}", {:query => opts, :body => ''}
19
+ end
20
+
21
+ def delete(user_id)
22
+ api_request :delete, "/api/follows/#{user_id}"
23
+ end
24
+
25
+ def ignore(user_id)
26
+ delete(user_id)
27
+ end
28
+
29
+ def connection(user_id)
30
+ api_request :get, "/api/users/#{user_id}/connection"
31
+ end
32
+ end
33
+
34
+ def save
35
+ self.class.create( id )
36
+ end
37
+
38
+ def delete
39
+ self.class.ignore( id )
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,41 @@
1
+ module Whatser
2
+ class Media < Whatser::Resource
3
+ attr_accessor :id,:user_id,:poi_id
4
+ attr_accessor :name,:thumb_pic,:small_pic,:mid_pic,:url,:mime,:created_at
5
+ attr_writer :resource,:remote_resource
6
+
7
+ class << self
8
+ def list(poi_id, opts={})
9
+ api_request :get, "/api/poi/#{poi_id}/media", {:query => opts}
10
+ end
11
+
12
+ def find(poi_id, id, opts={})
13
+ api_request :get, "/api/poi/#{poi_id}/media/#{id}", {:query => opts}
14
+ end
15
+
16
+ def create(poi_id, params={})
17
+ api_request :post, "/api/poi/#{poi_id}/media", {:body => {'media' => params} }
18
+ end
19
+
20
+ def delete(poi_id, id)
21
+ api_request :delete, "/api/poi/#{poi_id}/media/#{id}"
22
+ end
23
+ end
24
+
25
+ def save
26
+ if id.blank?
27
+ Whatser::Media.create(poi_id, to_params)
28
+ else
29
+ api_request :put, "/api/poi/#{poi_id}/media/#{id}", {:body => {'media' => to_params} }
30
+ end
31
+ end
32
+
33
+ def delete
34
+ Whatser::Media.delete(poi_id, id)
35
+ end
36
+
37
+ def to_params
38
+ {:name=>name,:resource=>@resource,:remote_resource=>@remote_resource}
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,74 @@
1
+ module Whatser
2
+ class Poi < Whatser::Resource
3
+ attr_accessor :id,:user_id,:gowalla_id,:foursquare_id
4
+ attr_accessor :name,:lat,:lng,:street,:district,:region,:city,:postal_code,:country
5
+ attr_accessor :tag_list,:created_at
6
+
7
+ class << self
8
+ def suggested(opts={})
9
+ api_request :get, "/api/poi/suggested", {:query => opts}
10
+ end
11
+
12
+ def search(opts={})
13
+ api_request :get, "/api/poi", {:query => opts}
14
+ end
15
+
16
+ def find(id, opts={})
17
+ api_request :get, "/api/poi/#{id}", {:query => opts}
18
+ end
19
+
20
+ def create(params={})
21
+ api_request :post, "/api/poi", {:body => {'poi' => params} }
22
+ end
23
+
24
+ def delete(poi_id)
25
+ api_request :delete, "/api/poi/#{poi_id}"
26
+ end
27
+ end
28
+
29
+ def save
30
+ if id.blank?
31
+ self.class.create(to_params)
32
+ else
33
+ api_request :put, "/api/poi/#{id}", {:body => {'poi' => to_params} }
34
+ end
35
+ end
36
+
37
+ def delete
38
+ Whatser::Poi.delete(id)
39
+ end
40
+
41
+ def tag(tag_name)
42
+ Whatser::Tag.create(id, tag_name)
43
+ end
44
+
45
+ def tags(opts={})
46
+ Whatser::Tag.list(id, opts)
47
+ end
48
+
49
+ def media(opts={})
50
+ Whatser::Media.list(id, opts)
51
+ end
52
+
53
+ def reviews(opts={})
54
+ Whatser::Review.list(id, opts)
55
+ end
56
+
57
+ def details(opts={})
58
+ Whatser::Detail.list(id, opts)
59
+ end
60
+
61
+ def foursquare_connected?
62
+ !foursquare_id.blank?
63
+ end
64
+
65
+ def gowalla_connected?
66
+ !gowalla_id.blank?
67
+ end
68
+
69
+ def to_params
70
+ {:name=>name,:lat=>lat,:lng=>lat,:street=>street,:district=>district,
71
+ :region=>region,:city=>city,:postal_code=>postal_code,:country=>country}
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,53 @@
1
+ module Whatser
2
+ class Resource
3
+ attr_accessor :json
4
+
5
+ class << self
6
+ def client
7
+ @client
8
+ end
9
+
10
+ def set(client)
11
+ @client = client
12
+ self
13
+ end
14
+
15
+ def api_request(verb, path, params={}, opts={})
16
+ res = client.request(verb, path, params)
17
+ res.data = convert_data_to_model( res.data, opts)
18
+ return res
19
+ end
20
+
21
+ def convert_data_to_model(data, opts={})
22
+ return data if data.blank?
23
+ opts ||= {}
24
+
25
+ data = if data.is_a?(Array)
26
+ data.inject([]) {|result,d| result << from_hash_to_model(d, opts[:model]) }
27
+ else
28
+ from_hash_to_model(data, opts[:model])
29
+ end
30
+ data
31
+ end
32
+
33
+ def from_hash_to_model(hash, model=nil)
34
+ hash ||= {}
35
+ hash = hash.size == 1 ? hash.first.last : hash
36
+ mod = model.blank? ? new : model.new
37
+ hash.each do |k,v|
38
+ mod.send("#{k}=", v) if mod.respond_to?(k)
39
+ end
40
+ mod.json = hash.to_json
41
+ return mod
42
+ end
43
+ end
44
+
45
+ def initialize(params={})
46
+ params.each_pair { |k,v| send("#{k}=", v) if respond_to?(k) }
47
+ end
48
+
49
+ def api_request(verb, path, params={}, opts={})
50
+ self.class.api_request(verb, path, params, opts)
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,40 @@
1
+ module Whatser
2
+ class Review < Whatser::Resource
3
+ attr_accessor :id,:user_id,:poi_id
4
+ attr_accessor :body,:created_at
5
+
6
+ class << self
7
+ def list(poi_id, opts={})
8
+ api_request :get, "/api/poi/#{poi_id}/reviews", {:query => opts}
9
+ end
10
+
11
+ def find(poi_id, id, opts={})
12
+ api_request :get, "/api/poi/#{poi_id}/reviews/#{id}", {:query => opts}
13
+ end
14
+
15
+ def create(poi_id, params={})
16
+ api_request :post, "/api/poi/#{poi_id}/reviews", {:body => {'review' => params} }
17
+ end
18
+
19
+ def delete(poi_id, id)
20
+ api_request :delete, "/api/poi/#{poi_id}/reviews/#{id}"
21
+ end
22
+ end
23
+
24
+ def save
25
+ if id.blank?
26
+ self.class.create(poi_id, to_params)
27
+ else
28
+ api_request :put, "/api/poi/#{poi_id}/reviews/#{id}", {:body => {'review' => to_params} }
29
+ end
30
+ end
31
+
32
+ def delete
33
+ self.class.delete(poi_id, id)
34
+ end
35
+
36
+ def to_params
37
+ {:body => body}
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,12 @@
1
+ module Whatser
2
+ class Subscription < Whatser::Resource
3
+ attr_accessor :id,:data_source_id
4
+ attr_accessor :data_source_name,:created_at
5
+
6
+ class << self
7
+ def list(params={})
8
+ api_request :get, "/api/subscriptions", {:query => params}
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,32 @@
1
+ module Whatser
2
+ class Tag < Whatser::Resource
3
+ attr_accessor :id,:poi_id
4
+ attr_accessor :name
5
+
6
+ class << self
7
+ def list(poi_id, opts={})
8
+ api_request :get, "/api/poi/#{poi_id}/tags", {:query => opts}
9
+ end
10
+
11
+ def create(poi_id, tag_name)
12
+ api_request :post, "/api/poi/#{poi_id}/tags", {:body => {'tagging' => {'name' => tag_name}} }
13
+ end
14
+
15
+ def delete(poi_id, tag_name)
16
+ api_request :delete, "/api/poi/#{poi_id}/tags/#{tag_name}"
17
+ end
18
+ end
19
+
20
+ def save
21
+ self.class.create(poi_id, name)
22
+ end
23
+
24
+ def delete
25
+ self.class.delete(poi_id, name)
26
+ end
27
+
28
+ def to_params
29
+ {:name => name}
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,81 @@
1
+ module Whatser
2
+ class User < Whatser::Resource
3
+ attr_accessor :id,:facebook_id,:gowalla_id,:foursquare_id,:twitter_id
4
+ attr_accessor :name,:twitter_name,:avatar_pic,:location,:bio,:email
5
+ attr_accessor :last_login_at,:promoted,:premium,:collections_count
6
+ attr_writer :avatar,:remote_avatar,:password,:lat,:lng
7
+ attr_writer :access_tokens
8
+
9
+ class << self
10
+ def me
11
+ api_request :get, "/api/users/me"
12
+ end
13
+
14
+ def anonymous
15
+ api_request :get, "/api/users/anonymous"
16
+ end
17
+
18
+ def search(params={})
19
+ api_request :get, "/api/users/lookup", {:query => params}
20
+ end
21
+
22
+ def suggested(params={})
23
+ api_request :get, "/api/users/suggested", {:query => params}
24
+ end
25
+
26
+ def find(id, params={})
27
+ api_request :get, "/api/users/#{id}/profile", {:query => params}
28
+ end
29
+
30
+ def create(params={})
31
+ api_request :post, "/api/users", {:body => {'user' => params} }, :auth => :key
32
+ end
33
+
34
+ def invite(emails)
35
+ api_request :post, "/api/invites", {:query => emails}
36
+ end
37
+ end
38
+
39
+ def save
40
+ if id.blank?
41
+ api_request :post, "/api/users", {:body => {'user' => to_params} }, :auth => :key
42
+ else
43
+ api_request :put, "/api/users/me", {:body => {'user' => to_params} }
44
+ end
45
+ end
46
+
47
+ def connection
48
+ Whatser::Follow.connection(id)
49
+ end
50
+
51
+ def oauth_token
52
+ if access_tokens.blank?
53
+ nil
54
+ elsif access_tokens.is_a?(Array)
55
+ access_tokens.first
56
+ else
57
+ access_token
58
+ end
59
+ end
60
+
61
+ def facebook_connected?
62
+ !facebook_id.blank?
63
+ end
64
+
65
+ def foursquare_connected?
66
+ !foursquare_id.blank?
67
+ end
68
+
69
+ def gowalla_connected?
70
+ !gowalla_id.blank?
71
+ end
72
+
73
+ def twitter_connected?
74
+ !twitter_id.blank?
75
+ end
76
+
77
+ def to_params
78
+ {:name=>name,:avatar_pic=>@remote_avatar,:location=>location,:bio=>bio,:email=>email}
79
+ end
80
+ end
81
+ end
data/lib/whatser.rb ADDED
@@ -0,0 +1,38 @@
1
+ require 'rubygems'
2
+ require 'httparty'
3
+
4
+ require File.expand_path('../whatser/net/http', __FILE__)
5
+ require File.expand_path('../whatser/net/oauth', __FILE__)
6
+ require File.expand_path('../whatser/configuration', __FILE__)
7
+ require File.expand_path('../whatser/client', __FILE__)
8
+ require File.expand_path('../whatser/errors', __FILE__)
9
+ require File.expand_path('../whatser/api/response', __FILE__)
10
+
11
+ require File.expand_path('../whatser/resources/resource', __FILE__)
12
+ require File.expand_path('../whatser/resources/city', __FILE__)
13
+ require File.expand_path('../whatser/resources/check_in', __FILE__)
14
+ require File.expand_path('../whatser/resources/collection', __FILE__)
15
+ require File.expand_path('../whatser/resources/data_source', __FILE__)
16
+ require File.expand_path('../whatser/resources/detail', __FILE__)
17
+ require File.expand_path('../whatser/resources/media', __FILE__)
18
+ require File.expand_path('../whatser/resources/poi', __FILE__)
19
+ require File.expand_path('../whatser/resources/review', __FILE__)
20
+ require File.expand_path('../whatser/resources/subscription', __FILE__)
21
+ require File.expand_path('../whatser/resources/tag', __FILE__)
22
+ require File.expand_path('../whatser/resources/user', __FILE__)
23
+ require File.expand_path('../whatser/resources/follow', __FILE__)
24
+ require File.expand_path('../whatser/resources/activity_feed', __FILE__)
25
+
26
+ require File.expand_path('../whatser/api/service', __FILE__)
27
+ require File.expand_path('../whatser/api/facebook', __FILE__)
28
+ require File.expand_path('../whatser/api/foursquare', __FILE__)
29
+ require File.expand_path('../whatser/api/twitter', __FILE__)
30
+ require File.expand_path('../whatser/api/gowalla', __FILE__)
31
+
32
+ module Whatser
33
+ class << self
34
+ def client(options={})
35
+ @client ||= Whatser::Client.new(options)
36
+ end
37
+ end
38
+ end