class Facebooker::User

Holds attributes and behavior for a Facebook User

Constants

BEBO_FIELDS
FIELDS
STANDARD_FIELDS

Attributes

affiliations[R]
request_locale[RW]

Public Instance Methods

==(other_user) click to toggle source

Two Facebooker::User objects should be considered equal if their Facebook ids are equal

# File lib/facebooker/models/user.rb, line 635
def ==(other_user)
  other_user.is_a?(User) && id == other_user.id
end
add_comment(xid, text,title=nil,url=nil,publish_to_stream=false) click to toggle source

Publish a comment to a specific comment set by xid

See: wiki.developers.facebook.com/index.php/Comments.add

xid the xid for the set of comments text the text of the comment

# File lib/facebooker/models/user.rb, line 195
def add_comment(xid, text,title=nil,url=nil,publish_to_stream=false)
  @session.post('facebook.comments.add',{:xid=>xid,:text=>text,:title=>title,:url=>url,:publish_to_stream=>publish_to_stream})
end
add_like_on(post_id) click to toggle source

Add a like on a post

See: wiki.developers.facebook.com/index.php/Stream.addLike

post_id the post_id for the post that is being commented on

# File lib/facebooker/models/user.rb, line 205
def add_like_on(post_id)
  @session.post('facebook.stream.addLike', {:post_id=>post_id})
end
add_news(news, image=nil) click to toggle source

facebook_session.user.add_news [{ :message => ‘Hey, who are you?’, :action_link => { :text => “I-I’m a test user”, :href => ‘facebook.er/’ }}], ‘

# File lib/facebooker/models/user.rb, line 580
def add_news(news, image=nil)
  params = { :uid => uid }
  params[:news] = news
  params[:image] = image if image
  
  session.post('facebook.dashboard.addNews', params)
end
albums() click to toggle source
# File lib/facebooker/models/user.rb, line 301
def albums
  @albums ||= session.post('facebook.photos.getAlbums', :uid => self.id) do |response|
    response.map do |hash|
      Album.from_hash(hash)
    end
  end
end
app_user?() click to toggle source

Returns whether the user (either the session user or user specified by uid) has authorized the calling application

# File lib/facebooker/models/user.rb, line 479
def app_user?
  session.post('facebook.users.isAppUser', {:uid => self.id}, use_session_key = true)
end
cast_to_friend_list_id(flid) click to toggle source
# File lib/facebooker/models/user.rb, line 92
def cast_to_friend_list_id(flid)
  case flid
   when String
     list=friend_lists.detect {|f| f.name==flid}
     raise Facebooker::Session::InvalidFriendList unless list
     list.flid
   when FriendList
     flid.flid
   else
     flid
   end
 end
clear_news(*news_ids) click to toggle source

facebook_session.user.clear_news [‘111111’]

# File lib/facebooker/models/user.rb, line 589
def clear_news(*news_ids)
  params = { :uid => uid }
  params[:news_ids] = news_ids.flatten if news_ids
  
  session.post('facebook.dashboard.clearNews', params)
end
comment_on(post_id, comment) click to toggle source

Publish a comment on a post

See: wiki.developers.facebook.com/index.php/Stream.addComment

post_id the post_id for the post that is being commented on comment the text of the comment

# File lib/facebooker/models/user.rb, line 183
def comment_on(post_id, comment)
  @session.post('facebook.stream.addComment', {:post_id=>post_id, :comment=>comment})
end
convert_attachment_to_json(attachment) click to toggle source
# File lib/facebooker/models/user.rb, line 171
def convert_attachment_to_json(attachment)
  a = attachment.respond_to?(:to_hash) ? attachment.to_hash : attachment
  Facebooker.json_encode(a)
end
create_album(params) click to toggle source
# File lib/facebooker/models/user.rb, line 320
def create_album(params)
  @album = session.post('facebook.photos.createAlbum', params) {|response| Album.from_hash(response)}
end
dashboard_count() click to toggle source

facebook_session.user.dashboard_count

# File lib/facebooker/models/user.rb, line 527
def dashboard_count
  session.post('facebook.dashboard.getCount', :uid => uid)
