rfacebook 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -31,30 +31,19 @@ require "facebook_session"
31
31
 
32
32
  module RFacebook
33
33
 
34
- class FacebookWebSession < FacebookSession
35
-
36
- # SECTION: Properties
34
+ class FacebookWebSession < FacebookSession
37
35
 
38
- def session_key
39
- return @session_key
40
- end
41
-
42
- def session_user_id
43
- return @session_uid
44
- end
45
-
46
- def session_expires
47
- return @session_expires
48
- end
49
-
50
- # SECTION: URL Getters
36
+ ################################################################################################
37
+ ################################################################################################
38
+ # :section: URL Accessors
39
+ ################################################################################################
51
40
 
52
41
  # Function: get_login_url
53
42
  # Gets the authentication URL
54
43
  #
55
44
  # Parameters:
56
45
  # options.next - the page to redirect to after login
57
- # options.popup - boolean, whether or not to use the popup style (defaults to true)
46
+ # options.popup - boolean, whether or not to use the popup style (defaults to false)
58
47
  # options.skipcookie - boolean, whether to force new Facebook login (defaults to false)
59
48
  # options.hidecheckbox - boolean, whether to show the "infinite session" option checkbox
60
49
  def get_login_url(options={})
@@ -80,6 +69,11 @@ class FacebookWebSession < FacebookSession
80
69
 
81
70
  end
82
71
 
72
+ # Function: get_install_url
73
+ # Gets the installation URL for this application
74
+ #
75
+ # Parameters:
76
+ # options.next - the page to redirect to after installation
83
77
  def get_install_url(options={})
84
78
 
85
79
  # handle options
@@ -93,44 +87,10 @@ class FacebookWebSession < FacebookSession
93
87
 
94
88
  end
95
89
 
96
-
97
- # SECTION: Callback Verification Helpers
98
-
99
- def get_fb_sig_params(originalParams)
100
-
101
- # setup
102
- timeout = 48*3600
103
- namespace = "fb_sig"
104
- prefix = "#{namespace}_"
105
-
106
- # get the params prefixed by "fb_sig_" (and remove the prefix)
107
- sigParams = {}
108
- originalParams.each do |k,v|
109
- oldLen = k.length
110
- newK = k.sub(prefix, "")
111
- if oldLen != newK.length
112
- sigParams[newK] = v
113
- end
114
- end
115
-
116
- # handle invalidation
117
- if (timeout and (sigParams["time"].nil? or (Time.now.to_i - sigParams["time"].to_i > timeout.to_i)))
118
- # invalidate if the timeout has been reached
119
- sigParams = {}
120
- end
121
-
122
- if !sig_params_valid?(sigParams, originalParams[namespace])
123
- # invalidate if the signatures don't match
124
- sigParams = {}
125
- end
126
-
127
- return sigParams
128
-
129
- end
130
-
131
-
132
-
133
- # SECTION: Session Activation
90
+ ################################################################################################
91
+ ################################################################################################
92
+ # :section: Session Activation
93
+ ################################################################################################
134
94
 
135
95
  # Function: activate_with_token
136
96
  # Gets the session information available after current user logs in.
@@ -140,7 +100,7 @@ class FacebookWebSession < FacebookSession
140
100
  def activate_with_token(auth_token)
141
101
  result = call_method("auth.getSession", {:auth_token => auth_token})
142
102
  if result != nil
143
- @session_uid = result.at("uid").inner_html
103
+ @session_user_id = result.at("uid").inner_html
144
104
  @session_key = result.at("session_key").inner_html
145
105
  @session_expires = result.at("expires").inner_html
146
106
  end
@@ -161,42 +121,79 @@ class FacebookWebSession < FacebookSession
161
121
 
162
122
  # determine the current user's id
163
123
  if uid
164
- @session_uid = uid
124
+ @session_user_id = uid
165
125
  else
166
126
  result = call_method("users.getLoggedInUser")
167
- @session_uid = result.at("users_getLoggedInUser_response").inner_html
127
+ @session_user_id = result.at("users_getLoggedInUser_response").inner_html
168
128
  end
169
129
 
170
130
  end
