facebooker 1.0.18 → 1.0.29

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 (41) hide show
  1. data/{History.txt → CHANGELOG.rdoc} +0 -0
  2. data/{COPYING → COPYING.rdoc} +0 -0
  3. data/{README.txt → README.rdoc} +11 -4
  4. data/Rakefile +18 -15
  5. data/{TODO.txt → TODO.rdoc} +0 -0
  6. data/generators/facebook/templates/config/facebooker.yml +3 -0
  7. data/init.rb +12 -61
  8. data/lib/facebooker.rb +22 -15
  9. data/lib/facebooker/adapters/adapter_base.rb +3 -0
  10. data/lib/facebooker/logging.rb +1 -1
  11. data/lib/facebooker/model.rb +6 -4
  12. data/lib/facebooker/models/user.rb +39 -4
  13. data/lib/facebooker/parser.rb +14 -0
  14. data/lib/facebooker/rails/controller.rb +34 -10
  15. data/lib/facebooker/rails/extensions/action_controller.rb +48 -0
  16. data/lib/facebooker/rails/extensions/rack_setup.rb +2 -0
  17. data/lib/facebooker/rails/extensions/routing.rb +15 -0
  18. data/lib/facebooker/rails/facebook_url_helper.rb +3 -3
  19. data/lib/facebooker/rails/facebook_url_rewriting.rb +18 -5
  20. data/lib/facebooker/rails/helpers.rb +19 -2
  21. data/lib/facebooker/rails/helpers/fb_connect.rb +20 -10
  22. data/lib/facebooker/rails/publisher.rb +9 -5
  23. data/lib/facebooker/service.rb +1 -2
  24. data/lib/facebooker/session.rb +13 -1
  25. data/lib/facebooker/version.rb +1 -1
  26. data/lib/rack/facebook.rb +77 -0
  27. data/lib/tasks/tunnel.rake +3 -3
  28. data/test/facebooker/logging_test.rb +2 -2
  29. data/test/facebooker/models/user_test.rb +39 -3
  30. data/test/facebooker/rails/publisher_test.rb +19 -3
  31. data/test/facebooker/rails_integration_test.rb +52 -6
  32. data/test/rack/facebook_test.rb +62 -0
  33. data/test/rails_test_helper.rb +2 -0
  34. metadata +21 -27
  35. data/CHANGELOG.txt +0 -0
  36. data/Manifest.txt +0 -127
  37. data/README +0 -46
  38. data/lib/facebooker/models/user.rb.orig +0 -396
  39. data/lib/facebooker/models/user.rb.rej +0 -17
  40. data/lib/facebooker/session.rb.orig +0 -564
  41. data/lib/facebooker/session.rb.rej +0 -29
