Skip to content

Commit

Permalink
merged
Browse files Browse the repository at this point in the history
  • Loading branch information
kevin lochner committed Jan 5, 2009
2 parents 81c90fc + 7f5710a commit 33bce62
Show file tree
Hide file tree
Showing 11 changed files with 160 additions and 31 deletions.
3 changes: 3 additions & 0 deletions Manifest.txt
Expand Up @@ -37,6 +37,8 @@ generators/facebook_scaffold/templates/view_new.fbml.erb
generators/facebook_scaffold/templates/view_new.html.erb
generators/facebook_scaffold/templates/view_show.fbml.erb
generators/facebook_scaffold/templates/view_show.html.erb
generators/xd_receiver/xd_receiver_generator.rb
generators/xd_receiver/templates/xd_receiver.html
init.rb
install.rb
lib/facebooker.rb
Expand Down Expand Up @@ -75,6 +77,7 @@ lib/facebooker/rails/facebook_request_fix.rb
lib/facebooker/rails/facebook_session_handling.rb
lib/facebooker/rails/facebook_url_rewriting.rb
lib/facebooker/rails/helpers.rb
lib/facebooker/rails/helpers/fb_connect.rb
lib/facebooker/rails/profile_publisher_extensions.rb
lib/facebooker/rails/publisher.rb
lib/facebooker/rails/routing.rb
Expand Down
4 changes: 2 additions & 2 deletions facebooker.gemspec
Expand Up @@ -2,15 +2,15 @@

Gem::Specification.new do |s|
s.name = %q{facebooker}
s.version = "1.0.6"
s.version = "1.0.7"

