mmangino-facebooker 1.0.13 → 1.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/History.txt CHANGED
@@ -1,4 +1,4 @@
1
- === x.x.x / 2009-xx-xx
1
+ === 1.0.13 / 2009-02-26
2
2
 
3
3
  * Modified fql_query to return results as Hashes as a last resort [Alan Larkin]
4
4
  * fixed typo in set app properties parser [Andrew Grim, shane]
@@ -18,6 +18,20 @@ module Facebooker
18
18
  hash = JSON.parse(CGI.unescapeHTML(json))
19
19
  @properties = ApplicationProperties.from_hash(hash)
20
20
  end
21
+
22
+ # ** BETA ***
23
+ # +restrictions+: Hash of restrictions you want to set.
24
+ def set_restriction_info(restrictions)
25
+ restrictions = restrictions.respond_to?(:to_json) ? restrictions.to_json : restrictions
26
+ (@session.post 'facebook.admin.setRestrictionInfo', :restriction_str => restrictions) == '1'
27
+ end
28
+
29
+ # ** BETA ***
30
+ def get_restriction_info(*restrictions)
31
+ json = @session.post('facebook.admin.getRestrictionInfo')
32
+ hash = JSON.parse(CGI.unescapeHTML(json))
33
+ @restrictions = ApplicationRestrictions.from_hash(hash)
34
+ end
21
35
 
22
36
  # Integration points include..
23
37
  # :notifications_per_day, :requests_per_day, :emails_per_day, :email_disable_message_location
@@ -119,10 +119,10 @@ module Facebooker
119
119
  ##
120
120
  # Set model's attributes via Hash. Keys should map directly to the model's attribute names.
121
121
  def populate_from_hash!(hash)
122
- unless hash.empty?
122
+ unless hash.nil? || hash.empty?
123
123
  hash.each do |key, value|
124
124
  set_attr_method = "#{key}="
125
- if respond_to?(set_attr_method)
125
+ if !value.nil? and respond_to?(set_attr_method)
126
126
  self.__send__(set_attr_method, value)
127
127
  else
128
128
  Facebooker::Logging.log_info("**Warning**, Attempt to set non-attribute: #{key}",hash)
@@ -10,8 +10,8 @@ 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]
14
- STANDARD_FIELDS = [:uid, :first_name, :last_name, :name, :timezone, :birthday, :sex, :affiliations, :locale, :profile_url]
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]
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
17
17
  populating_hash_settable_accessor :current_location, Location
@@ -144,6 +144,12 @@ module Facebooker
144
144
  array_of_hashes(element('pages_getInfo_response', data), 'page')
145
145
  end
146
146
  end
147
+
148
+ class PagesIsFan < Parser#:nodoc:
149
+ def self.process(data)
150
+ element('pages_isFan_response', data).text_value == '1'
151
+ end
152
+ end
147
153
 
148
154
  class PublishStoryToUser < Parser#:nodoc:
149
155
  def self.process(data)
@@ -199,6 +205,18 @@ module Facebooker
199
205
  end
200
206
  end
201
207
 
208
+ class SetRestrictionInfo < Parser#:nodoc:
209
+ def self.process(data)
210
+ element('admin_setRestrictionInfo_response', data).text_value
211
+ end
212
+ end
213
+
214
+ class GetRestrictionInfo < Parser#:nodoc:
215
+ def self.process(data)
216
+ element('admin_getRestrictionInfo_response', data).text_value
217
+ end
218
+ end
219
+
202
220
  class GetAllocation < Parser#:nodoc:
203
221
  def self.process(data)
204
222
  element('admin_getAllocation_response', data).text_value
@@ -484,7 +502,7 @@ module Facebooker
484
502
  if response_element
485
503
  hash = hashinate(response_element)
486
504
  exception = EXCEPTIONS[Integer(hash['error_code'])] || StandardError
487
- raise exception.new(hash['error_msg'])
505
+ raise exception, hash['error_msg']
488
506
  end
489
507
  end
490
508
  end
