mmangino-facebooker 1.0.39 → 1.0.40
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/facebooker.gemspec +15 -11
- data/lib/facebooker.rb +10 -5
- data/lib/facebooker/service.rb +59 -62
- data/lib/facebooker/version.rb +1 -1
- data/lib/rack/facebook.rb +22 -15
- data/lib/tasks/tunnel.rake +1 -1
- data/test/facebooker/service_test.rb +58 -0
- data/test/facebooker/session_test.rb +0 -24
- metadata +11 -9
data/facebooker.gemspec
CHANGED
@@ -2,37 +2,41 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{facebooker}
|
5
|
-
s.version = "1.0.
|
5
|
+
s.version = "1.0.40"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Chad Fowler", "Patrick Ewing", "Mike Mangino", "Shane Vitarana", "Corey Innis"]
|
9
|
-
s.date = %q{2009-07-
|
10
|
-
s.description = %q{Facebooker is a Ruby wrapper over the Facebook[http://facebook.com] {REST API}[http://wiki.developers.facebook.com/index.php/API]. Its goals are:
|
9
|
+
s.date = %q{2009-07-10}
|
10
|
+
s.description = %q{Facebooker is a Ruby wrapper over the Facebook[http://facebook.com] {REST API}[http://wiki.developers.facebook.com/index.php/API]. Its goals are:
|
11
|
+
|
12
|
+
* Idiomatic Ruby
|
13
|
+
* No dependencies outside of the Ruby standard library (This is true with Rails 2.1. Previous Rails versions require the JSON gem)
|
14
|
+
* Concrete classes and methods modeling the Facebook data, so it's easy for a Rubyist to understand what's available
|
15
|
+
* Well tested}
|
11
16
|
s.email = %q{mmangino@elevatedrails.com}
|
12
17
|
s.extra_rdoc_files = ["Manifest.txt", "CHANGELOG.rdoc", "COPYING.rdoc", "README.rdoc", "TODO.rdoc"]
|
13
|
-
s.files = [".autotest", "CHANGELOG.rdoc", "COPYING.rdoc", "Manifest.txt", "README.rdoc", "Rakefile", "TODO.rdoc", "examples/desktop_login.rb", "facebooker.gemspec", "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/publisher/publisher_generator.rb", "generators/xd_receiver/templates/xd_receiver.html", "generators/xd_receiver/xd_receiver_generator.rb", "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/mobile.rb", "lib/facebooker/mock/service.rb", "lib/facebooker/mock/session.rb", "lib/facebooker/model.rb", "lib/facebooker/models/affiliation.rb", "lib/facebooker/models/album.rb", "lib/facebooker/models/applicationproperties.rb", "lib/facebooker/models/applicationrestrictions.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/video.rb", "lib/facebooker/models/work_info.rb", "lib/facebooker/parser.rb", "lib/facebooker/rails/backwards_compatible_param_checks.rb", "lib/facebooker/rails/controller.rb", "lib/facebooker/rails/cucumber.rb", "lib/facebooker/rails/cucumber/world.rb", "lib/facebooker/rails/extensions/action_controller.rb", "lib/facebooker/rails/extensions/rack_setup.rb", "lib/facebooker/rails/extensions/routing.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_request_fix_2-3.rb", "lib/facebooker/rails/facebook_session_handling.rb", "lib/facebooker/rails/facebook_url_helper.rb", "lib/facebooker/rails/facebook_url_rewriting.rb", "lib/facebooker/rails/helpers.rb", "lib/facebooker/rails/helpers/fb_connect.rb", "lib/facebooker/rails/integration_session.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/rack/facebook.rb", "lib/tasks/facebooker.rake", "lib/tasks/tunnel.rake", "rails/init.rb", "setup.rb", "templates/layout.erb", "test/facebooker/adapters_test.rb", "test/facebooker/admin_test.rb", "test/facebooker/batch_request_test.rb", "test/facebooker/data_test.rb", "test/facebooker/logging_test.rb", "test/facebooker/mobile_test.rb", "test/facebooker/model_test.rb", "test/facebooker/models/event_test.rb", "test/facebooker/models/photo_test.rb", "test/facebooker/models/user_test.rb", "test/facebooker/rails/publisher_test.rb", "test/facebooker/rails_integration_test.rb", "test/facebooker/rails/facebook_request_fix_2-3_test.rb", "test/facebooker/server_cache_test.rb", "test/facebooker/session_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/net/http_multipart_post_test.rb", "test/rack/facebook_test.rb", "test/rails_test_helper.rb", "test/test_helper.rb", "test/facebooker/rails/facebook_url_rewriting_test.rb"]
|
14
|
-
s.has_rdoc = true
|
18
|
+
s.files = [".autotest", "CHANGELOG.rdoc", "COPYING.rdoc", "Manifest.txt", "README.rdoc", "Rakefile", "TODO.rdoc", "examples/desktop_login.rb", "facebooker.gemspec", "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/publisher/publisher_generator.rb", "generators/xd_receiver/templates/xd_receiver.html", "generators/xd_receiver/xd_receiver_generator.rb", "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/mobile.rb", "lib/facebooker/mock/service.rb", "lib/facebooker/mock/session.rb", "lib/facebooker/model.rb", "lib/facebooker/models/affiliation.rb", "lib/facebooker/models/album.rb", "lib/facebooker/models/applicationproperties.rb", "lib/facebooker/models/applicationrestrictions.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/video.rb", "lib/facebooker/models/work_info.rb", "lib/facebooker/parser.rb", "lib/facebooker/rails/backwards_compatible_param_checks.rb", "lib/facebooker/rails/controller.rb", "lib/facebooker/rails/cucumber.rb", "lib/facebooker/rails/cucumber/world.rb", "lib/facebooker/rails/extensions/action_controller.rb", "lib/facebooker/rails/extensions/rack_setup.rb", "lib/facebooker/rails/extensions/routing.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_request_fix_2-3.rb", "lib/facebooker/rails/facebook_session_handling.rb", "lib/facebooker/rails/facebook_url_helper.rb", "lib/facebooker/rails/facebook_url_rewriting.rb", "lib/facebooker/rails/helpers.rb", "lib/facebooker/rails/helpers/fb_connect.rb", "lib/facebooker/rails/integration_session.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/rack/facebook.rb", "lib/tasks/facebooker.rake", "lib/tasks/tunnel.rake", "rails/init.rb", "setup.rb", "templates/layout.erb", "test/facebooker/adapters_test.rb", "test/facebooker/admin_test.rb", "test/facebooker/batch_request_test.rb", "test/facebooker/data_test.rb", "test/facebooker/logging_test.rb", "test/facebooker/mobile_test.rb", "test/facebooker/model_test.rb", "test/facebooker/models/event_test.rb", "test/facebooker/models/photo_test.rb", "test/facebooker/models/user_test.rb", "test/facebooker/rails/publisher_test.rb", "test/facebooker/rails_integration_test.rb", "test/facebooker/rails/facebook_request_fix_2-3_test.rb", "test/facebooker/server_cache_test.rb", "test/facebooker/session_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/net/http_multipart_post_test.rb", "test/rack/facebook_test.rb", "test/rails_test_helper.rb", "test/test_helper.rb", "test/facebooker/rails/facebook_url_rewriting_test.rb", "test/facebooker/service_test.rb"]
|
15
19
|
s.homepage = %q{http://facebooker.rubyforge.org}
|
16
20
|
s.rdoc_options = ["--main", "README.rdoc"]
|
17
21
|
s.require_paths = ["lib"]
|
18
22
|
s.rubyforge_project = %q{facebooker}
|
19
|
-
s.rubygems_version = %q{1.3.
|
23
|
+
s.rubygems_version = %q{1.3.4}
|
20
24
|
s.summary = %q{Facebooker is a Ruby wrapper over the Facebook[http://facebook.com] {REST API}[http://wiki.developers.facebook.com/index.php/API]}
|
21
|
-
s.test_files = ["test/
|
25
|
+
s.test_files = ["test/facebooker/adapters_test.rb", "test/facebooker/admin_test.rb", "test/facebooker/batch_request_test.rb", "test/facebooker/data_test.rb", "test/facebooker/logging_test.rb", "test/facebooker/mobile_test.rb", "test/facebooker/model_test.rb", "test/facebooker/models/event_test.rb", "test/facebooker/models/photo_test.rb", "test/facebooker/models/user_test.rb", "test/facebooker/rails/facebook_request_fix_2-3_test.rb", "test/facebooker/rails/facebook_url_rewriting_test.rb", "test/facebooker/rails/publisher_test.rb", "test/facebooker/rails_integration_test.rb", "test/facebooker/server_cache_test.rb", "test/facebooker/service_test.rb", "test/facebooker/session_test.rb", "test/facebooker_test.rb", "test/net/http_multipart_post_test.rb", "test/rack/facebook_test.rb"]
|
22
26
|
|
23
27
|
if s.respond_to? :specification_version then
|
24
28
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
|
-
s.specification_version =
|
29
|
+
s.specification_version = 3
|
26
30
|
|
27
31
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
32
|
s.add_runtime_dependency(%q<json>, [">= 1.0.0"])
|
29
|
-
s.add_development_dependency(%q<hoe>, [">=
|
33
|
+
s.add_development_dependency(%q<hoe>, [">= 2.3.2"])
|
30
34
|
else
|
31
35
|
s.add_dependency(%q<json>, [">= 1.0.0"])
|
32
|
-
s.add_dependency(%q<hoe>, [">=
|
36
|
+
s.add_dependency(%q<hoe>, [">= 2.3.2"])
|
33
37
|
end
|
34
38
|
else
|
35
39
|
s.add_dependency(%q<json>, [">= 1.0.0"])
|
36
|
-
s.add_dependency(%q<hoe>, [">=
|
40
|
+
s.add_dependency(%q<hoe>, [">= 2.3.2"])
|
37
41
|
end
|
38
42
|
end
|
data/lib/facebooker.rb
CHANGED
@@ -37,10 +37,9 @@ module Facebooker
|
|
37
37
|
|
38
38
|
def load_configuration(facebooker_yaml_file)
|
39
39
|
if File.exist?(facebooker_yaml_file)
|
40
|
+
@raw_facebooker_configuration = YAML.load(ERB.new(File.read(facebooker_yaml_file)).result)
|
40
41
|
if defined? RAILS_ENV
|
41
|
-
@raw_facebooker_configuration =
|
42
|
-
else
|
43
|
-
@raw_facebooker_configuration = YAML.load_file(facebooker_yaml_file)
|
42
|
+
@raw_facebooker_configuration = @raw_facebooker_configuration[RAILS_ENV]
|
44
43
|
end
|
45
44
|
Thread.current[:fb_api_config] = @raw_facebooker_configuration unless Thread.current[:fb_api_config]
|
46
45
|
apply_configuration(@raw_facebooker_configuration)
|
@@ -78,8 +77,9 @@ module Facebooker
|
|
78
77
|
return
|
79
78
|
end
|
80
79
|
|
81
|
-
# Save the old config to handle nested activation
|
82
|
-
|
80
|
+
# Save the old config to handle nested activation. If no app context is
|
81
|
+
# set yet, use default app's configuration.
|
82
|
+
old = Thread.current[:fb_api_config] ? Thread.current[:fb_api_config].dup : @raw_facebooker_configuration
|
83
83
|
|
84
84
|
if block_given?
|
85
85
|
begin
|
@@ -186,6 +186,11 @@ require 'facebooker/logging'
|
|
186
186
|
require 'facebooker/model'
|
187
187
|
require 'facebooker/parser'
|
188
188
|
require 'facebooker/service'
|
189
|
+
require 'facebooker/service/base_service'
|
190
|
+
require 'facebooker/service/curl_service' rescue nil
|
191
|
+
require 'facebooker/service/typhoeus_service' rescue nil
|
192
|
+
require 'facebooker/service/typhoeus_multi_service' rescue nil
|
193
|
+
require 'facebooker/service/net_http_service'
|
189
194
|
require 'facebooker/server_cache'
|
190
195
|
require 'facebooker/data'
|
191
196
|
require 'facebooker/admin'
|
data/lib/facebooker/service.rb
CHANGED
@@ -1,9 +1,3 @@
|
|
1
|
-
begin
|
2
|
-
require 'curb'
|
3
|
-
Facebooker.use_curl = true
|
4
|
-
rescue LoadError
|
5
|
-
require 'net/http'
|
6
|
-
end
|
7
1
|
require 'facebooker/parser'
|
8
2
|
module Facebooker
|
9
3
|
class Service
|
@@ -13,10 +7,63 @@ module Facebooker
|
|
13
7
|
@api_key = api_key
|
14
8
|
end
|
15
9
|
|
10
|
+
def self.active_service
|
11
|
+
unless @active_service
|
12
|
+
if Facebooker.use_curl?
|
13
|
+
@active_service = Facebooker::Service::CurlService.new
|
14
|
+
else
|
15
|
+
@active_service = Facebooker::Service::NetHttpService.new
|
16
|
+
end
|
17
|
+
end
|
18
|
+
@active_service
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.active_service=(new_service)
|
22
|
+
@active_service = new_service
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.with_service(service)
|
26
|
+
old_service = active_service
|
27
|
+
self.active_service = service
|
28
|
+
begin
|
29
|
+
yield
|
30
|
+
ensure
|
31
|
+
self.active_service = old_service
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
# Process all calls to Facebook in th block asynchronously
|
37
|
+
# nil will be returned from all calls and no results will be parsed. This is mostly useful
|
38
|
+
# for sending large numbers of notifications or sending a lot of profile updates
|
39
|
+
#
|
40
|
+
# for example:
|
41
|
+
# User.all.each_slice(200) do |users|
|
42
|
+
# Faceboooker::Service.with_async do
|
43
|
+
# users.each {|u| u.facebook_session.send_notification(...)}
|
44
|
+
# end
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# Note: You shouldn't make more than about 200 api calls in a with_async block
|
48
|
+
# or you might exhaust all filehandles.
|
49
|
+
def self.with_async(&proc)
|
50
|
+
block_with_process = Proc.new { proc.call ; process_async}
|
51
|
+
with_service(Facebooker::Service::TyphoeusMultiService.new,&block_with_process)
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.process_async
|
55
|
+
active_service.process
|
56
|
+
end
|
57
|
+
|
58
|
+
|
16
59
|
# TODO: support ssl
|
17
60
|
def post(params)
|
18
61
|
attempt = 0
|
19
|
-
|
62
|
+
if active_service.parse_results?
|
63
|
+
Parser.parse(params[:method], post_form(url,params) )
|
64
|
+
else
|
65
|
+
post_form(url,params)
|
66
|
+
end
|
20
67
|
rescue Errno::ECONNRESET, EOFError
|
21
68
|
if attempt == 0
|
22
69
|
attempt += 1
|
@@ -25,42 +72,17 @@ module Facebooker
|
|
25
72
|
end
|
26
73
|
|
27
74
|
def post_form(url,params)
|
28
|
-
|
29
|
-
post_form_with_curl(url,params)
|
30
|
-
else
|
31
|
-
post_form_with_net_http(url,params)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def post_form_with_net_http(url,params)
|
36
|
-
post_params = {}
|
37
|
-
params.each do |k,v|
|
38
|
-
post_params[k] = v
|
39
|
-
post_params[k] = Facebooker.json_encode(v) if Array === v
|
40
|
-
end
|
41
|
-
Net::HTTP.post_form(url, post_params)
|
42
|
-
end
|
43
|
-
|
44
|
-
def post_form_with_curl(url,params,multipart=false)
|
45
|
-
response = Curl::Easy.http_post(url.to_s, *to_curb_params(params)) do |c|
|
46
|
-
c.multipart_form_post = multipart
|
47
|
-
c.timeout = Facebooker.timeout
|
48
|
-
end
|
49
|
-
response.body_str
|
75
|
+
active_service.post_form(url,params)
|
50
76
|
end
|
51
77
|
|
52
78
|
def post_multipart_form(url,params)
|
53
|
-
|
54
|
-
post_form_with_curl(url,params,true)
|
55
|
-
else
|
56
|
-
post_multipart_form_with_net_http(url,params)
|
57
|
-
end
|
79
|
+
active_service.post_multipart_form(url,params)
|
58
80
|
end
|
59
81
|
|
60
|
-
def
|
61
|
-
|
82
|
+
def active_service
|
83
|
+
self.class.active_service
|
62
84
|
end
|
63
|
-
|
85
|
+
|
64
86
|
def post_file(params)
|
65
87
|
service_url = url(params.delete(:base))
|
66
88
|
result = post_multipart_form(service_url, params)
|
@@ -73,30 +95,5 @@ module Facebooker
|
|
73
95
|
URI.parse('http://'+ base + @api_path)
|
74
96
|
end
|
75
97
|
|
76
|
-
# Net::HTTP::MultipartPostFile
|
77
|
-
def multipart_post_file?(object)
|
78
|
-
object.respond_to?(:content_type) &&
|
79
|
-
object.respond_to?(:data) &&
|
80
|
-
object.respond_to?(:filename)
|
81
|
-
end
|
82
|
-
|
83
|
-
def to_curb_params(params)
|
84
|
-
parray = []
|
85
|
-
params.each_pair do |k,v|
|
86
|
-
if multipart_post_file?(v)
|
87
|
-
# Curl doesn't like blank field names
|
88
|
-
field = Curl::PostField.file((k.blank? ? 'xxx' : k.to_s), nil, File.basename(v.filename))
|
89
|
-
field.content_type = v.content_type
|
90
|
-
field.content = v.data
|
91
|
-
parray << field
|
92
|
-
else
|
93
|
-
parray << Curl::PostField.content(
|
94
|
-
k.to_s,
|
95
|
-
Array === v ? Facebooker.json_encode(v) : v.to_s
|
96
|
-
)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
parray
|
100
|
-
end
|
101
98
|
end
|
102
99
|
end
|
data/lib/facebooker/version.rb
CHANGED
data/lib/rack/facebook.rb
CHANGED
@@ -30,28 +30,35 @@ module Rack
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def call(env)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
33
|
+
return @app.call(env) unless @condition.nil? || @condition.call(env)
|
34
|
+
|
35
|
+
request = Rack::Request.new(env)
|
36
|
+
fb_sig, fb_params = nil, nil
|
37
|
+
|
38
|
+
[ request.POST, request.GET ].each do |params|
|
39
|
+
fb_sig, fb_params = fb_sig_and_params( params )
|
40
|
+
break if fb_sig
|
41
|
+
end
|
42
|
+
|
43
|
+
return @app.call(env) if fb_params.empty?
|
44
|
+
|
45
|
+
Facebooker.with_application(fb_params['api_key']) do
|
46
|
+
unless signature_is_valid?(fb_params, fb_sig)
|
47
|
+
return Rack::Response.new(["Invalid Facebook signature"], 400).finish
|
47
48
|
end
|
48
|
-
|
49
|
+
env['REQUEST_METHOD'] = fb_params["request_method"] if fb_params["request_method"]
|
50
|
+
convert_parameters!(request.params)
|
49
51
|
@app.call(env)
|
50
52
|
end
|
51
53
|
end
|
52
54
|
|
53
55
|
private
|
54
56
|
|
57
|
+
def fb_sig_and_params( params )
|
58
|
+
return nil, [] unless params['fb_sig']
|
59
|
+
return params['fb_sig'], extract_fb_sig_params(params)
|
60
|
+
end
|
61
|
+
|
55
62
|
def extract_fb_sig_params(params)
|
56
63
|
params.inject({}) do |collection, (param, value)|
|
57
64
|
collection[param.sub(/^fb_sig_/, '')] = value if param[0,7] == 'fb_sig_'
|
data/lib/tasks/tunnel.rake
CHANGED
@@ -28,7 +28,7 @@ namespace :facebooker do
|
|
28
28
|
|
29
29
|
task :config => :environment do
|
30
30
|
facebook_config = File.dirname(__FILE__) + '/../../../../../config/facebooker.yml'
|
31
|
-
FACEBOOKER = YAML.
|
31
|
+
FACEBOOKER = YAML.load(ERB.new(File.read(facebook_config)).result)[RAILS_ENV]
|
32
32
|
@public_host_username = FACEBOOKER['tunnel']['public_host_username']
|
33
33
|
@public_host = FACEBOOKER['tunnel']['public_host']
|
34
34
|
@public_port = FACEBOOKER['tunnel']['public_port']
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
require 'active_support'
|
3
|
+
# make sure the class exists
|
4
|
+
class ::Facebooker::Service::CurlService < Facebooker::Service::BaseService
|
5
|
+
end
|
6
|
+
|
7
|
+
class ::Facebooker::Service::TyphoeusMultiService
|
8
|
+
def process
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class Facebooker::ServiceTest < Test::Unit::TestCase
|
13
|
+
|
14
|
+
def test_should_use_the_curl_service
|
15
|
+
Facebooker.use_curl = true
|
16
|
+
Facebooker::Service.active_service= nil
|
17
|
+
assert(Facebooker::Service::CurlService === Facebooker::Service.active_service)
|
18
|
+
ensure
|
19
|
+
Facebooker::Service.active_service= nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_allow_changing_the_service_in_a_block
|
23
|
+
Facebooker::Service.with_service("MyService") do
|
24
|
+
assert_equal(Facebooker::Service.active_service,"MyService")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_should_restore_the_original_service_even_with_an_exception
|
30
|
+
original_service = Facebooker::Service.active_service
|
31
|
+
begin
|
32
|
+
Facebooker::Service.with_service("MyService") do
|
33
|
+
raise "This is a test"
|
34
|
+
end
|
35
|
+
fail("Should have raised")
|
36
|
+
rescue
|
37
|
+
end
|
38
|
+
assert_equal(original_service,Facebooker::Service.active_service)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_should_allow_using_the_async_service
|
42
|
+
Facebooker::Service.with_async do
|
43
|
+
assert(Facebooker::Service::TyphoeusMultiService === Facebooker::Service.active_service)
|
44
|
+
@called = true
|
45
|
+
end
|
46
|
+
assert @called
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_should_call_process_at_the_end_of_the_block
|
50
|
+
Facebooker::Service.with_async do
|
51
|
+
Facebooker::Service.active_service.expects(:process)
|
52
|
+
@called = true
|
53
|
+
end
|
54
|
+
assert @called
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -614,30 +614,6 @@ XML
|
|
614
614
|
end
|
615
615
|
end
|
616
616
|
|
617
|
-
class PostMethodTest < Test::Unit::TestCase
|
618
|
-
|
619
|
-
def setup
|
620
|
-
Facebooker.use_curl = true
|
621
|
-
Facebooker::Parser.stubs(:parse)
|
622
|
-
@uri = URI.parse("http://api.facebook.com/api")
|
623
|
-
@service = Facebooker::Service.new("a","b","c")
|
624
|
-
@service.stubs("url").returns(@uri)
|
625
|
-
end
|
626
|
-
|
627
|
-
def teardown
|
628
|
-
Facebooker.use_curl = false
|
629
|
-
end
|
630
|
-
|
631
|
-
def test_use_curl_makes_post_with_curl
|
632
|
-
@service.expects(:post_form_with_curl).with(@uri,{:method=>"a"})
|
633
|
-
@service.post(:method=>"a")
|
634
|
-
end
|
635
|
-
|
636
|
-
def test_use_curl_makes_post_file_use_curl_with_multipart
|
637
|
-
@service.expects(:post_form_with_curl).with(@uri,{:method=>"a"},true)
|
638
|
-
@service.post_file(:method=>"a")
|
639
|
-
end
|
640
|
-
end
|
641
617
|
|
642
618
|
class CanvasSessionTest < Test::Unit::TestCase
|
643
619
|
def setup
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mmangino-facebooker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.40
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chad Fowler
|
@@ -13,7 +13,7 @@ autorequire:
|
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
15
|
|
16
|
-
date: 2009-07-
|
16
|
+
date: 2009-07-10 00:00:00 -07:00
|
17
17
|
default_executable:
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ">="
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
37
|
+
version: 2.3.2
|
38
38
|
version:
|
39
39
|
description: "Facebooker is a Ruby wrapper over the Facebook[http://facebook.com] {REST API}[http://wiki.developers.facebook.com/index.php/API]. Its goals are: * Idiomatic Ruby * No dependencies outside of the Ruby standard library (This is true with Rails 2.1. Previous Rails versions require the JSON gem) * Concrete classes and methods modeling the Facebook data, so it's easy for a Rubyist to understand what's available * Well tested"
|
40
40
|
email: mmangino@elevatedrails.com
|
@@ -183,7 +183,8 @@ files:
|
|
183
183
|
- test/rails_test_helper.rb
|
184
184
|
- test/test_helper.rb
|
185
185
|
- test/facebooker/rails/facebook_url_rewriting_test.rb
|
186
|
-
|
186
|
+
- test/facebooker/service_test.rb
|
187
|
+
has_rdoc: false
|
187
188
|
homepage: http://facebooker.rubyforge.org
|
188
189
|
post_install_message:
|
189
190
|
rdoc_options:
|
@@ -208,10 +209,9 @@ requirements: []
|
|
208
209
|
rubyforge_project: facebooker
|
209
210
|
rubygems_version: 1.2.0
|
210
211
|
signing_key:
|
211
|
-
specification_version:
|
212
|
+
specification_version: 3
|
212
213
|
summary: Facebooker is a Ruby wrapper over the Facebook[http://facebook.com] {REST API}[http://wiki.developers.facebook.com/index.php/API]
|
213
214
|
test_files:
|
214
|
-
- test/facebooker_test.rb
|
215
215
|
- test/facebooker/adapters_test.rb
|
216
216
|
- test/facebooker/admin_test.rb
|
217
217
|
- test/facebooker/batch_request_test.rb
|
@@ -219,14 +219,16 @@ test_files:
|
|
219
219
|
- test/facebooker/logging_test.rb
|
220
220
|
- test/facebooker/mobile_test.rb
|
221
221
|
- test/facebooker/model_test.rb
|
222
|
-
- test/facebooker/rails_integration_test.rb
|
223
|
-
- test/facebooker/server_cache_test.rb
|
224
|
-
- test/facebooker/session_test.rb
|
225
222
|
- test/facebooker/models/event_test.rb
|
226
223
|
- test/facebooker/models/photo_test.rb
|
227
224
|
- test/facebooker/models/user_test.rb
|
228
225
|
- test/facebooker/rails/facebook_request_fix_2-3_test.rb
|
229
226
|
- test/facebooker/rails/facebook_url_rewriting_test.rb
|
230
227
|
- test/facebooker/rails/publisher_test.rb
|
228
|
+
- test/facebooker/rails_integration_test.rb
|
229
|
+
- test/facebooker/server_cache_test.rb
|
230
|
+
- test/facebooker/service_test.rb
|
231
|
+
- test/facebooker/session_test.rb
|
232
|
+
- test/facebooker_test.rb
|
231
233
|
- test/net/http_multipart_post_test.rb
|
232
234
|
- test/rack/facebook_test.rb
|