devise_facebook_connectable 0.1.4 → 0.1.5

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.
@@ -2,6 +2,9 @@
2
2
 
3
3
  class DeviseFacebookConnectableGenerator < Rails::Generator::Base
4
4
 
5
+ default_options :api_key => "YOUR_APP_API_KEY",
6
+ :secret_key => "YOUR_APP_SECRET_KEY"
7
+
5
8
  def manifest
6
9
  record do |m|
7
10
  m.dependency 'xd_receiver', [], options.merge(:collision => :skip)
@@ -10,4 +13,23 @@ class DeviseFacebookConnectableGenerator < Rails::Generator::Base
10
13
  end
11
14
  end
12
15
 
16
+ protected
17
+
18
+ def add_options!(opt)
19
+ opt.separator ''
20
+ opt.separator 'Options:'
21
+
22
+ opt.on('--api API_KEY', "Facebook Application API key.") do |v|
23
+ options[:api_key] = v if v.present?
24
+ end
25
+
26
+ opt.on('--secret SECRET_KEY', "Facebook Application Secret key.") do |v|
27
+ options[:secret_key] = v if v.present?
28
+ end
29
+ end
30
+
31
+ def banner
32
+ "Usage: #{$0} devise_facebook_connectable [--api API_KEY] [--secret SECRET_KEY]"
33
+ end
34
+
13
35
  end
@@ -1,5 +1,8 @@
1
1
  /**
2
- * Helpers for devise_facebook_connectable, to make connect/login/logout with Devise seamless.
2
+ * JavaScript Helpers for devise_facebook_connectable,
3
+ * to make connect/login/logout with Devise seamless.
4
+ *
5
+ * Note: JavaScript framework agnostic.
3
6
  */
4
7
 