@@ -501,6 +519,7 @@ module Facebooker
501
519
  'facebook.users.hasAppPermission' => UserHasPermission,
502
520
  'facebook.pages.isAdmin' => PagesIsAdmin,
503
521
  'facebook.pages.getInfo' => PagesGetInfo,
522
+ 'facebook.pages.isFan' => PagesIsFan,
504
523
  'facebook.friends.get' => GetFriends,
505
524
  'facebook.friends.getLists' => FriendListsGet,
506
525
  'facebook.friends.areFriends' => AreFriends,
@@ -526,6 +545,8 @@ module Facebooker
526
545
  'facebook.data.getCookies' => GetCookies,
527
546
  'facebook.admin.setAppProperties' => SetAppProperties,
528
547
  'facebook.admin.getAppProperties' => GetAppProperties,
548
+ 'facebook.admin.setRestrictionInfo' => SetRestrictionInfo,
549
+ 'facebook.admin.getRestrictionInfo' => GetRestrictionInfo,
529
550
  'facebook.admin.getAllocation' => GetAllocation,
530
551
  'facebook.batch.run' => BatchRun,
531
552
  'facebook.fql.query' => FqlQuery,
@@ -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
9
+ #controller.before_filter :set_adapter <-- security hole noted by vchu
10
10
  controller.before_filter :set_fbml_format
11
11
  controller.helper_attr :facebook_session_parameters
12
12
  controller.helper_method :request_comes_from_facebook?
@@ -21,16 +21,26 @@ module Facebooker
21
21
  {:fb_sig_session_key=>params[:fb_sig_session_key]}
22
22
  end
23
23
 
24
+ def create_facebook_session
25
+ secure_with_facebook_params! || secure_with_cookies! || secure_with_token!
26
+ end
24
27
 
25
28
  def set_facebook_session
26
- returning session_set = session_already_secured? || secure_with_facebook_params! || secure_with_cookies! || secure_with_token! do
27
- if session_set
28
- capture_facebook_friends_if_available!
29
- Session.current = facebook_session
30
- end
29
+ # first, see if we already have a session
30
+ session_set = session_already_secured?
31
+ # if not, see if we can load it from the environment
32
+ unless session_set
33
+ session_set = create_facebook_session
34
+ session[:facebook_session] = @facebook_session if session_set
31
35
  end
36
+ if session_set
37
+ capture_facebook_friends_if_available!
38
+ Session.current = facebook_session
39
+ end
40
+ return session_set
32
41
  end
33
42
 
43
+
34
44
  def facebook_params
35
45
  @facebook_params ||= verified_facebook_params
36
46
  end
@@ -101,7 +111,7 @@ module Facebooker
101
111
 
102
112
  @facebook_session = new_facebook_session
103
113
  @facebook_session.secure_with!(parsed['session_key'],parsed['user'],parsed['expires'],parsed['ss'])
104
- session[:facebook_session] = @facebook_session
114
+ @facebook_session
105
115
  end
106
116
 
107
117
  def secure_with_token!
@@ -109,7 +119,7 @@ module Facebooker
109
119
  @facebook_session = new_facebook_session
110
120
  @facebook_session.auth_token = params['auth_token']
111
121
  @facebook_session.secure!
112
- session[:facebook_session] = @facebook_session
122
+ @facebook_session
113
123
  end
114
124
  end
115
125
 
@@ -119,7 +129,7 @@ module Facebooker
119
129
  if ['user', 'session_key'].all? {|element| facebook_params[element]}
120
130
  @facebook_session = new_facebook_session
121
131
  @facebook_session.secure_with!(facebook_params['session_key'], facebook_params['user'], facebook_params['expires'])
122
- session[:facebook_session] = @facebook_session
132
+ @facebook_session
123
133
  end
124
134
  end
125
135
 
@@ -11,27 +11,56 @@ module Facebooker
11
11
  end
12
12
  end
13
13
 