end
dashboard_count=(new_count) click to toggle source

facebook_session.user.dashboard_count = 5

# File lib/facebooker/models/user.rb, line 532
def dashboard_count=(new_count)
  session.post('facebook.dashboard.setCount', :uid => uid, :count => new_count)
end
dashboard_decrement_count() click to toggle source

facebook_session.user.dashboard_decrement_count

# File lib/facebooker/models/user.rb, line 542
def dashboard_decrement_count
  session.post('facebook.dashboard.decrementCount', :uid => uid)
end
dashboard_increment_count() click to toggle source

facebook_session.user.dashboard_increment_count

# File lib/facebooker/models/user.rb, line 537
def dashboard_increment_count
  session.post('facebook.dashboard.incrementCount', :uid => uid)
end
events(params={}) click to toggle source

Returns a user’s events, params correspond to API call parameters (except UID): wiki.developers.facebook.com/index.php/Events.get E.g:

@user.events(:start_time => Time.now, :end_time => 1.month.from_now)
# => Returns events betwen now and a month from now
# File lib/facebooker/models/user.rb, line 61
    def events(params={})
      @events ||= {}
      [:start_time,:end_time].compact.each do |key|
        params[key] = params[key].to_i
      end
#      puts @events[params.to_s].nil?
      @events[params.to_s] ||= @session.post('facebook.events.get', {:uid => self.id}.merge(params)).map do |event|
        Event.from_hash(event)
      end
    end
friend_ids() click to toggle source
# File lib/facebooker/models/user.rb, line 120
def friend_ids
  options = {:uid => self.id}
  @session.post('facebook.friends.get', options, false)
end
friend_ids_with_this_app() click to toggle source
# File lib/facebooker/models/user.rb, line 257
def friend_ids_with_this_app
  @friend_ids_with_this_app ||= session.post('facebook.friends.getAppUsers')
end
friend_lists() click to toggle source
# File lib/facebooker/models/user.rb, line 219
def friend_lists
  @friend_lists ||= @session.post('facebook.friends.getLists').map do |hash|
    friend_list = FriendList.from_hash(hash)
    friend_list.session = session
    friend_list
  end
end
friends(flid = nil) click to toggle source

Retrieve friends

# File lib/facebooker/models/user.rb, line 106
def friends(flid = nil)
   @friends_hash ||= {}
   flid=cast_to_friend_list_id(flid)

   #use __blank instead of nil so that this is cached
   cache_key = flid||"__blank"
   options = {:uid=>self.id}
   options[:flid] = flid unless flid.nil?
   @friends_hash[cache_key] ||= @session.post('facebook.friends.get', options,false).map do |uid|
      User.new(uid, @session)
  end
  @friends_hash[cache_key]
end
friends!(*fields) click to toggle source

Retrieve friends with user info populated Subsequent calls will be retrieved from memory. Optional: list of fields to retrieve as symbols

# File lib/facebooker/models/user.rb, line 230
def friends!(*fields)
  @friends ||= session.post('facebook.users.getInfo', :fields => collect(fields), :uids => friends.map{|f| f.id}.join(',')).map do |hash|
    User.new(hash['uid'], session, hash)
  end
end
friends=(list_of_friends,flid=nil) click to toggle source

Set the list of friends, given an array of User objects. If the list has been retrieved previously, will not set

# File lib/facebooker/models/user.rb, line 83
def friends=(list_of_friends,flid=nil)
  @friends_hash ||= {}
   flid=cast_to_friend_list_id(flid)
   #use __blank instead of nil so that this is cached
   cache_key = flid||"__blank"

  @friends_hash[cache_key] ||= list_of_friends
end
friends_with?(user_or_id) click to toggle source
# File lib/facebooker/models/user.rb, line 247
def friends_with?(user_or_id)
  friends.map{|f| f.to_i}.include?(user_or_id.to_i)
end
friends_with_this_app() click to toggle source
# File lib/facebooker/models/user.rb, line 251
def friends_with_this_app
  @friends_with_this_app ||= friend_ids_with_this_app.map do |uid|
    User.new(uid, session)
  end
