foursquared 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. data/.gitignore +10 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +19 -0
  4. data/Guardfile +6 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +30 -0
  7. data/Rakefile +30 -0
  8. data/foursquared.gemspec +34 -0
  9. data/lib/core_ext/symbol.rb +7 -0
  10. data/lib/foursquared/badges.rb +12 -0
  11. data/lib/foursquared/checkins.rb +89 -0
  12. data/lib/foursquared/client.rb +58 -0
  13. data/lib/foursquared/error.rb +17 -0
  14. data/lib/foursquared/events.rb +18 -0
  15. data/lib/foursquared/lists.rb +97 -0
  16. data/lib/foursquared/oauth/client.rb +37 -0
  17. data/lib/foursquared/pages.rb +49 -0
  18. data/lib/foursquared/photos.rb +34 -0
  19. data/lib/foursquared/response/badge.rb +87 -0
  20. data/lib/foursquared/response/badge_group.rb +42 -0
  21. data/lib/foursquared/response/category.rb +53 -0
  22. data/lib/foursquared/response/checkin.rb +180 -0
  23. data/lib/foursquared/response/event.rb +52 -0
  24. data/lib/foursquared/response/list.rb +199 -0
  25. data/lib/foursquared/response/list_item.rb +63 -0
  26. data/lib/foursquared/response/photo.rb +102 -0
  27. data/lib/foursquared/response/special.rb +131 -0
  28. data/lib/foursquared/response/tip.rb +134 -0
  29. data/lib/foursquared/response/user.rb +246 -0
  30. data/lib/foursquared/response/venue.rb +252 -0
  31. data/lib/foursquared/settings.rb +28 -0
  32. data/lib/foursquared/specials.rb +25 -0
  33. data/lib/foursquared/tips.rb +113 -0
  34. data/lib/foursquared/users.rb +206 -0
  35. data/lib/foursquared/venues.rb +217 -0
  36. data/lib/foursquared/version.rb +4 -0
  37. data/lib/foursquared.rb +47 -0
  38. data/spec/foursquared/badges_spec.rb +82 -0
  39. data/spec/foursquared/checkins_spec.rb +0 -0
  40. data/spec/foursquared/events_spec.rb +50 -0
  41. data/spec/foursquared/oauth/client_spec.rb +24 -0
  42. data/spec/foursquared/pages_spec.rb +42 -0
  43. data/spec/foursquared/photos_spec.rb +41 -0
  44. data/spec/foursquared/response/badge_spec.rb +40 -0
  45. data/spec/foursquared/response/category_spec.rb +48 -0
  46. data/spec/foursquared/response/checkin_spec.rb +100 -0
  47. data/spec/foursquared/response/event_category_spec.rb +48 -0
  48. data/spec/foursquared/response/event_spec.rb +60 -0
  49. data/spec/foursquared/response/list_spec.rb +56 -0
  50. data/spec/foursquared/response/photo_spec.rb +70 -0
  51. data/spec/foursquared/response/special_spec.rb +0 -0
  52. data/spec/foursquared/response/user_spec.rb +124 -0
  53. data/spec/foursquared/response/venue_spec.rb +83 -0
  54. data/spec/foursquared/specials_spec.rb +4 -0
  55. data/spec/foursquared/users_spec.rb +241 -0
  56. data/spec/spec_helper.rb +27 -0
  57. metadata +344 -0
