Class: SocialAuth::FacebookService

Inherits:
Service show all
Defined in:
app/models/social_auth/facebook_service.rb

Constant Summary

Constants inherited from Service

Service::ACCEPTED_METHODS, Service::REDIS_CACHE

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Service

#access_token, append_to_associated_services, #append_to_friends_list, #authenticated?, #connected?, create_with_request, #disconnect, disconnect_user, #redis_instance, #redis_key, #services

Class Method Details

.connect_with(user, auth_token = {}, method = "Connected") ⇒ Object



20
21
22
23
24
25
26
27
28
29
# File 'app/models/social_auth/facebook_service.rb', line 20

def self.connect_with(user, auth_token={}, method="Connected")
  request = create_connection(auth_token)

  return create_with_request(
    request.id,
    user,
    method,
    {access_token: request.access_token}
  )
end

.create_connection(auth_token = {}) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'app/models/social_auth/facebook_service.rb', line 31

def self.create_connection(auth_token={})
  fb_user = FbGraph2::User.me(auth_token[:access_token])
  fb_user.fetch

rescue FbGraph2::Exception::InvalidToken => e
  raise InvalidToken.new(e.message)
rescue FbGraph2::Exception::BadRequest => e
  raise BadRequest.new(e.message)
end

.init_with(auth_token = {}) ⇒ Object



9
10
11
12
13
14
15
16
17
18
# File 'app/models/social_auth/facebook_service.rb', line 9

def self.init_with(auth_token={})
  request = create_connection(auth_token)

  return create_with_request(
    request.id,
    User.create_with_facebook_request(request),
    "Authenticated",
    {access_token: request.access_token}
  )
end

Instance Method Details

#friend_idsObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'app/models/social_auth/facebook_service.rb', line 41

def friend_ids
  if redis_instance.exists(redis_key(:friends))
    friend_ids = redis_instance.smembers(redis_key(:friends))
  else
    friend_ids = self.class.create_connection(access_token).friends.map(&:id)
    unless friend_ids.empty?
      redis_instance.del(redis_key(:friends))
      redis_instance.sadd(redis_key(:friends), friend_ids)
      redis_instance.expire(redis_key(:friends), REDIS_CACHE)
    end
  end
  friend_ids

rescue InvalidToken => e
  disconnect(e)
  return []
end

#nameObject



5
6
7
# File 'app/models/social_auth/facebook_service.rb', line 5

def name
  "Facebook"
end