Added fb_name helper
This commit is contained in:
parent
e60e187a05
commit
ad3ee1c026
@ -1,13 +1,25 @@
|
|||||||
# Facebooker2
|
# Facebooker2
|
||||||
|
require "mogli"
|
||||||
|
|
||||||
module Facebooker2
|
module Facebooker2
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
attr_accessor :api_key, :secret, :app_id
|
attr_accessor :api_key, :secret, :app_id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.cast_to_facebook_id(object)
|
||||||
|
if object.kind_of?(Mogli::Profile)
|
||||||
|
object.id
|
||||||
|
elsif object.respond_to?(:facebook_id)
|
||||||
|
object.facebook_id
|
||||||
|
else
|
||||||
|
object
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
require "mogli"
|
|
||||||
|
|
||||||
require "facebooker2/rails/controller"
|
require "facebooker2/rails/controller"
|
||||||
require "facebooker2/rails/helpers/facebook_connect"
|
require "facebooker2/rails/helpers/facebook_connect"
|
||||||
|
require "facebooker2/rails/helpers/user"
|
||||||
|
require "facebooker2/rails/helpers"
|
8
lib/facebooker2/rails/helpers.rb
Normal file
8
lib/facebooker2/rails/helpers.rb
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
module Facebooker2
|
||||||
|
module Rails
|
||||||
|
module Helpers
|
||||||
|
include FacebookConnect
|
||||||
|
include User
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
52
lib/facebooker2/rails/helpers/user.rb
Normal file
52
lib/facebooker2/rails/helpers/user.rb
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
require "ruby-debug"
|
||||||
|
module Facebooker2
|
||||||
|
module Rails
|
||||||
|
module Helpers
|
||||||
|
module User
|
||||||
|
# Render an fb:name tag for the given user
|
||||||
|
# This renders the name of the user specified. You can use this tag as both subject and object of
|
||||||
|
# a sentence. <em> See </em> http://wiki.developers.facebook.com/index.php/Fb:name for full description.
|
||||||
|
# Use this tag on FBML pages instead of retrieving the user's info and rendering the name explicitly.
|
||||||
|
#
|
||||||
|
def fb_name(user, options={})
|
||||||
|
options = fb_transform_keys(options,FB_NAME_OPTION_KEYS_TO_TRANSFORM)
|
||||||
|
fb_assert_valid_keys(options, FB_NAME_VALID_OPTION_KEYS)
|
||||||
|
options.merge!(:uid => Facebooker2.cast_to_facebook_id(user))
|
||||||
|
content_tag("fb:name",nil, fb_stringify_vals(options))
|
||||||
|
end
|
||||||
|
|
||||||
|
FB_NAME_OPTION_KEYS_TO_TRANSFORM = {:first_name_only => :firstnameonly,
|
||||||
|
:last_name_only => :lastnameonly,
|
||||||
|
:show_network => :shownetwork,
|
||||||
|
:use_you => :useyou,
|
||||||
|
:if_cant_see => :ifcantsee,
|
||||||
|
:subject_id => :subjectid}
|
||||||
|
FB_NAME_VALID_OPTION_KEYS = [:firstnameonly, :linked, :lastnameonly, :possessive, :reflexive,
|
||||||
|
:shownetwork, :useyou, :ifcantsee, :capitalize, :subjectid]
|
||||||
|
|
||||||
|
def fb_stringify_vals(hash)
|
||||||
|
result={}
|
||||||
|
hash.each do |key,value|
|
||||||
|
result[key]=value.to_s
|
||||||
|
end
|
||||||
|
result
|
||||||
|
end
|
||||||
|
def fb_transform_keys(options,transformation_hash)
|
||||||
|
new_hash = {}
|
||||||
|
options.each do |key,value|
|
||||||
|
new_key = transformation_hash[key]||key
|
||||||
|
new_hash[new_key]=value
|
||||||
|
end
|
||||||
|
new_hash
|
||||||
|
end
|
||||||
|
FB_ALWAYS_VALID_OPTION_KEYS = [:class, :style]
|
||||||
|
|
||||||
|
def fb_assert_valid_keys(options,*valid_keys)
|
||||||
|
unknown_keys = options.keys - [valid_keys + FB_ALWAYS_VALID_OPTION_KEYS].flatten
|
||||||
|
raise(ArgumentError, "Unknown key(s): #{unknown_keys.join(", ")}") unless unknown_keys.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -17,4 +17,18 @@ describe Facebooker2 do
|
|||||||
Facebooker2.app_id.should == "12345"
|
Facebooker2.app_id.should == "12345"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "Casting to facebook_id" do
|
||||||
|
it "grabs the id from Mogli::User objects" do
|
||||||
|
Facebooker2.cast_to_facebook_id(Mogli::User.new(:id=>1234)).should == 1234
|
||||||
|
end
|
||||||
|
|
||||||
|
it "checks for facebook_id and calls that" do
|
||||||
|
Facebooker2.cast_to_facebook_id(mock("name",:facebook_id=>1234)).should == 1234
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns the passed object otherwise" do
|
||||||
|
Facebooker2.cast_to_facebook_id("1234").should == "1234"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
@ -1,5 +1,4 @@
|
|||||||
require "spec_helper"
|
require "spec_helper"
|
||||||
require "ruby-debug"
|
|
||||||
describe Facebooker2::Rails::Helpers::FacebookConnect, :type=>:helper do
|
describe Facebooker2::Rails::Helpers::FacebookConnect, :type=>:helper do
|
||||||
include Facebooker2::Rails::Helpers::FacebookConnect
|
include Facebooker2::Rails::Helpers::FacebookConnect
|
||||||
describe "fb_login_and_redirect" do
|
describe "fb_login_and_redirect" do
|
||||||
|
24
spec/helpers/user_spec.rb
Normal file
24
spec/helpers/user_spec.rb
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
require "spec_helper"
|
||||||
|
describe Facebooker2::Rails::Helpers::User, :type=>:helper do
|
||||||
|
include Facebooker2::Rails::Helpers::User
|
||||||
|
describe "name" do
|
||||||
|
it "has an fb_name tag" do
|
||||||
|
fb_name("1").should == "<fb:name uid=\"1\"></fb:name>"
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
it "translates keys from uderscore to facebook" do
|
||||||
|
fb_name("loggedinuser",:use_you=>true).should == "<fb:name uid=\"loggedinuser\" useyou=\"true\"></fb:name>"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "raises an error on invalid keys" do
|
||||||
|
lambda do
|
||||||
|
fb_name("loggedinuser",:invalid=>true)
|
||||||
|
end.should raise_error(ArgumentError)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "casts the user to a facebook id" do
|
||||||
|
fb_name(Mogli::User.new(:id=>"123")).should =~ /uid="123"/
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user