14
- def init_fb_connect(*required_features)
14
+ def init_fb_connect(*required_features,&proc)
15
+ additions = ""
16
+ if block_given?
17
+ additions = capture(&proc)
18
+ end
15
19
  init_string = "FB.Facebook.init('#{Facebooker.api_key}','/xd_receiver.html');"
16
20
  unless required_features.blank?
17
21
  init_string = <<-FBML
18
22
  Element.observe(window,'load', function() {
19
23
  FB_RequireFeatures(#{required_features.to_json}, function() {
20
24
  #{init_string}
25
+ #{additions}
21
26
  });
22
27
  });
23
28
  FBML
24
29
  end
25
- javascript_tag init_string
30
+ if block_given?
31
+ concat javascript_tag(init_string)
32
+ else
33
+ javascript_tag init_string
34
+ end
26
35
  end
27
36
 
28
37
  def fb_login_button(callback=nil)
29
38
  content_tag("fb:login-button",nil,(callback.nil? ? {} : {:onlogin=>callback}))
30
39
  end
40
+ def fb_login_and_redirect(url)
41
+ js = update_page do |page|
42
+ page.call "FB.Connect.logoutAndRedirect",url
43
+ end
44
+ content_tag("fb:login-button",nil,:onlogin=>js)
45
+ end
31
46
 
32
47
  def fb_unconnected_friends_count
33
48
  content_tag "fb:unconnected-friends-count",nil
34
49
  end
50
+
51
+ def fb_logout_link(text,url)
52
+ js = update_page do |page|
53
+ page.call "FB.Connect.logoutAndRedirect",url
54
+ end
55
+ link_to_function text, js
56
+ end
57
+
58
+ def fb_user_action(action)
59
+ update_page do |page|
60
+ page.call "FB.Connect.showFeedDialog",action.template_id,action.data,action.target_ids,action.body_general,nil,"FB.RequireConnect.promptConnect"
61
+ end
62
+ end
63
+
35
64
  end
36
65
  end
37
66
  end
@@ -234,6 +234,11 @@ module Facebooker
234
234
  end
235
235
  end
236
236
 
237
+ # Takes page_id and uid, returns true if uid is a fan of the page_id
238
+ def is_fan(page_id, uid)
239
+ post('facebook.pages.isFan', :page_id=>page_id, :uid=>uid)
240
+ end
241
+
237
242
  #
238
243
  # Returns a proxy object for handling calls to Facebook cached items
239
244
  # such as images and FBML ref handles
@@ -1,8 +1,8 @@
1
1
  module Facebooker #:nodoc:
2
2
  module VERSION #:nodoc:
3
- MAJOR = 0
4
- MINOR = 9
5
- TINY = 9
3
+ MAJOR = 1
4
+ MINOR = 0
5
+ TINY = 13
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/lib/facebooker.rb CHANGED
@@ -161,6 +161,7 @@ require 'facebooker/models/page'
161
161
  require 'facebooker/models/photo'
162
162
  require 'facebooker/models/cookie'
163
163
  require 'facebooker/models/applicationproperties'
164
+ require 'facebooker/models/applicationrestrictions'
164
165
  require 'facebooker/models/tag'
165
166
  require 'facebooker/models/user'
166
167
  require 'facebooker/models/info_item'
@@ -32,6 +32,20 @@ class FacebookAdminTest < Test::Unit::TestCase
32
32
  assert_equal 0, p.dev_mode
33
33
  assert_equal 'my_canvas', p.canvas_name
34
34
  end
35
+
36
+ def test_can_set_restriction_info
37
+ restrictions = {:age => '21', :type => 'alcohol'}
38
+ flexmock(@session).should_receive(:post).with('facebook.admin.setRestrictionInfo', :restriction_str => restrictions.to_json).and_return('1').once
39
+ assert(@session.admin.set_restriction_info(restrictions))
40
+ end
41
+
42
+ def test_can_get_restriction_info
43
+ mock_http = establish_session
44
+ mock_http.should_receive(:post_form).and_return(example_get_restriction_info_xml).once.ordered(:posts)
45
+ r = @session.admin.get_restriction_info
46
+ assert_equal 'alcohol', r.type
47
+ assert_equal '21', r.age
48
+ end
35
49
 
