simianarmy-facebooker 1.0.40 → 1.0.50
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/Manifest.txt +7 -0
- data/Rakefile +35 -26
- data/facebooker.gemspec +20 -16
- data/generators/xd_receiver/templates/xd_receiver_ssl.html +10 -0
- data/lib/facebooker/adapters/adapter_base.rb +1 -1
- data/lib/facebooker/adapters/facebook_adapter.rb +8 -0
- data/lib/facebooker/batch_request.rb +1 -1
- data/lib/facebooker/models/group.rb +1 -1
- data/lib/facebooker/models/page.rb +17 -1
- data/lib/facebooker/models/user.rb +76 -6
- data/lib/facebooker/parser.rb +42 -21
- data/lib/facebooker/rails/backwards_compatible_param_checks.rb +1 -1
- data/lib/facebooker/rails/controller.rb +14 -20
- data/lib/facebooker/rails/cucumber/world.rb +25 -31
- data/lib/facebooker/rails/helpers/fb_connect.rb +9 -6
- data/lib/facebooker/rails/helpers.rb +67 -6
- data/lib/facebooker/rails/integration_session.rb +1 -1
- data/lib/facebooker/rails/publisher.rb +54 -9
- data/lib/facebooker/service/base_service.rb +19 -0
- data/lib/facebooker/service/curl_service.rb +44 -0
- data/lib/facebooker/service/net_http_service.rb +12 -0
- data/lib/facebooker/service/typhoeus_multi_service.rb +27 -0
- data/lib/facebooker/service/typhoeus_service.rb +17 -0
- data/lib/facebooker/service.rb +62 -62
- data/lib/facebooker/session.rb +70 -13
- data/lib/facebooker/version.rb +1 -1
- data/lib/facebooker.rb +81 -9
- data/lib/rack/facebook.rb +22 -15
- data/lib/tasks/tunnel.rake +1 -1
- data/test/facebooker/adapters_test.rb +17 -0
- data/test/facebooker/models/page_test.rb +46 -0
- data/test/facebooker/models/user_test.rb +28 -0
- data/test/facebooker/rails/facebook_url_rewriting_test.rb +39 -2
- data/test/facebooker/rails/integration_session_test.rb +13 -0
- data/test/facebooker/rails/publisher_test.rb +50 -12
- data/test/facebooker/rails_integration_test.rb +110 -50
- data/test/facebooker/service_test.rb +58 -0
- data/test/facebooker/session_test.rb +78 -24
- data/test/rack/facebook_test.rb +21 -9
- data/test/rails_test_helper.rb +8 -0
- data/test/test_helper.rb +2 -2
- metadata +31 -11
data/Manifest.txt
CHANGED
|
@@ -38,6 +38,7 @@ generators/facebook_scaffold/templates/view_new.html.erb
|
|
|
38
38
|
generators/facebook_scaffold/templates/view_show.fbml.erb
|
|
39
39
|
generators/facebook_scaffold/templates/view_show.html.erb
|
|
40
40
|
generators/publisher/publisher_generator.rb
|
|
41
|
+
generators/xd_receiver/templates/xd_receiver_ssl.html
|
|
41
42
|
generators/xd_receiver/templates/xd_receiver.html
|
|
42
43
|
generators/xd_receiver/xd_receiver_generator.rb
|
|
43
44
|
init.rb
|
|
@@ -99,6 +100,11 @@ lib/facebooker/rails/test_helpers.rb
|
|
|
99
100
|
lib/facebooker/rails/utilities.rb
|
|
100
101
|
lib/facebooker/server_cache.rb
|
|
101
102
|
lib/facebooker/service.rb
|
|
103
|
+
lib/facebooker/service/base_service.rb
|
|
104
|
+
lib/facebooker/service/curl_service.rb
|
|
105
|
+
lib/facebooker/service/net_http_service.rb
|
|
106
|
+
lib/facebooker/service/typhoeus_service.rb
|
|
107
|
+
lib/facebooker/service/typhoeus_multi_service.rb
|
|
102
108
|
lib/facebooker/session.rb
|
|
103
109
|
lib/facebooker/version.rb
|
|
104
110
|
lib/net/http_multipart_post.rb
|
|
@@ -116,6 +122,7 @@ test/facebooker/logging_test.rb
|
|
|
116
122
|
test/facebooker/mobile_test.rb
|
|
117
123
|
test/facebooker/model_test.rb
|
|
118
124
|
test/facebooker/models/event_test.rb
|
|
125
|
+
test/facebooker/models/page_test.rb
|
|
119
126
|
test/facebooker/models/photo_test.rb
|
|
120
127
|
test/facebooker/models/user_test.rb
|
|
121
128
|
test/facebooker/rails/publisher_test.rb
|
data/Rakefile
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- ruby -*-
|
|
2
|
-
#
|
|
2
|
+
#
|
|
3
3
|
require 'rubygems'
|
|
4
4
|
require 'hoe'
|
|
5
5
|
begin
|
|
@@ -8,36 +8,45 @@ rescue LoadError
|
|
|
8
8
|
$stderr.puts "Install the multi_rails gem to run tests against multiple versions of Rails"
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
require 'lib/facebooker/version'
|
|
12
|
+
|
|
13
|
+
HOE = Hoe.spec('facebooker') do
|
|
14
|
+
self.version = Facebooker::VERSION::STRING
|
|
15
|
+
self.rubyforge_name = 'facebooker'
|
|
16
|
+
developer 'Chad Fowler', 'chad@chadfowlwer.com'
|
|
17
|
+
developer 'Patrick Ewing', ''
|
|
18
|
+
developer 'Mike Mangino', ''
|
|
19
|
+
developer 'Shane Vitarana', ''
|
|
20
|
+
developer 'Corey Innis', ''
|
|
21
|
+
developer 'Mike Mangino', 'mmangino@elevatedrails.com'
|
|
13
22
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
p.remote_rdoc_dir = '' # Release to root
|
|
21
|
-
p.test_globs = 'test/**/*_test.rb'
|
|
22
|
-
p.extra_deps << ['json', '>= 1.0.0']
|
|
23
|
-
p.extra_rdoc_files = FileList['*.rdoc']
|
|
23
|
+
self.readme_file = 'README.rdoc'
|
|
24
|
+
self.history_file = 'CHANGELOG.rdoc'
|
|
25
|
+
self.remote_rdoc_dir = '' # Release to root
|
|
26
|
+
self.test_globs = ['test/**/*_test.rb']
|
|
27
|
+
extra_deps << ['json', '>= 1.0.0']
|
|
28
|
+
self.extra_rdoc_files = FileList['*.rdoc']
|
|
24
29
|
end
|
|
25
30
|
|
|
26
|
-
|
|
31
|
+
begin
|
|
32
|
+
require 'rcov/rcovtask'
|
|
27
33
|
|
|
28
|
-
namespace :test do
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
namespace :test do
|
|
35
|
+
namespace :coverage do
|
|
36
|
+
desc "Delete aggregate coverage data."
|
|
37
|
+
task(:clean) { rm_f "coverage.data" }
|
|
38
|
+
end
|
|
39
|
+
desc 'Aggregate code coverage for unit, functional and integration tests'
|
|
40
|
+
Rcov::RcovTask.new(:coverage) do |t|
|
|
41
|
+
t.libs << "test"
|
|
42
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
|
43
|
+
t.output_dir = "coverage/"
|
|
44
|
+
t.verbose = true
|
|
45
|
+
t.rcov_opts = ['--exclude', 'test,/usr/lib/ruby,/Library/Ruby,/System/Library', '--sort', 'coverage']
|
|
46
|
+
end
|
|
40
47
|
end
|
|
48
|
+
rescue LoadError
|
|
49
|
+
$stderr.puts "Install the rcov gem to enable test coverage analysis"
|
|
41
50
|
end
|
|
42
51
|
|
|
43
52
|
namespace :gem do
|
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.50"
|
|
6
6
|
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
8
|
-
s.authors = ["Chad Fowler", "Patrick Ewing", "Mike Mangino", "Shane Vitarana", "Corey Innis"]
|
|
9
|
-
s.date = %q{2009-
|
|
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
|
-
|
|
8
|
+
s.authors = ["Chad Fowler", "Patrick Ewing", "Mike Mangino", "Shane Vitarana", "Corey Innis", "Mike Mangino"]
|
|
9
|
+
s.date = %q{2009-09-08}
|
|
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}
|
|
16
|
+
s.email = ["chad@chadfowlwer.com", "", "", "", "", "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_ssl.html", "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/service/base_service.rb", "lib/facebooker/service/curl_service.rb", "lib/facebooker/service/net_http_service.rb", "lib/facebooker/service/typhoeus_service.rb", "lib/facebooker/service/typhoeus_multi_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/page_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/rails/integration_session_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/page_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/integration_session_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
|
-
#
|
|
29
|
-
s.add_development_dependency(%q<hoe>, [">=
|
|
32
|
+
#s.add_runtime_dependency(%q<json>, [">= 1.0.0"])
|
|
33
|
+
s.add_development_dependency(%q<hoe>, [">= 2.3.2"])
|
|
30
34
|
else
|
|
31
|
-
#
|
|
32
|
-
s.add_dependency(%q<hoe>, [">=
|
|
35
|
+
#s.add_dependency(%q<json>, [">= 1.0.0"])
|
|
36
|
+
s.add_dependency(%q<hoe>, [">= 2.3.2"])
|
|
33
37
|
end
|
|
34
38
|
else
|
|
35
|
-
#
|
|
36
|
-
s.add_dependency(%q<hoe>, [">=
|
|
39
|
+
#s.add_dependency(%q<json>, [">= 1.0.0"])
|
|
40
|
+
s.add_dependency(%q<hoe>, [">= 2.3.2"])
|
|
37
41
|
end
|
|
38
42
|
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" >
|
|
4
|
+
<head>
|
|
5
|
+
<title>Cross-Domain Receiver Page</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<script src="https://www.connect.facebook.com/js/api_lib/v0.4/XdCommReceiver.js" type="text/javascript"></script>
|
|
9
|
+
</body>
|
|
10
|
+
</html>
|
|
@@ -44,6 +44,14 @@ module Facebooker
|
|
|
44
44
|
def install_url_base
|
|
45
45
|
"http://#{www_server_base_url}/install.php?api_key=#{api_key}&v=1.0"
|
|
46
46
|
end
|
|
47
|
+
|
|
48
|
+
def connect_permission_url_base
|
|
49
|
+
"http://#{www_server_base_url}/connect/prompt_permissions.php?api_key=#{api_key}&v=1.0"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def permission_url_base
|
|
53
|
+
"http://#{www_server_base_url}/authorize.php?api_key=#{api_key}&v=1.0"
|
|
54
|
+
end
|
|
47
55
|
|
|
48
56
|
end
|
|
49
57
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Facebooker
|
|
2
2
|
class BatchRequest
|
|
3
|
-
instance_methods.each { |m| undef_method m unless m =~ /(^__|^nil\?$|^send$|proxy_|^respond_to\?$|^new$)/ }
|
|
3
|
+
instance_methods.each { |m| undef_method m unless m =~ /(^__|^nil\?$|^send$|proxy_|^respond_to\?$|^new|object_id$)/ }
|
|
4
4
|
attr_reader :uri
|
|
5
5
|
attr_reader :method
|
|
6
6
|
class UnexecutedRequest < StandardError; end
|
|
@@ -8,7 +8,7 @@ module Facebooker
|
|
|
8
8
|
attr_accessor :position, :gid, :uid
|
|
9
9
|
end
|
|
10
10
|
include Model
|
|
11
|
-
attr_accessor :pic, :pic_small, :pic_big, :name, :creator, :recent_news, :update_time, :group_subtype, :group_type, :website, :office, :description, :venue, :nid
|
|
11
|
+
attr_accessor :pic, :pic_small, :pic_big, :name, :creator, :recent_news, :update_time, :group_subtype, :group_type, :website, :office, :description, :venue, :nid, :privacy
|
|
12
12
|
|
|
13
13
|
id_is :gid
|
|
14
14
|
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
require 'facebooker/model'
|
|
2
2
|
module Facebooker
|
|
3
3
|
class Page
|
|
4
|
+
|
|
5
|
+
def initialize(*args)
|
|
6
|
+
if args.size == 1 and (args.first.is_a?(Integer) or args.first.is_a?(String))
|
|
7
|
+
self.page_id=args.first
|
|
8
|
+
else
|
|
9
|
+
super
|
|
10
|
+
end
|
|
11
|
+
end
|
|
4
12
|
|
|
5
13
|
class Genre
|
|
6
14
|
include Model
|
|
@@ -18,11 +26,19 @@ module Facebooker
|
|
|
18
26
|
end
|
|
19
27
|
|
|
20
28
|
include Model
|
|
21
|
-
attr_accessor :page_id, :name, :pic_small, :pic_big, :pic_square, :pic_large, :
|
|
29
|
+
attr_accessor :page_id, :name, :pic_small, :pic_big, :pic_square, :pic_large, :page_url, :type, :website, :location, :hours, :band_members, :bio, :hometown, :record_label, :influences, :has_added_app, :founded, :company_overview, :mission, :products, :release_date, :starring, :written_by, :directed_by, :produced_by, :studio, :awards, :plot_outline, :network, :season, :schedule
|
|
22
30
|
attr_reader :genre
|
|
23
31
|
|
|
24
32
|
def genre=(value)
|
|
25
33
|
@genre = value.kind_of?(Hash) ? Genre.from_hash(value) : value
|
|
26
34
|
end
|
|
35
|
+
|
|
36
|
+
def user_is_admin?(user)
|
|
37
|
+
Session.current.post('facebook.pages.isAdmin', :page_id=>self.page_id, :uid=>Facebooker::User.cast_to_facebook_id(user))
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def user_is_fan?(user)
|
|
41
|
+
Session.current.post('facebook.pages.isFan', :page_id=>self.page_id, :uid=>Facebooker::User.cast_to_facebook_id(user))
|
|
42
|
+
end
|
|
27
43
|
end
|
|
28
44
|
end
|
|
@@ -10,8 +10,10 @@ module Facebooker
|
|
|
10
10
|
include Model
|
|
11
11
|
attr_accessor :message, :time, :status_id
|
|
12
12
|
end
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
|
|
14
|
+
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, :work_history, :sex, :religion, :notes_count, :activities, :pic_square, :movies, :has_added_app, :education_history, :birthday, :birthday_date, :first_name, :meeting_for, :last_name, :interests, :current_location, :pic, :books, :affiliations, :locale, :profile_url, :proxied_email, :email_hashes, :allowed_restrictions, :pic_with_logo, :pic_big_with_logo, :pic_small_with_logo, :pic_square_with_logo]
|
|
15
|
+
STANDARD_FIELDS = [:uid, :first_name, :last_name, :name, :timezone, :birthday, :sex, :affiliations, :locale, :profile_url, :proxied_email]
|
|
16
|
+
|
|
15
17
|
populating_attr_accessor(*FIELDS)
|
|
16
18
|
attr_reader :affiliations
|
|
17
19
|
populating_hash_settable_accessor :current_location, Location
|
|
@@ -63,7 +65,17 @@ module Facebooker
|
|
|
63
65
|
@events[params.to_s] ||= @session.post('facebook.events.get', {:uid => self.id}.merge(params)).map do |event|
|
|
64
66
|
Event.from_hash(event)
|
|
65
67
|
end
|
|
66
|
-
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Rsvp to an event with the eid and rsvp_status which can be 'attending', 'unsure', or 'declined'.
|
|
71
|
+
# http://wiki.developers.facebook.com/index.php/Events.rsvp
|
|
72
|
+
# E.g:
|
|
73
|
+
# @user.rsvp_event('100321123', 'attending')
|
|
74
|
+
# # => Returns true if all went well
|
|
75
|
+
def rsvp_event(eid, rsvp_status, options = {})
|
|
76
|
+
result = @session.post('facebook.events.rsvp', options.merge(:eid => eid, :rsvp_status => rsvp_status))
|
|
77
|
+
result == '1' ? true : false
|
|
78
|
+
end
|
|
67
79
|
|
|
68
80
|
#
|
|
69
81
|
# Set the list of friends, given an array of User objects. If the list has been retrieved previously, will not set
|
|
@@ -103,8 +115,62 @@ module Facebooker
|
|
|
103
115
|
end
|
|
104
116
|
@friends_hash[cache_key]
|
|
105
117
|
end
|
|
118
|
+
|
|
119
|
+
def friend_ids
|
|
120
|
+
options = {:uid => self.id}
|
|
121
|
+
@session.post('facebook.friends.get', options, false)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
###
|
|
125
|
+
# Publish a post into the stream on the user's Wall and News Feed. This
|
|
126
|
+
# post also appears in the user's friend's streams. The +publish_stream+
|
|
127
|
+
# extended permission must be granted in order to use this method.
|
|
128
|
+
#
|
|
129
|
+
# See: http://wiki.developers.facebook.com/index.php/Stream.publish
|
|
130
|
+
#
|
|
131
|
+
# +target+ can be the current user or some other user.
|
|
132
|
+
#
|
|
133
|
+
# Example:
|
|
134
|
+
# # Publish a message to my own wall:
|
|
135
|
+
# me.publish_to(me, :message => 'hello world')
|
|
136
|
+
#
|
|
137
|
+
# # Publish to a friend's wall with an action link:
|
|
138
|
+
# me.publish_to(my_friend, :message => 'how are you?', :action_links => [
|
|
139
|
+
# :text => 'my website',
|
|
140
|
+
# :href => 'http://tenderlovemaking.com/'
|
|
141
|
+
# ])
|
|
142
|
+
def publish_to(target, options = {})
|
|
143
|
+
@session.post('facebook.stream.publish', prepare_publish_to_options(target, options), false)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Prepares options for the stream.publish
|
|
147
|
+
def prepare_publish_to_options(target, options)
|
|
148
|
+
opts = {:uid => self.id,
|
|
149
|
+
:target_id => target.id,
|
|
150
|
+
:message => options[:message]}
|
|
151
|
+
|
|
152
|
+
if(attachment = options[:attachment] && Facebooker.json_encode(options[:attachment]))
|
|
153
|
+
opts[:attachment] = attachment
|
|
154
|
+
end
|
|
155
|
+
if (links = options[:action_links] && Facebooker.json_encode(options[:action_links]))
|
|
156
|
+
opts[:action_links] = links
|
|
157
|
+
end
|
|
158
|
+
opts
|
|
159
|
+
end
|
|
106
160
|
|
|
107
|
-
|
|
161
|
+
###
|
|
162
|
+
# Publish a comment on a post
|
|
163
|
+
#
|
|
164
|
+
# See: http://wiki.developers.facebook.com/index.php/Stream.addComment
|
|
165
|
+
#
|
|
166
|
+
# +post_id+ the post_id for the post that is being commented on
|
|
167
|
+
# +comment+ the text of the comment
|
|
168
|
+
def comment_on(post_id, comment)
|
|
169
|
+
@session.post('facebook.stream.addComment', {:post_id=>post_id, :comment=>comment})
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def friend_lists
|
|
108
174
|
@friend_lists ||= @session.post('facebook.friends.getLists').map do |hash|
|
|
109
175
|
friend_list = FriendList.from_hash(hash)
|
|
110
176
|
friend_list.session = session
|
|
@@ -135,10 +201,14 @@ module Facebooker
|
|
|
135
201
|
end
|
|
136
202
|
|
|
137
203
|
def friends_with_this_app
|
|
138
|
-
@friends_with_this_app ||=
|
|
204
|
+
@friends_with_this_app ||= friend_ids_with_this_app.map do |uid|
|
|
139
205
|
User.new(uid, session)
|
|
140
206
|
end
|
|
141
207
|
end
|
|
208
|
+
|
|
209
|
+
def friend_ids_with_this_app
|
|
210
|
+
@friend_ids_with_this_app ||= session.post('facebook.friends.getAppUsers')
|
|
211
|
+
end
|
|
142
212
|
|
|
143
213
|
def groups(gids = [])
|
|
144
214
|
args = gids.empty? ? {} : {:gids => gids}
|
|
@@ -320,7 +390,7 @@ module Facebooker
|
|
|
320
390
|
##
|
|
321
391
|
# Checks to see if the user has enabled the given extended permission
|
|
322
392
|
def has_permission?(ext_perm) # ext_perm = email, offline_access, status_update, photo_upload, create_listing, create_event, rsvp_event, sms
|
|
323
|
-
session.post('facebook.users.hasAppPermission'
|
|
393
|
+
session.post('facebook.users.hasAppPermission', {:ext_perm=>ext_perm, :uid => uid}, false) == "1"
|
|
324
394
|
end
|
|
325
395
|
|
|
326
396
|
##
|
data/lib/facebooker/parser.rb
CHANGED
|
@@ -41,9 +41,20 @@ module Facebooker
|
|
|
41
41
|
|
|
42
42
|
def self.element(name, data)
|
|
43
43
|
data = data.body rescue data # either data or an HTTP response
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
|
|
45
|
+
begin
|
|
46
|
+
xml = Nokogiri::XML(data.strip)
|
|
47
|
+
if node = xml.at(name)
|
|
48
|
+
return node
|
|
49
|
+
end
|
|
50
|
+
if xml.root.name == name
|
|
51
|
+
return xml.root
|
|
52
|
+
end
|
|
53
|
+
rescue NameError # Can't parse with Nokogiri
|
|
54
|
+
doc = REXML::Document.new(data)
|
|
55
|
+
doc.elements.each(name) do |element|
|
|
56
|
+
return element
|
|
57
|
+
end
|
|
47
58
|
end
|
|
48
59
|
raise "Element #{name} not found in #{data}"
|
|
49
60
|
end
|
|
@@ -377,24 +388,26 @@ module Facebooker
|
|
|
377
388
|
end
|
|
378
389
|
|
|
379
390
|
class FqlMultiquery < Parser#nodoc
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
391
|
+
def self.process(data)
|
|
392
|
+
root = element('fql_multiquery_response', data)
|
|
393
|
+
root.children.reject { |child| child.text? }.map do |elm|
|
|
394
|
+
elm.children.reject { |child| child.text? }.map do |query|
|
|
395
|
+
if 'name' == query.name
|
|
396
|
+
query.text
|
|
397
|
+
else
|
|
398
|
+
list = query.children.reject { |child| child.text? }
|
|
399
|
+
if list.length == 0
|
|
400
|
+
[]
|
|
401
|
+
else
|
|
402
|
+
[list.first.name, array_of_hashes(query, list.first.name)]
|
|
403
|
+
end
|
|
404
|
+
end
|
|
405
|
+
end
|
|
406
|
+
end
|
|
407
|
+
end
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
|
|
398
411
|
class SetRefHandle < Parser#:nodoc:
|
|
399
412
|
def self.process(data)
|
|
400
413
|
element('fbml_setRefHandle_response', data).text_value
|
|
@@ -425,6 +438,12 @@ module Facebooker
|
|
|
425
438
|
end
|
|
426
439
|
end
|
|
427
440
|
|
|
441
|
+
class EventsRsvp < Parser#:nodoc:
|
|
442
|
+
def self.process(data)
|
|
443
|
+
element('events_rsvp_response', data).content.strip
|
|
444
|
+
end
|
|
445
|
+
end
|
|
446
|
+
|
|
428
447
|
class EventsGet < Parser#:nodoc:
|
|
429
448
|
def self.process(data)
|
|
430
449
|
array_of_hashes(element('events_get_response', data), 'event')
|
|
@@ -541,6 +560,7 @@ module Facebooker
|
|
|
541
560
|
103 => Facebooker::Session::CallOutOfOrder,
|
|
542
561
|
104 => Facebooker::Session::IncorrectSignature,
|
|
543
562
|
120 => Facebooker::Session::InvalidAlbumId,
|
|
563
|
+
200 => Facebooker::Session::PermissionError,
|
|
544
564
|
250 => Facebooker::Session::ExtendedPermissionRequired,
|
|
545
565
|
321 => Facebooker::Session::AlbumIsFull,
|
|
546
566
|
324 => Facebooker::Session::MissingOrInvalidImageFile,
|
|
@@ -634,6 +654,7 @@ module Facebooker
|
|
|
634
654
|
'facebook.photos.addTag' => AddTags,
|
|
635
655
|
'facebook.photos.upload' => UploadPhoto,
|
|
636
656
|
'facebook.events.get' => EventsGet,
|
|
657
|
+
'facebook.events.rsvp' => EventsRsvp,
|
|
637
658
|
'facebook.groups.get' => GroupsGet,
|
|
638
659
|
'facebook.events.getMembers' => EventMembersGet,
|
|
639
660
|
'facebook.groups.getMembers' => GroupGetMembers,
|
|
@@ -7,7 +7,6 @@ module Facebooker
|
|
|
7
7
|
include Facebooker::Rails::ProfilePublisherExtensions
|
|
8
8
|
def self.included(controller)
|
|
9
9
|
controller.extend(ClassMethods)
|
|
10
|
-
controller.before_filter :set_adapter
|
|
11
10
|
controller.before_filter :set_facebook_request_format
|
|
12
11
|
controller.helper_attr :facebook_session_parameters
|
|
13
12
|
controller.helper_method :request_comes_from_facebook?
|
|
@@ -180,7 +179,11 @@ module Facebooker
|
|
|
180
179
|
end
|
|
181
180
|
|
|
182
181
|
def default_after_facebook_login_url
|
|
183
|
-
|
|
182
|
+
omit_keys = ["_method", "format"]
|
|
183
|
+
options = (params||{}).clone
|
|
184
|
+
options = options.reject{|k,v| k.to_s.match(/^fb_sig/) or omit_keys.include?(k.to_s)}
|
|
185
|
+
options = options.merge({:only_path => false})
|
|
186
|
+
url_for(options)
|
|
184
187
|
end
|
|
185
188
|
|
|
186
189
|
def create_new_facebook_session_and_redirect!
|
|
@@ -202,10 +205,6 @@ module Facebooker
|
|
|
202
205
|
end
|
|
203
206
|
end
|
|
204
207
|
end
|
|
205
|
-
|
|
206
|
-
def blank?(value)
|
|
207
|
-
(value == '0' || value.nil? || value == '')
|
|
208
|
-
end
|
|
209
208
|
|
|
210
209
|
def verified_facebook_params
|
|
211
210
|
facebook_sig_params = params.inject({}) do |collection, pair|
|
|
@@ -226,12 +225,11 @@ module Facebooker
|
|
|
226
225
|
|
|
227
226
|
def verify_signature(facebook_sig_params,expected_signature)
|
|
228
227
|
# Don't verify the signature if rack has already done so.
|
|
229
|
-
|
|
230
|
-
|
|
228
|
+
unless ::Rails.version >= "2.3" and ActionController::Dispatcher.middleware.include? Rack::Facebook
|
|
229
|
+
raw_string = facebook_sig_params.map{ |*args| args.join('=') }.sort.join
|
|
230
|
+
actual_sig = Digest::MD5.hexdigest([raw_string, Facebooker::Session.secret_key].join)
|
|
231
|
+
raise Facebooker::Session::IncorrectSignature if actual_sig != expected_signature
|
|
231
232
|
end
|
|
232
|
-
raw_string = facebook_sig_params.map{ |*args| args.join('=') }.sort.join
|
|
233
|
-
actual_sig = Digest::MD5.hexdigest([raw_string, Facebooker::Session.secret_key].join)
|
|
234
|
-
raise Facebooker::Session::IncorrectSignature if actual_sig != expected_signature
|
|
235
233
|
raise Facebooker::Session::SignatureTooOld if facebook_sig_params['time'] && Time.at(facebook_sig_params['time'].to_f) < earliest_valid_session
|
|
236
234
|
true
|
|
237
235
|
end
|
|
@@ -240,11 +238,11 @@ module Facebooker
|
|
|
240
238
|
@facebook_parameter_conversions ||= Hash.new do |hash, key|
|
|
241
239
|
lambda{|value| value}
|
|
242
240
|
end.merge(
|
|
243
|
-
'time'
|
|
244
|
-
'in_canvas' => lambda{|value|
|
|
245
|
-
'added'
|
|
246
|
-
'expires'
|
|
247
|
-
'friends'
|
|
241
|
+
'time' => lambda{|value| Time.at(value.to_f)},
|
|
242
|
+
'in_canvas' => lambda{|value| one_or_true(value)},
|
|
243
|
+
'added' => lambda{|value| one_or_true(value)},
|
|
244
|
+
'expires' => lambda{|value| zero_or_false(value) ? nil : Time.at(value.to_f)},
|
|
245
|
+
'friends' => lambda{|value| value.split(/,/)}
|
|
248
246
|
)
|
|
249
247
|
end
|
|
250
248
|
|
|
@@ -329,10 +327,6 @@ module Facebooker
|
|
|
329
327
|
end
|
|
330
328
|
end
|
|
331
329
|
|
|
332
|
-
def set_adapter
|
|
333
|
-
Facebooker.load_adapter(params) if(params[:fb_sig_api_key])
|
|
334
|
-
end
|
|
335
|
-
|
|
336
330
|
|
|
337
331
|
module ClassMethods
|
|
338
332
|
#
|