end
getUnconnectedFriendsCount() click to toggle source

Get a count of unconnected friends

# File lib/facebooker/models/user.rb, line 669
def getUnconnectedFriendsCount
  session.post("facebook.connect.getUnconnectedFriendsCount")
end
get_activity(*activity_ids) click to toggle source

facebook_session.user.get_activity ‘123’

# File lib/facebooker/models/user.rb, line 615
def get_activity(*activity_ids)
  params = {}
  params[:activity_ids] = activity_ids.flatten if activity_ids
  
  session.post('facebook.dashboard.getActivity', params)
end
get_cookies(name=nil) click to toggle source

Convenience method to get cookies for the current user

# File lib/facebooker/models/user.rb, line 509
def get_cookies(name=nil)
  session.data.get_cookies(id, name)
end
get_news(*news_ids) click to toggle source
# File lib/facebooker/models/user.rb, line 572
def get_news(*news_ids)
  params = { :uid => uid }
  params[:news_ids] = news_ids.flatten if news_ids
  
  session.post('facebook.dashboard.getNews', params)
end
get_profile_info() click to toggle source
# File lib/facebooker/models/user.rb, line 436
def get_profile_info
  session.post('facebook.profile.getInfo', :uid => id)
end
groups(gids = []) click to toggle source
# File lib/facebooker/models/user.rb, line 261
def groups(gids = [])
  args = gids.empty? ? {} : {:gids => gids}
  @groups ||= session.post('facebook.groups.get', args).map do |hash|
    group = Group.from_hash(hash)
    group.session = session
    group
  end
end
has_permission?(ext_perm) click to toggle source

Checks to see if the user has enabled the given extended permission

# File lib/facebooker/models/user.rb, line 473
def has_permission?(ext_perm) # ext_perm = email, offline_access, status_update, photo_upload, create_listing, create_event, rsvp_event, sms
  session.post('facebook.users.hasAppPermission', {:ext_perm=>ext_perm, :uid => uid}, false) == "1"
end
has_permissions?(ext_perms) click to toggle source

Convenience method to check multiple permissions at once

# File lib/facebooker/models/user.rb, line 485
def has_permissions?(ext_perms)
  ext_perms.all?{|p| has_permission?(p)}
end
mobile_fbml=(markup) click to toggle source

Set the mobile profile FBML

# File lib/facebooker/models/user.rb, line 405
def mobile_fbml=(markup)
  set_profile_fbml(nil, markup, nil,nil)
end
notifications() click to toggle source
# File lib/facebooker/models/user.rb, line 285
def notifications
  @notifications ||= Notifications.from_hash(session.post('facebook.notifications.get'))
end
populate(*fields) click to toggle source

Retrieve profile data for logged in user Optional: list of fields to retrieve as symbols

# File lib/facebooker/models/user.rb, line 239
def populate(*fields)
  arguments = {:fields => collect(fields), :uids => id}
  arguments[:locale]=request_locale unless request_locale.nil?
  session.post('facebook.users.getInfo', arguments) do |response|
    populate_from_hash!(response.first)
  end
end
prepare_publish_to_options(target, options) click to toggle source

Prepares options for the stream.publish

# File lib/facebooker/models/user.rb, line 151
def prepare_publish_to_options(target, options)
  opts = {:uid          => self.id,
          :target_id    => target.id,
          :message      => options[:message]}

  if a = options[:attachment]
    opts[:attachment] = convert_attachment_to_json(a)
  end
  if (links = options[:action_links] && Facebooker.json_encode(options[:action_links]))
    opts[:action_links] = links
  end
  unless options[:uid].nil?
    opts[:uid] = options[:uid]
  end
  if options[:post_as_page]
    opts.delete(:target_id)
  end
  opts
end
profile_action=(markup) click to toggle source
# File lib/facebooker/models/user.rb, line 409
def profile_action=(markup)
  set_profile_fbml(nil, nil, markup,nil)