171
-
172
- def is_valid?
173
- return (is_activated? and !session_expired?)
131
+
132
+ ################################################################################################
133
+ ################################################################################################
134
+ # :section: Canvas Signature Validation
135
+ ################################################################################################
136
+
137
+ # Function: get_fb_sig_params
138
+ # Returns the fb_sig params from Hash that has all request params. Hash is empty if the
139
+ # signature was invalid.
140
+ #
141
+ # Parameters:
142
+ # originalParams - a Hash that contains the fb_sig_* params (i.e. Rails params)
143
+ #
144
+ def get_fb_sig_params(originalParams)
145
+
146
+ # setup
147
+ timeout = 48*3600
148
+ prefix = "fb_sig_"
149
+
150
+ # get the params prefixed by "fb_sig_" (and remove the prefix)
151
+ sigParams = {}
152
+ originalParams.each do |k,v|
153
+ oldLen = k.length
154
+ newK = k.sub(prefix, "")
155
+ if oldLen != newK.length
156
+ sigParams[newK] = v
157
+ end
158
+ end
159
+
160
+ # handle invalidation
161
+ if (timeout and (sigParams["time"].nil? or (Time.now.to_i - sigParams["time"].to_i > timeout.to_i)))
162
+ # invalidate if the timeout has been reached
163
+ @logger.debug "** RFACEBOOK(GEM) - fbparams is empty because the signature was timed out" if @logger
164
+ sigParams = {}
165
+ end
166
+
167
+ # check that the signatures match
168
+ expectedSig = originalParams["fb_sig"]
169
+ if !(sigParams and expectedSig and generate_signature(sigParams, @api_secret) == expectedSig)
170
+ # didn't match, empty out the params
171
+ @logger.debug "** RFACEBOOK(GEM) - fbparams is empty because the signature did not match" if @logger
172
+ sigParams = {}
173
+ end
174
+
175
+ return sigParams
176
+
174
177
  end
175
178
 
176
-
177
-
178
-
179
-
180
-
181
- # SECTION: Protected methods
182
- protected
183
-
179
+ ################################################################################################
180
+ ################################################################################################
181
+ # :section: Template Methods
182
+ ################################################################################################
183
+
184
+ # Function: is_activated?
185
+ # Returns true when we have activated ourselves somehow
184
186
  def is_activated?
185
187
  return (@session_key != nil)
186
188
  end
187
189
 
188
190
  # Function: get_secret
189
- # Template method, used by super::signature to generate a signature
190
- def get_secret(params)
191
+ # Used by super::signature to generate a signature
192
+ # Web sessions simply use their API secret.
193
+ def get_secret(params) # :nodoc:
191
194
  return @api_secret
192
195
  end
193
-
194
- def sig_params_valid?(sigParams, expectedSig)
195
- return (sigParams and expectedSig and generate_signature(sigParams, @api_secret) == expectedSig)
196
- end
197
196
 
198
197
  end
199
-
200
-
201
-
198
+
202
199
  end
@@ -34,15 +34,15 @@ module RFacebook
34
34
  module Rails
35
35
  module ControllerExtensions
36
36
 
37
- # SECTION: StandardErrors
37
+ # :section: StandardErrors
38
38
 
39
- class APIKeyNeededStandardError < StandardError; end
40
- class APISecretNeededStandardError < StandardError; end
41
- class APICanvasPathNeededStandardError < StandardError; end
42
- class APICallbackNeededStandardError < StandardError; end
43
- class APIFinisherNeededStandardError < StandardError; end
39
+ class APIKeyNeededStandardError < StandardError; end # :nodoc:
40
+ class APISecretNeededStandardError < StandardError; end # :nodoc:
41
+ class APICanvasPathNeededStandardError < StandardError; end # :nodoc:
42
+ class APICallbackNeededStandardError < StandardError; end # :nodoc:
43
+ class APIFinisherNeededStandardError < StandardError; end # :nodoc:
44
44
 
45
- # SECTION: Template Methods (must be implemented by concrete subclass)
45
+ # :section: Template Methods (must be implemented by concrete subclass)
46
46
 
47
47
  def facebook_api_key
48
48
  raise APIKeyNeededStandardError, "RFACEBOOK ERROR: when using the RFacebook on Rails plugin, please be sure that you have a facebook.yml file with 'key' defined"
@@ -66,7 +66,7 @@ module RFacebook
66
66
 
67
67
 
68
68
 
69
- # SECTION: Special Variables
69
+ # :section: Special Variables
70
70
 
71
71
  # Function: fbparams
72
72
  # Accessor for all params beginning with "fb_sig_"
@@ -123,10 +123,10 @@ module RFacebook
123
123
 
124
124
  end
125
125
 
126
- # SECTION: Helpful Methods
126
+ # :section: Helpful Methods
127
127
 