36
50
  def test_can_get_allocation
37
51
  mock_http = establish_session
@@ -61,6 +75,18 @@ class FacebookAdminTest < Test::Unit::TestCase
61
75
  XML
62
76
  end
63
77
 
78
+ def example_get_restriction_info_xml
79
+ <<-XML
80
+ <?xml version="1.0" encoding="UTF-8"?>
81
+ <admin_getRestrictionInfo_response
82
+ xmlns="http://api.facebook.com/1.0/"
83
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
84
+ xsi:schemaLocation="http://api.facebook.com/1.0/http://api.facebook.com/1.0/facebook.xsd">
85
+ {&quot;age&quot;:&quot;21&quot;,&quot;location&quot;:&quot;&quot;,&quot;age_distribution&quot;:&quot;&quot;,&quot;type&quot;:&quot;alcohol&quot;}
86
+ </admin_getRestrictionInfo_response>
87
+ XML
88
+ end
89
+
64
90
  def example_get_allocation_xml
65
91
  <<-XML
66
92
  <?xml version="1.0" encoding="UTF-8"?>
@@ -321,6 +321,16 @@ class TestFacebooker < Test::Unit::TestCase
321
321
  assert_equal false, @session.post('facebook.pages.isAdmin', :page_id => 123)
322
322
  end
323
323
 
324
+ def test_pages_is_fan_true
325
+ expect_http_posts_with_responses(example_pages_is_fan_true_xml)
326
+ assert_equal true, @session.post('facebook.pages.isFan', :page_id => 123)
327
+ end
328
+
329
+ def test_pages_is_fan_false
330
+ expect_http_posts_with_responses(example_pages_is_fan_false_xml)
331
+ assert_equal false, @session.post('facebook.pages.isFan', :page_id => 123)
332
+ end
333
+
324
334
  def test_users_set_status_true
325
335
  expect_http_posts_with_responses(example_users_set_status_true_xml)
326
336
  assert_equal true, @session.post('facebook.users.setStatus', :uid => 123, :status => 'message')
@@ -401,6 +411,20 @@ class TestFacebooker < Test::Unit::TestCase
401
411
  XML
402
412
  end
403
413
 
414
+ def example_pages_is_fan_true_xml
415
+ <<-XML
416
+ <?xml version="1.0" encoding="UTF-8"?>
417
+ <pages_isFan_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">1</pages_isFan_response>
418
+ XML
419
+ end
420
+
421
+ def example_pages_is_fan_false_xml
422
+ <<-XML
423
+ <?xml version="1.0" encoding="UTF-8"?>
424
+ <pages_isFan_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">0</pages_isFan_response>
425
+ XML
426
+ end
427
+
404
428
  def example_users_set_status_true_xml
405
429
  <<-XML
406
430
  <?xml version="1.0" encoding="UTF-8"?>
data/test/model_test.rb CHANGED
@@ -87,5 +87,39 @@ class TestFacebooker < Test::Unit::TestCase
87
87
  t.first_name
88
88
  }
89
89
  end
90
+
91
+ def test_populate_from_hash_e_should_call_a_setter_for_a_key
92
+ t = PopulatingThing.new
93
+ flexmock(t).should_receive('mykey=').with('a value')
94
+ t.populate_from_hash!({ :mykey => 'a value' })
95
+ end
96
+
97
+ def test_populate_from_hash_e_should_call_a_setter_for_a_key_if_the_value_is_false
98
+ t = PopulatingThing.new
99
+ flexmock(t).should_receive('mykey=').with(false)
100
+ t.populate_from_hash!({ :mykey => false })
101
+ end
102
+
103
+ def test_populate_from_hash_e_should_call_not_a_setter_for_a_key_if_the_value_is_nil
104
+ t = PopulatingThing.new
105
+ flexmock(t).should_receive('mykey=').never
106
+ t.populate_from_hash!({ :mykey => nil })
107
+ end
108
+
109
+ def test_populate_from_hash_should_check_for_an_empty_hash
110
+ t = PopulatingThing.new
111
+ hash = {}
112
+ flexmock(hash).should_receive('empty?')
113
+ t.populate_from_hash!(hash)
114
+ end
115
+
116
+ def test_populate_from_hash_should_check_for_a_nil_param
117
+ t = PopulatingThing.new
118
+ hash = nil
119
+ assert_nothing_raised do
120
+ t.populate_from_hash!(hash)
121
+ end
122
+ end
123
+
90
124
  end
