facebooker 1.0.18 → 1.0.29

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/{History.txt → CHANGELOG.rdoc} +0 -0
  2. data/{COPYING → COPYING.rdoc} +0 -0
  3. data/{README.txt → README.rdoc} +11 -4
  4. data/Rakefile +18 -15
  5. data/{TODO.txt → TODO.rdoc} +0 -0
  6. data/generators/facebook/templates/config/facebooker.yml +3 -0
  7. data/init.rb +12 -61
  8. data/lib/facebooker.rb +22 -15
  9. data/lib/facebooker/adapters/adapter_base.rb +3 -0
  10. data/lib/facebooker/logging.rb +1 -1
  11. data/lib/facebooker/model.rb +6 -4
  12. data/lib/facebooker/models/user.rb +39 -4
  13. data/lib/facebooker/parser.rb +14 -0
  14. data/lib/facebooker/rails/controller.rb +34 -10
  15. data/lib/facebooker/rails/extensions/action_controller.rb +48 -0
  16. data/lib/facebooker/rails/extensions/rack_setup.rb +2 -0
  17. data/lib/facebooker/rails/extensions/routing.rb +15 -0
  18. data/lib/facebooker/rails/facebook_url_helper.rb +3 -3
  19. data/lib/facebooker/rails/facebook_url_rewriting.rb +18 -5
  20. data/lib/facebooker/rails/helpers.rb +19 -2
  21. data/lib/facebooker/rails/helpers/fb_connect.rb +20 -10
  22. data/lib/facebooker/rails/publisher.rb +9 -5
  23. data/lib/facebooker/service.rb +1 -2
  24. data/lib/facebooker/session.rb +13 -1
  25. data/lib/facebooker/version.rb +1 -1
  26. data/lib/rack/facebook.rb +77 -0
  27. data/lib/tasks/tunnel.rake +3 -3
  28. data/test/facebooker/logging_test.rb +2 -2
  29. data/test/facebooker/models/user_test.rb +39 -3
  30. data/test/facebooker/rails/publisher_test.rb +19 -3
  31. data/test/facebooker/rails_integration_test.rb +52 -6
  32. data/test/rack/facebook_test.rb +62 -0
  33. data/test/rails_test_helper.rb +2 -0
  34. metadata +21 -27
  35. data/CHANGELOG.txt +0 -0
  36. data/Manifest.txt +0 -127
  37. data/README +0 -46
  38. data/lib/facebooker/models/user.rb.orig +0 -396
  39. data/lib/facebooker/models/user.rb.rej +0 -17
  40. data/lib/facebooker/session.rb.orig +0 -564
  41. data/lib/facebooker/session.rb.rej +0 -29
File without changes
File without changes
@@ -1,4 +1,4 @@
1
- = facebooker
1
+ = Facebooker
2
2
 
3
3
  * http://facebooker.rubyforge.org
4
4
 