128
128
  # DEPRECATED
129
- def facebook_redirect_to(url)
129
+ def facebook_redirect_to(url) # :nodoc:
130
130
  RAILS_DEFAULT_LOGGER.info "** RFACEBOOK DEPRECATION NOTICE: facebook_redirect_to is deprecated in RFacebook. Instead, you can use redirect_to like any Rails app."
131
131
  if in_facebook_canvas?
132
132
  render :text => "<fb:redirect url=\"#{url}\" />"
@@ -152,14 +152,23 @@ module RFacebook
152
152
  def in_external_app?
153
153
  # FIXME: once you click away in an iframe app, you are considered to be an external app
154
154
  # TODO: read up on the RFacebook hacks for avoiding nested iframes
155
- return (!params[:fb_sig] and !in_facebook_frame?)
155
+ return (params["fb_sig"] == nil and !in_facebook_frame?)
156
156
  end
157
157
 
158
158
  def added_facebook_application?
159
- return fbparams["added"].to_i == 1
159
+ return (params["fb_sig_added"] != nil)# and params["fb_sig_in_iframe"] == "1")
160
160
  end
161
161
 
162
- # SECTION: before_filters
162
+ def facebook_platform_signature_verified?
163
+ return (fbparams and fparams.size > 0)
164
+ end
165
+
166
+ # TODO: define something along the lines of is_logged_in_to_facebook? that returns fbsession.is_ready? perhaps
167
+
168
+ ################################################################################################
169
+ ################################################################################################
170
+ # :section: Before_filters
171
+ ################################################################################################
163
172
 
164
173
  def handle_facebook_login
165
174
 
@@ -209,10 +218,7 @@ module RFacebook
209
218
  end
210
219
 
211
220
  def require_facebook_login
212
-
213
- # handle a facebook login if given (external sites and iframe only)
214
- handle_facebook_login
215
-
221
+
216
222
  # now finish it off depending on whether we are in canvas, iframe, or external app
217
223
  if !performed?
218
224
 
@@ -262,44 +268,16 @@ module RFacebook
262
268
  return true
263
269
  end
264
270
 
265
- # SECTION: Facebook Debug Panel
271
+ ################################################################################################
272
+ ################################################################################################
273
+ # :section: Facebook Debug Panel
274
+ ################################################################################################
266
275
 
267
276
  def render_with_facebook_debug_panel(options={})
268
277
  begin
269
278
  renderedOutput = render_to_string(options)
270
279
  rescue Exception => e
