Add helper to load config
This commit is contained in:
parent
6a47e3c67a
commit
6f52778c38
@ -2,11 +2,35 @@
|
||||
require "mogli"
|
||||
|
||||
module Facebooker2
|
||||
|
||||
class NotConfigured < Exception; end
|
||||
class << self
|
||||
attr_accessor :api_key, :secret, :app_id
|
||||
end
|
||||
|
||||
def self.secret
|
||||
@secret || raise_unconfigured_exception
|
||||
end
|
||||
|
||||
def self.app_id
|
||||
@app_id || raise_unconfigured_exception
|
||||
end
|
||||
|
||||
def self.raise_unconfigured_exception
|
||||
raise NotConfigured.new("No configuration provided for Facebooker2. Either set the app_id and secret or call Facebooker2.load_facebooker_yaml in an initializer")
|
||||
end
|
||||
|
||||
def self.configuration=(hash)
|
||||
self.api_key = hash[:api_key]
|
||||
self.secret = hash[:secret]
|
||||
self.app_id = hash[:app_id]
|
||||
end
|
||||
|
||||
def self.load_facebooker_yaml
|
||||
config = YAML.load(File.read(File.join(::Rails.root,"config","facebooker.yml")))[::Rails.env]
|
||||
raise NotConfigured.new("Unable to load configuration for #{::Rails.env} from facebooker.yml. Is it set up?") if config.nil?
|
||||
self.configuration = config.with_indifferent_access
|
||||
end
|
||||
|
||||
def self.cast_to_facebook_id(object)
|
||||
if object.kind_of?(Mogli::Profile)
|
||||
object.id
|
||||
|
@ -4,6 +4,12 @@ module Facebooker2
|
||||
module Rails
|
||||
module Controller
|
||||
|
||||
def self.included(controller)
|
||||
controller.helper Facebooker2::Rails::Helpers
|
||||
controller.helper_method :current_facebook_user
|
||||
controller.helper_method :current_facebook_client
|
||||
end
|
||||
|
||||
def current_facebook_user
|
||||
fetch_client_and_user_from_cookie
|
||||
@_current_facebook_user
|
||||
@ -19,17 +25,24 @@ module Facebooker2
|
||||
app_id = Facebooker2.app_id
|
||||
if (hash_data = fb_cookie_hash_for_app_id(app_id)) and
|
||||
fb_cookie_signature_correct?(fb_cookie_hash_for_app_id(app_id),Facebooker2.secret)
|
||||
@_current_facebook_client = Mogli::Client.new(hash_data["access_token"],hash_data["expires"].to_i)
|
||||
@_current_facebook_user = Mogli::User.new(:id=>hash_data["uid"])
|
||||
@_current_facebook_user.client = @_current_facebook_client
|
||||
client = Mogli::Client.new(hash_data["access_token"],hash_data["expires"].to_i)
|
||||
user = Mogli::User.new(:id=>hash_data["uid"])
|
||||
user.client = @_current_facebook_client
|
||||
fb_sign_in_user_and_client(user,client)
|
||||
end
|
||||
@_fb_user_fetched = true
|
||||
end
|
||||
|
||||
def fb_sign_in_user_and_client(user,client)
|
||||
@_current_facebook_user = user
|
||||
@_current_facebook_client = client
|
||||
@_fb_user_fetched = true
|
||||
end
|
||||
|
||||
def fb_cookie_hash_for_app_id(app_id)
|
||||
return nil unless fb_cookie_for_app_id?(app_id)
|
||||
hash={}
|
||||
data = fb_cookie_for_app_id(app_id)
|
||||
data = fb_cookie_for_app_id(app_id).gsub(/"/,"")
|
||||
data.split("&").each do |str|
|
||||
parts = str.split("=")
|
||||
hash[parts.first] = parts.last
|
||||
|
@ -6,7 +6,7 @@ module Facebooker2
|
||||
opts = Hash.new(true).merge!(options)
|
||||
cookie = opts[:cookie]
|
||||
status = opts[:status]
|
||||
status = opts[:xfbml]
|
||||
xfbml = opts[:xfbml]
|
||||
js = <<-JAVASCRIPT
|
||||
<div id="fb-root"></div>
|
||||
<script>
|
||||
|
3
spec/config/facebooker.yml
Normal file
3
spec/config/facebooker.yml
Normal file
@ -0,0 +1,3 @@
|
||||
spec:
|
||||
app_id: 1234fromyaml
|
||||
secret: fromyaml
|
@ -16,6 +16,35 @@ describe Facebooker2 do
|
||||
Facebooker2.app_id = "12345"
|
||||
Facebooker2.app_id.should == "12345"
|
||||
end
|
||||
|
||||
it "should allow setting the configuration in bulk" do
|
||||
Facebooker2.configuration = {:app_id=>1234,:secret=>"secret"}
|
||||
Facebooker2.app_id.should == 1234
|
||||
Facebooker2.secret.should == "secret"
|
||||
|
||||
end
|
||||
|
||||
it "raises an exception if you access a nil app_id" do
|
||||
Facebooker2.app_id = nil
|
||||
lambda do
|
||||
Facebooker2.app_id
|
||||
end.should raise_error(Facebooker2::NotConfigured)
|
||||
end
|
||||
|
||||
it "can load the configuration via facebooker.yml" do
|
||||
::Rails=mock("rails",:env=>"spec",:root=>File.dirname(__FILE__))
|
||||
Facebooker2.load_facebooker_yaml
|
||||
Facebooker2.app_id.should == "1234fromyaml"
|
||||
Facebooker2.secret.should == "fromyaml"
|
||||
end
|
||||
|
||||
it "raises an error if there is no configuration for the env" do
|
||||
::Rails=mock("rails",:env=>"invalid",:root=>File.dirname(__FILE__))
|
||||
lambda do
|
||||
Facebooker2.load_facebooker_yaml
|
||||
end.should raise_error(Facebooker2::NotConfigured)
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
describe "Casting to facebook_id" do
|
||||
|
@ -1,6 +1,6 @@
|
||||
require "spec_helper"
|
||||
|
||||
class FakeController
|
||||
class FakeController < ActionController::Base
|
||||
include Facebooker2::Rails::Controller
|
||||
end
|
||||
|
||||
@ -9,12 +9,19 @@ describe Facebooker2::Rails::Controller do
|
||||
Facebooker2.app_id = "12345"
|
||||
Facebooker2.secret = "42ca6de519d53f6e0420247a4d108d90"
|
||||
end
|
||||
|
||||
let :controller do
|
||||
controller = FakeController.new
|
||||
controller.stub!(:cookies).and_return("fbs_12345"=>"\"access_token=114355055262088|57f0206b01ad48bf84ac86f1-12451752|63WyZjRQbzowpN8ibdIfrsg80OA.&expires=0&secret=1e3375dcc4527e7ead0f82c095421690&session_key=57f0206b01ad48bf84ac86f1-12451752&sig=4337fcdee4cc68bb70ec495c0eebf89c&uid=12451752\"")
|
||||
controller
|
||||
end
|
||||
|
||||
|
||||
it "should include helpers" do
|
||||
controller.master_helper_module.ancestors.should include(Facebooker2::Rails::Helpers)
|
||||
end
|
||||
|
||||
describe "Cookie handling" do
|
||||
let :controller do
|
||||
controller = FakeController.new
|
||||
controller.stub!(:cookies).and_return("fbs_12345"=>"access_token=114355055262088|57f0206b01ad48bf84ac86f1-12451752|63WyZjRQbzowpN8ibdIfrsg80OA.&expires=0&secret=1e3375dcc4527e7ead0f82c095421690&session_key=57f0206b01ad48bf84ac86f1-12451752&sig=4337fcdee4cc68bb70ec495c0eebf89c&uid=12451752")
|
||||
controller
|
||||
end
|
||||
|
||||
it "knows if a cookie exists for this app" do
|
||||
controller.fb_cookie_for_app_id?(12345).should be_true
|
||||
@ -75,12 +82,20 @@ describe Facebooker2::Rails::Controller do
|
||||
end
|
||||
|
||||
describe "Methods" do
|
||||
it "has a current_facebook_user" do
|
||||
|
||||
it "allows you to sign in a user" do
|
||||
controller.fb_sign_in_user_and_client(Mogli::User.new,Mogli::Client.new)
|
||||
end
|
||||
it "has a current_facebook_user" do
|
||||
user = mock("user")
|
||||
controller.fb_sign_in_user_and_client(user,Mogli::Client.new)
|
||||
controller.current_facebook_user.should == user
|
||||
end
|
||||
|
||||
it "has a current_facebook_client" do
|
||||
|
||||
client = mock("client")
|
||||
controller.fb_sign_in_user_and_client(Mogli::User.new,client)
|
||||
controller.current_facebook_client.should == client
|
||||
end
|
||||
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user