end
profile_fbml() click to toggle source
# File lib/facebooker/models/user.rb, line 391
def profile_fbml
  session.post('facebook.profile.getFBML', :uid => id)
end
profile_fbml=(markup) click to toggle source

Set the profile FBML for this user

This does not set profile actions, that should be done with profile_action=

# File lib/facebooker/models/user.rb, line 399
def profile_fbml=(markup)
  set_profile_fbml(markup, nil, nil, nil)
end
profile_main=(markup) click to toggle source
# File lib/facebooker/models/user.rb, line 413
def profile_main=(markup)
 set_profile_fbml(nil,nil,nil,markup)
end
profile_photos() click to toggle source
# File lib/facebooker/models/user.rb, line 324
def profile_photos
  session.get_photos(nil, nil, profile_pic_album_id)
end
publish_action(action) click to toggle source
# File lib/facebooker/models/user.rb, line 293
def publish_action(action)
  publish(action)
end
publish_activity(activity) click to toggle source

facebook_session.user.publish_activity({ :message => ‘{actor} rolled around’, :action_link => { :text => ‘Roll around too’, :href => ‘facebook.er/’ }})

# File lib/facebooker/models/user.rb, line 623
def publish_activity(activity)
  session.post('facebook.dashboard.publishActivity', { :activity => activity.to_json })
end
publish_story(story) click to toggle source
# File lib/facebooker/models/user.rb, line 289
def publish_story(story)
  publish(story)
end
publish_templatized_action(action) click to toggle source
# File lib/facebooker/models/user.rb, line 297
def publish_templatized_action(action)
  publish(action)
end
publish_to(target, options = {}) click to toggle source

Publish a post into the stream on the user’s Wall and News Feed. This post also appears in the user’s friend’s streams. The publish_stream extended permission must be granted in order to use this method.

See: wiki.developers.facebook.com/index.php/Stream.publish

target can be the current user or some other user.

To publish to a Page on the Page’s behave, specify the page id as :uid and set :post_as_page to ‘true’, use the current user as target

Example:

# Publish a message to my own wall:
me.publish_to(me, :message => 'hello world')

# Publish to a friend's wall with an action link:
me.publish_to(my_friend,  :message => 'how are you?', :action_links => [
  :text => 'my website',
  :href => 'http://tenderlovemaking.com/'
])
# File lib/facebooker/models/user.rb, line 146
def publish_to(target, options = {})
  @session.post('facebook.stream.publish', prepare_publish_to_options(target, options), false)
end
remove_activity(*activity_ids) click to toggle source

facebook_session.user.remove_activity [‘123’]

# File lib/facebooker/models/user.rb, line 628
def remove_activity(*activity_ids)
  session.post('facebook.dashboard.removeActivity', { :activity_ids => activity_ids.flatten })
end
remove_like_on(post_id) click to toggle source

Remove a like on a post

See: wiki.developers.facebook.com/index.php/Stream.removeLike

post_id the post_id for the post that is being commented on

# File lib/facebooker/models/user.rb, line 215
def remove_like_on(post_id)
  @session.post('facebook.stream.removeLike', {:post_id=>post_id})
end
revoke_permission(ext_perm) click to toggle source

Revoke any extended permission given by a user

# File lib/facebooker/models/user.rb, line 491
def revoke_permission(ext_perm)
  session.post('facebook.auth.revokeExtendedPermission', { :perm => ext_perm, :uid => uid }, false)
end
rsvp_event(eid, rsvp_status, options = {}) click to toggle source

Rsvp to an event with the eid and rsvp_status which can be ‘attending’, ‘unsure’, or ‘declined’. wiki.developers.facebook.com/index.php/Events.rsvp E.g:

@user.rsvp_event('100321123', 'attending')
# => Returns true if all went well
# File lib/facebooker/models/user.rb, line 77
def rsvp_event(eid, rsvp_status, options = {})
  result = @session.post('facebook.events.rsvp', options.merge(:eid => eid, :rsvp_status => rsvp_status))
end
send_email(subject, text=nil, fbml=nil) click to toggle source

Convenience method to send email to the current user