@@ -22,6 +22,7 @@ Facebooker is a Ruby wrapper over the Facebook[http://facebook.com] {REST API}[h
22
22
  == SYNOPSIS:
23
23
 
24
24
  View David Clements' {excellent tutorial}[http://apps.facebook.com/facebooker_tutorial] at {http://apps.facebook.com/facebooker_tutorial/}[http://apps.facebook.com/facebooker_tutorial] or check out {Developing Facebook Platform Applications with Rails}[http://www.pragprog.com/titles/mmfacer].
25
+ {Join the Mailing List}:[groups.google.com/group/facebooker]
25
26
 
26
27
  == REQUIREMENTS:
27
28
 
@@ -29,7 +30,7 @@ None
29
30
 
30
31
  == INSTALL:
31
32
 
32
- * Non Rails
33
+ === Non Rails
33
34
 
34
35
  The best way is:
35
36
 
@@ -39,7 +40,7 @@ If, for some reason, you can't/won't use RubyGems, you can do:
39
40
 
40
41
  (sudo) ruby setup.rb
41
42
 
42
- * Rails
43
+ === Rails
43
44
 
44
45
  Facebooker can be installed as a Rails plugin by:
45
46
 
@@ -75,7 +76,13 @@ end
75
76
 
76
77
  (The MIT License)
77
78
 
78
- Copyright (c) 2008 FIX
79
+ Copyright (c) 2008-2009:
80
+
81
+ * Chad Fowler
82
+ * Patrick Ewing
83
+ * Mike Mangino
84
+ * Shane Vitarana
85
+ * Corey Innis
79
86
 
80
87
  Permission is hereby granted, free of charge, to any person obtaining
81
88
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -9,20 +9,19 @@ rescue LoadError
9
9
  $stderr.puts "Install the multi_rails gem to run tests against multiple versions of Rails"
10
10
  end
11
11
 
12
- $: << File.dirname(__FILE__) + '/lib'
12
+ $: << File.dirname(__FILE__) + '/lib'
13
13
  require './lib/facebooker.rb'
14
14
 
15
- Hoe.new('facebooker', Facebooker::VERSION::STRING) do |p|
15
+ HOE = Hoe.new('facebooker', Facebooker::VERSION::STRING) do |p|
16
16
  p.rubyforge_name = 'facebooker'
17
17
  p.author = ['Chad Fowler', 'Patrick Ewing', 'Mike Mangino', 'Shane Vitarana', 'Corey Innis']
18
18
  p.email = 'mmangino@elevatedrails.com'
19
- p.summary = 'Pure, idiomatic Ruby wrapper for the Facebook REST API.'
20
- p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
21
- p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
22
- p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
19
+ p.readme_file = 'README.rdoc'
20
+ p.history_file = 'CHANGELOG.rdoc'
23
21
  p.remote_rdoc_dir = '' # Release to root
24
22
  p.test_globs = 'test/**/*_test.rb'
25
23
  p.extra_deps << ['json', '>= 1.0.0']
24
+ p.extra_rdoc_files = FileList['*.rdoc']
26
25
  end
27
26
 
28
27
  require 'rcov/rcovtask'
@@ -42,16 +41,20 @@ namespace :test do
42
41
  end
43
42
  end
44
43
 
45
- gem_spec_file = 'facebooker.gemspec'
46
-
47
- gem_spec = eval(File.read(gem_spec_file)) rescue nil
48
-
49
- desc "Generate the gemspec file."
50
- task :gemspec do
51
- require 'erb'
44
+ namespace :gem do
45
+ task :spec do
46
+ File.open("#{HOE.name}.gemspec", 'w') do |f|
47
+ f.write(HOE.spec.to_ruby)
48
+ end
49
+ end
52
50
 
53
- File.open(gem_spec_file, 'w') do |f|
54
- f.write ERB.new(File.read("#{gem_spec_file}.erb")).result(binding)
51
+ namespace :spec do
52
+ task :dev do
53
+ File.open("#{HOE.name}.gemspec", 'w') do |f|
54
+ HOE.spec.version = "#{HOE.version}.#{Time.now.strftime("%Y%m%d%H%M%S")}"
55
+ f.write(HOE.spec.to_ruby)
56
+ end
57
+ end
55
58
  end
56
59
  end
57
60
 
File without changes
@@ -20,6 +20,7 @@ development:
20
20
  public_host:
21
21
  public_port: 4007
22
22
  local_port: 3000
23
+ server_alive_interval: 0
23
24
 
24
25
  test:
25
26
  api_key:
@@ -32,6 +33,7 @@ test:
32
33
  public_host:
33
34
  public_port: 4007
34
35
  local_port: 3000
36
+ server_alive_interval: 0
35
37
 
36
38
  production:
37
39
  api_key:
@@ -44,3 +46,4 @@ production:
44
46
  public_host:
45
47
  public_port: 4007
46
48
  local_port: 3000
49
+ server_alive_interval: 0
data/init.rb CHANGED
@@ -9,64 +9,15 @@ FACEBOOKER = Facebooker.load_configuration(facebook_config)
9
9
  Facebooker.logger = RAILS_DEFAULT_LOGGER if Object.const_defined? :RAILS_DEFAULT_LOGGER
10
10
 
11
11
  require 'net/http_multipart_post'
12
- require 'facebooker/rails/controller'
13
- require 'facebooker/rails/facebook_url_rewriting'
14
- require 'facebooker/rails/facebook_session_handling'
15
- require 'facebooker/rails/facebook_request_fix'
16
- require 'facebooker/rails/routing'
17
- require 'facebooker/rails/facebook_pretty_errors' rescue nil
18
- require 'facebooker/rails/facebook_url_helper'
19
- module ::ActionController
20
- class Base
21
- def self.inherited_with_facebooker(subclass)
22
- inherited_without_facebooker(subclass)
23
- if subclass.to_s == "ApplicationController"
24
- subclass.send(:include,Facebooker::Rails::Controller)
25
- subclass.helper Facebooker::Rails::Helpers
26
- end
27
- end
28
- class << self
29
- alias_method_chain :inherited, :facebooker
30
- end
31
- end
32
- end
33
-
34
- class ActionController::Routing::Route
35
- def recognition_conditions_with_facebooker
36
- defaults = recognition_conditions_without_facebooker
37
- defaults << " env[:canvas] == conditions[:canvas] " if conditions[:canvas]
38
- defaults
39
- end
40
- alias_method_chain :recognition_conditions, :facebooker
41
- end
42
-
43
- # When making get requests, Facebook sends fb_sig parameters both in the query string
44
- # and also in the post body. We want to ignore the query string ones because they are one
45
- # request out of date
46
- # We only do thise when there are POST parameters so that IFrame linkage still works
47
- class ActionController::AbstractRequest
48
- def query_parameters_with_facebooker
49
- if request_parameters.blank?
50
- query_parameters_without_facebooker
51
- else
52
- (query_parameters_without_facebooker||{}).reject {|key,value| key.to_s =~ /^fb_sig/}
53
- end
54
- end
55
-
56
- alias_method_chain :query_parameters, :facebooker
57
- end
58
-
59
- # We turn off route optimization to make named routes use our code for figuring out if they should go to the session
60
- # If this fails, it means we're on rails 1.2, we can ignore it
61
- begin
62
- ActionController::Base::optimise_named_routes = false
63
- rescue NoMethodError=>e
64
- nil
65
- end
66
-
67
- # pull :canvas=> into env in routing to allow for conditions
68
- ActionController::Routing::RouteSet.send :include, Facebooker::Rails::Routing::RouteSetExtensions
69
- ActionController::Routing::RouteSet::Mapper.send :include, Facebooker::Rails::Routing::MapperExtensions
70
-
71
- Mime::Type.register_alias "text/html", :fbml
72
- Mime::Type.register_alias "text/javascript", :fbjs
12
+ if defined? Rails
13
+ require 'facebooker/rails/controller'
14
+ require 'facebooker/rails/facebook_url_rewriting'
15
+ require 'facebooker/rails/facebook_session_handling' if Rails.version < '2.3'
16
+ require 'facebooker/rails/facebook_request_fix' if Rails.version < '2.3'
17
+ require 'facebooker/rails/routing'
18
+ require 'facebooker/rails/facebook_pretty_errors' rescue nil
19
+ require 'facebooker/rails/facebook_url_helper'
20
+ require 'facebooker/rails/extensions/rack_setup' if Rails.version > '2.3'
21
+ require 'facebooker/rails/extensions/action_controller'
22
+ require 'facebooker/rails/extensions/routing'
23
+ end
@@ -28,27 +28,34 @@ module Facebooker
28
28
  def load_configuration(facebooker_yaml_file)
29
29
  if File.exist?(facebooker_yaml_file)
30
30
  if defined? RAILS_ENV
31
- facebooker = YAML.load_file(facebooker_yaml_file)[RAILS_ENV]
31
+ config = YAML.load_file(facebooker_yaml_file)[RAILS_ENV]
32
32
  else
33
- facebooker = YAML.load_file(facebooker_yaml_file)
33
+ config = YAML.load_file(facebooker_yaml_file)
34
34
  end
35
- ENV['FACEBOOK_API_KEY'] = facebooker['api_key']
36
- ENV['FACEBOOK_SECRET_KEY'] = facebooker['secret_key']
37
- ENV['FACEBOOKER_RELATIVE_URL_ROOT'] = facebooker['canvas_page_name']
38
- ENV['FACEBOOKER_API'] = facebooker['api']
39
- if facebooker.has_key?('set_asset_host_to_callback_url')
40
- Facebooker.set_asset_host_to_callback_url = facebooker['set_asset_host_to_callback_url']
41
- end
42
- Facebooker.timeout = facebooker['timeout']
43
- if Object.const_defined?("ActionController")
44
- ActionController::Base.asset_host = facebooker['callback_url'] if(ActionController::Base.asset_host.blank?) && Facebooker.set_asset_host_to_callback_url
45
- end
46
- @facebooker_configuration = facebooker
35
+ apply_configuration(config)
36
+ end
37
+ end
38
+
39
+ # Sets the Facebook environment based on a hash of options.
40
+ # By default the hash passed in is loaded from facebooker.yml, but it can also be passed in
41
+ # manually every request to run multiple Facebook apps off one Rails app.
42
+ def apply_configuration(config)
43
+ ENV['FACEBOOK_API_KEY'] = config['api_key']
44
+ ENV['FACEBOOK_SECRET_KEY'] = config['secret_key']
45
+ ENV['FACEBOOKER_RELATIVE_URL_ROOT'] = config['canvas_page_name']
46
+ ENV['FACEBOOKER_API'] = config['api']
47
+ if config.has_key?('set_asset_host_to_callback_url')
48
+ Facebooker.set_asset_host_to_callback_url = config['set_asset_host_to_callback_url']
49
+ end
50
+ if Object.const_defined?("ActionController") and Facebooker.set_asset_host_to_callback_url
51
+ ActionController::Base.asset_host = config['callback_url']
47
52
  end
53
+ Facebooker.timeout = config['timeout']
54
+ @facebooker_configuration = config
48
55
  end
49
56
 
50
57
  def facebooker_config
51
- @facebooker_configuration
58
+ @facebooker_configuration || {} # to prevent pretty_errors error if the config hasn't been set yet
52
59
  end
53
60
 
54
61
  def current_adapter=(adapter_class)
@@ -68,6 +68,9 @@ module Facebooker
68
68
  end
69
69
  return adapter_class.new(adapter_config)
70
70
  end
71
+
72
+ return self.default_adapter(params)
73
+
71
74
  end
72
75
 
73
76
  def self.default_adapter(params = {})
@@ -44,7 +44,7 @@ module Facebooker
44
44
  def self.log_info(message, dump, seconds = 0)
45
45
  return unless Facebooker.logger
46
46
  log_message = "#{message} (#{seconds}) #{dump}"
47
- Facebooker.logger.debug(log_message)
47
+ Facebooker.logger.info(log_message)
48
48
  end
49
49
 
50
50
  end
@@ -122,10 +122,12 @@ module Facebooker
122
122
  unless hash.nil? || hash.empty?
123
123
  hash.each do |key, value|
124
124
  set_attr_method = "#{key}="
125
- if !value.nil? && respond_to?(set_attr_method)
126
- self.__send__(set_attr_method, value)
127
- else
128
- Facebooker::Logging.log_info("**Warning**, Attempt to set non-attribute: #{key}",hash)
125
+ unless value.nil?
126
+ if respond_to?(set_attr_method)
127
+ self.__send__(set_attr_method, value)
128
+ else
129
+ Facebooker::Logging.log_info("**Warning**, Attempt to set non-attribute: #{key}",hash)
130
+ end
129
131
  end
130
132
  end
131
133
  @populated = true
@@ -10,7 +10,7 @@ module Facebooker
10
10
  include Model
11
11
  attr_accessor :message, :time, :status_id
12
12
  end
13
- FIELDS = [:status, :political, :pic_small, :name, :quotes, :is_app_user, :tv, :profile_update_time, :meeting_sex, :hs_info, :timezone, :relationship_status, :hometown_location, :about_me, :wall_count, :significant_other_id, :pic_big, :music, :uid, :work_history, :sex, :religion, :notes_count, :activities, :pic_square, :movies, :has_added_app, :education_history, :birthday, :first_name, :meeting_for, :last_name, :interests, :current_location, :pic, :books, :affiliations, :locale, :profile_url, :proxied_email, :email_hashes, :allowed_restrictions]
13
+ FIELDS = [:status, :political, :pic_small, :name, :quotes, :is_app_user, :tv, :profile_update_time, :meeting_sex, :hs_info, :timezone, :relationship_status, :hometown_location, :about_me, :wall_count, :significant_other_id, :pic_big, :music, :uid, :work_history, :sex, :religion, :notes_count, :activities, :pic_square, :movies, :has_added_app, :education_history, :birthday, :first_name, :meeting_for, :last_name, :interests, :current_location, :pic, :books, :affiliations, :locale, :profile_url, :proxied_email, :email_hashes, :allowed_restrictions, :pic_with_logo, :pic_big_with_logo, :pic_small_with_logo, :pic_square_with_logo]
14
14
  STANDARD_FIELDS = [:uid, :first_name, :last_name, :name, :timezone, :birthday, :sex, :affiliations, :locale, :profile_url, :pic_square]
15
15
  populating_attr_accessor *FIELDS
16
16
  attr_reader :affiliations
@@ -245,17 +245,17 @@ module Facebooker
245
245
  #
246
246
  # This does not set profile actions, that should be done with profile_action=
247
247
  def profile_fbml=(markup)
248
- set_profile_fbml(markup, nil, nil)
248
+ set_profile_fbml(markup, nil, nil, nil)
249
249
  end
250
250
 
251
251
  ##
252
252
  # Set the mobile profile FBML
253
253
  def mobile_fbml=(markup)
254
- set_profile_fbml(nil, markup, nil)
254
+ set_profile_fbml(nil, markup, nil,nil)
255
255
  end
256
256
 
257
257
  def profile_action=(markup)
258
- set_profile_fbml(nil, nil, markup)
258
+ set_profile_fbml(nil, nil, markup,nil)
259
259
  end
260
260
 
261
261
  def profile_main=(markup)
@@ -377,6 +377,41 @@ module Facebooker
377
377
  ret
378
378
  end
379
379
  end
380
+
381
+ # Get a count of unconnected friends
382
+ def getUnconnectedFriendsCount
383
+ session.post("facebook.connect.getUnconnectedFriendsCount")
384
+ end
385
+
386
+
387
+ # Unregister an array of email hashes
388
+ def self.unregister(email_hashes)
389
+ Facebooker::Session.create.post("facebook.connect.unregisterUsers",:email_hashes=>email_hashes.to_json) do |ret|
390
+ ret.each do |hash|
391
+ email_hashes.delete(hash)
392
+ end
393
+ unless email_hashes.empty?
394
+ e=Facebooker::Session::UserUnRegistrationFailed.new
395
+ e.failed_users = email_hashes
396
+ raise e
397
+ end
398
+ ret
399
+ end
400
+ end
401
+
402
+ # unregister an array of email addresses
403
+ def self.unregister_emails(emails)
404
+ emails_hash = {}
405
+ emails.each {|e| emails_hash[hash_email(e)] = e}
406
+ begin
407
+ unregister(emails_hash.keys).collect {|r| emails_hash[r]}
408
+ rescue
409
+ # re-raise with emails instead of hashes.
410
+ e = Facebooker::Session::UserUnRegistrationFailed.new
411
+ e.failed_users = $!.failed_users.collect { |f| emails_hash[f] }
412
+ raise e
413
+ end
414
+ end
380
415
 
381
416
  def self.hash_email(email)
382
417
  email = email.downcase.strip
@@ -96,6 +96,18 @@ module Facebooker
96
96
  array_of_text_values(element("connect_registerUsers_response", data), "connect_registerUsers_response_elt")
97
97
  end
98
98
  end
99
+
100
+ class UnregisterUsers < Parser
101
+ def self.process(data)
102
+ array_of_text_values(element("connect_unregisterUsers_response", data), "connect_unregisterUsers_response_elt")
103
+ end
104
+ end
105
+
106
+ class GetUnconnectedFriendsCount < Parser
107
+ def self.process(data)
108
+ hash_or_value_for(element("connect_getUnconnectedFriendsCount_response",data)).to_i
109
+ end
110
+ end
99
111
 
100
112
  class GetSession < Parser#:nodoc:
101
113
  def self.process(data)
@@ -530,6 +542,8 @@ module Facebooker
530
542
  'facebook.auth.createToken' => CreateToken,
531
543
  'facebook.auth.getSession' => GetSession,
532
544
  'facebook.connect.registerUsers' => RegisterUsers,
545
+ 'facebook.connect.unregisterUsers' => UnregisterUsers,
546
+ 'facebook.connect.getUnconnectedFriendsCount' => GetUnconnectedFriendsCount,
533
547
  'facebook.users.getInfo' => UserInfo,
534
548
  'facebook.users.getStandardInfo' => UserStandardInfo,
535
549
  'facebook.users.setStatus' => SetStatus,
@@ -6,7 +6,7 @@ module Facebooker
6
6
  include Facebooker::Rails::ProfilePublisherExtensions
7
7
  def self.included(controller)
8
8
  controller.extend(ClassMethods)
9
- #controller.before_filter :set_adapter <-- security hole noted by vchu
9
+ controller.before_filter :set_adapter
10
10
  controller.before_filter :set_facebook_request_format
11
11
  controller.helper_attr :facebook_session_parameters
12
12
  controller.helper_method :request_comes_from_facebook?
@@ -45,6 +45,27 @@ module Facebooker
45
45
  @facebook_params ||= verified_facebook_params
46
46
  end
47
47
 
48
+ # Redirects the top window to the given url if the content is in an iframe, otherwise performs
49
+ # a normal redirect_to call.
50
+ def top_redirect_to(*args)
51
+ if request_is_facebook_iframe?
52
+ @redirect_url = url_for(*args)
53
+ render :layout => false, :inline => <<-HTML
54
+ <html><head>
55
+ <script type="text/javascript">
56
+ window.top.location.href = <%= @redirect_url.to_json -%>;
57
+ </script>
58
+ <noscript>
59
+ <meta http-equiv="refresh" content="0;url=<%=h @redirect_url %>" />
60
+ <meta http-equiv="window-target" content="_top" />
61
+ </noscript>
62
+ </head></html>
63
+ HTML
64
+ else
65
+ redirect_to(*args)
66
+ end
67
+ end
68
+
48
69
  def redirect_to(*args)
49
70
  if request_is_for_a_facebook_canvas? and !request_is_facebook_tab?
50
71
  render :text => fbml_redirect_tag(*args)
@@ -104,8 +125,7 @@ module Facebooker
104
125
 
105
126
  #returning gracefully if the cookies aren't set or have expired
106
127
  return unless parsed['session_key'] && parsed['user'] && parsed['expires'] && parsed['ss']
107
- return unless Time.at(parsed['expires'].to_f) > Time.now || (parsed['expires'] == "0")
108
-
128
+ return unless Time.at(parsed['expires'].to_s.to_f) > Time.now || (parsed['expires'] == "0")
109
129
  #if we have the unexpired cookies, we'll throw an exception if the sig doesn't verify
110
130
  verify_signature(parsed,cookies[Facebooker.api_key])
111
131
 
@@ -141,7 +161,7 @@ module Facebooker
141
161
  def create_new_facebook_session_and_redirect!
142
162
  session[:facebook_session] = new_facebook_session
143
163
  url_params = after_facebook_login_url.nil? ? {} : {:next=>after_facebook_login_url}
144
- redirect_to session[:facebook_session].login_url(url_params) unless @installation_required
164
+ top_redirect_to session[:facebook_session].login_url(url_params) unless @installation_required
145
165
  false
146
166
  end
147
167
 
@@ -219,8 +239,12 @@ module Facebooker
219
239
  !params["fb_sig_in_profile_tab"].blank?
220
240
  end
221
241
 
242
+ def request_is_facebook_iframe?
243
+ !params["fb_sig_in_iframe"].blank?
244
+ end
245
+
222
246
  def request_is_facebook_ajax?
223
- params["fb_sig_is_mockajax"]=="1" || params["fb_sig_is_ajax"]=="1"
247
+ params["fb_sig_is_mockajax"]=="1" || params["fb_sig_is_ajax"]=="1" || params["fb_sig_is_ajax"]==true || params["fb_sig_is_mockajax"]==true
224
248
  end
225
249
  def xml_http_request?
226
250
  request_is_facebook_ajax? || super
@@ -246,7 +270,7 @@ module Facebooker
246
270
  end
247
271
 
248
272
  def application_needs_permission(perm)
249
- redirect_to(facebook_session.permission_url(perm))
273
+ top_redirect_to(facebook_session.permission_url(perm))
250
274
  end
251
275
 
252
276
  def has_extended_permission?(perm)
@@ -266,14 +290,14 @@ module Facebooker
266
290
 
267
291
  def application_is_not_installed_by_facebook_user
268
292
  url_params = after_facebook_login_url.nil? ? {} : { :next => after_facebook_login_url }
269
- redirect_to session[:facebook_session].install_url(url_params)
293
+ top_redirect_to session[:facebook_session].install_url(url_params)
270
294
  end
271
295
 
272
296
  def set_facebook_request_format
273
297
  if request_is_facebook_ajax?
274
- params[:format] = 'fbjs'
275
- elsif request_comes_from_facebook?
276
- params[:format] = 'fbml'
298
+ request.format = :fbjs
299
+ elsif request_comes_from_facebook? && !request_is_facebook_iframe?
300
+ request.format = :fbml
277
301
  end
278
302
  end
279
303