@@ -0,0 +1,102 @@
1
+ module Foursquared
2
+ module Response
3
+ # Photo response
4
+ class Photo
5
+ attr_reader :client, :response
6
+ def initialize(client, response)
7
+ @client = client
8
+ @response = response
9
+ end
10
+
11
+ # The ID of the photo
12
+ # @return [String]
13
+ def id
14
+ response["id"]
15
+ end
16
+
17
+ # The time at which the photo was created
18
+ # @return [Time]
19
+ def created_at
20
+ Time.at(response["createdAt"]) if response["createdAt"]
21
+ end
22
+
23
+ # The name and url for the application that created this photo.
24
+ def source
25
+ response["source"]
26
+ end
27
+
28
+ # Start of the URL for this photo.
29
+ # @return [String]
30
+ def prefix
31
+ response["prefix"]
32
+ end
33
+
34
+ # End of the URL for this photo.
35
+ # @return [String]
36
+ def suffix
37
+ response["suffix"]
38
+ end
39
+
40
+ # The user to which the photo belongs
41
+ # @return [Foursquared::Response::User]
42
+ def user
43
+ Foursquared::Response::User.new(client, response["user"]) if response["user"]
44
+ end
45
+
46
+ # URLs for each photo size
47
+ # @return [Hash]
48
+ def urls
49
+ @urls = {
50
+ "36x36" => url(36,36),
51
+ "100x100" => url(100,100),
52
+ "300x300" => url(300,300),
53
+ "500x500" => url(500,500)
54
+ }
55
+ @urls.merge!({"original" => url(width, height)}) if (width and height)
56
+ @urls
57
+ end
58
+
59
+ # Height of the original photo in pixels
60
+ # @return [Integer]
61
+ def height
62
+ response["height"]
63
+ end
64
+
65
+ # Width of the original photo in pixels
66
+ # @return [Integer]
67
+ def width
68
+ response["width"]
69
+ end
70
+
71
+ # Who all can see the photo
72
+ # @return [String]
73
+ def visibility
74
+ response["visibility"]
75
+ end
76
+
77
+ # Venue at which the photo was taken
78
+ # @return [Foursquared::Response::Venue]
79
+ def venue
80
+ Foursquared::Response::Venue.new(client, response["venue"]) if response["venue"]
81
+ end
82
+
83
+ # Tip corresponding to the photo
84
+ # @return [Foursquared::Response::Tip]
85
+ def tip
86
+ Foursquared::Response::Tip.new(client, response["tip"]) if response["tip"]
87
+ end
88
+
89
+ # The checkin for which the photo was taken
90
+ # @return [Foursquared::Response::Checkin]
91
+ def checkin
92
+ Foursquared::Response::Checkin.new(client, response["checkin"]) if response["checkin"]
93
+ end
94
+
95
+ private
96
+ def url width, height
97
+ "#{prefix}#{width}x#{height}#{suffix}"
98
+ end
99
+ end
100
+ end
101
+ end
102
+
@@ -0,0 +1,131 @@
1
+ module Foursquared
2
+ module Response
3
+ # Special response
4
+ class Special
5
+ attr_reader :client, :response
6
+
7
+ def initialize client, response
8
+ @client = client
9
+ @response = response
10
+ end
11
+
12
+ # ID of the special
13
+ # @return [String]
14
+ def id
15
+ response["id"]
16
+ end
17
+
18
+ # A description of how to unlock the special.
19
+ # @return [String]
20
+ def description
21
+ response["description"]
22
+ end
23
+
24
+ # One of mayor, count, frequency, regular, friends, swarm, flash or other.
25
+ # @return [String]
26
+ def type
27
+ response["type"]
28
+ end
29
+
30
+ # A message describing the special.
31
+ # @return [String]
32
+ def message
33
+ response["message"]
34
+ end
35
+
36
+ # Special's image urls
37
+ # @return [Hash]
38
+ def image_urls
39
+ response["imageUrls"]
40
+ end
41
+
42
+ # If the user has unlocked the special
43
+ # @return [Boolean]
44
+ def unlocked?
45
+ response["unlocked"]
46
+ end
47
+
48
+ # The name of the icon to use
49
+ # @return [String]
50
+ def icon
51
+ response["icon"]
52
+ end
53
+
54
+ # URL for the icon
55
+ # @return [String]
56
+ def icon_url
57
+ "http://foursquare.com/img/specials/#{icon}.png" if icon
58
+ end
59
+
60
+ # The header text describing the type of special.
61
+ # @return [String]
62
+ def title
63
+ response["title"]
64
+ end
65
+
66
+ # The state of the special
67
+ # @return [String] unlocked, before start, in progress, taken, or locked
68
+ def state
69
+ response["state"]
70
+ end
71
+
72
+ # A description of how close you are to unlocking the special
73
+ # @return [Integer] Either the number of people who have already unlocked the special (flash and swarm specials), or the number of your friends who have already checked in (friends specials)
74
+ def progress
75
+ response["progress"]
76
+ end
77
+
78
+ # A label describing what the number in the progress field means.
79
+ # @return [String]
80
+ def progress_description
81
+ response["progressDescription"]
82
+ end
83
+
84
+ # Minutes remaining until the special can be unlocked
85
+ # @return [String]
86
+ def detail
87
+ response["detail"]
88
+ end
89
+
90
+ # The provider of the special
91
+ # @return [String]
92
+ def provider
93
+ response["provider"]
94
+ end
95
+
96
+ # Type of redemption
97
+ # @return [String]
98
+ def redemption
99
+ response["redemption"]
100
+ end
101
+
102
+ # The count and urls for the images for the special
103
+ # @return [Hash]
104
+ def image_urls
105
+ response["imageUrls"]
106
+ end
107
+
108
+ # The specific rules for this special.
109
+ # @return [String]
110
+ def fine_print
111
+ response["finePrint"]
112
+ end
113
+
114
+ # Friends who are here
115
+ # @return [Array<Foursquared::Response::User>] An array of Users
116
+ def friends_here
117
+ @friends = response["friendsHere"].collect{|friend| Foursquared::Response::User.new(client, friend)}
118
+ end
119
+
120
+ # Flag the Special
121
+ # @param [Hash] options
122
+ # @option option [String] :venueId required The id of the venue running the special.
123
+ # @option option [String] :problem required One of not_redeemable, not_valuable, other.
124
+ # @option option [String] :text Additional text about why the user has flagged this special
125
+ def flag options={}
126
+ response = post("/specials/#{id}/flag", options)["response"]
127
+ end
128
+
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,134 @@
1
+ module Foursquared
2
+ module Response
3
+ # Tip response class
4
+ class Tip
5
+ attr_reader :client, :response
6
+ def initialize client, response
7
+ @client = client
8
+ @response = response
9
+ end
10
+
11
+ # ID of the tip
12
+ # @return [String] tip id
13
+ def id
14
+ response["id"]
15
+ end
16
+
17
+ # Time since creation of the tip
18
+ # @return [Time]
19
+ def created_at
20
+ Time.at(response["createdAt"]) if response["createdAt"]
21
+ end
22
+
23
+ # The actual tip
24
+ # @return [String]
25
+ def text
26
+ response["text"]
27
+ end
28
+
29
+ # The canonical url for the tip
30
+ # @return [String] url
31
+ def canonical_url
32
+ response["canonicalUrl"]
33
+ end
34
+
35
+ # Groups of users who like the tip
36
+ # @return [Hash] count, groups and summary
37
+ def likes
38
+ @likes = response["likes"]
39
+ @likes["groups"].each{ |group| group["items"].map!{|item| Foursquared::Response::User.new(client, item)}} if @likes and @likes["groups"]
40
+ end
41
+
42
+ # Whether the acting user likes the tip
43
+ # @return [Boolean] true or false
44
+ def like?
45
+ response["like"]
46
+ end
47
+
48
+ # If the context allows tips from multiple venues, the compact venue for this tip.
49
+ # @return [Foursquared::Response::Venue]
50
+ def venue
51
+ Foursquared::Response::Venue.new(client, response["venue"]) if response["venue"]
52
+ end
53
+
54
+ # If the context allows tips from multiple venues, the compact venue for this tip.
55
+ # @return [Foursquared::Response::User]
56
+ def user
57
+ Foursquared::Response::User.new(client, response["user"]) if response["user"]
58
+ end
59
+
60
+ # Groups of lists
61
+ # @return [Hash] count and groups of lists
62
+ def listed
63
+ @listed = response["listed"]
64
+
65
+ @listed["groups"].each{|group| group["items"].map!{|item| Foursquared::Response::List.new(client, item)}} if @listed and @listed["groups"]
66
+ end
67
+
68
+ # Photo for this tip
69
+ # @return [Foursquared::Response::Photo]
70
+ def photo
71
+ Foursquared::Response::Photo.new(client, response["photo"]) if response["photo"]
72
+ end
73
+
74
+ # Status of this tip.
75
+ # @return [String] todo or done
76
+ def status
77
+ response["status"]
78
+ end
79
+
80
+ # A URL for more information.
81
+ # @return [String]
82
+ def url
83
+ response["url"]
84
+ end
85
+
86
+ # Users who have marked this tip todo
87
+ # @return [Hash] count and groups of users
88
+ def todo
89
+ @todo = response["todo"]
90
+ @todo["groups"].each {|group| group["items"].map!{|item| Foursquared::Response::User.new(client, item)}} if @todo and @todo["groups"]
91
+ end
92
+
93
+ # Users who have done this tip todo
94
+ # @return [Hash] count and groups of users
95
+ def done
96
+ @done = response["done"]
97
+ @done["groups"].each {|group| group["items"].map!{|item| Foursquared::Response::User.new(client, item)}} if @done and @done["groups"]
98
+ end
99
+
100
+ # Like or unlike the tip
101
+ # @param [Hash] options
102
+ # @option options [Integer] :set If 1, like this tip. If 0 unlike (un-do a previous like) it. Default value is 1
103
+ # @return [Hash] Updated count and groups of users who like this tip.
104
+ def like options={}
105
+ response = post("/tips/#{id}/like", options)["response"]
106
+ @likes = response["likes"]
107
+ @likes["groups"].each{ |group| group["items"].map!{|item| Foursquared::Response::User.new(client, item)}} if @likes and @likes["groups"]
108
+ @likes
109
+ end
110
+
111
+ # Mark the tip done
112
+ # @return [Foursquared::Response::Tip] The marked to-do.
113
+ def mark_done
114
+ response = post("/tips/#{id}/markdone")["response"]
115
+ Foursquared::Response::Tip.new(self, response["tip"])
116
+ end
117
+
118
+ # Mark the tip to-do
119
+ # @return [Foursquared::Response::Todo] The marked to-do.
120
+ def mark_todo
121
+ response = post("/tips/#{id}/marktodo")["response"]
122
+ Foursquared::Response::Todo.new(self, response["todo"])
123
+ end
124
+
125
+ # Unmark the tip as to-do
126
+ # @return [Foursquared::Response::Tip] The current tip
127
+ def unmark_todo tip_id
128
+ response = post("/tips/#{tip_id}/unmark")["response"]
129
+ Foursquared::Response::Tip.new(self, response["tip"])
130
+ end
131
+
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,246 @@
1
+ # Foursquared module
2
+ module Foursquared
3
+ # Response module
4
+ module Response
5
+ # User response class
6
+ class User
7
+ attr_reader :client, :response
8
+ def initialize client, response
9
+ @client = client
10
+ @response = response
11
+ end
12
+
13
+ # The user's id
14
+ # @return [String] The user's id
15
+ def id
16
+ response["id"]
17
+ end
18
+
19
+ # User's first name
20
+ # @return [String]
21
+ def first_name
22
+ response["firstName"]
23
+ end
24
+
25
+ # User's last name
26
+ # @return [String]
27
+ def last_name
28
+ response["lastName"]
29
+ end
30
+
31
+ # User's full name
32
+ # @return [String]
33
+ def name
34
+ [first_name, last_name].join(' ').strip
35
+ end
36
+
37
+ # User's profile photo
38
+ # @return [Foursquared::Response::Photo]
39
+ def photo
40
+ Foursquared::Response::Photo.new(client, response["photo"])
41
+ end
42
+
43
+ # User's relationship with the acting user
44
+ # @return [String]
45
+ def relationship
46
+ response["relationship"]
47
+ end
48
+
49
+ # User's friends list retrieved from the initial response
50
+ # @return [Hash] count and groups of users
51
+ def friends
52
+ @friends = response["friends"]
53
+ @friends["groups"].each do |group|
54
+ group["items"].map!{|item| Foursquared::Response::User.new(client, item)}
55
+ end
56
+ @friends
57
+ end
58
+
59
+ # User's full friends list
60
+ # @param [Hash] options
61
+ # @option options [Integer] :limit Number of results to return, up to 500.
62
+ # @option options [Integer] :offset Used to page through results.
63
+ # @return [Hash] A count and items of friends.
64
+ def full_friends options={}
65
+ client.user_friends(id, options)
66
+ end
67
+
68
+ # User's gender
69
+ # @return [String]
70
+ def gender
71
+ response["gender"]
72
+ end
73
+
74
+ # User's home city
75
+ # @return [String]
76
+ def home_city
77
+ response["homeCity"]
78
+ end
79
+
80
+ # A short bio for the user
81
+ # @return [String]
82
+ def bio
83
+ response["bio"]
84
+ end
85
+
86
+ # Whether to ping if user checkins
87
+ # @return [String]
88
+ def checkin_pings
89
+ response["checkinPings"]
90
+ end
91
+
92
+ # Whether we receive pings from this user, if we have a relationship.
93
+ # @return [Boolean]
94
+ def pings
95
+ response["pings"]
96
+ end
97
+
98
+ # User's current game status.
99
+ # @return [Hash] Contains recent, max, checkinsCount, and goal for showing user's current game status.
100
+ def scores
101
+ response["scores"]
102
+ end
103
+
104
+ # Type of user. Optional, Present for non-standard user types
105
+ # @return [String] One of page, chain, celebrity, or venuePage
106
+ def type
107
+ response["type"]
108
+ end
109
+
110
+ # Venue details
111
+ # @return [Foursquared::Response::Venue] Optional For venuePage users, this field just contains an id for the relevant venue.
112
+ def venue
113
+ Foursquared::Response::Venue.new(client, response["venue"]) if response["venue"]
114
+ end
115
+
116
+ # User's contact details
117
+ # @return [Hash] An object containing none, some, or all of twitter, facebook, email, and phone.
118
+ def contact
119
+ response["contact"]
120
+ end
121
+
122
+ # Page details
123
+ # @return [Hash] Optional, Contains a detailed page, if the type is a page.
124
+ def page_info
125
+ response["pageInfo"]
126
+ end
127
+
128
+ # User's refferal ID
129
+ # @return [String]
130
+ def refferal_id
131
+ response["refferalId"]
132
+ end
133
+
134
+ # User's followers
135
+ # @return [Hash] Optional, Contains count of followers and groups of users who follow or like this user
136
+ def followers
137
+ if response["followers"] and response["followers"]["groups"]
138
+ @followers = response["followers"]
139
+ @followers["groups"].each do |group|
140
+ group["items"].map!{|item| Foursquared::Response::User.new(client, item)}
141
+ end
142
+ return @followers
143
+ end
144
+ end
145
+
146
+ # Groups of pages this user user has liked or followed.
147
+ # @return [Hash]
148
+ def following
149
+ if response["following"] and response["following"]["groups"]
150
+ @following = response["following"]
151
+ @following["groups"].each do |group|
152
+ group["items"].map!{|item| Foursquared::Response::User.new(client, item)}
153
+ end
154
+ return @following
155
+ end
156
+ end
157
+
158
+ # Return the user's lists
159
+ # @return [Hash]
160
+ def lists
161
+ @lists = response["lists"]
162
+ if @lists and @lists["groups"]
163
+ @lists["groups"].each do |group|
164
+ group["items"].map!{|item| Foursquared::Response::List.new(client, item)}
165
+ end
166
+ end
167
+ @lists
168
+ end
169
+
170
+ # Return the user's full lists
171
+ # @param [Hash] options
172
+ # @option options [String] :group "edited", "created", "followed", "friends" or "suggested"
173
+ # @option options [String] :ll Location of the user eg: 40.7,-74
174
+ # @return [Hash]
175
+ def full_lists options={}
176
+ client.user_lists(id, options)
177
+ end
178
+
179
+ # List user's mayorships
180
+ # @return [Hash]
181
+ def mayorships
182
+ @mayorships = response["mayorships"]
183
+ @mayorships["items"].each{|item| item["venue"] = Foursquared::Response::Venue.new(client, item["venue"])}
184
+ @mayorships
185
+ end
186
+
187
+ # List user's full mayorships
188
+ # @return [Hash]
189
+ def full_mayorships
190
+ client.user_mayorships(id)
191
+ end
192
+
193
+ # List user's badges
194
+ # @return [Hash] count and items of badges
195
+ def badges
196
+ @badges = response["badges"]
197
+ @badges["items"].map!{|item| Foursquared::Response::Badge.new(client, item)}
198
+ end
199
+
200
+ # List user's full badges
201
+ # @return [Hash]
202
+ def full_badges
203
+ client.user_badges(id)
204
+ end
205
+
206
+ # Approves a pending friend request from this user.
207
+ # @return [Foursquared::Response::User] the approved user
208
+ def approve_friend_request user_id
209
+ response = post("/users/#{id}/approve")["response"]
210
+ @user = Foursquared::Response::User.new(client, response["user"])
211
+ end
212
+
213
+ # Denies a pending friend request from this user.
214
+ # @return [Foursquared::Response::User] the denied user
215
+ def deny_friend_request
216
+ request_response = post("/users/#{id}/deny")["response"]
217
+ @user = Foursquared::Response::User.new(client, request_response["user"])
218
+ end
219
+
220
+ # Send a Friend/Follow Request to this user
221
+ # @param [String, Integer] user_id The request user's/page's id
222
+ # @return [Foursquared::Response::User] the pending user
223
+ def send_friend_request
224
+ request_response = post("/users/#{id}/request")["response"]
225
+ @user = Foursquared::Response::User.new(client, request_response["userrequest_"])
226
+ end
227
+
228
+ # Removes a friend, unfollows a celebrity, or cancels a pending friend request.
229
+ # @return [Foursquared::Response::User] the removed user
230
+ def unfriend
231
+ request_response = post("/users/#{id}/unfriend")["response"]
232
+ @user = Foursquared::Response::User.new(client, request_response["user"])
233
+ end
234
+
235
+ # Set whether to receive pings about this user
236
+ # @param [Hash] options
237
+ # @option options [Boolean] :value required, true or false.
238
+ # @return [Foursquared::Response::User] User object for the user
239
+ def set_pings options={}
240
+ request_response = post("/users/#{id}/setpings", options)["response"]
241
+ @user = Foursquared::Response::User.new(client,request_response["user"])
242
+ end
243
+
244
+ end
245
+ end
246
+ end