# File lib/facebooker/models/user.rb, line 497
def send_email(subject, text=nil, fbml=nil)
  session.send_email([id], subject, text, fbml)
end
set_profile_fbml(profile_fbml, mobile_fbml, profile_action_fbml, profile_main = nil) click to toggle source
set_profile_fbml_with_bebo_adapter(profile_fbml, mobile_fbml, profile_action_fbml, profile_main = nil) click to toggle source
# File lib/facebooker/adapters/bebo_adapter.rb, line 38
def set_profile_fbml_with_bebo_adapter(profile_fbml, mobile_fbml, profile_action_fbml, profile_main = nil)
  if(Facebooker.is_for?(:bebo))
    self.session.post('facebook.profile.setFBML', :uid => @id, :markup => profile_fbml)
  else
    set_profile_fbml_without_bebo_adapter(profile_fbml,mobile_fbml, profile_action_fbml, profile_main)
  end
end
Also aliased as: set_profile_fbml
set_profile_fbml_without_bebo_adapter(profile_fbml, mobile_fbml, profile_action_fbml, profile_main = nil) click to toggle source
Alias for: set_profile_fbml
set_profile_info(title, info_fields, format = :text) click to toggle source
** NEW PROFILE DESIGN ***

Set a info section for this user

Note: using #set_profile_info as I feel using user.set_info could be confused with the user.getInfo facebook method.

Also, I feel it fits in line with user.set_profile_fbml.
# File lib/facebooker/models/user.rb, line 431
def set_profile_info(title, info_fields, format = :text)
  session.post('facebook.profile.setInfo', :title => title, :uid => id,
    :type => format.to_s == "text" ? 1 : 5, :info_fields => info_fields.to_json)
end
set_status(message) click to toggle source

Set the status for a user DOES NOT prepend “is” to the message

requires extended permission.

# File lib/facebooker/models/user.rb, line 464
def set_status(message)
  self.status=message
  session.post('facebook.users.setStatus',{:status=>message,:status_includes_verb=>1,:uid => uid}, false) do |ret|
    ret
  end
end
status=(message) click to toggle source

This DOES NOT set the status of a user on Facebook Use the #set_status method instead

# File lib/facebooker/models/user.rb, line 443
def status=(message)
  case message
  when String,Status
    @status = message
  when Hash
    @status = Status.from_hash(message)
  end
end
statuses( limit = 50 ) click to toggle source

Return limit statuses from the user

# File lib/facebooker/models/user.rb, line 455
def statuses( limit = 50 )
  session.post('facebook.status.get', {:uid => uid, :limit => limit}).collect { |ret| Status.from_hash(ret) }
end
stream(options = {}) click to toggle source

Retrieve user’s facebook stream See wiki.developers.facebook.com/index.php/Stream.get for options

# File lib/facebooker/models/user.rb, line 314
def stream(options = {})
  @stream = session.post('facebook.stream.get', prepare_get_stream_options(options)) do |response|
    response
  end
end
threads(options = {}) click to toggle source

Get threads in a folder

See: wiki.developers.facebook.com/index.php/Message.getThreadsInFolder

options possible options are :folder_id, :limit and :offset

# File lib/facebooker/models/user.rb, line 276
def threads(options = {})
  options ||= {}
  @threads = session.post('facebook.message.getThreadsInFolder', options) do |response|
    response.map do |hash|
      MessageThread.from_hash(hash)
    end
  end
end
to_i() click to toggle source

Returns the user’s id as an integer

# File lib/facebooker/models/user.rb, line 515
def to_i
  id
end
to_s() click to toggle source
# File lib/facebooker/models/user.rb, line 519
def to_s
  id.to_s
end
upload_photo(multipart_post_file, options = {}) click to toggle source

Upload a photo to the user’s profile.

In your view, create a multipart form that posts directly to your application (not through canvas):

<% form_tag photos_url(:canvas => false), :html => {:multipart => true, :promptpermission => 'photo_upload'} do %>
  Photo: <%= file_field_tag 'photo' %>
  Caption: <%= text_area_tag 'caption' %>
  <%= submit_tag 'Upload Photo', :class => 'inputsubmit' %>
