fb_rails 0.2.0 → 0.3.0

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/README.rdoc CHANGED
@@ -18,6 +18,16 @@ or
18
18
  config.facebook.app_id = 'my_app_id'
19
19
  config.facebook.secret = 'my_app_secret'
20
20
 
21
+ Getting the user logged in is out of the scope of this gem. That's what
22
+ FBML and the Facebook Javascript API are for. Here's an example:
23
+
24
+ <div id="fb-root"></div>
25
+ <script src="http://connect.facebook.net/en_US/all.js"></script>
26
+ <script>
27
+ FB.init({appId: '<%= fb.app_id ?>', status: true, cookie: true, xfbml: true});
28
+ </script>
29
+ <%= fbml 'login-button' %>
30
+
21
31
 
22
32
  == API
23
33
 
@@ -36,6 +46,10 @@ Make a request to the Facebook Graph:
36
46
  <% result = fb.graph.get '/me' %>
37
47
  my name is <%= result['first_name'] %>
38
48
 
49
+ Retrieve your Facebook application app_id or secret:
50
+ fb.app_id
51
+ fb.secret
52
+
39
53
 
40
54
  == Persisting the Facebook User:
41
55
 
@@ -46,6 +60,7 @@ This user is accessed with 'fb.user':
46
60
 
47
61
  For this to work, FbRails assumes there is a model called 'User' with a column 'fb_uid'.
48
62
  If your user model name is different than 'User', it can be configured:
63
+
49
64
  config.facebook.user_class_name = 'Author'
50
65
 
51
66
  If the fb_uid for the current user is not in the database, fb.user is an unsaved instance.
@@ -68,3 +83,4 @@ connections. This is done with FbRails::Mock:
68
83
  mock.add 'me', 'first_name' => 'Matt', 'last_name' => 'Higgins'
69
84
  end
70
85
 
86
+ Now, a call to 'fb.graph.get 'me' returns the above response.
data/lib/fb_rails.rb CHANGED
@@ -2,18 +2,12 @@ module FbRails
2
2
  extend ActiveSupport::Autoload
3
3
 
4
4
  autoload :Config
5
+ autoload :Cookie
5
6
  autoload :Connect
6
7
  autoload :Graph
7
8
  autoload :Fb
8
9
  autoload :Mock
9
10
  autoload :Integration
10
-
11
- def self.cookie(uid = 42, access_token = 'abc')
12
- param_string = "uid=#{uid}&access_token=#{access_token}"
13
- payload = "access_token=#{access_token}uid=#{uid}"
14
- sig = Digest::MD5.hexdigest("#{payload}#{FbRails::Config.secret}")
15
- {FbRails::Connect.cookie_name => "\"#{param_string}&sig=#{sig}\""}
16
- end
17
11
  end
18
12
 
19
13
  require 'fb_rails/railtie'
@@ -1,5 +1,3 @@
1
- require 'digest/md5'
2
-
3
1
  module FbRails
4
2
  class Connect
5
3
  class << self
@@ -16,20 +14,7 @@ module FbRails
16
14
  end
17
15
 
18
16
  def cookie