File without changes
@@ -1,127 +0,0 @@
1
- CHANGELOG.txt
2
- COPYING
3
- History.txt
4
- Manifest.txt
5
- README
6
- README.txt
7
- Rakefile
8
- TODO.txt
9
- generators/publisher/publisher_generator.rb
10
- generators/facebook/facebook_generator.rb
11
- generators/facebook/templates/config/facebooker.yml
12
- generators/facebook/templates/public/javascripts/facebooker.js
13
- generators/facebook_controller/USAGE
14
- generators/facebook_controller/facebook_controller_generator.rb
15
- generators/facebook_controller/templates/controller.rb
16
- generators/facebook_controller/templates/functional_test.rb
17
- generators/facebook_controller/templates/helper.rb
18
- generators/facebook_controller/templates/view.fbml.erb
19
- generators/facebook_controller/templates/view.html.erb
20
- generators/facebook_publisher/facebook_publisher_generator.rb
21
- generators/facebook_publisher/templates/create_facebook_templates.rb
22
- generators/facebook_publisher/templates/publisher.rb
23
- generators/facebook_scaffold/USAGE
24
- generators/facebook_scaffold/facebook_scaffold_generator.rb
25
- generators/facebook_scaffold/templates/controller.rb
26
- generators/facebook_scaffold/templates/facebook_style.css
27
- generators/facebook_scaffold/templates/functional_test.rb
28
- generators/facebook_scaffold/templates/helper.rb
29
- generators/facebook_scaffold/templates/layout.fbml.erb
30
- generators/facebook_scaffold/templates/layout.html.erb
31
- generators/facebook_scaffold/templates/style.css
32
- generators/facebook_scaffold/templates/view_edit.fbml.erb
33
- generators/facebook_scaffold/templates/view_edit.html.erb
34
- generators/facebook_scaffold/templates/view_index.fbml.erb
35
- generators/facebook_scaffold/templates/view_index.html.erb
36
- generators/facebook_scaffold/templates/view_new.fbml.erb
37
- generators/facebook_scaffold/templates/view_new.html.erb
38
- generators/facebook_scaffold/templates/view_show.fbml.erb
39
- generators/facebook_scaffold/templates/view_show.html.erb
40
- generators/xd_receiver/xd_receiver_generator.rb
41
- generators/xd_receiver/templates/xd_receiver.html
42
- init.rb
43
- install.rb
44
- lib/facebooker/adapters/adapter_base.rb
45
- lib/facebooker/adapters/bebo_adapter.rb
46
- lib/facebooker/adapters/facebook_adapter.rb
47
- lib/facebooker/admin.rb
48
- lib/facebooker/batch_request.rb
49
- lib/facebooker/data.rb
50
- lib/facebooker/feed.rb
51
- lib/facebooker/logging.rb
52
- lib/facebooker/mock/service.rb
53
- lib/facebooker/mock/session.rb
54
- lib/facebooker/mobile.rb
55
- lib/facebooker/model.rb
56
- lib/facebooker/models/affiliation.rb
57
- lib/facebooker/models/album.rb
58
- lib/facebooker/models/applicationproperties.rb
59
- lib/facebooker/models/applicationrestrictions.rb
60
- lib/facebooker/models/cookie.rb
61
- lib/facebooker/models/education_info.rb
62
- lib/facebooker/models/event.rb
63
- lib/facebooker/models/friend_list.rb
64
- lib/facebooker/models/group.rb
65
- lib/facebooker/models/info_item.rb
66
- lib/facebooker/models/info_section.rb
67
- lib/facebooker/models/location.rb
68
- lib/facebooker/models/notifications.rb
69
- lib/facebooker/models/page.rb
70
- lib/facebooker/models/photo.rb
71
- lib/facebooker/models/tag.rb
72
- lib/facebooker/models/user.rb
73
- lib/facebooker/models/user.rb.orig
74
- lib/facebooker/models/user.rb.rej
75
- lib/facebooker/models/video.rb
76
- lib/facebooker/models/work_info.rb
77
- lib/facebooker/parser.rb
78
- lib/facebooker/rails/controller.rb
79
- lib/facebooker/rails/cucumber/world.rb
80
- lib/facebooker/rails/cucumber.rb
81
- lib/facebooker/rails/facebook_form_builder.rb
82
- lib/facebooker/rails/facebook_pretty_errors.rb
83
- lib/facebooker/rails/facebook_request_fix.rb
84
- lib/facebooker/rails/facebook_session_handling.rb
85
- lib/facebooker/rails/facebook_url_helper.rb
86
- lib/facebooker/rails/facebook_url_rewriting.rb
87
- lib/facebooker/rails/helpers/fb_connect.rb
88
- lib/facebooker/rails/helpers.rb
89
- lib/facebooker/rails/integration_session.rb
90
- lib/facebooker/rails/profile_publisher_extensions.rb
91
- lib/facebooker/rails/publisher.rb
92
- lib/facebooker/rails/routing.rb
93
- lib/facebooker/rails/test_helpers.rb
94
- lib/facebooker/rails/utilities.rb
95
- lib/facebooker/server_cache.rb
96
- lib/facebooker/service.rb
97
- lib/facebooker/session.rb
98
- lib/facebooker/session.rb.orig
99
- lib/facebooker/session.rb.rej
100
- lib/facebooker/version.rb
101
- lib/facebooker.rb
102
- lib/net/http_multipart_post.rb
103
- lib/tasks/facebooker.rake
104
- lib/tasks/tunnel.rake
105
- rails/init.rb
106
- setup.rb
107
- templates/layout.erb
108
- test/facebooker/adapters_test.rb
109
- test/facebooker/admin_test.rb
110
- test/facebooker/batch_request_test.rb
111
- test/facebooker/data_test.rb
112
- test/facebooker/logging_test.rb
113
- test/facebooker/model_test.rb
114
- test/facebooker/models/event_test.rb
115
- test/facebooker/models/user_test.rb
116
- test/facebooker/rails/publisher_test.rb
117
- test/facebooker/rails_integration_test.rb
118
- test/facebooker/server_cache_test.rb
119
- test/facebooker/session_test.rb
120
- test/facebooker_test.rb
121
- test/fixtures/multipart_post_body_with_only_parameters.txt
122
- test/fixtures/multipart_post_body_with_single_file.txt
123
- test/fixtures/multipart_post_body_with_single_file_that_has_nil_key.txt
124
- test/net/http_multipart_post_test.rb
125
- test/rails_test_helper.rb
126
- test/test_helper.rb
127
- test/facebooker/mobile_test.rb
data/README DELETED
@@ -1,46 +0,0 @@
1
- Copyright (c) 2007 Chad Fowler, Patrick Ewing
2
-
3
- = Facebooker
4
-
5
- Facebooker is a Ruby wrapper over the Facebook[http://facebook.com] {REST API}[http://developer.facebook.com]. Its goals are:
6
-
7
- * Idiomatic Ruby
8
- * No dependencies outside of the Ruby standard library (This is true with Rails 2.1. Previous Rails versions require the JSON gem)
9
- * Concrete classes and methods modeling the Facebook data, so it's easy for a Rubyist to understand what's available
10
- * Well tested
11
-
12
- = Installing (Non Rails)
13
-
14
- The best way is:
15
-
16
- gem install facebooker
17
-
18
- If, for some reason, you can't/won't use RubyGems, you can do:
19
-
20
- (sudo) ruby setup.rb
21
-
22
- = Installing (Rails)
23
-
24
- Facebooker can be installed as a Rails plugin by:
25
-
26
- script/plugin install git://github.com/mmangino/facebooker.git
27
-
28
- If you don't have git, the plugin can be downloaded from http://github.com/mmangino/facebooker/tarball/master
29
-
30
- Once the plugin is installed, you will need to configure your Facebook app in config/facebooker.yml.
31
-
32
- Your application users will need to have added the application in facebook to access all of facebooker's features. You enforce this by adding
33
-
34
- ensure_application_is_installed_by_facebook_user
35
-
36
- to your application controller.
37
-
38
-
39
- == Work in Progress
40
-
41
- I'm not saying it meets its goals fully yet. Please help. I'm especially interested in feedback and criticism re: Ruby style and design and testing. RCov has the library (at the time of this writing) at 100% coverage. I take that with a grain of salt, but it's a good start.
42
-
43
- == Contribute
44
-
45
- Please visit the {RubyForge project page}[http://rubyforge.org/projects/facebooker] to get the latest source via svn, write some tests, add/fix features, and submit a patch via the tracker. If you submit a good patch, it's likely that I'll add you to the project for commit access if you want to be added.
46
-
@@ -1,396 +0,0 @@
1
- require 'facebooker/model'
2
- require 'facebooker/models/affiliation'
3
- require 'facebooker/models/work_info'
4
- module Facebooker
5
- #
6
- # Holds attributes and behavior for a Facebook User
7
- class User
8
- include Model
9
- class Status
10
- include Model
11
- attr_accessor :message, :time, :status_id
12
- end
13
- FIELDS = [:status, :political, :pic_small, :name, :quotes, :is_app_user, :tv, :profile_update_time, :meeting_sex, :hs_info, :timezone, :relationship_status, :hometown_location, :about_me, :wall_count, :significant_other_id, :pic_big, :music, :uid, :work_history, :sex, :religion, :notes_count, :activities, :pic_square, :movies, :has_added_app, :education_history, :birthday, :first_name, :meeting_for, :last_name, :interests, :current_location, :pic, :books, :affiliations, :locale, :profile_url, :proxied_email]
14
- STANDARD_FIELDS = [:uid, :first_name, :last_name, :name, :timezone, :birthday, :sex, :affiliations, :locale, :profile_url]
15
- attr_accessor :id, :session
16
- populating_attr_accessor *FIELDS
17
- attr_reader :affiliations
18
- populating_hash_settable_accessor :current_location, Location
19
- populating_hash_settable_accessor :hometown_location, Location
20
- populating_hash_settable_accessor :hs_info, EducationInfo::HighschoolInfo
21
- populating_hash_settable_accessor :status, Status
22
- populating_hash_settable_list_accessor :affiliations, Affiliation
23
- populating_hash_settable_list_accessor :education_history, EducationInfo
24
- populating_hash_settable_list_accessor :work_history, WorkInfo
25
-
26
- # Can pass in these two forms:
27
- # id, session, (optional) attribute_hash
28
- # attribute_hash
29
- def initialize(*args)
30
- if (args.first.kind_of?(String) || args.first.kind_of?(Integer)) && args.size==1
31
- @id=Integer(args.shift)
32
- @session = Session.current
33
- elsif (args.first.kind_of?(String) || args.first.kind_of?(Integer)) && args[1].kind_of?(Session)
34
- @id = Integer(args.shift)
35
- @session = args.shift
36
- end
37
- if args.last.kind_of?(Hash)
38
- populate_from_hash!(args.pop)
39
- end
40
- end
41
-
42
- # Returns a user's events, params correspond to API call parameters (except UID):
43
- # http://wiki.developers.facebook.com/index.php/Events.get
44
- # E.g:
45
- # @user.events(:start_time => Time.now, :end_time => 1.month.from_now)
46
- # # => Returns events betwen now and a month from now
47
- def events(params={})
48
- @events ||= {}
49
- [:start_time,:end_time].compact.each do |key|
50
- params[key] = params[key].to_i
51
- end
52
- # puts @events[params.to_s].nil?
53
- @events[params.to_s] ||= @session.post('facebook.events.get', {:uid => self.id}.merge(params)).map do |event|
54
- Event.from_hash(event)
55
- end
56
- end
57
-
58
- #
59
- # Set the list of friends, given an array of User objects. If the list has been retrieved previously, will not set
60
- def friends=(list_of_friends,flid=nil)
61
- @friends_hash ||= {}
62
- flid=cast_to_friend_list_id(flid)
63
- #use __blank instead of nil so that this is cached
64
- cache_key = flid||"__blank"
65
-
66
- @friends_hash[cache_key] ||= list_of_friends
67
- end
68
-
69
- def cast_to_friend_list_id(flid)
70
- case flid
71
- when String
72
- list=friend_lists.detect {|f| f.name==flid}
73
- raise Facebooker::Session::InvalidFriendList unless list
74
- list.flid
75
- when FriendList
76
- flid.flid
77
- else
78
- flid
79
- end
80
- end
81
- ##
82
- # Retrieve friends
83
- def friends(flid = nil)
84
- @friends_hash ||= {}
85
- flid=cast_to_friend_list_id(flid)
86
-
87
- #use __blank instead of nil so that this is cached
88
- cache_key = flid||"__blank"
89
- options = {:uid=>@id}
90
- options[:flid] = flid unless flid.nil?
91
- @friends_hash[cache_key] ||= @session.post('facebook.friends.get', options,false).map do |uid|
92
- User.new(uid, @session)
93
- end
94
- @friends_hash[cache_key]
95
- end
96
-
97
- def friend_lists
98
- @friend_lists ||= @session.post('facebook.friends.getLists').map do |hash|
99
- friend_list = FriendList.from_hash(hash)
100
- friend_list.session = session
101
- friend_list
102
- end
103
- end
104
- ###
105
- # Retrieve friends with user info populated
106
- # Subsequent calls will be retrieved from memory.
107
- # Optional: list of fields to retrieve as symbols
108
- def friends!(*fields)
109
- @friends ||= session.post('facebook.users.getInfo', :fields => collect(fields), :uids => friends.map{|f| f.id}.join(',')).map do |hash|
110
- User.new(hash['uid'], session, hash)
111
- end
112
- end
113
-
114
- ###
115
- # Retrieve profile data for logged in user
116
- # Optional: list of fields to retrieve as symbols
117
- def populate(*fields)
118
- session.post('facebook.users.getInfo', :fields => collect(fields), :uids => id) do |response|
119
- populate_from_hash!(response.first)
120
- end
121
- end
122
-
123
- def friends_with?(user_or_id)
124
- friends.map{|f| f.to_i}.include?(user_or_id.to_i)
125
- end
126
-
127
- def friends_with_this_app
128
- @friends_with_this_app ||= session.post('facebook.friends.getAppUsers').map do |uid|
129
- User.new(uid, session)
130
- end
131
- end
132
-
133
- def groups(gids = [])
134
- args = gids.empty? ? {} : {:gids => gids}
135
- @groups ||= session.post('facebook.groups.get', args).map do |hash|
136
- group = Group.from_hash(hash)
137
- group.session = session
138
- group
139
- end
140
- end
141
-
142
- def notifications
143
- @notifications ||= Notifications.from_hash(session.post('facebook.notifications.get'))
144
- end
145
-
146
- def publish_story(story)
147
- publish(story)
148
- end
149
-
150
- def publish_action(action)
151
- publish(action)
152
- end
153
-
154
- def publish_templatized_action(action)
155
- publish(action)
156
- end
157
-
158
- def albums
159
- @albums ||= session.post('facebook.photos.getAlbums', :uid => self.id) do |response|
160
- response.map do |hash|
161
- Album.from_hash(hash)
162
- end
163
- end
164
- end
165
-
166
- def create_album(params)
167
- @album = session.post('facebook.photos.createAlbum', params) {|response| Album.from_hash(response)}
168
- end
169
-
170
- def profile_photos
171
- session.get_photos(nil, nil, profile_pic_album_id)
172
- end
173
-
174
- # Upload a photo to the user's profile.
175
- #
176
- # In your view, create a multipart form that posts directly to your application (not through canvas):
177
- #
178
- # <% form_tag photos_url(:canvas => false), :html => {:multipart => true, :promptpermission => 'photo_upload'} do %>
179
- # Photo: <%= file_field_tag 'photo' %>
180
- # Caption: <%= text_area_tag 'caption' %>
181
- # <%= submit_tag 'Upload Photo', :class => 'inputsubmit' %>
182
- # <% end %>
183
- #
184
- # And in your controller:
185
- #
186
- # class PhotosController < ApplicationController
187
- # def create
188
- # file = Net::HTTP::MultipartPostFile.new(
189
- # params[:photo].original_filename,
190
- # params[:photo].content_type,
191
- # params[:photo].read
192
- # )
193
- #
194
- # @photo = facebook_session.user.upload_photo(file, :caption => params[:caption])
195
- # redirect_to photos_url(:canvas => true)
196
- # end
197
- # end
198
- #
199
- # Options correspond to http://wiki.developers.facebook.com/index.php/Photos.upload
200
- def upload_photo(multipart_post_file, options = {})
201
- Photo.from_hash(session.post_file('facebook.photos.upload',
202
- options.merge(nil => multipart_post_file)))
203
- end
204
-
205
- def profile_fbml
206
- session.post('facebook.profile.getFBML', :uid => @id)
207
- end
208
-
209
- ##
210
- # Set the profile FBML for this user
211
- #
212
- # This does not set profile actions, that should be done with profile_action=
213
- def profile_fbml=(markup)
214
- set_profile_fbml(markup, nil, nil)
215
- end
216
-
217
- ##
218
- # Set the mobile profile FBML
219
- def mobile_fbml=(markup)
220
- set_profile_fbml(nil, markup, nil)
221
- end
222
-
223
- def profile_action=(markup)
224
- set_profile_fbml(nil, nil, markup)
225
- end
226
-
227
- def profile_main=(markup)
228
- set_profile_fbml(nil,nil,nil,markup)
229
- end
230
-
231
- def set_profile_fbml(profile_fbml, mobile_fbml, profile_action_fbml, profile_main = nil)
232
- parameters = {:uid => @id}
233
- parameters[:profile] = profile_fbml if profile_fbml
234
- parameters[:profile_action] = profile_action_fbml if profile_action_fbml
235
- parameters[:mobile_profile] = mobile_fbml if mobile_fbml
236
- parameters[:profile_main] = profile_main if profile_main
237
- session.post('facebook.profile.setFBML', parameters,false)
238
- end
239
-
240
- ## ** NEW PROFILE DESIGN ***
241
- # Set a info section for this user
242
- #
243
- # Note: using set_profile_info as I feel using user.set_info could be confused with the user.getInfo facebook method.
244
- # Also, I feel it fits in line with user.set_profile_fbml.
245
- def set_profile_info(title, info_fields, format = :text)
246
- session.post('facebook.profile.setInfo', :title => title, :uid => @id,
247
- :type => format.to_s == "text" ? 1 : 5, :info_fields => info_fields.to_json)
248
- end
249
-
250
- def get_profile_info
251
- session.post('facebook.profile.getInfo', :uid => @id)
252
- end
253
-
254
- ##
255
- # This DOES NOT set the status of a user on Facebook
256
- # Use the set_status method instead
257
- def status=(message)
258
- case message
259
- when String,Status
260
- @status = message
261
- when Hash
262
- @status = Status.from_hash(message)
263
- end
264
- end
265
-
266
- ##
267
- # Set the status for a user
268
- # DOES NOT prepend "is" to the message
269
- #
270
- # requires extended permission.
271
- def set_status(message)
272
- self.status=message
273
- session.post('facebook.users.setStatus',:status=>message,:status_includes_verb=>1) do |ret|
274
- ret
275
- end
276
- end
277
-
278
- ##
279
- # Checks to see if the user has enabled the given extended permission
280
- def has_permission?(ext_perm) # ext_perm = email, offline_access, status_update, photo_upload, create_listing, create_event, rsvp_event, sms
281
- session.post('facebook.users.hasAppPermission',:ext_perm=>ext_perm) == "1"
282
- end
283
-
284
- ##
285
- # Convenience method to send email to the current user
286
- def send_email(subject, text=nil, fbml=nil)
287
- session.send_email([@id], subject, text, fbml)
288
- end
289
-
290
- ##
291
- # Convenience method to set cookie for the current user
292
- def set_cookie(name, value, expires=nil, path=nil)
293
- session.data.set_cookie(@id, name, value, expires, path)
294
- end
295
-
296
- ##
297
- # Convenience method to get cookies for the current user
298
- def get_cookies(name=nil)
299
- session.data.get_cookies(@id, name)
300
- end
301
-
302
- ##
303
- # Returns the user's id as an integer
304
- def to_i
305
- id
306
- end
307
-
308
- def to_s
309
- id.to_s
310
- end
311
-
312
- ##
313
- # Two Facebooker::User objects should be considered equal if their Facebook ids are equal
314
- def ==(other_user)
315
- id == other_user.id
316
- end
317
-
318
-
319
- # register a user with Facebook
320
- # users should be a hast with at least an :email field
321
- # you can optionally provide an :account_id field as well
322
-
323
- def self.register(users)
324
- user_map={}
325
- users=users.map do |h|
326
- returning h.dup do |d|
327
- if email=d.delete(:email)
328
- hash = hash_email(email)
329
- user_map[hash]=h
330
- d[:email_hash]=hash
331
- end
332
- end
333
- end
334
- Facebooker::Session.create.post("facebook.connect.registerUsers",:accounts=>users.to_json) do |ret|
335
- ret.each do |hash|
336
- user_map.delete(hash)
337
- end
338
- unless user_map.empty?
339
- e=Facebooker::Session::UserRegistrationFailed.new
340
- e.failed_users = user_map.values
341
- raise e
342
- end
343
- ret
344
- end
345
- end
346
-
347
- def self.hash_email(email)
348
- email = email.downcase.strip
349
- crc=Zlib.crc32(email)
350
- md5=Digest::MD5.hexdigest(email)
351
- "#{crc}_#{md5}"
352
- end
353
-
354
- def self.cast_to_facebook_id(object)
355
- if object.respond_to?(:facebook_id)
356
- object.facebook_id
357
- else
358
- object
359
- end
360
- end
361
-
362
- def facebook_id
363
- @id
364
- end
365
-
366
- def self.user_fields(fields = [])
367
- valid_fields(fields)
368
- end
369
-
370
- def self.standard_fields(fields = [])
371
- valid_fields(fields,STANDARD_FIELDS)
372
- end
373
-
374
- private
375
- def publish(feed_story_or_action)
376
- session.post(Facebooker::Feed::METHODS[feed_story_or_action.class.name.split(/::/).last], feed_story_or_action.to_params) == "1" ? true : false
377
- end
378
-
379
- def self.valid_fields(fields, allowable=FIELDS)
380
- allowable.reject{|field_name| !fields.empty? && !fields.include?(field_name)}.join(',')
381
- end
382
-
383
- def collect(fields, allowable=FIELDS)
384
- allowable.reject{|field_name| !fields.empty? && !fields.include?(field_name)}.join(',')
385
- end
386
-
387
- def profile_pic_album_id
388
- merge_aid(-3, @id)
389
- end
390
-
391
- def merge_aid(aid, uid)
392
- (uid << 32) + (aid & 0xFFFFFFFF)
393
- end
394
-
395
- end
396
- end