<% end %>

And in your controller:

class PhotosController < ApplicationController
  def create
    file = Net::HTTP::MultipartPostFile.new(
      params[:photo].original_filename,
      params[:photo].content_type,
      params[:photo].read
    )

    @photo = facebook_session.user.upload_photo(file, :caption => params[:caption])
    redirect_to photos_url(:canvas => true)
  end
end

Options correspond to wiki.developers.facebook.com/index.php/Photos.upload

# File lib/facebooker/models/user.rb, line 354
def upload_photo(multipart_post_file, options = {})
  Photo.from_hash(session.post_file('facebook.photos.upload',
    options.merge(nil => multipart_post_file)))
end
upload_video(multipart_post_file, options = {}) click to toggle source

Upload a video to the user’s profile.

In your view, create a multipart form that posts directly to your application (not through canvas):

<% form_tag videos_url(:canvas => false), :html => {:multipart => true, :promptpermission => 'video_upload'} do %>
  Video: <%= file_field_tag 'video' %>
  Title: <%= text_area_tag 'title' %>
  Description: <%= text_area_tag 'description' %>
  <%= submit_tag 'Upload Video', :class => 'inputsubmit' %>
<% end %>

And in your controller:

class VideosController < ApplicationController
  def create
    file = Net::HTTP::MultipartPostFile.new(
      params[:photo].original_filename,
      params[:photo].content_type,
      params[:photo].read
    )

    @video = facebook_session.user.upload_video(file, :description => params[:description])
    redirect_to videos_url(:canvas => true)
  end
end

Options correspond to wiki.developers.facebook.com/index.php/Video.upload

# File lib/facebooker/models/user.rb, line 386
def upload_video(multipart_post_file, options = {})
  Video.from_hash(session.post_file('facebook.video.upload',
    options.merge(nil => multipart_post_file, :base => Facebooker.video_server_base)))
end

Public Class Methods

cast_to_facebook_id(object) click to toggle source
# File lib/facebooker/models/user.rb, line 710
def self.cast_to_facebook_id(object)
  if object.respond_to?(:facebook_id)
    object.facebook_id
  else
    object
  end
end
dashboard_multi_decrement_count(*uids) click to toggle source

::dashboard_multi_decrement_count [‘1234’, ‘5678’]

# File lib/facebooker/models/user.rb, line 565
def self.dashboard_multi_decrement_count(*uids)
  Facebooker::Session.create.post("facebook.dashboard.multiDecrementCount", :uids => uids.flatten.collect{ |uid| uid.to_s }.to_json)
end
dashboard_multi_get_count(*uids) click to toggle source

::dashboard_multi_get_count [‘1234’, ‘5678’]

# File lib/facebooker/models/user.rb, line 550
def self.dashboard_multi_get_count(*uids)
 Facebooker::Session.create.post("facebook.dashboard.multiGetCount", :uids => uids.flatten)
end
dashboard_multi_increment_count(*uids) click to toggle source

::dashboard_multi_increment_count [‘1234’, ‘5678’]

# File lib/facebooker/models/user.rb, line 560
def self.dashboard_multi_increment_count(*uids)
  Facebooker::Session.create.post("facebook.dashboard.multiIncrementCount", :uids => uids.flatten.collect{ |uid| uid.to_s }.to_json)
end
dashboard_multi_set_count(ids) click to toggle source

::dashboard_multi_set_count({ ‘1234’ => ‘11’, ‘5678’ => ‘22’ })

# File lib/facebooker/models/user.rb, line 555
def self.dashboard_multi_set_count(ids)
  Facebooker::Session.create.post("facebook.dashboard.multiSetCount", :ids => ids.to_json)
end
hash_email(email) click to toggle source
# File lib/facebooker/models/user.rb, line 703
def self.hash_email(email)
  email = email.downcase.strip
  crc=Zlib.crc32(email)
  md5=Digest::MD5.hexdigest(email)
  "#{crc}_#{md5}"
end
multi_add_news(uids, news, image=nil) click to toggle source