91
125
 
@@ -18,10 +18,25 @@ begin
18
18
  map.connect ':controller/:action/:id', :controller => "plain_old_rails"
19
19
  end
20
20
 
21
+ module FBConnectTestHelpers
22
+ def setup_fb_connect_cookies(params=cookie_hash_for_auth)
23
+ params.each {|k,v| @request.cookies[ENV['FACEBOOK_API_KEY']+k] = CGI::Cookie.new(ENV['FACEBOOK_API_KEY']+k,v)}
24
+ end
25
+
26
+ def expired_cookie_hash_for_auth
27
+ {"_ss" => "not_used", "_session_key"=> "whatever", "_user"=>"77777", "_expires"=>"#{1.day.ago.to_i}"}
28
+ end
29
+
30
+ def cookie_hash_for_auth
31
+ {"_ss" => "not_used", "_session_key"=> "whatever", "_user"=>"77777", "_expires"=>"#{1.day.from_now.to_i}"}
32
+ end
33
+ end
21
34
  class NoisyController < ActionController::Base
22
35
  include Facebooker::Rails::Controller
23
36
  def rescue_action(e) raise e end
24
37
  end
38
+
39
+
25
40
  class ControllerWhichRequiresExtendedPermissions< NoisyController
26
41
  ensure_authenticated_to_facebook
27
42
  before_filter :ensure_has_status_update
@@ -32,6 +47,13 @@ begin
32
47
  end
33
48
  end
34
49
 
50
+ class FBConnectController < NoisyController
51
+ before_filter :create_facebook_session
52
+ def index
53
+ render :text => 'score!'
54
+ end
55
+ end
56
+
35
57
  class ControllerWhichRequiresFacebookAuthentication < NoisyController
36
58
  ensure_authenticated_to_facebook
37
59
  def index
@@ -139,6 +161,29 @@ begin
139
161
  end
140
162
  end
141
163
 
164
+ class RailsIntegrationTestForFBConnect < Test::Unit::TestCase
165
+ include FBConnectTestHelpers
166
+
167
+ def setup
168
+ ENV['FACEBOOK_CANVAS_PATH'] ='facebook_app_name'
169
+ ENV['FACEBOOK_API_KEY'] = '1234567'
170
+ ENV['FACEBOOK_SECRET_KEY'] = '7654321'
171
+ @controller = FBConnectController.new
172
+ @request = ActionController::TestRequest.new
173
+ @response = ActionController::TestResponse.new
174
+ @controller.stubs(:verify_signature).returns(true)
175
+
176
+ end
177
+
178
+ def test_doesnt_set_cookie_but_facebook_session_is_available
179
+ setup_fb_connect_cookies
180
+ get :index
181
+ assert_not_nil @controller.facebook_session
182
+ assert_nil @response.cookies[:facebook_session]
183
+
184
+ end
185
+ end
186
+
142
187
  class RailsIntegrationTestForNonFacebookControllers < Test::Unit::TestCase
143
188
  def setup
144
189
  ENV['FACEBOOK_CANVAS_PATH'] ='facebook_app_name'
@@ -256,6 +301,7 @@ class RailsIntegrationTestForApplicationInstallation < Test::Unit::TestCase
256
301
  end
257
302
 
258
303
  class RailsIntegrationTest < Test::Unit::TestCase