19
- return if (cookie_string = cookies[self.class.cookie_name]).blank?
20
-
21
- hash = Rack::Utils::parse_query(cookie_string.gsub(/^\"|\"$/, ''))
22
- sorted_pairs = hash.sort
23
-
24
- payload = ''
25
- sorted_pairs.each do |key, value|
26
- payload += "#{key}=#{value}" if key != 'sig'
27
- end
28
-
29
- md5 = Digest::MD5.hexdigest("#{payload}#{FbRails::Config.secret}")
30
- if md5 == hash['sig']
31
- hash
32
- end
17
+ FbRails::Cookie.decode(cookies[self.class.cookie_name], FbRails::Config.secret)
33
18
  end
34
19
  memoize :cookie
35
20
 
@@ -0,0 +1,32 @@
1
+ require 'digest/md5'
2
+
3
+ module FbRails
4
+ class Cookie
5
+ class << self
6
+ def decode(cookie_string, secret)
7
+ return if cookie_string.blank?
8
+ cookie_string = Rack::Utils.unescape(cookie_string)
9
+
10
+ hash = Rack::Utils.parse_query(cookie_string.gsub(/^\"|\"$/, ''))
11
+
12
+ payload = ''
13
+ hash.sort.each do |key, value|
14
+ payload += "#{key}=#{value}" if key != 'sig'
15
+ end
16
+
17
+ md5 = Digest::MD5.hexdigest("#{payload}#{secret}")
18
+ if md5 == hash['sig']
19
+ hash
20
+ end
21
+ end
22
+
23
+ def encode(attributes, secret)
24
+ sorted_pairs = attributes.sort.map { |key, value| "#{key}=#{value}" }
25
+ param_string = sorted_pairs.join('&')
26
+ payload = sorted_pairs.join('')
27
+ sig = Digest::MD5.hexdigest("#{payload}#{secret}")
28
+ "\"#{param_string}&sig=#{sig}\""
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,8 +1,13 @@
1
1
  module FbRails
2
2
  module Integration
3
3
  module ActionView
4
- def fbml(tag, options = nil)
5
- content_tag("fb:#{tag}", '', options)
4
+ def fbml(tag, content = '', options = {})
5
+ if content.is_a?(Hash)
6
+ options = content
7
+ content = ''
8
+ end
9
+
10
+ content_tag("fb:#{tag}", content, options)
6
11
  end
7
12
  end
8
13
  end
@@ -0,0 +1,21 @@
1
+ require 'test_helper'
2
+
3
+ class FbRails::CookieTest < ActiveSupport::TestCase
4
+ test 'decode' do
5
+ assert_equal(
6
+ {'a' => '1', 'b' => '2', 'sig' => '25a7f94742b4134695b80f78d4804e35'},
7
+ FbRails::Cookie.decode("\"a=1&b=2&sig=25a7f94742b4134695b80f78d4804e35\"", 'sekrit')
8
+ )
9
+ end
10
+
11
+ test 'decode invalid' do
12
+ assert_nil FbRails::Cookie.decode("\"a=1&b=2&sig=invalid\"", 'sekrit')
13
+ end
14
+
15
+ test 'encode' do
16
+ assert_equal(
17
+ "\"a=1&b=2&sig=25a7f94742b4134695b80f78d4804e35\"",
18
+ FbRails::Cookie.encode({:a => 1, :b => 2}, 'sekrit')
19
+ )
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ require 'test_helper'
2
+
3
+ class FbRails::Integration::ActionViewTest < ActiveSupport::TestCase
4
+ include ActionView::Helpers::TagHelper
5
+ include FbRails::Integration::ActionView
6
+
7
+ test 'fbml' do
8
+ assert_equal '<fb:foo></fb:foo>', fbml('foo')
9
+ assert_equal '<fb:foo>bar</fb:foo>', fbml('foo', 'bar')
10
+ assert_equal '<fb:foo faz="baz"></fb:foo>', fbml('foo', 'faz' => 'baz')
11
+ assert_equal '<fb:foo faz="baz">bar</fb:foo>', fbml('foo', 'bar', 'faz' => 'baz')
12
+ end
13
+ end
data/test/test_helper.rb CHANGED
@@ -10,4 +10,9 @@ require 'sample/test_controller'
10
10
  FbRails::Config.app_id = 'foo'
11
11
  FbRails::Config.secret = 'bar'
12
12
 
13
-
13
+ FbRails.class_eval do
14
+ def self.cookie(uid = 42, access_token = 'abc')
15
+ value = FbRails::Cookie.encode({:uid => uid, :access_token => access_token}, FbRails::Config.secret)
16
+ {FbRails::Connect.cookie_name => value}
17
+ end
18
+ end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 2
7
+ - 3
8
8
  - 0
9
- version: 0.2.0
9
+ version: 0.3.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Matthew Higgins
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-28 00:00:00 -07:00
17
+ date: 2010-11-04 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -46,6 +46,7 @@ files:
46
46
  - README.rdoc
47
47
  - lib/fb_rails/config.rb
48
48
  - lib/fb_rails/connect.rb
49
+ - lib/fb_rails/cookie.rb
49
50
  - lib/fb_rails/fb.rb
50
51
  - lib/fb_rails/graph.rb
51
52
  - lib/fb_rails/integration/action_controller.rb
@@ -57,9 +58,11 @@ files:
57
58
  - lib/fb_rails.rb
58
59
  - test/config_test.rb
59
60
  - test/connect_test.rb
61
+ - test/cookie_test.rb
60
62
  - test/fb_test.rb
61
63
  - test/graph_test.rb
62
64
  - test/helpers/action_controller_test.rb
65
+ - test/integration/action_view_test.rb
63
66
  - test/log_subscriber_test.rb
64
67
  - test/mock_test.rb
65
68
  - test/sample/test_controller.rb