Module: RestCore::Twitter::RailsUtil

Includes:
RailsUtilUtil
Defined in:
lib/rest-core/client/twitter/rails_util.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from RailsUtilUtil

extend_rails_util, include_rails_util, setup_helper

Class Method Details

.included(controller) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/rest-core/client/twitter/rails_util.rb', line 18

def self.included controller
  # skip if included already, any better way to detect this?
  return if controller.respond_to?(:rc_twitter, true)
  super
  controller.rescue_from(RestCore::Twitter::Error::Unauthorized,
                         :with => :rc_twitter_on_unauthorized)
end

Instance Method Details

#rc_twitter_authorize(error = nil, force_redirect = true) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/rest-core/client/twitter/rails_util.rb', line 49

def rc_twitter_authorize error=nil, force_redirect=true
  logger.info("INFO: Twitter: #{error.inspect}")

  if force_redirect || rc_options_get(RestCore::Twitter, :auto_authorize)
    rc_twitter_cleanup

    callback = rc_twitter_normalized_request_uri
    redirect_url = rc_twitter.authorize_url!(:oauth_callback => callback)
    rc_twitter.oauth_callback = callback
    rc_twitter_write_data_json

    logger.debug(
      "DEBUG: Twitter: redirect to #{redirect_url} from #{callback}")

    redirect_to redirect_url
  end
end

#rc_twitter_check_cookiesObject



104
105
106
107
108
109
110
111
112
# File 'lib/rest-core/client/twitter/rails_util.rb', line 104

def rc_twitter_check_cookies
  return if rc_twitter.authorized?                             ||
            !rc_options_get(RestCore::Twitter, :write_cookies) ||
            !(data_json = cookies[rc_twitter_storage_key])

  rc_twitter.data_json = data_json
  logger.debug("DEBUG: Twitter: detected rc_twitter cookies, parsed:" \
               " #{rc_twitter.data.inspect}")
end

#rc_twitter_check_handler(handler = rc_options_get(RestCore::Twitter, :check_handler)) ⇒ Object



85
86
87
88
89
90
91
92
# File 'lib/rest-core/client/twitter/rails_util.rb', line 85

def rc_twitter_check_handler handler=
    rc_options_get(RestCore::Twitter, :check_handler)

  return if rc_twitter.authorized? || !handler
  rc_twitter.data_json = handler.call
  logger.debug("DEBUG: Twitter: called check_handler, parsed:" \
               " #{rc_twitter.data.inspect}")
end

#rc_twitter_check_oauth_verifierObject



72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/rest-core/client/twitter/rails_util.rb', line 72

def rc_twitter_check_oauth_verifier
  return if !rc_twitter.oauth_callback || !params[:oauth_verifier]

  rc_twitter.authorize!(:oauth_verifier => params[:oauth_verifier])
  rc_twitter.data.delete('oauth_callback')

  logger.debug(
    "DEBUG: Twitter: detected oauth_verifier with #{request.url}," \
    " parsed: #{rc_twitter.data.inspect}")

  rc_twitter_write_data_json if rc_twitter.authorized?
end

#rc_twitter_check_sessionObject



94
95
96
97
98
99
100
101
102
# File 'lib/rest-core/client/twitter/rails_util.rb', line 94

def rc_twitter_check_session
  return if rc_twitter.authorized?                             ||
            !rc_options_get(RestCore::Twitter, :write_session) ||
            !(data_json = session[rc_twitter_storage_key])

  rc_twitter.data_json = data_json
  logger.debug("DEBUG: Twitter: detected rc_twitter session, parsed:" \
               " #{rc_twitter.data.inspect}")
end

#rc_twitter_cleanupObject

begin misc ================================


145
146
147
148
# File 'lib/rest-core/client/twitter/rails_util.rb', line 145

def rc_twitter_cleanup
  session.delete(rc_twitter_storage_key)
  cookies.delete(rc_twitter_storage_key)
end

#rc_twitter_normalized_request_uriObject



150
151
152
153
154
155
156
157
# File 'lib/rest-core/client/twitter/rails_util.rb', line 150

def rc_twitter_normalized_request_uri
  URI.parse(request.url).tap{ |uri|
    uri.query = uri.query.split('&').reject{ |q|
                  q =~ /^(oauth_verifier|oauth_token)\=/
                }.join('&') if uri.query
    uri.query = nil if uri.query.blank?
  }.to_s
end

#rc_twitter_on_unauthorized(error = nil) ⇒ Object



45
46
47
# File 'lib/rest-core/client/twitter/rails_util.rb', line 45

def rc_twitter_on_unauthorized error=nil
  rc_twitter_authorize(error, false)
end

#rc_twitter_setup(options = {}) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/rest-core/client/twitter/rails_util.rb', line 26

def rc_twitter_setup options={}
  super

  rc_twitter_check_handler
  rc_twitter_check_session
  rc_twitter_check_cookies
  rc_twitter_check_oauth_verifier

  if rc_options_get(RestCore::Twitter, :ensure_authorized) &&
     !rc_twitter.authorized?

    rc_twitter_authorize('ensure authorized')
    false # action halt, redirect to do authorize,
          # eagerly, as opposed to auto_authorize
  else
    true  # keep going
  end
end

#rc_twitter_storage_keyObject

begin check ================================


68
69
70
# File 'lib/rest-core/client/twitter/rails_util.rb', line 68

def rc_twitter_storage_key
  "rc_twitter_#{rc_twitter.consumer_key}"
end

#rc_twitter_write_cookiesObject



135
136
137
138
139
# File 'lib/rest-core/client/twitter/rails_util.rb', line 135

def rc_twitter_write_cookies
  return if !rc_options_get(RestCore::Twitter, :write_cookies)
  cookies[rc_twitter_storage_key] = data_json = rc_twitter.data_json
  logger.debug("DEBUG: Twitter: wrote cookies: data_json => #{data_json}")
end

#rc_twitter_write_data_jsonObject

end check ================================
begin write ================================


115
116
117
118
119
# File 'lib/rest-core/client/twitter/rails_util.rb', line 115

def rc_twitter_write_data_json
  rc_twitter_write_handler
  rc_twitter_write_session
  rc_twitter_write_cookies
end

#rc_twitter_write_handler(handler = rc_options_get(RestCore::Twitter, :write_handler)) ⇒ Object



121
122
123
124
125
126
127
# File 'lib/rest-core/client/twitter/rails_util.rb', line 121

def rc_twitter_write_handler handler=
  rc_options_get(RestCore::Twitter, :write_handler)

  return if !handler
  handler.call(data_json = rc_twitter.data_json)
  logger.debug("DEBUG: Twitter: write_handler: data_json => #{data_json}")
end

#rc_twitter_write_sessionObject



129
130
131
132
133
# File 'lib/rest-core/client/twitter/rails_util.rb', line 129

def rc_twitter_write_session
  return if !rc_options_get(RestCore::Twitter, :write_session)
  session[rc_twitter_storage_key] = data_json = rc_twitter.data_json
  logger.debug("DEBUG: Twitter: wrote session: data_json => #{data_json}")
end