304
+ include FBConnectTestHelpers
259
305
  def setup
260
306
  ENV['FACEBOOK_CANVAS_PATH'] ='root'
261
307
  ENV['FACEBOOK_API_KEY'] = '1234567'
@@ -373,19 +419,19 @@ class RailsIntegrationTest < Test::Unit::TestCase
373
419
  session_params = { 'session_key' => '123', 'uid' => '321' }
374
420
  session_mock.should_receive(:post).with('facebook.auth.getSession', :auth_token => auth_token).once.and_return(session_params).ordered
375
421
  flexmock(@controller).should_receive(:new_facebook_session).once.and_return(session).ordered
376
- expired_cookie_hash_for_auth.each {|k,v| @request.cookies[ENV['FACEBOOK_API_KEY']+k] = CGI::Cookie.new(ENV['FACEBOOK_API_KEY']+k,v)}
422
+ setup_fb_connect_cookies(expired_cookie_hash_for_auth)
377
423
  get :index, modified_params
378
424
  assert_equal(321, @controller.facebook_session.user.id)
379
425
  end
380
426
 
381
427
  def test_session_can_be_secured_with_cookies
382
- cookie_hash_for_auth.each {|k,v| @request.cookies[ENV['FACEBOOK_API_KEY']+k] = CGI::Cookie.new(ENV['FACEBOOK_API_KEY']+k,v)}
428
+ setup_fb_connect_cookies
383
429
  get :index, example_rails_params_for_fb_connect
384
430
  assert_equal(77777, @controller.facebook_session.user.id)
385
431
  end
386
432
 
387
433
  def test_session_does_NOT_secure_with_expired_cookies
388
- expired_cookie_hash_for_auth.each {|k,v| @request.cookies[ENV['FACEBOOK_API_KEY']+k] = CGI::Cookie.new(ENV['FACEBOOK_API_KEY']+k,v)}
434
+ setup_fb_connect_cookies(expired_cookie_hash_for_auth)
389
435
  get :index, example_rails_params_for_fb_connect
390
436
  assert_nil(@controller.facebook_session)
391
437
  end
@@ -462,7 +508,6 @@ class RailsIntegrationTest < Test::Unit::TestCase
462
508
 
463
509
  end
464
510
 
465
- private
466
511
  def example_rails_params_for_fb_connect
467
512
  {"action"=>"index", "controller"=>"controller_which_requires_facebook_authentication"}
468
513
  end
@@ -939,6 +984,23 @@ class RailsHelperTest < Test::Unit::TestCase
939
984
  assert @h.init_fb_connect("XFBML").match(/XFBML/)
940
985
  end
941
986
 
987
+ def test_init_fb_connect_with_features_and_body
988
+ @h.expects(:capture).returns("Body Content")
989
+
990
+ @h.init_fb_connect("XFBML") do
991
+ end
992
+ assert @h.output_buffer =~ /Body Content/
993
+ end
994
+
995
+ def test_fb_login_and_redirect
996
+ assert_equal @h.fb_login_and_redirect("/path"),"<fb:login-button onlogin=\"FB.Connect.logoutAndRedirect(&quot;/path&quot;);\"></fb:login-button>"
997
+ end
998
+
999
+ def test_fb_logout_link
1000
+ assert_equal @h.fb_logout_link("Logout","My URL"),"<a href=\"#\" onclick=\"FB.Connect.logoutAndRedirect(&quot;My URL&quot;);; return false;\">Logout</a>"
1001
+ end
1002
+
1003
+
942
1004
  def test_fb_connect_javascript_tag
943
1005
  assert_equal "<script src=\"http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php\" type=\"text/javascript\"></script>",
944
1006
  @h.fb_connect_javascript_tag
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mmangino-facebooker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.13
4
+ version: 1.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chad Fowler
@@ -17,6 +17,7 @@ default_executable:
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: hoe
20
+ type: :development
20
21
  version_requirement:
21
22
  version_requirements: !ruby/object:Gem::Requirement
22
23
  requirements: