benhutton-facebooker2 0.0.5.x4
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/lib/facebooker2.rb +60 -0
 - data/lib/facebooker2/not_configured.rb +7 -0
 - data/lib/facebooker2/rails.rb +4 -0
 - data/lib/facebooker2/rails/controller.rb +130 -0
 - data/lib/facebooker2/rails/helpers.rb +38 -0
 - data/lib/facebooker2/rails/helpers/facebook_connect.rb +57 -0
 - data/lib/facebooker2/rails/helpers/javascript.rb +43 -0
 - data/lib/facebooker2/rails/helpers/request_forms.rb +49 -0
 - data/lib/facebooker2/rails/helpers/user.rb +60 -0
 - metadata +102 -0
 
    
        data/lib/facebooker2.rb
    ADDED
    
    | 
         @@ -0,0 +1,60 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Provides rails helpers for interfacing with Facebook's OpenGraph Javascript
         
     | 
| 
      
 2 
     | 
    
         
            +
            # API, http://developers.facebook.com/docs/reference/javascript/.
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            require "mogli"
         
     | 
| 
      
 5 
     | 
    
         
            +
            require "facebooker2/rails/controller"
         
     | 
| 
      
 6 
     | 
    
         
            +
            require "facebooker2/rails/helpers/facebook_connect"
         
     | 
| 
      
 7 
     | 
    
         
            +
            require "facebooker2/rails/helpers/javascript"
         
     | 
| 
      
 8 
     | 
    
         
            +
            require "facebooker2/rails/helpers/request_forms"
         
     | 
| 
      
 9 
     | 
    
         
            +
            require "facebooker2/rails/helpers/user"
         
     | 
| 
      
 10 
     | 
    
         
            +
            require "facebooker2/rails/helpers"
         
     | 
| 
      
 11 
     | 
    
         
            +
            require "facebooker2/not_configured"
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            module Facebooker2
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              # provide cached access to configuration
         
     | 
| 
      
 16 
     | 
    
         
            +
              class << self
         
     | 
| 
      
 17 
     | 
    
         
            +
                attr_accessor :api_key, :secret, :app_id
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              # provide cached access to the configured application secret
         
     | 
| 
      
 21 
     | 
    
         
            +
              def self.secret
         
     | 
| 
      
 22 
     | 
    
         
            +
                @secret || raise_unconfigured_exception
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              # provide cached access to the configured app_id
         
     | 
| 
      
 26 
     | 
    
         
            +
              def self.app_id
         
     | 
| 
      
 27 
     | 
    
         
            +
                @app_id || raise_unconfigured_exception
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              # when configuration is missing, raise exception
         
     | 
| 
      
 31 
     | 
    
         
            +
              def self.raise_unconfigured_exception
         
     | 
| 
      
 32 
     | 
    
         
            +
                raise NotConfigured.new("No configuration provided for Facebooker2. Either set the app_id and secret or call Facebooker2.load_facebook_yaml in an initializer")
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              # load configuration from hash
         
     | 
| 
      
 36 
     | 
    
         
            +
              def self.configuration=(hash)
         
     | 
| 
      
 37 
     | 
    
         
            +
                self.api_key = hash[:api_key]
         
     | 
| 
      
 38 
     | 
    
         
            +
                self.secret = hash[:secret]
         
     | 
| 
      
 39 
     | 
    
         
            +
                self.app_id = hash[:app_id]
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              # read configuration from yaml config file
         
     | 
| 
      
 43 
     | 
    
         
            +
              def self.load_facebook_yaml
         
     | 
| 
      
 44 
     | 
    
         
            +
                config = YAML.load(ERB.new(File.read(File.join(::Rails.root,"config","facebook.yml"))).result)[::Rails.env]
         
     | 
| 
      
 45 
     | 
    
         
            +
                raise NotConfigured.new("Unable to load configuration for #{::Rails.env} from facebook.yml. Is it set up?") if config.nil?
         
     | 
| 
      
 46 
     | 
    
         
            +
                self.configuration = config.with_indifferent_access
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
              # flexible access to facebook_id of user from several possible object types
         
     | 
| 
      
 50 
     | 
    
         
            +
              def self.cast_to_facebook_id(object)
         
     | 
| 
      
 51 
     | 
    
         
            +
                if object.kind_of?(Mogli::Profile)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  object.id
         
     | 
| 
      
 53 
     | 
    
         
            +
                elsif object.respond_to?(:facebook_id)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  object.facebook_id
         
     | 
| 
      
 55 
     | 
    
         
            +
                else
         
     | 
| 
      
 56 
     | 
    
         
            +
                  object
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,130 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "digest/md5"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "hmac-sha2"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Facebooker2
         
     | 
| 
      
 5 
     | 
    
         
            +
              module Rails
         
     | 
| 
      
 6 
     | 
    
         
            +
                module Controller
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  # load required helpers
         
     | 
| 
      
 9 
     | 
    
         
            +
                  def self.included(controller)
         
     | 
| 
      
 10 
     | 
    
         
            +
                    controller.helper Facebooker2::Rails::Helpers
         
     | 
| 
      
 11 
     | 
    
         
            +
                    controller.helper_method :current_facebook_user
         
     | 
| 
      
 12 
     | 
    
         
            +
                    controller.helper_method :current_facebook_client
         
     | 
| 
      
 13 
     | 
    
         
            +
                    controller.helper_method :facebook_params
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  #
         
     | 
| 
      
 17 
     | 
    
         
            +
                  def current_facebook_user
         
     | 
| 
      
 18 
     | 
    
         
            +
                    fetch_client_and_user
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @_current_facebook_user
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  #
         
     | 
| 
      
 23 
     | 
    
         
            +
                  def current_facebook_client
         
     | 
| 
      
 24 
     | 
    
         
            +
                    fetch_client_and_user
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @_current_facebook_client
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  #
         
     | 
| 
      
 29 
     | 
    
         
            +
                  def fetch_client_and_user
         
     | 
| 
      
 30 
     | 
    
         
            +
                    return if @_fb_user_fetched
         
     | 
| 
      
 31 
     | 
    
         
            +
                    fetch_client_and_user_from_cookie
         
     | 
| 
      
 32 
     | 
    
         
            +
                    fetch_client_and_user_from_signed_request unless @_current_facebook_client
         
     | 
| 
      
 33 
     | 
    
         
            +
                    @_fb_user_fetched = true
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  #
         
     | 
| 
      
 37 
     | 
    
         
            +
                  def fetch_client_and_user_from_cookie
         
     | 
| 
      
 38 
     | 
    
         
            +
                    app_id = Facebooker2.app_id
         
     | 
| 
      
 39 
     | 
    
         
            +
                    if (hash_data = fb_cookie_hash_for_app_id(app_id)) and
         
     | 
| 
      
 40 
     | 
    
         
            +
                      fb_cookie_signature_correct?(fb_cookie_hash_for_app_id(app_id),Facebooker2.secret)
         
     | 
| 
      
 41 
     | 
    
         
            +
                      fb_create_user_and_client(hash_data["access_token"],hash_data["expires"],hash_data["uid"])
         
     | 
| 
      
 42 
     | 
    
         
            +
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  #
         
     | 
| 
      
 46 
     | 
    
         
            +
                  def fb_create_user_and_client(token,expires,userid)
         
     | 
| 
      
 47 
     | 
    
         
            +
                    client = Mogli::Client.new(token,expires.to_i)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    user = Mogli::User.new(:id=>userid)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    fb_sign_in_user_and_client(user,client)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  # cache current facebook user and current facebook client
         
     | 
| 
      
 53 
     | 
    
         
            +
                  def fb_sign_in_user_and_client(user,client)
         
     | 
| 
      
 54 
     | 
    
         
            +
                    user.client = client
         
     | 
| 
      
 55 
     | 
    
         
            +
                    @_current_facebook_user = user
         
     | 
| 
      
 56 
     | 
    
         
            +
                    @_current_facebook_client = client
         
     | 
| 
      
 57 
     | 
    
         
            +
                    @_fb_user_fetched = true
         
     | 
| 
      
 58 
     | 
    
         
            +
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                  #
         
     | 
| 
      
 61 
     | 
    
         
            +
                  def fb_cookie_hash_for_app_id(app_id)
         
     | 
| 
      
 62 
     | 
    
         
            +
                    return nil unless fb_cookie_for_app_id?(app_id)
         
     | 
| 
      
 63 
     | 
    
         
            +
                    hash={}
         
     | 
| 
      
 64 
     | 
    
         
            +
                    data = fb_cookie_for_app_id(app_id).gsub(/"/,"")
         
     | 
| 
      
 65 
     | 
    
         
            +
                    data.split("&").each do |str|
         
     | 
| 
      
 66 
     | 
    
         
            +
                      parts = str.split("=")
         
     | 
| 
      
 67 
     | 
    
         
            +
                      hash[parts.first] = parts.last
         
     | 
| 
      
 68 
     | 
    
         
            +
                    end
         
     | 
| 
      
 69 
     | 
    
         
            +
                    hash
         
     | 
| 
      
 70 
     | 
    
         
            +
                  end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                  #
         
     | 
| 
      
 73 
     | 
    
         
            +
                  def fb_cookie_for_app_id?(app_id)
         
     | 
| 
      
 74 
     | 
    
         
            +
                    !fb_cookie_for_app_id(app_id).nil?
         
     | 
| 
      
 75 
     | 
    
         
            +
                  end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  #
         
     | 
| 
      
 78 
     | 
    
         
            +
                  def fb_cookie_for_app_id(app_id)
         
     | 
| 
      
 79 
     | 
    
         
            +
                    cookies["fbs_#{app_id}"]
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                  #
         
     | 
| 
      
 83 
     | 
    
         
            +
                  def fb_cookie_signature_correct?(hash,secret)
         
     | 
| 
      
 84 
     | 
    
         
            +
                    sorted_keys = hash.keys.reject {|k| k=="sig"}.sort
         
     | 
| 
      
 85 
     | 
    
         
            +
                    test_string = ""
         
     | 
| 
      
 86 
     | 
    
         
            +
                    sorted_keys.each do |key|
         
     | 
| 
      
 87 
     | 
    
         
            +
                      test_string += "#{key}=#{hash[key]}"
         
     | 
| 
      
 88 
     | 
    
         
            +
                    end
         
     | 
| 
      
 89 
     | 
    
         
            +
                    test_string += secret
         
     | 
| 
      
 90 
     | 
    
         
            +
                    Digest::MD5.hexdigest(test_string) == hash["sig"]
         
     | 
| 
      
 91 
     | 
    
         
            +
                  end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                  #
         
     | 
| 
      
 94 
     | 
    
         
            +
                  def fb_signed_request_json(encoded)
         
     | 
| 
      
 95 
     | 
    
         
            +
                    chars_to_add = 4-(encoded.size % 4)
         
     | 
| 
      
 96 
     | 
    
         
            +
                    encoded += ("=" * chars_to_add)
         
     | 
| 
      
 97 
     | 
    
         
            +
                    Base64.decode64(encoded)
         
     | 
| 
      
 98 
     | 
    
         
            +
                  end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                  # cached access to facebook params
         
     | 
| 
      
 101 
     | 
    
         
            +
                  def facebook_params
         
     | 
| 
      
 102 
     | 
    
         
            +
                    @facebook_params ||= fb_load_facebook_params
         
     | 
| 
      
 103 
     | 
    
         
            +
                  end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                  #
         
     | 
| 
      
 106 
     | 
    
         
            +
                  def fb_load_facebook_params
         
     | 
| 
      
 107 
     | 
    
         
            +
                    return {} if params[:signed_request].blank?
         
     | 
| 
      
 108 
     | 
    
         
            +
                    sig,encoded_json = params[:signed_request].split(".")
         
     | 
| 
      
 109 
     | 
    
         
            +
                    return {} unless fb_signed_request_sig_valid?(sig,encoded_json)
         
     | 
| 
      
 110 
     | 
    
         
            +
                    ActiveSupport::JSON.decode(fb_signed_request_json(encoded_json)).with_indifferent_access
         
     | 
| 
      
 111 
     | 
    
         
            +
                  end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                  #
         
     | 
| 
      
 114 
     | 
    
         
            +
                  def fb_signed_request_sig_valid?(sig,encoded)
         
     | 
| 
      
 115 
     | 
    
         
            +
                    base64 = Base64.encode64(HMAC::SHA256.digest(Facebooker2.secret,encoded))
         
     | 
| 
      
 116 
     | 
    
         
            +
                    #now make the url changes that facebook makes
         
     | 
| 
      
 117 
     | 
    
         
            +
                    url_escaped_base64 = base64.gsub(/=*\n?$/,"").tr("+/","-_")
         
     | 
| 
      
 118 
     | 
    
         
            +
                    sig ==  url_escaped_base64
         
     | 
| 
      
 119 
     | 
    
         
            +
                  end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                  #
         
     | 
| 
      
 122 
     | 
    
         
            +
                  def fetch_client_and_user_from_signed_request
         
     | 
| 
      
 123 
     | 
    
         
            +
                    if facebook_params[:oauth_token]
         
     | 
| 
      
 124 
     | 
    
         
            +
                      fb_create_user_and_client(facebook_params[:oauth_token],facebook_params[:expires],facebook_params[:user_id])
         
     | 
| 
      
 125 
     | 
    
         
            +
                    end
         
     | 
| 
      
 126 
     | 
    
         
            +
                  end
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
                end
         
     | 
| 
      
 129 
     | 
    
         
            +
              end
         
     | 
| 
      
 130 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Facebooker2
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Rails
         
     | 
| 
      
 3 
     | 
    
         
            +
                module Helpers
         
     | 
| 
      
 4 
     | 
    
         
            +
                  include FacebookConnect
         
     | 
| 
      
 5 
     | 
    
         
            +
                  include Javascript
         
     | 
| 
      
 6 
     | 
    
         
            +
                  include RequestForms
         
     | 
| 
      
 7 
     | 
    
         
            +
                  include User
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  # converts all values of hash to strings
         
     | 
| 
      
 10 
     | 
    
         
            +
                  def fb_stringify_vals(hash)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    result={}
         
     | 
| 
      
 12 
     | 
    
         
            +
                    hash.each do |key,value|
         
     | 
| 
      
 13 
     | 
    
         
            +
                      result[key]=value.to_s
         
     | 
| 
      
 14 
     | 
    
         
            +
                    end
         
     | 
| 
      
 15 
     | 
    
         
            +
                    result
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  # transforms keys based on supplied transformation hash
         
     | 
| 
      
 19 
     | 
    
         
            +
                  def fb_transform_keys(options,transformation_hash)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    new_hash = {}
         
     | 
| 
      
 21 
     | 
    
         
            +
                    options.each do |key,value|
         
     | 
| 
      
 22 
     | 
    
         
            +
                      new_key = transformation_hash[key]||key
         
     | 
| 
      
 23 
     | 
    
         
            +
                      new_hash[new_key]=value
         
     | 
| 
      
 24 
     | 
    
         
            +
                    end
         
     | 
| 
      
 25 
     | 
    
         
            +
                    new_hash
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  FB_ALWAYS_VALID_OPTION_KEYS = [:class, :style]
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  # asserts that keys of a hash are included in a supplied list of valid keys
         
     | 
| 
      
 31 
     | 
    
         
            +
                  def fb_assert_valid_keys(options,*valid_keys)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    unknown_keys = options.keys - [valid_keys + FB_ALWAYS_VALID_OPTION_KEYS].flatten
         
     | 
| 
      
 33 
     | 
    
         
            +
                    raise(ArgumentError, "Unknown key(s): #{unknown_keys.join(", ")}") unless unknown_keys.empty?
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,57 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Facebooker2
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Rails
         
     | 
| 
      
 3 
     | 
    
         
            +
                module Helpers
         
     | 
| 
      
 4 
     | 
    
         
            +
                  module FacebookConnect
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                    ###
         
     | 
| 
      
 7 
     | 
    
         
            +
                    # Render an <fb:login-button> element, similar to
         
     | 
| 
      
 8 
     | 
    
         
            +
                    # fb_login_button. Adds a js redirect to the onlogin event via rjs.
         
     | 
| 
      
 9 
     | 
    
         
            +
                    #
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # ==== Examples
         
     | 
| 
      
 11 
     | 
    
         
            +
                    #
         
     | 
| 
      
 12 
     | 
    
         
            +
                    #   fb_login_and_redirect '/other_page'
         
     | 
| 
      
 13 
     | 
    
         
            +
                    #   => <fb:login-button onlogin="window.location.href = "/other_page";"></fb:login-button>
         
     | 
| 
      
 14 
     | 
    
         
            +
                    #
         
     | 
| 
      
 15 
     | 
    
         
            +
                    # Like #fb_login_button, this also supports the :text option
         
     | 
| 
      
 16 
     | 
    
         
            +
                    #
         
     | 
| 
      
 17 
     | 
    
         
            +
                    #   fb_login_and_redirect '/other_page', :text => "Login with Facebook", :v => '2'
         
     | 
| 
      
 18 
     | 
    
         
            +
                    #   => <fb:login-button onlogin="window.location.href = "/other_page";" v="2">Login with Facebook</fb:login-button>
         
     | 
| 
      
 19 
     | 
    
         
            +
                    #
         
     | 
| 
      
 20 
     | 
    
         
            +
                    def fb_login_and_redirect(url, options = {})
         
     | 
| 
      
 21 
     | 
    
         
            +
                      js = update_page do |page|
         
     | 
| 
      
 22 
     | 
    
         
            +
                        page.redirect_to url
         
     | 
| 
      
 23 
     | 
    
         
            +
                      end
         
     | 
| 
      
 24 
     | 
    
         
            +
                      text = options.delete(:text)
         
     | 
| 
      
 25 
     | 
    
         
            +
                      content_tag("fb:login-button",text,options.merge(:onlogin=>js)).html_safe
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    ###
         
     | 
| 
      
 29 
     | 
    
         
            +
                    #
         
     | 
| 
      
 30 
     | 
    
         
            +
                    #
         
     | 
| 
      
 31 
     | 
    
         
            +
                    def fb_login(options = {},&proc)
         
     | 
| 
      
 32 
     | 
    
         
            +
                       js = capture(&proc)
         
     | 
| 
      
 33 
     | 
    
         
            +
                       text = options.delete(:text)
         
     | 
| 
      
 34 
     | 
    
         
            +
                       concat(content_tag("fb:login-button",text,options.merge(:onlogin=>js)).html_safe)
         
     | 
| 
      
 35 
     | 
    
         
            +
                    end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                    ###
         
     | 
| 
      
 38 
     | 
    
         
            +
                    # Logs the user out of facebook and redirects to the given URL
         
     | 
| 
      
 39 
     | 
    
         
            +
                    # args are passed to the call to link_to_function
         
     | 
| 
      
 40 
     | 
    
         
            +
                    #
         
     | 
| 
      
 41 
     | 
    
         
            +
                    def fb_logout_link(text,url,*args)
         
     | 
| 
      
 42 
     | 
    
         
            +
                      function= "FB.logout(function() {window.location.href = '#{url}';})"
         
     | 
| 
      
 43 
     | 
    
         
            +
                      link_to_function text, function, *args
         
     | 
| 
      
 44 
     | 
    
         
            +
                    end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                    ###
         
     | 
| 
      
 47 
     | 
    
         
            +
                    #
         
     | 
| 
      
 48 
     | 
    
         
            +
                    #
         
     | 
| 
      
 49 
     | 
    
         
            +
                    def fb_server_fbml(style=nil,&proc)
         
     | 
| 
      
 50 
     | 
    
         
            +
                      style_string=" style=\"#{style}\"" if style
         
     | 
| 
      
 51 
     | 
    
         
            +
                      content = capture(&proc)
         
     | 
| 
      
 52 
     | 
    
         
            +
                      concat("<fb:serverFbml#{style_string}><script type='text/fbml'>#{content}</script></fb:serverFbml>".html_safe)
         
     | 
| 
      
 53 
     | 
    
         
            +
                    end
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
      
 57 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Facebooker2
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Rails
         
     | 
| 
      
 3 
     | 
    
         
            +
                module Helpers
         
     | 
| 
      
 4 
     | 
    
         
            +
                  module Javascript
         
     | 
| 
      
 5 
     | 
    
         
            +
                    ###
         
     | 
| 
      
 6 
     | 
    
         
            +
                    #
         
     | 
| 
      
 7 
     | 
    
         
            +
                    #
         
     | 
| 
      
 8 
     | 
    
         
            +
                    def fb_connect_async_js(app_id=Facebooker2.app_id,options={},&proc)
         
     | 
| 
      
 9 
     | 
    
         
            +
                      opts = Hash.new(true).merge!(options)
         
     | 
| 
      
 10 
     | 
    
         
            +
                      cookie = opts[:cookie]
         
     | 
| 
      
 11 
     | 
    
         
            +
                      status = opts[:status]
         
     | 
| 
      
 12 
     | 
    
         
            +
                      xfbml = opts[:xfbml]
         
     | 
| 
      
 13 
     | 
    
         
            +
                      locale = options[:locale] || "en_US"
         
     | 
| 
      
 14 
     | 
    
         
            +
                      extra_js = capture(&proc) if block_given?
         
     | 
| 
      
 15 
     | 
    
         
            +
                      js = <<-JAVASCRIPT
         
     | 
| 
      
 16 
     | 
    
         
            +
                      <script>
         
     | 
| 
      
 17 
     | 
    
         
            +
                        window.fbAsyncInit = function() {
         
     | 
| 
      
 18 
     | 
    
         
            +
                          FB.init({
         
     | 
| 
      
 19 
     | 
    
         
            +
                            appId  : '#{app_id}',
         
     | 
| 
      
 20 
     | 
    
         
            +
                            status : #{status}, // check login status
         
     | 
| 
      
 21 
     | 
    
         
            +
                            cookie : #{cookie}, // enable cookies to allow the server to access the session
         
     | 
| 
      
 22 
     | 
    
         
            +
                            xfbml  : #{xfbml}  // parse XFBML
         
     | 
| 
      
 23 
     | 
    
         
            +
                          });
         
     | 
| 
      
 24 
     | 
    
         
            +
                          #{extra_js}
         
     | 
| 
      
 25 
     | 
    
         
            +
                        };
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                        (function() {
         
     | 
| 
      
 28 
     | 
    
         
            +
                          var s = document.createElement('div');
         
     | 
| 
      
 29 
     | 
    
         
            +
                          s.setAttribute('id','fb-root');
         
     | 
| 
      
 30 
     | 
    
         
            +
                          document.documentElement.getElementsByTagName("body")[0].appendChild(s);
         
     | 
| 
      
 31 
     | 
    
         
            +
                          var e = document.createElement('script');
         
     | 
| 
      
 32 
     | 
    
         
            +
                          e.src = document.location.protocol + '//connect.facebook.net/#{locale}/all.js';
         
     | 
| 
      
 33 
     | 
    
         
            +
                          e.async = true;
         
     | 
| 
      
 34 
     | 
    
         
            +
                          s.appendChild(e);
         
     | 
| 
      
 35 
     | 
    
         
            +
                        }());
         
     | 
| 
      
 36 
     | 
    
         
            +
                      </script>
         
     | 
| 
      
 37 
     | 
    
         
            +
                      JAVASCRIPT
         
     | 
| 
      
 38 
     | 
    
         
            +
                      js.html_safe
         
     | 
| 
      
 39 
     | 
    
         
            +
                    end
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Facebooker2
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Rails
         
     | 
| 
      
 3 
     | 
    
         
            +
                module Helpers
         
     | 
| 
      
 4 
     | 
    
         
            +
                  module RequestForms
         
     | 
| 
      
 5 
     | 
    
         
            +
                    ###
         
     | 
| 
      
 6 
     | 
    
         
            +
                    # http://developers.facebook.com/docs/reference/fbml/req-choice
         
     | 
| 
      
 7 
     | 
    
         
            +
                    # Facebook has planned to deprecate this tag
         
     | 
| 
      
 8 
     | 
    
         
            +
                    # Specifies a button to be shown at the bottom of a request on the user's requests page.
         
     | 
| 
      
 9 
     | 
    
         
            +
                    #
         
     | 
| 
      
 10 
     | 
    
         
            +
                    def fb_req_choice(label,url)
         
     | 
| 
      
 11 
     | 
    
         
            +
                      tag "fb:req-choice",:label=>label,:url=>url
         
     | 
| 
      
 12 
     | 
    
         
            +
                    end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                    ###
         
     | 
| 
      
 15 
     | 
    
         
            +
                    # Creates a form that sends requests to the selected users.
         
     | 
| 
      
 16 
     | 
    
         
            +
                    # The form is submitted after the user confirms the sending of the request.
         
     | 
| 
      
 17 
     | 
    
         
            +
                    #
         
     | 
| 
      
 18 
     | 
    
         
            +
                    def fb_request_form(type,url,message,options={},&block)
         
     | 
| 
      
 19 
     | 
    
         
            +
                      content = capture(&block)
         
     | 
| 
      
 20 
     | 
    
         
            +
                      concat(content_tag("fb:request-form", content.to_s + fb_forgery_protection_token_tag,
         
     | 
| 
      
 21 
     | 
    
         
            +
                                {:action=>url,:method=>"post",:invite=>true,:type=>type,:content=>message}.merge(options)))
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    ###
         
     | 
| 
      
 25 
     | 
    
         
            +
                    # This is a nearly full-page interface intended to be used on canvas pages to allow the
         
     | 
| 
      
 26 
     | 
    
         
            +
                    # user to send a "large" number of requests or invitations (where "large" is generally
         
     | 
| 
      
 27 
     | 
    
         
            +
                    # some number more than 4). This tag must be used inside an fb:request-form tag.
         
     | 
| 
      
 28 
     | 
    
         
            +
                    #
         
     | 
| 
      
 29 
     | 
    
         
            +
                    def fb_multi_friend_selector(message,options={},&block)
         
     | 
| 
      
 30 
     | 
    
         
            +
                      options = fb_stringify_vals({:showborder=>false,:actiontext=>message,:max=>20}.merge(options.dup))
         
     | 
| 
      
 31 
     | 
    
         
            +
                      tag("fb:multi-friend-selector",options)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    private
         
     | 
| 
      
 35 
     | 
    
         
            +
                    ###
         
     | 
| 
      
 36 
     | 
    
         
            +
                    # when forgery protection is enabled, add forgery protection hidden input
         
     | 
| 
      
 37 
     | 
    
         
            +
                    #
         
     | 
| 
      
 38 
     | 
    
         
            +
                    def fb_forgery_protection_token_tag
         
     | 
| 
      
 39 
     | 
    
         
            +
                      unless protect_against_forgery?
         
     | 
| 
      
 40 
     | 
    
         
            +
                        ''
         
     | 
| 
      
 41 
     | 
    
         
            +
                      else
         
     | 
| 
      
 42 
     | 
    
         
            +
                        tag(:input, :type => "hidden", :name => request_forgery_protection_token.to_s, :value => form_authenticity_token)
         
     | 
| 
      
 43 
     | 
    
         
            +
                      end
         
     | 
| 
      
 44 
     | 
    
         
            +
                    end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,60 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Facebooker2
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Rails
         
     | 
| 
      
 3 
     | 
    
         
            +
                module Helpers
         
     | 
| 
      
 4 
     | 
    
         
            +
                  module User
         
     | 
| 
      
 5 
     | 
    
         
            +
                    FB_NAME_OPTION_KEYS_TO_TRANSFORM = {:first_name_only => :firstnameonly,
         
     | 
| 
      
 6 
     | 
    
         
            +
                                                        :last_name_only => :lastnameonly,
         
     | 
| 
      
 7 
     | 
    
         
            +
                                                        :show_network => :shownetwork,
         
     | 
| 
      
 8 
     | 
    
         
            +
                                                        :use_you => :useyou,
         
     | 
| 
      
 9 
     | 
    
         
            +
                                                        :if_cant_see => :ifcantsee,
         
     | 
| 
      
 10 
     | 
    
         
            +
                                                        :subject_id => :subjectid}
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                    FB_NAME_VALID_OPTION_KEYS = [:firstnameonly, :linked, :lastnameonly, :possessive, :reflexive,
         
     | 
| 
      
 13 
     | 
    
         
            +
                                                 :shownetwork, :useyou, :ifcantsee, :capitalize, :subjectid]
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    FB_PROFILE_PIC_OPTION_KEYS_TO_TRANSFORM = {:facebook_logo => 'facebook-logo'}
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                    FB_PROFILE_PIC_VALID_OPTION_KEYS = [:size, :linked, 'facebook-logo', :width, :height]
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    VALID_FB_PROFILE_PIC_SIZES = [:thumb, :small, :normal, :square]
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                    ###
         
     | 
| 
      
 22 
     | 
    
         
            +
                    # Render an fb:name tag for the given user
         
     | 
| 
      
 23 
     | 
    
         
            +
                    # This renders the name of the user specified.  You can use this tag as both subject and object of
         
     | 
| 
      
 24 
     | 
    
         
            +
                    # a sentence.  <em> See </em> http://wiki.developers.facebook.com/index.php/Fb:name for full description.
         
     | 
| 
      
 25 
     | 
    
         
            +
                    # Use this tag on FBML pages instead of retrieving the user's info and rendering the name explicitly.
         
     | 
| 
      
 26 
     | 
    
         
            +
                    #
         
     | 
| 
      
 27 
     | 
    
         
            +
                    def fb_name(user, options={})
         
     | 
| 
      
 28 
     | 
    
         
            +
                      options = fb_transform_keys(options,FB_NAME_OPTION_KEYS_TO_TRANSFORM)
         
     | 
| 
      
 29 
     | 
    
         
            +
                      fb_assert_valid_keys(options, FB_NAME_VALID_OPTION_KEYS)
         
     | 
| 
      
 30 
     | 
    
         
            +
                      options.merge!(:uid => Facebooker2.cast_to_facebook_id(user))
         
     | 
| 
      
 31 
     | 
    
         
            +
                      content_tag("fb:name",nil, fb_stringify_vals(options))
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    ###
         
     | 
| 
      
 35 
     | 
    
         
            +
                    # Render an fb:profile-pic tag for the given user
         
     | 
| 
      
 36 
     | 
    
         
            +
                    # <em> See </em> http://developers.facebook.com/docs/reference/fbml/profile-pic for full description.
         
     | 
| 
      
 37 
     | 
    
         
            +
                    #
         
     | 
| 
      
 38 
     | 
    
         
            +
                    def fb_profile_pic(user, options={})
         
     | 
| 
      
 39 
     | 
    
         
            +
                      options = options.dup
         
     | 
| 
      
 40 
     | 
    
         
            +
                      validate_fb_profile_pic_size(options)
         
     | 
| 
      
 41 
     | 
    
         
            +
                      options = fb_transform_keys(options,FB_PROFILE_PIC_OPTION_KEYS_TO_TRANSFORM)
         
     | 
| 
      
 42 
     | 
    
         
            +
                      fb_assert_valid_keys(options,FB_PROFILE_PIC_VALID_OPTION_KEYS)
         
     | 
| 
      
 43 
     | 
    
         
            +
                      options.merge!(:uid => Facebooker2.cast_to_facebook_id(user))
         
     | 
| 
      
 44 
     | 
    
         
            +
                      content_tag("fb:profile-pic", nil,fb_stringify_vals(options))
         
     | 
| 
      
 45 
     | 
    
         
            +
                    end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                    private
         
     | 
| 
      
 48 
     | 
    
         
            +
                    ###
         
     | 
| 
      
 49 
     | 
    
         
            +
                    # ensures that requested profile pic size is valid
         
     | 
| 
      
 50 
     | 
    
         
            +
                    #
         
     | 
| 
      
 51 
     | 
    
         
            +
                    def validate_fb_profile_pic_size(options)
         
     | 
| 
      
 52 
     | 
    
         
            +
                      if options.has_key?(:size) && !VALID_FB_PROFILE_PIC_SIZES.include?(options[:size].to_sym)
         
     | 
| 
      
 53 
     | 
    
         
            +
                        raise(ArgumentError, "Unknown value for size: #{options[:size]}")
         
     | 
| 
      
 54 
     | 
    
         
            +
                      end
         
     | 
| 
      
 55 
     | 
    
         
            +
                    end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                end
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,102 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification 
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: benhutton-facebooker2
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version 
         
     | 
| 
      
 4 
     | 
    
         
            +
              prerelease: true
         
     | 
| 
      
 5 
     | 
    
         
            +
              segments: 
         
     | 
| 
      
 6 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 7 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 8 
     | 
    
         
            +
              - 5
         
     | 
| 
      
 9 
     | 
    
         
            +
              - x4
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.0.5.x4
         
     | 
| 
      
 11 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 12 
     | 
    
         
            +
            authors: 
         
     | 
| 
      
 13 
     | 
    
         
            +
            - Ryan Walker
         
     | 
| 
      
 14 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 15 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 16 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2010-11-16 00:00:00 -05:00
         
     | 
| 
      
 19 
     | 
    
         
            +
            default_executable: 
         
     | 
| 
      
 20 
     | 
    
         
            +
            dependencies: 
         
     | 
| 
      
 21 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 22 
     | 
    
         
            +
              name: mogli
         
     | 
| 
      
 23 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 24 
     | 
    
         
            +
              requirement: &id001 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 25 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 26 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 27 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 28 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 29 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 30 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 31 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 32 
     | 
    
         
            +
                    - 12
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: 0.0.12
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 35 
     | 
    
         
            +
              version_requirements: *id001
         
     | 
| 
      
 36 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 37 
     | 
    
         
            +
              name: ruby-hmac
         
     | 
| 
      
 38 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 39 
     | 
    
         
            +
              requirement: &id002 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 40 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 41 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 42 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 43 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 44 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 45 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 46 
     | 
    
         
            +
                    version: "0"
         
     | 
| 
      
 47 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 48 
     | 
    
         
            +
              version_requirements: *id002
         
     | 
| 
      
 49 
     | 
    
         
            +
            description: Facebook Connect integration library for ruby and rails (for Rspec2 + Rails3)
         
     | 
| 
      
 50 
     | 
    
         
            +
            email: ry@anotherventure.com.com
         
     | 
| 
      
 51 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            files: 
         
     | 
| 
      
 58 
     | 
    
         
            +
            - lib/facebooker2.rb
         
     | 
| 
      
 59 
     | 
    
         
            +
            - lib/facebooker2/rails.rb
         
     | 
| 
      
 60 
     | 
    
         
            +
            - lib/facebooker2/not_configured.rb
         
     | 
| 
      
 61 
     | 
    
         
            +
            - lib/facebooker2/rails/helpers.rb
         
     | 
| 
      
 62 
     | 
    
         
            +
            - lib/facebooker2/rails/helpers/javascript.rb
         
     | 
| 
      
 63 
     | 
    
         
            +
            - lib/facebooker2/rails/helpers/facebook_connect.rb
         
     | 
| 
      
 64 
     | 
    
         
            +
            - lib/facebooker2/rails/helpers/request_forms.rb
         
     | 
| 
      
 65 
     | 
    
         
            +
            - lib/facebooker2/rails/helpers/user.rb
         
     | 
| 
      
 66 
     | 
    
         
            +
            - lib/facebooker2/rails/controller.rb
         
     | 
| 
      
 67 
     | 
    
         
            +
            has_rdoc: false
         
     | 
| 
      
 68 
     | 
    
         
            +
            homepage: http://github.com/ryw/facebooker2
         
     | 
| 
      
 69 
     | 
    
         
            +
            licenses: []
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 72 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
            require_paths: 
         
     | 
| 
      
 75 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 76 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 77 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 78 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 79 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 80 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 81 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 82 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 83 
     | 
    
         
            +
                  version: "0"
         
     | 
| 
      
 84 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 85 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 86 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 87 
     | 
    
         
            +
              - - ">"
         
     | 
| 
      
 88 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 89 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 90 
     | 
    
         
            +
                  - 1
         
     | 
| 
      
 91 
     | 
    
         
            +
                  - 3
         
     | 
| 
      
 92 
     | 
    
         
            +
                  - 1
         
     | 
| 
      
 93 
     | 
    
         
            +
                  version: 1.3.1
         
     | 
| 
      
 94 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 97 
     | 
    
         
            +
            rubygems_version: 1.3.7
         
     | 
| 
      
 98 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 99 
     | 
    
         
            +
            specification_version: 3
         
     | 
| 
      
 100 
     | 
    
         
            +
            summary: Facebook Connect integration library for ruby and rails (for Rspec2 + Rails3)
         
     | 
| 
      
 101 
     | 
    
         
            +
            test_files: []
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     |