271
- # TODO: make the backtrace rendering better (Evan Weaver's solution seems good, hopefully he'll allow usage of facebook_exceptions)
272
- prettyBacktrace = e.backtrace.map do |line|
273
- cleanLine = line.gsub(RAILS_ROOT, "").gsub("<", "&lt;").gsub(">", "&gt;")
274
- pieces = cleanLine.split("\n")
275
- if (pieces and pieces.size> 0)
276
- cleanLine = "<ul>"
277
- pieces.each do |piece|
278
- if matches = /.*[\/\\]+((.*)\:([0-9]+)\:\s*in\s*\`(.*)\')/.match(piece)
279
- oldPiece = piece
280
- filename = matches[2]
281
- line = matches[3]
282
- method = matches[4]
283
- piece = "<div class='summary'><strong>#{filename}</strong>:<em>#{line}</em> in <strong>#{method}</strong></div>"
284
- piece += "<div class='rawsummary'>#{oldPiece}</div>"
285
- end
286
- cleanLine += "<li>#{piece}</li>"
287
- end
288
- cleanLine += "</ul>"
289
- end
290
- "<tr><td>#{cleanLine}</td></tr>"
291
- end
292
- renderedOutput = "
293
- <div class='RFacebook'>
294
- <div class='backtrace'>
295
- <table>
296
- <tr><td>
297
- <h1>RFacebook <span style='font-weight: normal; color: #6D84B4'>exception backtrace</span></h1>
298
- </td></tr>
299
- #{prettyBacktrace}
300
- </table>
301
- </div>
302
- </div>"
280
+ renderedOutput = facebook_canvas_backtrace(e)
303
281
  end
304
282
  render_text "#{facebook_debug_panel}#{renderedOutput}"
305
283
  end
@@ -309,7 +287,49 @@ module RFacebook
309
287
  return ERB.new(template).result(Proc.new{})
310
288
  end
311
289
 
312
- def facebook_status_manager
290
+ # def rescue_action(exception)
291
+ # # TODO: for security, we only do this in development in the canvas
292
+ # if (in_facebook_canvas? and RAILS_ENV == "development")
293
+ # render_text "#{facebook_debug_panel}#{facebook_canvas_backtrace(exception)}"
294
+ # else
295
+ # # otherwise, do the default
296
+ # super
297
+ # end
298
+ # end
299
+
300
+ def facebook_canvas_backtrace(exception)
301
+
302
+ # TODO: potentially integrate features from Evan Weaver's facebook_exceptions
303
+ rfacebookBacktraceLines = []
304
+ exception.backtrace.each do |line|
305
+
306
+ # escape HTML
307
+ cleanLine = line.gsub(RAILS_ROOT, "").gsub("<", "&lt;").gsub(">", "&gt;")
308
+
309
+ # split up these lines by carriage return
310
+ pieces = cleanLine.split("\n")
311
+ if (pieces and pieces.size> 0)
312
+ pieces.each do |piece|
313
+ if matches = /.*[\/\\]+((.*)\:([0-9]+)\:\s*in\s*\`(.*)\')/.match(piece)
314
+ # for each parsed line, add to the array for later rendering in the template
315
+ rfacebookBacktraceLines << {
316
+ :filename => matches[2],
317
+ :line => matches[3],
318
+ :method => matches[4],
319
+ :rawsummary => piece,
320
+ }
321
+ end
322
+ end
323
+ end
324
+ end
325
+
326
+ # render to the ERB template
327
+ template = File.read(File.dirname(__FILE__) + "/templates/exception_backtrace.rhtml")
328
+ return ERB.new(template).result(Proc.new{})
329
+
330
+ end
331
+
332
+ def facebook_status_manager # :nodoc:
313
333
  checks = [
314
334
  SessionStatusCheck.new(self),
315
335
  (FacebookParamsStatusCheck.new(self) unless (!in_facebook_canvas? and !in_facebook_frame?)),
@@ -324,9 +344,12 @@ module RFacebook
324
344
  return StatusManager.new(checks)
325
345
  end
326
346
 
327
- # SECTION: Private Methods
347
+ ################################################################################################
348
+ ################################################################################################
349
+ # :section: RFacebook Private Methods
350
+ ################################################################################################
328
351
 
329
- def rfacebook_session_holder
352
+ def rfacebook_session_holder # :nodoc:
330
353
 
331
354
  if (@rfacebook_session_holder == nil)
332
355
  @rfacebook_session_holder = FacebookWebSession.new(facebook_api_key, facebook_api_secret)
@@ -337,7 +360,7 @@ module RFacebook
337
360
 
338
361
  end
339
362
 
340
- def rfacebook_persist_session_to_rails
363
+ def rfacebook_persist_session_to_rails # :nodoc:
341
364
  if (!in_facebook_canvas? and rfacebook_session_holder.is_valid?)
342
365
  RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: persisting Facebook session information into Rails session"
343
366
  session[:rfacebook_session] = @rfacebook_session_holder.dup
@@ -346,9 +369,12 @@ module RFacebook
346
369
  end
347
370
 
348
371
 
349
- # SECTION: URL Management
372
+ ################################################################################################
373
+ ################################################################################################
374
+ # :section: URL Management
375
+ ################################################################################################
350
376
 
351
- def url_for__RFACEBOOK(options={}, *parameters)
377
+ def url_for__RFACEBOOK(options={}, *parameters) # :nodoc:
352
378
 
353
379
  # error check
354
380
  if !options
@@ -358,7 +384,12 @@ module RFacebook
358
384
  # use special URL rewriting when inside the canvas
359
385
  # setting the mock_ajax option to true will override this
360
386
  # and force usage of regular Rails rewriting
361
- if (in_facebook_canvas? and !options[:mock_ajax]) #TODO: do something separate for in_facebook_frame?
387
+ mockajaxSpecified = false
388
+ if options.is_a? Hash
389
+ mockajaxSpecified = options[:mock_ajax]
390
+ end
391
+
392
+ if (in_facebook_canvas? and !mockajaxSpecified) #TODO: do something separate for in_facebook_frame?
362
393
 
363
394
  if options.is_a? Hash
364
395
  options[:only_path] = true
@@ -386,7 +417,7 @@ module RFacebook
386
417
  end
387
418
 
388
419
  # mock-ajax rewriting
389
- elsif options[:mock_ajax]
420
+ elsif mockajaxSpecified
390
421
  options.delete(:mock_ajax) # clear it so it doesnt show up in the url
391
422
  options[:only_path] = true
392
423
  path = "#{request.protocol}#{request.host}:#{request.port}#{url_for__ALIASED(options, *parameters)}"
@@ -399,7 +430,7 @@ module RFacebook
399
430
  return path
400
431
  end
401
432
 
402
- def redirect_to__RFACEBOOK(options = {}, *parameters)
433
+ def redirect_to__RFACEBOOK(options = {}, *parameters) # :nodoc:
403
434
  if in_facebook_canvas?
404
435
 
405
436
  canvasRedirUrl = url_for(options, *parameters)
@@ -413,11 +444,14 @@ module RFacebook
413
444
  end
414
445
 
415
446
 
416
- # SECTION: Extension Helpers
447
+ ################################################################################################
448
+ ################################################################################################
449
+ # :section: Extension Helpers
450
+ ################################################################################################
417
451
 
418
- CLASSES_EXTENDED = []
452
+ CLASSES_EXTENDED = [] # :nodoc:
419
453
 
420
- def self.included(base)
454
+ def self.included(base) # :nodoc:
421
455
 
422
456
  # check for a double include
423
457
  doubleInclude = false
@@ -445,6 +479,9 @@ module RFacebook
445
479
  alias_method(:redirect_to, :redirect_to__RFACEBOOK)
446
480
  '
447
481
 
482
+ # ensure that every action handles facebook login
483
+ base.before_filter(:handle_facebook_login)
484
+
448
485
  # ensure that we persist the Facebook session into the Rails session (if possible)
449
486
  base.after_filter(:rfacebook_persist_session_to_rails)
450
487
 
@@ -32,28 +32,34 @@ module RFacebook
32
32
  module Rails
33
33
  module ModelExtensions
34
34
 
35
- # SECTION: StandardErrors
35
+ ##################################################################
36
+ ##################################################################
37
+ # :section: Errors
38
+ ##################################################################
36
39
 
37
- class APIKeyNeededStandardError < StandardError; end
38
- class APISecretNeededStandardError < StandardError; end
40
+ class APIKeyNeededStandardError < StandardError; end # :nodoc:
41
+ class APISecretNeededStandardError < StandardError; end # :nodoc:
39
42
 
40
- # SECTION: Template Methods (must be implemented by concrete subclass)
41
-
43
+ ##################################################################
44
+ ##################################################################
45
+ # :section: Template Methods (must be implemented by concrete subclass)
46
+ ##################################################################
47
+
42
48
  def facebook_api_key
43
- raise APIKeyNeededStandardError
49
+ raise APIKeyNeededStandardError, "RFACEBOOK ERROR: when using the RFacebook on Rails plugin, please be sure that you have a facebook.yml file with 'key' defined"
44
50
  end
45
51
 
46
52
  def facebook_api_secret
47
- raise APISecretNeededStandardError
53
+ raise APISecretNeededStandardError, "RFACEBOOK ERROR: when using the RFacebook on Rails plugin, please be sure that you have a facebook.yml file with 'secret' defined"
48
54
  end
49
55
 
50
- # SECTION: ActsAs method mixing
56
+ # :section: ActsAs method mixing
51
57
 
52
- def self.included(base)
58
+ def self.included(base) # :nodoc:
53
59
  base.extend ActsAsMethods
54
60
  end
55
61
 
56
- module ActsAsMethods
62
+ module ActsAsMethods # :nodoc:all
57
63
  def acts_as_facebook_user
58
64
  include RFacebook::Rails::ModelExtensions::ActsAsFacebookUser::InstanceMethods
59
65
  extend RFacebook::Rails::ModelExtensions::ActsAsFacebookUser::ClassMethods
@@ -63,7 +69,8 @@ module RFacebook
63
69
 
64
70
  ##################################################################
65
71
  ##################################################################
66
- # SECTION: Acts As Facebook User
72
+ # :section: Acts As Facebook User
73
+ ##################################################################
67
74
  module ActsAsFacebookUser
68
75
 
69
76
  ACTORS = [] # holds a reference to all classes that have ActsAsFacebookUser injected
@@ -99,6 +106,10 @@ module RFacebook
99
106
  "tv",
100
107
  "wall_count",
101
108
  "work_history",
109
+ "pic",
110
+ "pic_big",
111
+ "pic_small",
112
+ "pic_square"
102
113
  ]
103
114
 
104
115
 
@@ -106,13 +117,29 @@ module RFacebook
106
117
  module ClassMethods
107
118
 
108
119
  def find_or_create_by_facebook_session(sess)
109
- instance = find_by_facebook_uid(sess.session_user_id)
110
- if !instance
111
- instance = self.new
120
+ if sess.is_ready?
121
+
122
+ # try to find, else create
123
+ instance = find_by_facebook_uid(sess.session_user_id)
124
+ if !instance
125
+ instance = self.new
126
+ end
127
+
128
+ # update session info
129
+ instance.facebook_session = sess
130
+
131
+ # update (or create) the object and return it
132
+ if !instance.save
133
+ RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: failed to update or create the Facebook user object in the database"
134
+ return nil
135
+ end
136
+ return instance
137
+
138
+ else
139
+ RAILS_DEFAULT_LOGGER.info "** RFACEBOOK WARNING: tried to use an inactive session for acts_as_facebook_user (in find_or_create_by_facebook_session)"
140
+ return nil
112
141
  end
113
- instance.facebook_session = sess
114
- instance.save
115
- return instance
142
+
116
143
  end
117
144
 
118
145
  end
@@ -122,9 +149,9 @@ module RFacebook
122
149
 
123
150
  def facebook_session
124
151
  if !@facebook_session
125
- self.facebook_session = FacebookWebSession.new(self.facebook_api_key, self.facebook_api_secret)
152
+ @facebook_session = FacebookWebSession.new(self.facebook_api_key, self.facebook_api_secret)
126
153
  begin
127
- self.facebook_session.activate_with_previous_session(self.facebook_session_key, self.facebook_uid)
154
+ @facebook_session.activate_with_previous_session(self.facebook_session_key, self.facebook_uid)
128
155
  rescue
129
156
  # not a valid facebook session, should we nil it out?
130
157
  end
@@ -139,16 +166,17 @@ module RFacebook
139
166
  end
140
167
 
141
168
  def has_infinite_session_key?
169
+ # TODO: this check should really look at expires
142
170
  return self.facebook_session_key != nil
143
171
  end
144
172
 
145
- def self.included(base)
173
+ def self.included(base) # :nodoc:
146
174
  ActsAsFacebookUser::ACTORS << base
147
175
  ActsAsFacebookUser::FIELDS.each do |fieldname|
148
- base.class_eval <<-end_eval
176
+ base.class_eval <<-EOF
149
177
 
150
178
  def #{fieldname}
151
- if facebook_session.is_valid?
179
+ if facebook_session.is_ready?
152
180
  return facebook_session.cached_users_getInfo(
153
181
  :uids => [facebook_uid],
154
182
  :fields => ActsAsFacebookUser::FIELDS).user.send(:#{fieldname})
@@ -157,7 +185,7 @@ module RFacebook
157
185
  end
158
186
  end
159
187
 
160
- end_eval
188
+ EOF
161
189
  end
162
190
  end
163
191
 
@@ -90,9 +90,19 @@ end
90
90
 
91
91
  # load Facebook configuration file (credit: Evan Weaver)
92
92
  begin
93
- FACEBOOK = YAML.load_file("#{RAILS_ROOT}/config/facebook.yml")[RAILS_ENV]
94
- rescue
95
- FACEBOOK = {}
93
+ yamlFile = YAML.load_file("#{RAILS_ROOT}/config/facebook.yml")
94
+ rescue Exception => e
95
+ raise StandardError, "config/facebook.yml could not be loaded."
96
+ end
97
+
98
+ if yamlFile
99
+ if yamlFile[RAILS_ENV]
100
+ FACEBOOK = yamlFile[RAILS_ENV]
101
+ else
102
+ raise StandardError, "config/facebook.yml exists, but doesn't have a configuration for RAILS_ENV=#{RAILS_ENV}."
103
+ end
104
+ else
105
+ raise StandardError, "config/facebook.yml does not exist."
96
106
  end
97
107
 
98
108
  # parse for full URLs in facebook.yml (multiple people have made this mistake)
@@ -35,7 +35,7 @@ namespace "facebook" do
35
35
  ######################################################################################
36
36
  ######################################################################################
37
37
  desc "Sets up the RFacebook Rails Plugin. Right now, this simply copies facebook.yml into your config directory."
38
- task "setup" => "environment" do
38
+ task "setup" do
39
39
 
40
40
  filename = "#{RAILS_ROOT}/config/facebook.yml"
41
41
  puts "======================================================"