s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Chad Fowler", "Patrick Ewing", "Mike Mangino", "Shane Vitarana"]
s.date = %q{2008-02-13}
s.description = %q{== DESCRIPTION: Facebooker is a Ruby wrapper over the Facebook[http://facebook.com] {REST API}[http://developer.facebook.com]. Its goals are: * Idiomatic Ruby * No dependencies outside of the Ruby standard library * Concrete classes and methods modeling the Facebook data, so it's easy for a Rubyist to understand what's available * Well tested == FEATURES/PROBLEMS:}
s.email = %q{mmangino@elevatedrails.com}
s.extra_rdoc_files = ["CHANGELOG.txt", "History.txt", "Manifest.txt", "README.txt", "TODO.txt", "test/fixtures/multipart_post_body_with_only_parameters.txt", "test/fixtures/multipart_post_body_with_single_file.txt", "test/fixtures/multipart_post_body_with_single_file_that_has_nil_key.txt"]
s.files = ["CHANGELOG.txt", "COPYING", "History.txt", "Manifest.txt", "README", "README.txt", "Rakefile", "TODO.txt", "generators/publisher/publisher_generator.rb", "generators/facebook/facebook_generator.rb", "generators/facebook/templates/config/facebooker.yml", "generators/facebook/templates/public/javascripts/facebooker.js", "generators/facebook_controller/USAGE", "generators/facebook_controller/facebook_controller_generator.rb", "generators/facebook_controller/templates/controller.rb", "generators/facebook_controller/templates/functional_test.rb", "generators/facebook_controller/templates/helper.rb", "generators/facebook_controller/templates/view.fbml.erb", "generators/facebook_controller/templates/view.html.erb", "generators/facebook_publisher/facebook_publisher_generator.rb", "generators/facebook_publisher/templates/create_facebook_templates.rb", "generators/facebook_publisher/templates/publisher.rb", "generators/facebook_scaffold/USAGE", "generators/facebook_scaffold/facebook_scaffold_generator.rb", "generators/facebook_scaffold/templates/controller.rb", "generators/facebook_scaffold/templates/facebook_style.css", "generators/facebook_scaffold/templates/functional_test.rb", "generators/facebook_scaffold/templates/helper.rb", "generators/facebook_scaffold/templates/layout.fbml.erb", "generators/facebook_scaffold/templates/layout.html.erb", "generators/facebook_scaffold/templates/style.css", "generators/facebook_scaffold/templates/view_edit.fbml.erb", "generators/facebook_scaffold/templates/view_edit.html.erb", "generators/facebook_scaffold/templates/view_index.fbml.erb", "generators/facebook_scaffold/templates/view_index.html.erb", "generators/facebook_scaffold/templates/view_new.fbml.erb", "generators/facebook_scaffold/templates/view_new.html.erb", "generators/facebook_scaffold/templates/view_show.fbml.erb", "generators/facebook_scaffold/templates/view_show.html.erb", "init.rb", "install.rb", "lib/facebooker.rb", "lib/facebooker/adapters/adapter_base.rb", "lib/facebooker/adapters/bebo_adapter.rb", "lib/facebooker/adapters/facebook_adapter.rb", "lib/facebooker/admin.rb", "lib/facebooker/batch_request.rb", "lib/facebooker/data.rb", "lib/facebooker/feed.rb", "lib/facebooker/logging.rb", "lib/facebooker/model.rb", "lib/facebooker/models/affiliation.rb", "lib/facebooker/models/album.rb", "lib/facebooker/models/applicationproperties.rb", "lib/facebooker/models/cookie.rb", "lib/facebooker/models/education_info.rb", "lib/facebooker/models/event.rb", "lib/facebooker/models/friend_list.rb", "lib/facebooker/models/group.rb", "lib/facebooker/models/info_item.rb", "lib/facebooker/models/info_section.rb", "lib/facebooker/models/location.rb", "lib/facebooker/models/notifications.rb", "lib/facebooker/models/page.rb", "lib/facebooker/models/photo.rb", "lib/facebooker/models/tag.rb", "lib/facebooker/models/user.rb", "lib/facebooker/models/work_info.rb", "lib/facebooker/parser.rb", "lib/facebooker/rails/controller.rb", "lib/facebooker/rails/facebook_asset_path.rb", "lib/facebooker/rails/facebook_form_builder.rb", "lib/facebooker/rails/facebook_pretty_errors.rb", "lib/facebooker/rails/facebook_request_fix.rb", "lib/facebooker/rails/facebook_session_handling.rb", "lib/facebooker/rails/facebook_url_rewriting.rb", "lib/facebooker/rails/helpers.rb", "lib/facebooker/rails/profile_publisher_extensions.rb", "lib/facebooker/rails/publisher.rb", "lib/facebooker/rails/routing.rb", "lib/facebooker/rails/test_helpers.rb", "lib/facebooker/rails/utilities.rb", "lib/facebooker/server_cache.rb", "lib/facebooker/service.rb", "lib/facebooker/session.rb", "lib/facebooker/version.rb", "lib/net/http_multipart_post.rb", "lib/tasks/facebooker.rake", "lib/tasks/tunnel.rake", "rails/init.rb", "setup.rb", "templates/layout.erb", "test/adapters_test.rb", "test/batch_request_test.rb", "test/event_test.rb", "test/facebook_admin_test.rb", "test/facebook_cache_test.rb", "test/facebook_data_test.rb", "test/facebooker_test.rb", "test/fixtures/multipart_post_body_with_only_parameters.txt", "test/fixtures/multipart_post_body_with_single_file.txt", "test/fixtures/multipart_post_body_with_single_file_that_has_nil_key.txt", "test/http_multipart_post_test.rb", "test/logging_test.rb", "test/model_test.rb", "test/publisher_test.rb", "test/rails_integration_test.rb", "test/session_test.rb", "test/test_helper.rb", "test/user_test.rb"]
s.files = ["CHANGELOG.txt", "COPYING", "History.txt", "Manifest.txt", "README", "README.txt", "Rakefile", "TODO.txt", "generators/publisher/publisher_generator.rb", "generators/facebook/facebook_generator.rb", "generators/facebook/templates/config/facebooker.yml", "generators/facebook/templates/public/javascripts/facebooker.js", "generators/facebook_controller/USAGE", "generators/facebook_controller/facebook_controller_generator.rb", "generators/facebook_controller/templates/controller.rb", "generators/facebook_controller/templates/functional_test.rb", "generators/facebook_controller/templates/helper.rb", "generators/facebook_controller/templates/view.fbml.erb", "generators/facebook_controller/templates/view.html.erb", "generators/facebook_publisher/facebook_publisher_generator.rb", "generators/facebook_publisher/templates/create_facebook_templates.rb", "generators/facebook_publisher/templates/publisher.rb", "generators/facebook_scaffold/USAGE", "generators/facebook_scaffold/facebook_scaffold_generator.rb", "generators/facebook_scaffold/templates/controller.rb", "generators/facebook_scaffold/templates/facebook_style.css", "generators/facebook_scaffold/templates/functional_test.rb", "generators/facebook_scaffold/templates/helper.rb", "generators/facebook_scaffold/templates/layout.fbml.erb", "generators/facebook_scaffold/templates/layout.html.erb", "generators/facebook_scaffold/templates/style.css", "generators/facebook_scaffold/templates/view_edit.fbml.erb", "generators/facebook_scaffold/templates/view_edit.html.erb", "generators/facebook_scaffold/templates/view_index.fbml.erb", "generators/facebook_scaffold/templates/view_index.html.erb", "generators/facebook_scaffold/templates/view_new.fbml.erb", "generators/facebook_scaffold/templates/view_new.html.erb", "generators/facebook_scaffold/templates/view_show.fbml.erb", "generators/facebook_scaffold/templates/view_show.html.erb", "generators/xd_receiver/xd_receiver_generator.rb", "generators/xd_receiver/templates/xd_receiver.html", "init.rb", "install.rb", "lib/facebooker.rb", "lib/facebooker/adapters/adapter_base.rb", "lib/facebooker/adapters/bebo_adapter.rb", "lib/facebooker/adapters/facebook_adapter.rb", "lib/facebooker/admin.rb", "lib/facebooker/batch_request.rb", "lib/facebooker/data.rb", "lib/facebooker/feed.rb", "lib/facebooker/logging.rb", "lib/facebooker/model.rb", "lib/facebooker/models/affiliation.rb", "lib/facebooker/models/album.rb", "lib/facebooker/models/applicationproperties.rb", "lib/facebooker/models/cookie.rb", "lib/facebooker/models/education_info.rb", "lib/facebooker/models/event.rb", "lib/facebooker/models/friend_list.rb", "lib/facebooker/models/group.rb", "lib/facebooker/models/info_item.rb", "lib/facebooker/models/info_section.rb", "lib/facebooker/models/location.rb", "lib/facebooker/models/notifications.rb", "lib/facebooker/models/page.rb", "lib/facebooker/models/photo.rb", "lib/facebooker/models/tag.rb", "lib/facebooker/models/user.rb", "lib/facebooker/models/work_info.rb", "lib/facebooker/parser.rb", "lib/facebooker/rails/controller.rb", "lib/facebooker/rails/facebook_asset_path.rb", "lib/facebooker/rails/facebook_form_builder.rb", "lib/facebooker/rails/facebook_pretty_errors.rb", "lib/facebooker/rails/facebook_request_fix.rb", "lib/facebooker/rails/facebook_session_handling.rb", "lib/facebooker/rails/facebook_url_rewriting.rb", "lib/facebooker/rails/helpers.rb", "lib/facebooker/rails/helpers/fb_connect.rb", "lib/facebooker/rails/profile_publisher_extensions.rb", "lib/facebooker/rails/publisher.rb", "lib/facebooker/rails/routing.rb", "lib/facebooker/rails/test_helpers.rb", "lib/facebooker/rails/utilities.rb", "lib/facebooker/server_cache.rb", "lib/facebooker/service.rb", "lib/facebooker/session.rb", "lib/facebooker/version.rb", "lib/net/http_multipart_post.rb", "lib/tasks/facebooker.rake", "lib/tasks/tunnel.rake", "rails/init.rb", "setup.rb", "templates/layout.erb", "test/adapters_test.rb", "test/batch_request_test.rb", "test/event_test.rb", "test/facebook_admin_test.rb", "test/facebook_cache_test.rb", "test/facebook_data_test.rb", "test/facebooker_test.rb", "test/fixtures/multipart_post_body_with_only_parameters.txt", "test/fixtures/multipart_post_body_with_single_file.txt", "test/fixtures/multipart_post_body_with_single_file_that_has_nil_key.txt", "test/http_multipart_post_test.rb", "test/logging_test.rb", "test/model_test.rb", "test/publisher_test.rb", "test/rails_integration_test.rb", "test/session_test.rb", "test/test_helper.rb", "test/user_test.rb"]
s.has_rdoc = true
s.rdoc_options = ["--main", "README.txt"]
s.require_paths = ["lib"]
Expand Down
2 changes: 1 addition & 1 deletion facebooker.gemspec.erb
Expand Up @@ -2,7 +2,7 @@

Gem::Specification.new do |s|
s.name = %q{facebooker}
s.version = "1.0.6"
s.version = "1.0.7"

s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Chad Fowler", "Patrick Ewing", "Mike Mangino", "Shane Vitarana"]
Expand Down
@@ -1,4 +1,4 @@
class PublisherGenerator < Rails::Generator::Base
class XdReceiverGenerator < Rails::Generator::Base
def manifest
record do |m|
m.template "xd_receiver.html", "public/xd_receiver.html"
Expand Down
2 changes: 1 addition & 1 deletion lib/facebooker/models/user.rb
Expand Up @@ -10,7 +10,7 @@ class Status
include Model
attr_accessor :message, :time, :status_id
end
FIELDS = [:status, :political, :pic_small, :name, :quotes, :is_app_user, :tv, :profile_update_time, :meeting_sex, :hs_info, :timezone, :relationship_status, :hometown_location, :about_me, :wall_count, :significant_other_id, :pic_big, :music, :uid, :work_history, :sex, :religion, :notes_count, :activities, :pic_square, :movies, :has_added_app, :education_history, :birthday, :first_name, :meeting_for, :last_name, :interests, :current_location, :pic, :books, :affiliations, :locale, :profile_url]
FIELDS = [:status, :political, :pic_small, :name, :quotes, :is_app_user, :tv, :profile_update_time, :meeting_sex, :hs_info, :timezone, :relationship_status, :hometown_location, :about_me, :wall_count, :significant_other_id, :pic_big, :music, :uid, :work_history, :sex, :religion, :notes_count, :activities, :pic_square, :movies, :has_added_app, :education_history, :birthday, :first_name, :meeting_for, :last_name, :interests, :current_location, :pic, :books, :affiliations, :locale, :profile_url, :proxied_email]
STANDARD_FIELDS = [:uid, :first_name, :last_name, :name, :timezone, :birthday, :sex, :affiliations, :locale, :profile_url]
attr_accessor :id, :session
populating_attr_accessor *FIELDS
Expand Down
25 changes: 16 additions & 9 deletions lib/facebooker/rails/controller.rb
Expand Up @@ -71,23 +71,30 @@ def valid_session_key_in_session?
!session[:facebook_session].blank? && (params[:fb_sig_session_key].blank? || session[:facebook_session].session_key == facebook_params[:session_key])
end
end

def clear_fb_cookies!
fb_cookie_names.each {|name| cookies[name] = nil }
end

def fb_cookie_prefix
Facebooker.api_key+"_"
end

def fb_cookie_names
fb_cookie_names = cookies.keys.select{|k| k.starts_with?(fb_cookie_prefix)}
end

def secure_with_cookies!
api_key = ENV['FACEBOOK_API_KEY']
prefix = api_key+"_"
parsed = {}

#find all str s.t. !cookies[key_str].nil, set param[str] = cookies[key_str]
cookies.keys.select{|k| k[0, prefix.size] == prefix}.each{ |k|
parsed[k[prefix.size,k.size]] = cookies[k]
}

fb_cookie_names.each { |key| parsed[key[fb_cookie_prefix.size,key.size]] = cookies[key] }

#returning gracefully if the cookies aren't set or have expired
return unless parsed['session_key'] && parsed['user'] && parsed['expires'] && parsed['ss']
return unless Time.at(parsed['expires'].to_f) > Time.now

#if we have the unexpired cookies, we'll throw an exception if the sig doesn't verify
verify_signature(parsed,cookies[api_key])
verify_signature(parsed,cookies[Facebooker.api_key])

@facebook_session = new_facebook_session
@facebook_session.secure_with!(parsed['session_key'],parsed['user'],parsed['expires'],parsed['ss'])
Expand Down Expand Up @@ -263,4 +270,4 @@ def ensure_application_is_installed_by_facebook_user(options = {})
end
end
end
end
end
35 changes: 31 additions & 4 deletions lib/facebooker/rails/helpers.rb
Expand Up @@ -8,6 +8,7 @@ module Rails
#
module Helpers

include Facebooker::Rails::Helpers::FbConnect

# Create an fb:dialog
# id must be a unique name e.g. "my_dialog"
Expand Down Expand Up @@ -196,7 +197,7 @@ def fb_name(user, options={})
options.transform_keys!(FB_NAME_OPTION_KEYS_TO_TRANSFORM)
options.assert_valid_keys(FB_NAME_VALID_OPTION_KEYS)
options.merge!(:uid => cast_to_facebook_id(user))
tag("fb:name", stringify_vals(options))
content_tag("fb:name",nil, stringify_vals(options))
end

FB_NAME_OPTION_KEYS_TO_TRANSFORM = {:first_name_only => :firstnameonly,
Expand All @@ -217,7 +218,7 @@ def fb_pronoun(user, options={})
options.transform_keys!(FB_PRONOUN_OPTION_KEYS_TO_TRANSFORM)
options.assert_valid_keys(FB_PRONOUN_VALID_OPTION_KEYS)
options.merge!(:uid => cast_to_facebook_id(user))
tag("fb:pronoun", stringify_vals(options))
content_tag("fb:pronoun",nil, stringify_vals(options))
end

FB_PRONOUN_OPTION_KEYS_TO_TRANSFORM = {:use_you => :useyou, :use_they => :usethey}
Expand Down Expand Up @@ -259,7 +260,7 @@ def fb_profile_pic(user, options={})
options = options.dup
validate_fb_profile_pic_size(options)
options.merge!(:uid => cast_to_facebook_id(user))
tag("fb:profile-pic", stringify_vals(options))
content_tag("fb:profile-pic", nil,stringify_vals(options))
end

# Render an fb:photo tag.
Expand All @@ -271,7 +272,7 @@ def fb_photo(photo, options={})
options.merge!(:pid => cast_to_photo_id(photo))
validate_fb_photo_size(options)
validate_fb_photo_align_value(options)
tag("fb:photo", stringify_vals(options))
content_tag("fb:photo",nil, stringify_vals(options))
end

FB_PHOTO_VALID_OPTION_KEYS = [:uid, :size, :align]
Expand Down Expand Up @@ -544,6 +545,32 @@ def fb_prompt_permission(permission,message,callback=nil)
content_tag("fb:prompt-permission",message,args)
end

def fb_eventlink(eid)
content_tag "fb:eventlink",nil,:eid=>eid
end

def fb_grouplink(gid)
content_tag "fb:grouplink",nil,:gid=>gid
end

def fb_user_status(user,linked=true)
content_tag "fb:user-status",nil,stringify_vals(:uid=>cast_to_facebook_id(user), :linked=>linked)
end

def fb_share_button(url)
content_tag "fb:share-button",nil,:class=>"url",:href=>url
end

def fb_serverfbml(options={},&proc)
inner = capture(&proc)
concat(content_tag("fb:serverfbml",inner,options),&proc.binding)
end

def fb_container(options={},&proc)
inner = capture(&proc)
concat(content_tag("fb:container",inner,options),&proc.binding)
end

protected

def cast_to_facebook_id(object)
Expand Down
34 changes: 34 additions & 0 deletions lib/facebooker/rails/helpers/fb_connect.rb
@@ -0,0 +1,34 @@
module Facebooker
module Rails
module Helpers
module FbConnect

def fb_connect_javascript_tag
javascript_include_tag "http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"
end

def init_fb_connect(*required_features)
init_string = "FB.Facebook.init('#{Facebooker.api_key}','/xd_receiver.html');"
unless required_features.blank?
init_string = <<-FBML
Element.observe(window,'load', function() {
FB_RequireFeatures(#{required_features.to_json}, function() {
#{init_string}
});
});
FBML
end
javascript_tag init_string
end

def fb_login_button(callback=nil)
content_tag("fb:login-button",nil,(callback.nil? ? {} : {:onlogin=>callback}))
end

def fb_unconnected_friends_count
content_tag "fb:unconnected-friends-count",nil
end
end
end
end
end
1 change: 1 addition & 0 deletions test/publisher_test.rb
Expand Up @@ -6,6 +6,7 @@
require 'active_record'
require File.dirname(__FILE__)+'/../init'
require 'facebooker/rails/controller'
require 'facebooker/rails/helpers/fb_connect'
require 'facebooker/rails/helpers'
require 'facebooker/rails/publisher'

Expand Down

0 comments on commit 33bce62

Please sign in to comment.