::multi_add_news([‘1234’, ‘4321’], [{ :message => ‘Hi users’, :action_link => { :text => “Uh hey there app”, :href => ‘facebook.er/’ }}], ‘’)

# File lib/facebooker/models/user.rb, line 597
def self.multi_add_news(uids, news, image=nil)
  params = { :uids => uids, :news => news }
  params[:image] = image if image

  Facebooker::Session.create.post("facebook.dashboard.multiAddNews", params)
end
multi_clear_news(ids) click to toggle source

::multi_clear_news, “4321”=>})

# File lib/facebooker/models/user.rb, line 605
def self.multi_clear_news(ids)
  Facebooker::Session.create.post("facebook.dashboard.multiClearNews", :ids => ids.to_json)
end
multi_get_news(ids) click to toggle source

::multi_get_news, “4321”=>})

# File lib/facebooker/models/user.rb, line 610
def self.multi_get_news(ids)
  Facebooker::Session.create.post('facebook.dashboard.multiGetNews', :ids => ids.to_json)
end
new(*args) click to toggle source

Can pass in these two forms: id, session, (optional) attribute_hash attribute_hash

# File lib/facebooker/models/user.rb, line 33
def initialize(*args)
  @friends            = nil
  @current_location   = nil
  @pic                = nil
  @hometown_location  = nil
  @populated          = false
  @session            = nil
  @id                 = nil
  if (args.first.kind_of?(String) || args.first.kind_of?(Integer)) && args.size==1
    self.uid = args.shift
    @session = Session.current
  elsif (args.first.kind_of?(String) || args.first.kind_of?(Integer)) && args[1].kind_of?(Session)
    self.uid = args.shift
    @session = args.shift
  end
  if args.last.kind_of?(Hash)
    populate_from_hash!(args.pop)
  end
end
register(users) click to toggle source

register a user with Facebook users should be a hast with at least an :email field you can optionally provide an :account_id field as well

# File lib/facebooker/models/user.rb, line 644
def self.register(users)
  user_map={}
  users=users.map do |h|
    returning h.dup do |d|
      if email=d.delete(:email)
        hash = hash_email(email)
        user_map[hash]=h
        d[:email_hash]=hash
      end
    end
  end
  Facebooker::Session.create.post("facebook.connect.registerUsers",:accounts=>users.to_json) do |ret|
    ret.each do |hash|
      user_map.delete(hash)
    end
    unless user_map.empty?
      e=Facebooker::Session::UserRegistrationFailed.new
      e.failed_users = user_map.values
      raise e
    end
    ret
  end
end
standard_fields(fields = []) click to toggle source
# File lib/facebooker/models/user.rb, line 722
def self.standard_fields(fields = [])
  valid_fields(fields,STANDARD_FIELDS)
end
unregister(email_hashes) click to toggle source

Unregister an array of email hashes

# File lib/facebooker/models/user.rb, line 675
def self.unregister(email_hashes)
  Facebooker::Session.create.post("facebook.connect.unregisterUsers",:email_hashes=>email_hashes.to_json) do |ret|
    ret.each do |hash|
      email_hashes.delete(hash)
    end
    unless email_hashes.empty?
      e=Facebooker::Session::UserUnRegistrationFailed.new
      e.failed_users = email_hashes
      raise e
    end
    ret
  end
end
unregister_emails(emails) click to toggle source

unregister an array of email addresses

# File lib/facebooker/models/user.rb, line 690
def self.unregister_emails(emails)
  emails_hash  = {}
  emails.each {|e| emails_hash[hash_email(e)] = e}
  begin
    unregister(emails_hash.keys).collect {|r| emails_hash[r]}
  rescue
    # re-raise with emails instead of hashes.
    e = Facebooker::Session::UserUnRegistrationFailed.new
    e.failed_users = $!.failed_users.collect { |f| emails_hash[f] }
    raise e
  end
end
user_fields(fields = []) click to toggle source
# File lib/facebooker/models/user.rb, line 718
def self.user_fields(fields = [])
  valid_fields(fields)
end