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 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.39"
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-01}
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: * 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}
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.1}
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/facebooker_test.rb", "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/rails_integration_test.rb", "test/facebooker/server_cache_test.rb", "test/facebooker/session_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/net/http_multipart_post_test.rb", "test/rack/facebook_test.rb"]
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 = 2
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>, [">= 1.11.0"])
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>, [">= 1.11.0"])
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>, [">= 1.11.0"])
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 = YAML.load_file(facebooker_yaml_file)[RAILS_ENV]
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
- old = Thread.current[:fb_api_config].dup rescue false
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'
@@ -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
- Parser.parse(params[:method], post_form(url,params) )
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
- if Facebooker.use_curl?
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
- if Facebooker.use_curl?
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 post_multipart_form_with_net_http(url,params)
61
- Net::HTTP.post_multipart_form(url, params)
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
@@ -2,7 +2,7 @@ module Facebooker #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
4
  MINOR = 0
5
- TINY = 39
5
+ TINY = 40
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/lib/rack/facebook.rb CHANGED
@@ -30,28 +30,35 @@ module Rack
30
30
  end
31
31
 
32
32
  def call(env)
33
- if @condition.nil? || @condition.call(env)
34
- request = Rack::Request.new(env)
35
- fb_params = extract_fb_sig_params(request.POST)
36
- unless fb_params.empty?
37
- Facebooker.with_application(fb_params['api_key']) do
38
- unless signature_is_valid?(fb_params, request.POST['fb_sig'])
39
- return Rack::Response.new(["Invalid Facebook signature"], 400).finish
40
- end
41
- env['REQUEST_METHOD'] = fb_params["request_method"] if fb_params["request_method"]
42
- convert_parameters!(request.POST)
43
- @app.call(env)
44
- end
45
- else
46
- @app.call(env)
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
- else
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_'
@@ -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.load_file(facebook_config)[RAILS_ENV]
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.39
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-01 00:00:00 -07:00
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: 1.11.0
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
- has_rdoc: true
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: 2
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