5
8
  if (typeof devise === 'undefined' || devise === null) {
@@ -10,22 +13,51 @@ if (typeof devise.facebook_connectable === 'undefined' || devise.facebook_connec
10
13
  devise.facebook_connectable = {};
11
14
  }
12
15
 
13
- devise.facebook_connectable.login = function fb_connect_login() {
16
+ /*
17
+ * Connect/Login.
18
+ */
19
+ devise.facebook_connectable.login = function fbc_login() {
14
20
  document.getElementById('fb_connect_login_form').submit();
15
21
  return false;
16
22
  };
17
23
 
18
- devise.facebook_connectable.custom_login = function fb_connect_custom_login() {
19
- FB.Connect.requireSession(fb_connect_login);
24
+ /*
25
+ * Connect/Login - with callback.
26
+ */
27
+ devise.facebook_connectable.login_with_callback = function fbc_login_with_callback() {
28
+ FB.Connect.requireSession(devise.facebook_connectable.login);
20
29
  return false;
21
30
  };
22
31
 
23
- devise.facebook_connectable.logout = function fb_connect_logout() {
32
+ /*
33
+ * Logout.
34
+ */
35
+ devise.facebook_connectable.logout = function fbc_logout() {
24
36
  document.getElementById('fb_connect_logout_form').submit();
25
37
  return false;
26
38
  };
27
39
 
28
- devise.facebook_connectable.custom_logout = function fb_connect_custom_logout() {
29
- FB.Connect.logout(fb_connect_logout);
40
+ /*
41
+ * Logout - with callback.
42
+ */
43
+ devise.facebook_connectable.logout_with_callback = function fbc_logout_with_callback() {
44
+ FB.Connect.logout(devise.facebook_connectable.logout);
30
45
  return false;
31
- };
46
+ };
47
+
48
+ /*
49
+ * TODO: Logout.
50
+ */
51
+ devise.facebook_connectable.disconnect = function fbc_disconnect() {
52
+ // TODO: Implement
53
+ return false;
54
+ };
55
+
56
+ /*
57
+ * TODO: Disconnect - with callback.
58
+ */
59
+ devise.facebook_connectable.disconnect_with_callback = function fbc_disconnect_with_callback() {
60
+ // FIXME: FB.api don't seems to be loaded correctly - Facebooker issue?
61
+ // FB.api({method: 'Auth.revokeAuthorization'}, devise.facebook_connectable.disconnect);
62
+ return false;
63
+ };
@@ -1,28 +1,33 @@
1
1
  defaults: &defaults
2
- api_key: YOUR_APP_API_KEY
3
- secret_key: YOUR_APP_SECRET_KEY
4
- canvas_page_name: YOUR_APP_CANVAS_NAME
5
- callback_url: http://localhost:3000 # for testing - depends on your Facebook App settings though.
6
- pretty_errors: true
7
- set_asset_host_to_callback_url: false
8
- tunnel:
9
- public_host_username:
10
- public_host:
11
- public_port: 4007
12
- local_port: 3000
13
-
14
- development:
15
- <<: *defaults
2
+ # Required.
3
+ api_key: <%= options[:api_key] %>
4
+ secret_key: <%= options[:secret_key] %>
16
5
 
17
- test: &test
18
- <<: *defaults
6
+ # Optional for Facebook Connect.
7
+ # canvas_page_name: YOUR_APP_CANVAS_NAME
8
+ # Optional for Facebook Connect. Depends on your Facebook App settings.
9
+ # callback_url: http://localhost:3000
19
10
 
20
- cucumber:
21
- <<: *test
11
+ # Optional options.
12
+ # pretty_errors: true
13
+ # set_asset_host_to_callback_url: false
14
+ # tunnel:
15
+ # public_host_username:
16
+ # public_host:
17
+ # public_port: 4007
18
+ # local_port: 3000
22
19
 
23
- production: &production
24
- <<: *defaults
25
-
26
- staging:
27
- <<: *production
28
-
20
+ development:
21
+ <<: *defaults
22
+
23
+ test: &test
24
+ <<: *defaults
25
+
26
+ production: &production
27
+ <<: *defaults
28
+
29
+ # staging:
30
+ # <<: *production
31
+ #
32
+ # cucumber:
33
+ # <<: *test
@@ -36,8 +36,8 @@ module Devise
36
36
 
37
37
  # Specifies if account should be created if no account exists for
38
38
  # a specified Facebook UID or not.
39
- mattr_accessor :facebook_skip_create
40
- @@facebook_skip_create = false
39
+ mattr_accessor :facebook_auto_create_account
40
+ @@facebook_auto_create_account = true
41
41
  end
42
42
 
43
43
  # Load core I18n locales: en
@@ -18,6 +18,8 @@ module Devise
18
18
  #
19
19
  def expired_session_hack
20
20
  clear_facebook_session_information
21
+ rescue
22
+ # rescue in ruby 1.9
21
23
  end
22
24
 
23
25
  # Handle expired Facebook sessions automatically.
@@ -20,8 +20,8 @@ module Devise
20
20
  #
21
21
  # facebook_session_key_field: Defines the name of the Facebook session key database attribute/column.
22
22
  #
23
- # facebook_skip_create: Speifies if account should automatically be created upon connect
24
- # if not already exists.
23
+ # facebook_auto_create_account: Speifies if account should automatically be created upon connect
24
+ # if not already exists.
25
25
  #
26
26
  # Examples:
27
27
  #
@@ -140,19 +140,19 @@ module Devise
140
140
  # Devise.setup do |config|
141
141
  # config.facebook_uid_field = :facebook_uid
142
142
  # config.facebook_session_key_field = :facebook_session_key
143
- # config.facebook_skip_create = false
143
+ # config.facebook_auto_create_account = true
144
144
  # end
145
145
  #
146
146
  ::Devise::Models.config(self,
147
147
  :facebook_uid_field,
148
148
  :facebook_session_key_field,
149
- :facebook_skip_create
149
+ :facebook_auto_create_account
150
150
  )
151
151
 
152
152
  # Alias don't work for some reason, so...a more Ruby-ish alias
153
- # for +facebook_skip_create+.
154
- def facebook_skip_create?
155
- self.facebook_skip_create
153
+ # for +facebook_auto_create_account+.
154
+ def facebook_auto_create_account?
155
+ self.facebook_auto_create_account
156
156
  end
157
157
 
158
158
  # Authenticate using a Facebook UID.
@@ -31,9 +31,7 @@ module Devise
31
31
  if user.present?
32
32
  success!(user)
33
33
  else
34
- if klass.facebook_skip_create?
35
- fail!(:facebook_invalid)
36
- else
34
+ if klass.facebook_auto_create_account?
37
35
  user = returning(klass.new) do |u|
38
36
  u.store_facebook_credentials!(
39
37
  :session_key => facebook_session.session_key,
@@ -48,6 +46,8 @@ module Devise
48
46
  rescue
49
47
  fail!(:facebook_invalid)
50
48
  end
49
+ else
50
+ fail!(:facebook_invalid)
51
51
  end
52
52
  end
53
53
  # NOTE: Handled in the controller.
@@ -1,6 +1,12 @@
1
1
  # encoding: utf-8
2
2
  require 'devise/mapping'
3
3
 
4
+ # Facebook Connect view helpers, i.e. connect/login/logout links, etc.
5
+ #
6
+ # Dependencies:
7
+ #
8
+ # +devise.facebook_connectable.js+ (is generated with the generator)
9
+ #
4
10
  module Devise
5
11
  module FacebookConnectable
6
12
  module Helpers
@@ -62,12 +68,12 @@ module Devise
62
68
  # It seems Devise using :get method for session destroy. Not really RESTful?
63
69
  # options.merge!(:method => :delete) if options[:autologoutlink] && signed_in?(options[:for])
64
70
 
65
- content_tag(:div, :class => 'fb_connect_login_link') do
71
+ content_tag(:span, :class => 'fb_connect_login_link') do
66
72
  facebook_connect_form(resource, options.slice(:method)) <<
67
73
  if options[:button]
68
74
  fb_login_button('devise.facebook_connectable.login();', options)
69
75
  else
70
- fb_logout_link(options[:label], 'devise.facebook_connectable.custom_login();')
76
+ fb_logout_link(options[:label], 'devise.facebook_connectable.login_with_callback();')
71
77
  end
72
78
  end
73
79
  end
@@ -86,7 +92,7 @@ module Devise
86
92
  :button => false
87
93
  )
88
94
 
89
- content_tag(:div, :class => 'fb_connect_logout_link') do
95
+ content_tag(:span, :class => 'fb_connect_logout_link') do
90
96
  facebook_connect_form(options.delete(:for), :logout => true, :method => :get) <<
91
97
  if options[:button]
92
98
  fb_login_button('devise.facebook_connectable.logout();', options.merge(:autologoutlink => true))
@@ -96,12 +102,23 @@ module Devise
96
102
  end
97
103
  end
98
104
 
99
- # TODO: Agnostic Facebook Connect disconnect button/link.
105
+ # Agnostic Facebook Connect disconnect button/link.
100
106
  # Disconnects, i.e. deletes, user account. Identical as "Delete my account",
101
107
  # but for Facebook Connect (which "un-installs" the app/site for the current user).
102
108
  #
109
+ # References:
110
+ #
111
+ # * http://wiki.developers.facebook.com/index.php/Auth.revokeAuthorization
112
+ #
103
113
  def facebook_disconnect_link(options = {})
104
114
  raise "facebook_disconnect_link: Not implemented yet."
115
+ # TODO:
116
+ # options.reverse_merge!(
117
+ # :label => ::I18n.t(:facebook_logout, :scope => [:devise, :sessions]),
118
+ # )
119
+ # content_tag(:div, :class => 'fb_connect_disconnect_link') do
120
+ # link_to_function(options[:label], 'devise.facebook_connectable.disconnect_with_callback();')
121
+ # end
105
122
  end
106
123
 
107
124
  protected
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_facebook_connectable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Grimfelt
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-10 00:00:00 +01:00
12
+ date: 2009-12-11 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency