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,87 @@
1
+ module Foursquared
2
+ module Response
3
+ # Badge response
4
+ class Badge
5
+ attr_reader :client, :response
6
+ def initialize client, response
7
+ @client = client
8
+ @response = response
9
+ end
10
+
11
+ # The badge's id
12
+ # @return [String]
13
+ def id
14
+ response["id"]
15
+ end
16
+
17
+ # Canonical id of the badge
18
+ # @return [String]
19
+ def badge_id
20
+ response["badgeId"]
21
+ end
22
+
23
+ # The name of the badge
24
+ # @return [String]
25
+ def name
26
+ response["name"]
27
+ end
28
+
29
+ # The currently unlocked level
30
+ # @return [Integer]
31
+ def level
32
+ response["level"]
33
+ end
34
+
35
+ # Text about the level unlocked
36
+ # @return [String]
37
+ def level_text
38
+ response["responseText"]
39
+ end
40
+
41
+ # The message to be shown when user unlocks the badge
42
+ # @return [String]
43
+ def unlock_message
44
+ response["unlockMessage"]
45
+ end
46
+
47
+ # The badge description
48
+ # @return [String]
49
+ def description
50
+ response["description"]
51
+ end
52
+
53
+ # Text for the badge
54
+ # @return [String]
55
+ def badge_text
56
+ response["badgeText"]
57
+ end
58
+
59
+ # Hint about the badge
60
+ # @return [String]
61
+ def hint
62
+ response["hint"]
63
+ end
64
+
65
+ # The badge image details
66
+ # @return [Hash]
67
+ def image
68
+ response["image"]
69
+ end
70
+
71
+ # An array of unlock data
72
+ # @return [Array]
73
+ def unlocks
74
+ @unlocks = response["unlocks"]
75
+ if @unlocks
76
+ @unlocks.each do |unlock|
77
+ if unlock["checkins"]
78
+ unlock["checkins"].map!{|checkin| Foursquared::Response::Checkin.new(client, checkin)}
79
+ end
80
+ end
81
+ end
82
+ @unlocks
83
+ end
84
+
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,42 @@
1
+ module Foursquared
2
+ module Response
3
+ # Badge group response
4
+ class BadgeGroup
5
+ attr_reader :client, :response
6
+ def initialize client, response
7
+ @client = client
8
+ @response = response
9
+ end
10
+
11
+ # The type of badge group
12
+ # @return [String]
13
+ def type
14
+ response["type"]
15
+ end
16
+
17
+ # Name of the badge group
18
+ # @return [String]
19
+ def name
20
+ response["name"]
21
+ end
22
+
23
+ # Image for the badge group
24
+ # @return [Hash]
25
+ def image
26
+ response["image"]
27
+ end
28
+
29
+ # Array of IDs of badges present in the group
30
+ # @return [Array<String>]
31
+ def items
32
+ response["items"]
33
+ end
34
+
35
+ # Sub groups of the group
36
+ # @return [Array<Foursquared::Response::BadgeGroup>]
37
+ def groups
38
+ response["groups"].map!{|group| Foursquared::Response::BadgeGroup.new(client, group)}
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,53 @@
1
+ module Foursquared
2
+ module Response
3
+ # Category object
4
+ class Category
5
+ attr_reader :response
6
+ def initialize response
7
+ @response = response
8
+ end
9
+
10
+ # Return the id of the category
11
+ # @return [String]
12
+ def id
13
+ response["id"]
14
+ end
15
+
16
+ # Return the name of the category
17
+ # @return [String]
18
+ def name
19
+ response["name"]
20
+ end
21
+
22
+ # Return the plural name of the category
23
+ # @return [String]
24
+ def plural_name
25
+ response["pluralName"]
26
+ end
27
+
28
+ # Return the short name of the category
29
+ # @return [String]
30
+ def short_name
31
+ response["shortName"]
32
+ end
33
+
34
+ # Return the details for icons of the category
35
+ # @return [Hash] with urls added for each icon size
36
+ def icon
37
+ @icon = response["icon"]
38
+ @icon["urls"] = {
39
+ "32x32" => "#{@icon["prefix"].chomp("_")}#{@icon["suffix"]}",
40
+ "64x64" => "#{@icon["prefix"]}_64#{@icon["suffix"]}",
41
+ "256x256" => "#{@icon["prefix"]}_256#{@icon["suffix"]}",
42
+ }
43
+ @icon
44
+ end
45
+
46
+ # The sub-categories for the category
47
+ # @return [Array] array of sub-categories
48
+ def categories
49
+ response["categories"].map!{|category| Foursquared::Response::Category.new(category)}
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,180 @@
1
+ module Foursquared
2
+ module Response
3
+ # Checkin response
4
+ class Checkin
5
+ attr_reader :client, :response
6
+ def initialize client, response
7
+ @client = client
8
+ @response = response
9
+ end
10
+
11
+ # ID of the checkin
12
+ # @return [String]
13
+ def id
14
+ response["id"]
15
+ end
16
+
17
+ # The time at which the checkin was created
18
+ # @return [Time]
19
+ def created_at
20
+ Time.at(response["createdAt"]) if response["createdAt"]
21
+ end
22
+
23
+ # One of checkin, shout, or venueless.
24
+ # @return [String]
25
+ def type
26
+ response["type"]
27
+ end
28
+
29
+ # If present, it indicates the checkin was marked as private and not sent to friends
30
+ def private
31
+ response["private"]
32
+ end
33
+
34
+ # If the user is not clear from context, then a compact user is present
35
+ # @return [Foursquared::Response::User]
36
+ def user
37
+ Foursquared::Response::User.new(client, response["user"]) if response["user"]
38
+ end
39
+
40
+ # The current location of the user
41
+ # @return [Hash]
42
+ def location
43
+ response["location"]
44
+ end
45
+
46
+ # Optional count and items of checkins from friends checked into the same venue around the same time.
47
+ # @return [Hash]
48
+ def overlaps
49
+ @overlaps = response["overlaps"]
50
+ @overlaps["items"].map!{|item| Foursquared::Response::Checkin.new(client, item)} if @overlaps
51
+ @overlaps
52
+ end
53
+
54
+ # Count and items for comments on this checkin.
55
+ # @return [Hash]
56
+ def comments
57
+ response["comments"]
58
+ end
59
+
60
+ # Full list of comments for this checkin
61
+ # @return [Hash]
62
+ def full_comments
63
+ client.get("/checkin/#{id}/comments")["comments"]
64
+ end
65
+
66
+ # Message from check-in, if present and visible to the acting user.
67
+ # @return [String]
68
+ def shout
69
+ response["shout"]
70
+ end
71
+
72
+ # If present, the name and url for the application that created this checkin.
73
+ # @return [Hash]
74
+ def source
75
+ response["source"]
76
+ end
77
+
78
+ # Total and scores for this checkin
79
+ # @return [Hash]
80
+ def score
81
+ response["score"]
82
+ end
83
+
84
+ # Whether the acting user likes the checkin
85
+ # @return [Boolean]
86
+ def like?
87
+ response["like"]
88
+ end
89
+
90
+ # String representation of the time zone where this check-in occurred.
91
+ # @return [String]
92
+ def time_zone_offset
93
+ response["timeZoneOffset"]
94
+ end
95
+
96
+ # The venue of checkin
97
+ # @return [Foursquared::Response::Venue]
98
+ def venue
99
+ Foursquared::Response::Venue.new(client, response["venue"])
100
+ end
101
+
102
+ # Count and items for photos on this checkin
103
+ # @return [Hash]
104
+ def photos
105
+ @photos = response["photos"]
106
+ @photos["photos"]["items"].map!{|item| Foursquared::Response::Photo.new(client, item)} if response["photos"]
107
+ @photos
108
+ end
109
+
110
+ # Groups of users who have liked the checkin
111
+ # @return [Hash]
112
+ def likes
113
+ @likes = response["likes"]
114
+ @likes["groups"].each do |group|
115
+ group["items"].map!{|item| Foursquared::Response::User.new(client, item)}
116
+ end
117
+ @likes
118
+ end
119
+
120
+ # The full groups of users who have liked the checkin
121
+ # @return [Hash]
122
+ def full_likes
123
+ @likes = client.get("/checkins/#{id}/likes")["response"]["likes"]
124
+ @likes["groups"].each do |group|
125
+ group["items"].map!{|item| Foursquared::Response::User.new(client, item)}
126
+ end
127
+ @likes
128
+ end
129
+
130
+ # The count and items of photos associated with the checkin
131
+ # @return [Hash]
132
+ def photos
133
+ @photos = response["photos"]
134
+ @photos["items"].map!{|item| Foursquared::Response::Photo.new(client, item)}
135
+ @photos
136
+ end
137
+
138
+ # The count and items of all the photos associated with the checkin
139
+ # @return [Hash]
140
+ def full_photos
141
+ resp = get("/checkins/#{id}/photos")
142
+ @photos = resp["photos"]
143
+ @photos["items"].map!{|item| Foursquared::Response::Photo.new(client, item)}
144
+ @photos
145
+ end
146
+
147
+ # Add a comment to a check-in
148
+ # @param [Hash] options
149
+ # @option options [String] :text The text of the comment, up to 200 characters.
150
+ # @option options [String] :mentions Mentions in your check-in.
151
+ def add_comment options={}
152
+ response = post("/checkins/#{id}/addcomment", options)["response"]
153
+ @comment = response["comment"]
154
+ @comment["user"] = Foursquared::Response::User.new(client, @comment["user"])
155
+ @comment
156
+ end
157
+
158
+ # Remove commment from check-in
159
+ # @param [Hash] options
160
+ # @option options [String] :commentId The ID of the checkin to remove a comment from.
161
+ # @return [Foursquared::Response::Checkin] The checkin, minus this comment.
162
+ def delete_comment options={}
163
+ response = post("/checkins/#{id}/deletecomment", options)["response"]
164
+ @checkin = Foursquared::Response::Checkin.new(client, response["checkin"])
165
+ end
166
+
167
+ # Like or unlike a checkin
168
+ # @param [Hash] options
169
+ # @option options [Integer] :set If 1, like this checkin. If 0 unlike (un-do a previous like) it. Default value is 1.
170
+ def like options={}
171
+ response = post("/checkins/#{id}/like", options)["response"]["likes"]
172
+ response["groups"].each do |group|
173
+ group["items"].map!{|item| Foursquared::Response::User.new(client, item)}
174
+ end
175
+ response
176
+ end
177
+
178
+ end
179
+ end
180
+ end
@@ -0,0 +1,52 @@
1
+ module Foursquared
2
+ module Response
3
+ # Event response
4
+ class Event
5
+ attr_reader :client, :response
6
+ def initialize client, response
7
+ @client = client
8
+ @response = response
9
+ end
10
+
11
+ [:id, :name, :url, :stats].each do |method_name|
12
+ define_method method_name do
13
+ response[method_name.to_s] if response
14
+ end
15
+ end
16
+
17
+ [:venueId, :foreignIds, :categories, :allDay, :timeZone, :unlockMessage].each do |method_name|
18
+ define_method method_name.to_usym do
19
+ response[method_name.to_s] if response[method_name.to_s]
20
+ end
21
+ end
22
+
23
+ # The time at which the event starts
24
+ # @return [Time]
25
+ def start_at
26
+ Time.at response["startAt"] if response["startAt"]
27
+ end
28
+
29
+ # The time at which the event ends
30
+ # @return [Time]
31
+ def end_at
32
+ Time.at response["endAt"] if response["endAt"]
33
+ end
34
+
35
+ # The date at which the event is happening
36
+ # @return [Time]
37
+ def date
38
+ Time.at response["date"] if response["date"]
39
+ end
40
+
41
+ # Users who are present at the event now
42
+ # @return [Hash]
43
+ def here_now
44
+ @here_now = response["hereNow"]
45
+ @here_now["groups"].each do |group|
46
+ group["items"].map!{|user| Foursquared::Response::User.new(client, user)}
47
+ end
48
+ @here_now
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,199 @@
1
+ module Foursquared
2
+ module Response
3
+ # List response
4
+ class List
5
+ attr_reader :client, :response
6
+ def initialize client, response
7
+ @client = client
8
+ @response = response
9
+ end
10
+
11
+ # Id of the list
12
+ # @return [String]
13
+ def id
14
+ response["id"]
15
+ end
16
+
17
+ # Name of the list
18
+ # @return [String]
19
+ def name
20
+ response["name"]
21
+ end
22
+
23
+ # The list description
24
+ # @return [String]
25
+ def description
26
+ response["description"]
27
+ end
28
+
29
+ # The type of list
30
+ # @return [String]
31
+ def type
32
+ response["type"]
33
+ end
34
+
35
+ # Whether the list is editable by the acting user
36
+ # @return [Boolean]
37
+ def editable?
38
+ response["editable"]
39
+ end
40
+
41
+ # Whether the list is public
42
+ # @return [Boolean]
43
+ def public?
44
+ response["public"]
45
+ end
46
+
47
+ # Whether this list is editable by the owner's friends
48
+ # @return [Boolean]
49
+ def collaborative?
50
+ response["collaborative"]
51
+ end
52
+
53
+ # The list url
54
+ # @return [String]
55
+ def url
56
+ response["url"]
57
+ end
58
+
59
+ # Whether the acting user is following this list
60
+ # @return [Boolean]
61
+ def following?
62
+ response["following"]
63
+ end
64
+
65
+ # The canonical URL for this list
66
+ # @return [String]
67
+ def canonical_url
68
+ response["canonicalUrl"]
69
+ end
70
+
71
+ # The number of venues on the list visited by the acting user
72
+ # @return [Integer]
73
+ def visited_count
74
+ response["visitedCount"]
75
+ end
76
+
77
+ # The number of unique venues on the list.
78
+ # @return [Integer]
79
+ def venue_count
80
+ response["venueCount"]
81
+ end
82
+
83
+ # The time at which the list was created
84
+ # @return [Time]
85
+ def created_at
86
+ Time.at(response["createdAt"]) if response["createdAt"]
87
+ end
88
+
89
+ # The time at which the list was last updated
90
+ # @return [Time]
91
+ def updated_at
92
+ Time.at(response["updatedAt"]) if response["updatedAt"]
93
+ end
94
+
95
+ # The user who created the list
96
+ # @return [Foursquared::Response::User]
97
+ def user
98
+ Foursquared::Response::User.new(client, response["user"]) if response["user"]
99
+ end
100
+
101
+ # Photo for the list
102
+ # @return [Foursquared::Response::Photo]
103
+ def photo
104
+ Foursquared::Response::Photo.new(client, response["photo"]) if response["photo"]
105
+ end
106
+
107
+ # Count and items of list items on this list.
108
+ # @return [Hash]
109
+ def list_items
110
+ @list_items = response["listItems"]
111
+ if @list_items and @list_items["items"]
112
+ @list_items["items"].map!{|item| Foursquared::Response::ListItem.new(client, item)}
113
+ end
114
+ @list_items
115
+ end
116
+
117
+ # Suggests photos that may be appropriate for this item.
118
+ # @param [Hash] options
119
+ # @option options [String] :itemId required, The ID of the list item
120
+ # @return [Hash] Groups user and others containing lists (a count and items of photos) of photos uploaded by this user and uploaded by other users.
121
+ def suggest_photo options={}
122
+ @photos = client.get("/lists/#{id}/suggestphoto", options)["response"]["photos"]
123
+ if @photos
124
+ @photos.each_key do |key|
125
+ key["items"].map!{|item| Foursquared::Response::Photo.new(client, item)}
126
+ end
127
+ end
128
+ @photos
129
+ end
130
+ # Suggests venues that may be appropriate for this list.
131
+ # @return [Array] Compact venues that may be appropriate for this list.
132
+ def suggest_venues
133
+ @suggested_venues = client.get("/lists/#{id}/suggestvenues")["response"]["suggestedVenues"]
134
+ @suggested_venues.each do |item|
135
+ item["venue"] = Foursquared::Response::Venue.new(client, item["venue"])
136
+ end
137
+ @suggested_venues
138
+ end
139
+
140
+ # Suggests tips that may be appropriate for a list item
141
+ # @param [Hash] options
142
+ # @option options [String] :itemId required, The ID of the list item
143
+ def suggest_tip options={}
144
+ @tips = client.get("/lists/#{id}/suggesttip", options)["response"]["tips"]
145
+ if @tips
146
+ @tips.each_key do |key|
147
+ key["items"].map!{|item| Foursquared::Response::Photo.new(client, item)}
148
+ end
149
+ end
150
+ @tips
151
+ end
152
+
153
+ # Add an Item to the list
154
+ # @param [Hash] options
155
+ # @option options [String] :venueId A venue to add to the list
156
+ # @option options [String] :text If the target is a user-created list, this will create a public tip on the venue. If the target is /userid/todos, the text will be a private note that is only visible to the author.
157
+ # @option options [String] :url If adding a new tip via text, this can associate a url with the tip.
158
+ # @option options [String] :tipId Used to add a tip to a list. Cannot be used in conjunction with the text and url fields.
159
+ # @option options [String] :tipId Used to add a tip to a list. Cannot be used in conjunction with the text and url fields.
160
+ # @option options [String] :listId Used in conjuction with itemId, the id for a user created or followed list as well as one of USER_ID/tips, USER_ID/todos, or USER_ID/dones.
161
+ # @option options [String] :itemId Used in conjuction with listId, the id of an item on that list that we wish to copy to this list.
162
+ # @return [Foursquared::Response::ListItem] The newly added list item
163
+ def add_item options={}
164
+ @item = client.post("/lists/#{id}/additem", options)["response"]["item"]
165
+ Foursquared::Response::ListItem.new(client, @item) if @item
166
+ end
167
+
168
+ # List Followers
169
+ # @return [Hash] A count and items of users following this list.
170
+ def followers
171
+ @followers = client.get("/lists/#{id}/followers")["response"]["followers"]
172
+ if @followers and @followers["items"]
173
+ @followers["items"].map!{|item| Foursquared::Response::User.new(client, item)}
174
+ end
175
+ @followers
176
+ end
177
+
178
+ # Delete an item from the list
179
+ # @param [Hash] options
180
+ # @option options [String] :venueId ID of a venue to be deleted.
181
+ # @option options [String] :itemId ID of the item to delete.
182
+ # @option options [String] :tipId id of a tip to be deleted.
183
+ # @return [Hash] A count and items of list items that were just deleted.
184
+ def delete_item options={}
185
+ @items = client.post("/lists/#{id}/deleteitem", options)["response"]["items"]
186
+ @items["items"].map!{|item| Foursquared::Response::ListItem.new(client, item)}
187
+ @list_items
188
+ end
189
+
190
+ # Count and items of users who have edited this list
191
+ # @return [Hash]
192
+ def collaborators
193
+ @collaborators = response["collaborators"]
194
+ @collaborators["items"].map!{|item| Foursquared::Response::User.new(client, item)}
195
+ @collaborators
196
+ end
197
+ end
198
+ end
199
+ end
@@ -0,0 +1,63 @@
1
+ module Foursquared
2
+ module Response
3
+ # List item response
4
+ class ListItem
5
+ attr_reader :client, :response
6
+
7
+ def initialize client, response
8
+ @client = client
9
+ @response = response
10
+ end
11
+
12
+
13
+ # ID of the list item
14
+ # @return [String]
15
+ def id
16
+ response["id"]
17
+ end
18
+
19
+ # The time at which the list item was created
20
+ # @return [Time]
21
+ def created_at
22
+ Time.at(response["createdAt"]) if response["createdAt"]
23
+ end
24
+
25
+ # Tip, if present, in the list
26
+ # @return [Foursquared::Response::Tip]
27
+ def tip
28
+ Foursquared::Response::Tip.new(client, response["tip"]) if response["tip"]
29
+ end
30
+
31
+ # Venue, if present, in the list
32
+ # @return [Foursquared::Response::Venue]
33
+ def venue
34
+ Foursquared::Response::Venue.new(client, response["venue"]) if response["venue"]
35
+ end
36
+
37
+ # Text entered by the user when creating this item
38
+ # @return [String]
39
+ def note
40
+ response["note"]
41
+ end
42
+
43
+ # User who added this item to the current list
44
+ # @return [Foursquared::Response::User]
45
+ def user
46
+ Foursquared::Response::User.new(client, response["user"]) if response["user"]
47
+ end
48
+
49
+ # A photo for this list item
50
+ # @return [Foursquared::Response::Photo]
51
+ def photo
52
+ Foursquared::Response::Photo.new(client, response["photo"]) if response["photo"]
53
+ end
54
+
55
+ # Information about what other lists this item appears on
56
+ # @return [Array] array of compact lists
57
+ def listed
58
+ response["listed"].collect{|item| Foursquared::Response::List.new(item)} if response["listed"]
59
+ end
60
+
61
+ end
62
+ end
63
+ end