Class: SocialAuth::TwitterService

Inherits:
Service show all
Defined in:
app/models/social_auth/twitter_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



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'app/models/social_auth/twitter_service.rb', line 28

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

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

rescue Twitter::Error::Unauthorized => e
  raise InvalidToken.new(e.message)
rescue Twitter::Error::TooManyRequests => e
  raise RateLimitExceeded.new(e.message)
rescue Twitter::Error => e
  raise Error.new(e.message)
end

.create_connection(auth_token = {}) ⇒ Object



46
47
48
49
50
51
52
53
54
55
# File 'app/models/social_auth/twitter_service.rb', line 46

def self.create_connection(auth_token={})
  Twitter::REST::Client.new do |config|
    config.consumer_key        = SocialAuth.twitter_consumer_key
    config.consumer_secret     = SocialAuth.twitter_consumer_secret
    config.access_token        = auth_token[:access_token]
    config.access_token_secret = auth_token[:access_token_secret]
  end
  #the reason why we don't catch any exceptions here is because it only initializes the connection no
  #requests are actually made here
end

.init_with(auth_token = {}) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'app/models/social_auth/twitter_service.rb', line 10

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

  return create_with_request(
    request.user.id,
    User.create_with_twitter_request(request.user),
    "Authenticated",
    {access_token: request.access_token, access_token_secret: request.access_token_secret}
  )

rescue Twitter::Error::Unauthorized => e
  raise InvalidToken.new(e.message)
rescue Twitter::Error::TooManyRequests => e
  raise RateLimitExceeded.new(e.message)
rescue Twitter::Error => e
  raise Error.new(e.message)
end

Instance Method Details

#friend_idsObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'app/models/social_auth/twitter_service.rb', line 57

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).friend_ids.to_hash[:ids].map(&:to_s)
    unless friend_ids.empty?
      redis_instance.del(redis_key(:friends))
      redis_instance.sadd(redis_key(:friends), friend_ids.to_s)
      redis_instance.expire(redis_key(:friends), REDIS_CACHE)
    end
  end
  friend_ids
rescue Twitter::Error::Unauthorized => e
  disconnect
  return []
end

#nameObject



6
7
8
# File 'app/models/social_auth/twitter_service.rb', line 6

def name
  "Twitter"
end