facebooker-lite 1.0.67
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/.autotest +15 -0
- data/CHANGELOG.rdoc +24 -0
- data/COPYING.rdoc +19 -0
- data/Manifest.txt +114 -0
- data/README.rdoc +120 -0
- data/Rakefile +94 -0
- data/TODO.rdoc +4 -0
- data/facebooker.gemspec +42 -0
- data/generators/xd_receiver/templates/xd_receiver.html +10 -0
- data/generators/xd_receiver/templates/xd_receiver_ssl.html +10 -0
- data/generators/xd_receiver/xd_receiver_generator.rb +10 -0
- data/init.rb +25 -0
- data/install.rb +12 -0
- data/lib/facebooker.rb +261 -0
- data/lib/facebooker/adapters/adapter_base.rb +91 -0
- data/lib/facebooker/adapters/bebo_adapter.rb +77 -0
- data/lib/facebooker/adapters/facebook_adapter.rb +60 -0
- data/lib/facebooker/admin.rb +42 -0
- data/lib/facebooker/application.rb +37 -0
- data/lib/facebooker/attachment.rb +51 -0
- data/lib/facebooker/batch_request.rb +45 -0
- data/lib/facebooker/data.rb +57 -0
- data/lib/facebooker/feed.rb +78 -0
- data/lib/facebooker/logging.rb +44 -0
- data/lib/facebooker/mobile.rb +20 -0
- data/lib/facebooker/mock/service.rb +50 -0
- data/lib/facebooker/mock/session.rb +18 -0
- data/lib/facebooker/model.rb +139 -0
- data/lib/facebooker/models/affiliation.rb +10 -0
- data/lib/facebooker/models/album.rb +11 -0
- data/lib/facebooker/models/applicationproperties.rb +39 -0
- data/lib/facebooker/models/applicationrestrictions.rb +10 -0
- data/lib/facebooker/models/comment.rb +9 -0
- data/lib/facebooker/models/cookie.rb +10 -0
- data/lib/facebooker/models/education_info.rb +11 -0
- data/lib/facebooker/models/event.rb +28 -0
- data/lib/facebooker/models/family_relative_info.rb +7 -0
- data/lib/facebooker/models/friend_list.rb +16 -0
- data/lib/facebooker/models/group.rb +36 -0
- data/lib/facebooker/models/info_item.rb +10 -0
- data/lib/facebooker/models/info_section.rb +10 -0
- data/lib/facebooker/models/location.rb +8 -0
- data/lib/facebooker/models/message_thread.rb +89 -0
- data/lib/facebooker/models/notifications.rb +17 -0
- data/lib/facebooker/models/page.rb +46 -0
- data/lib/facebooker/models/photo.rb +19 -0
- data/lib/facebooker/models/tag.rb +12 -0
- data/lib/facebooker/models/user.rb +751 -0
- data/lib/facebooker/models/video.rb +9 -0
- data/lib/facebooker/models/work_info.rb +10 -0
- data/lib/facebooker/parser.rb +970 -0
- data/lib/facebooker/rails/backwards_compatible_param_checks.rb +31 -0
- data/lib/facebooker/rails/controller.rb +353 -0
- data/lib/facebooker/rails/extensions/action_controller.rb +47 -0
- data/lib/facebooker/rails/extensions/rack_setup.rb +16 -0
- data/lib/facebooker/rails/extensions/routing.rb +15 -0
- data/lib/facebooker/rails/facebook_pretty_errors.rb +22 -0
- data/lib/facebooker/rails/facebook_request_fix.rb +28 -0
- data/lib/facebooker/rails/facebook_request_fix_2-3.rb +31 -0
- data/lib/facebooker/rails/facebook_session_handling.rb +68 -0
- data/lib/facebooker/rails/facebook_url_rewriting.rb +60 -0
- data/lib/facebooker/rails/helpers/fb_connect.rb +75 -0
- data/lib/facebooker/rails/integration_session.rb +38 -0
- data/lib/facebooker/rails/profile_publisher_extensions.rb +42 -0
- data/lib/facebooker/rails/publisher.rb +608 -0
- data/lib/facebooker/rails/routing.rb +49 -0
- data/lib/facebooker/rails/test_helpers.rb +68 -0
- data/lib/facebooker/rails/utilities.rb +22 -0
- data/lib/facebooker/server_cache.rb +24 -0
- data/lib/facebooker/service.rb +103 -0
- 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/session.rb +786 -0
- data/lib/facebooker/stream_post.rb +19 -0
- data/lib/facebooker/version.rb +9 -0
- data/lib/net/http_multipart_post.rb +123 -0
- data/lib/rack/facebook.rb +89 -0
- data/lib/rack/facebook_session.rb +21 -0
- data/lib/tasks/facebooker.rake +19 -0
- data/lib/tasks/facebooker.rb +2 -0
- data/lib/tasks/tunnel.rake +46 -0
- data/rails/init.rb +1 -0
- data/setup.rb +1585 -0
- data/templates/layout.erb +24 -0
- data/test/facebooker/adapters_test.rb +191 -0
- data/test/facebooker/admin_test.rb +102 -0
- data/test/facebooker/application_test.rb +110 -0
- data/test/facebooker/attachment_test.rb +72 -0
- data/test/facebooker/batch_request_test.rb +83 -0
- data/test/facebooker/data_test.rb +86 -0
- data/test/facebooker/logging_test.rb +43 -0
- data/test/facebooker/mobile_test.rb +45 -0
- data/test/facebooker/model_test.rb +133 -0
- data/test/facebooker/models/event_test.rb +15 -0
- data/test/facebooker/models/page_test.rb +56 -0
- data/test/facebooker/models/photo_test.rb +16 -0
- data/test/facebooker/models/user_test.rb +1074 -0
- data/test/facebooker/rails/facebook_request_fix_2-3_test.rb +25 -0
- data/test/facebooker/rails/facebook_url_rewriting_test.rb +76 -0
- data/test/facebooker/rails/integration_session_test.rb +13 -0
- data/test/facebooker/rails/publisher_test.rb +538 -0
- data/test/facebooker/rails_integration_test.rb +1543 -0
- data/test/facebooker/server_cache_test.rb +44 -0
- data/test/facebooker/service_test.rb +58 -0
- data/test/facebooker/session_test.rb +883 -0
- data/test/facebooker_test.rb +1263 -0
- data/test/fixtures/multipart_post_body_with_only_parameters.txt +33 -0
- data/test/fixtures/multipart_post_body_with_single_file.txt +38 -0
- data/test/fixtures/multipart_post_body_with_single_file_that_has_nil_key.txt +38 -0
- data/test/net/http_multipart_post_test.rb +52 -0
- data/test/rack/facebook_session_test.rb +34 -0
- data/test/rack/facebook_test.rb +73 -0
- data/test/rails_test_helper.rb +36 -0
- data/test/test_helper.rb +74 -0
- metadata +278 -0
|
@@ -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://ssl.connect.facebook.com/js/api_lib/v0.4/XdCommReceiver.js" type="text/javascript"></script>
|
|
9
|
+
</body>
|
|
10
|
+
</html>
|
data/init.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Added support to the Facebooker.yml file for switching to the new profile design..
|
|
2
|
+
# Config parsing needs to happen before files are required.
|
|
3
|
+
facebook_config = "#{RAILS_ROOT}/config/facebooker.yml"
|
|
4
|
+
|
|
5
|
+
require 'facebooker'
|
|
6
|
+
FACEBOOKER = Facebooker.load_configuration(facebook_config)
|
|
7
|
+
|
|
8
|
+
# enable logger before including everything else, in case we ever want to log initialization
|
|
9
|
+
Facebooker.logger = RAILS_DEFAULT_LOGGER if Object.const_defined? :RAILS_DEFAULT_LOGGER
|
|
10
|
+
|
|
11
|
+
require 'net/http_multipart_post'
|
|
12
|
+
if defined? Rails
|
|
13
|
+
require 'facebooker/rails/backwards_compatible_param_checks'
|
|
14
|
+
require 'facebooker/rails/controller'
|
|
15
|
+
require 'facebooker/rails/facebook_url_rewriting'
|
|
16
|
+
require 'facebooker/rails/facebook_session_handling' if Rails.version < '2.3'
|
|
17
|
+
require 'facebooker/rails/facebook_request_fix' if Rails.version < '2.3'
|
|
18
|
+
require 'facebooker/rails/facebook_request_fix_2-3' if Rails.version >= '2.3'
|
|
19
|
+
require 'facebooker/rails/routing'
|
|
20
|
+
require 'facebooker/rails/facebook_pretty_errors' rescue nil
|
|
21
|
+
require 'facebooker/rails/extensions/rack_setup' if Rails.version > '2.3'
|
|
22
|
+
require 'facebooker/rails/extensions/action_controller'
|
|
23
|
+
#require 'facebooker/rails/extensions/action_view'
|
|
24
|
+
require 'facebooker/rails/extensions/routing'
|
|
25
|
+
end
|
data/install.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'rubygems'
|
|
3
|
+
|
|
4
|
+
dir = File.dirname(__FILE__)
|
|
5
|
+
templates = File.join(dir, 'generators', 'facebook', 'templates')
|
|
6
|
+
config = File.join('config', 'facebooker.yml')
|
|
7
|
+
script = File.join('public', 'javascripts', 'facebooker.js')
|
|
8
|
+
|
|
9
|
+
[config, script].each do |path|
|
|
10
|
+
FileUtils.cp File.join(templates, path), File.join(RAILS_ROOT, path) unless File.exist?(File.join(RAILS_ROOT, path))
|
|
11
|
+
end
|
|
12
|
+
puts IO.read(File.join(dir, 'README.rdoc'))
|
data/lib/facebooker.rb
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
unless defined?(ActiveSupport) and defined?(ActiveSupport::JSON)
|
|
2
|
+
begin
|
|
3
|
+
require 'json'
|
|
4
|
+
rescue LoadError
|
|
5
|
+
gem "json_pure"
|
|
6
|
+
require "json"
|
|
7
|
+
end
|
|
8
|
+
module Facebooker
|
|
9
|
+
def self.json_decode(str)
|
|
10
|
+
JSON.parse(str)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.json_encode(o)
|
|
14
|
+
JSON.dump(o)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
else
|
|
18
|
+
module Facebooker
|
|
19
|
+
def self.json_decode(str)
|
|
20
|
+
ActiveSupport::JSON.decode(str)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.json_encode(o)
|
|
24
|
+
ActiveSupport::JSON.encode(o)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
require 'zlib'
|
|
30
|
+
require 'digest/md5'
|
|
31
|
+
|
|
32
|
+
module Facebooker
|
|
33
|
+
|
|
34
|
+
@facebooker_configuration = {}
|
|
35
|
+
@raw_facebooker_configuration = {}
|
|
36
|
+
@current_adapter = nil
|
|
37
|
+
@set_asset_host_to_callback_url = true
|
|
38
|
+
@path_prefix = nil
|
|
39
|
+
@use_curl = false
|
|
40
|
+
|
|
41
|
+
class << self
|
|
42
|
+
|
|
43
|
+
def load_configuration(facebooker_yaml_file)
|
|
44
|
+
return false unless File.exist?(facebooker_yaml_file)
|
|
45
|
+
@raw_facebooker_configuration = YAML.load(ERB.new(File.read(facebooker_yaml_file)).result)
|
|
46
|
+
if defined? RAILS_ENV
|
|
47
|
+
@raw_facebooker_configuration = @raw_facebooker_configuration[RAILS_ENV]
|
|
48
|
+
end
|
|
49
|
+
Thread.current[:fb_api_config] = @raw_facebooker_configuration unless Thread.current[:fb_api_config]
|
|
50
|
+
apply_configuration(@raw_facebooker_configuration)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Sets the Facebook environment based on a hash of options.
|
|
54
|
+
# By default the hash passed in is loaded from facebooker.yml, but it can also be passed in
|
|
55
|
+
# manually every request to run multiple Facebook apps off one Rails app.
|
|
56
|
+
def apply_configuration(config)
|
|
57
|
+
ENV['FACEBOOK_API_KEY'] = config['api_key']
|
|
58
|
+
ENV['FACEBOOK_SECRET_KEY'] = config['secret_key']
|
|
59
|
+
ENV['FACEBOOKER_RELATIVE_URL_ROOT'] = config['canvas_page_name']
|
|
60
|
+
ENV['FACEBOOKER_API'] = config['api']
|
|
61
|
+
if config.has_key?('set_asset_host_to_callback_url')
|
|
62
|
+
Facebooker.set_asset_host_to_callback_url = config['set_asset_host_to_callback_url']
|
|
63
|
+
end
|
|
64
|
+
if Object.const_defined?("ActionController") and Facebooker.set_asset_host_to_callback_url
|
|
65
|
+
ActionController::Base.asset_host = config['callback_url']
|
|
66
|
+
end
|
|
67
|
+
Facebooker.timeout = config['timeout']
|
|
68
|
+
|
|
69
|
+
@facebooker_configuration = config # must be set before adapter loaded
|
|
70
|
+
load_adapter(:fb_sig_api_key => config['api_key'])
|
|
71
|
+
facebooker_config
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def facebooker_config
|
|
75
|
+
@facebooker_configuration
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def with_application(api_key, &block)
|
|
79
|
+
config = fetch_config_for( api_key )
|
|
80
|
+
|
|
81
|
+
unless config
|
|
82
|
+
self.logger.info "Can't find facebooker config: '#{api_key}'" if self.logger
|
|
83
|
+
yield if block_given?
|
|
84
|
+
return
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Save the old config to handle nested activation. If no app context is
|
|
88
|
+
# set yet, use default app's configuration.
|
|
89
|
+
old = Thread.current[:fb_api_config] ? Thread.current[:fb_api_config].dup : @raw_facebooker_configuration
|
|
90
|
+
|
|
91
|
+
if block_given?
|
|
92
|
+
begin
|
|
93
|
+
self.logger.info "Swapping facebooker config: '#{api_key}'" if self.logger
|
|
94
|
+
Thread.current[:fb_api_config] = apply_configuration(config)
|
|
95
|
+
yield
|
|
96
|
+
ensure
|
|
97
|
+
Thread.current[:fb_api_config] = old if old && !old.empty?
|
|
98
|
+
apply_configuration(Thread.current[:fb_api_config])
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def all_api_keys
|
|
104
|
+
[
|
|
105
|
+
@raw_facebooker_configuration['api_key']
|
|
106
|
+
] + (
|
|
107
|
+
@raw_facebooker_configuration['alternative_keys'] ?
|
|
108
|
+
@raw_facebooker_configuration['alternative_keys'].keys :
|
|
109
|
+
[]
|
|
110
|
+
)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def with_all_applications(&block)
|
|
114
|
+
all_api_keys.each do |current_api_key|
|
|
115
|
+
with_application(current_api_key) do
|
|
116
|
+
block.call
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def fetch_config_for(api_key)
|
|
122
|
+
if @raw_facebooker_configuration['api_key'] == api_key
|
|
123
|
+
return @raw_facebooker_configuration
|
|
124
|
+
elsif @raw_facebooker_configuration['alternative_keys'] and
|
|
125
|
+
@raw_facebooker_configuration['alternative_keys'].keys.include?(api_key)
|
|
126
|
+
return @raw_facebooker_configuration['alternative_keys'][api_key].merge(
|
|
127
|
+
'api_key' => api_key )
|
|
128
|
+
end
|
|
129
|
+
return false
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# TODO: This should be converted to attr_accessor, but we need to
|
|
133
|
+
# get all the require statements at the top of the file to work.
|
|
134
|
+
|
|
135
|
+
# Set the current adapter
|
|
136
|
+
attr_writer :current_adapter
|
|
137
|
+
|
|
138
|
+
# Get the current adapter
|
|
139
|
+
def current_adapter
|
|
140
|
+
@current_adapter || Facebooker::AdapterBase.default_adapter
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def load_adapter(params)
|
|
144
|
+
self.current_adapter = Facebooker::AdapterBase.load_adapter(params)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def facebook_path_prefix=(path)
|
|
148
|
+
current_adapter.facebook_path_prefix = path
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Default is canvas_page_name in yml file
|
|
152
|
+
def facebook_path_prefix
|
|
153
|
+
current_adapter.facebook_path_prefix
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def is_for?(application_container)
|
|
157
|
+
current_adapter.is_for?(application_container)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
attr_accessor :set_asset_host_to_callback_url
|
|
161
|
+
attr_accessor :use_curl
|
|
162
|
+
alias :use_curl? :use_curl
|
|
163
|
+
|
|
164
|
+
def timeout=(val)
|
|
165
|
+
@timeout = val.to_i
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def timeout
|
|
169
|
+
@timeout
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
[:api_key,:secret_key, :www_server_base_url,:login_url_base,:install_url_base,:permission_url_base,:connect_permission_url_base,:api_rest_path,:api_server_base,:api_server_base_url,:canvas_server_base, :video_server_base].each do |delegated_method|
|
|
173
|
+
define_method(delegated_method){ return current_adapter.send(delegated_method)}
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
attr_reader :path_prefix
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
# Set the asset path to the canvas path for just this one request
|
|
181
|
+
# by definition, we will make this a canvas request
|
|
182
|
+
def with_asset_path_for_canvas
|
|
183
|
+
original_asset_host = ActionController::Base.asset_host
|
|
184
|
+
begin
|
|
185
|
+
ActionController::Base.asset_host = Facebooker.api_server_base_url
|
|
186
|
+
request_for_canvas(true) do
|
|
187
|
+
yield
|
|
188
|
+
end
|
|
189
|
+
ensure
|
|
190
|
+
ActionController::Base.asset_host = original_asset_host
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# If this request is_canvas_request
|
|
195
|
+
# then use the application name as the url root
|
|
196
|
+
def request_for_canvas(is_canvas_request)
|
|
197
|
+
original_path_prefix = @path_prefix
|
|
198
|
+
begin
|
|
199
|
+
@path_prefix = facebook_path_prefix if is_canvas_request
|
|
200
|
+
yield
|
|
201
|
+
ensure
|
|
202
|
+
@path_prefix = original_path_prefix
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
require 'facebooker/attachment'
|
|
209
|
+
require 'facebooker/batch_request'
|
|
210
|
+
require 'facebooker/feed'
|
|
211
|
+
require 'facebooker/logging'
|
|
212
|
+
require 'facebooker/model'
|
|
213
|
+
require 'facebooker/parser'
|
|
214
|
+
require 'facebooker/service'
|
|
215
|
+
require 'facebooker/service/base_service'
|
|
216
|
+
#optional HTTP service adapters
|
|
217
|
+
begin
|
|
218
|
+
require 'facebooker/service/curl_service'
|
|
219
|
+
rescue LoadError
|
|
220
|
+
nil
|
|
221
|
+
end
|
|
222
|
+
begin
|
|
223
|
+
require 'facebooker/service/typhoeus_service'
|
|
224
|
+
require 'facebooker/service/typhoeus_multi_service'
|
|
225
|
+
rescue LoadError
|
|
226
|
+
nil
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
require 'facebooker/service/net_http_service'
|
|
230
|
+
require 'facebooker/server_cache'
|
|
231
|
+
require 'facebooker/data'
|
|
232
|
+
require 'facebooker/admin'
|
|
233
|
+
require 'facebooker/application'
|
|
234
|
+
require 'facebooker/mobile'
|
|
235
|
+
require 'facebooker/session'
|
|
236
|
+
require 'facebooker/stream_post'
|
|
237
|
+
require 'facebooker/version'
|
|
238
|
+
require 'facebooker/models/location'
|
|
239
|
+
require 'facebooker/models/affiliation'
|
|
240
|
+
require 'facebooker/models/album'
|
|
241
|
+
require 'facebooker/models/comment'
|
|
242
|
+
require 'facebooker/models/education_info'
|
|
243
|
+
require 'facebooker/models/work_info'
|
|
244
|
+
require 'facebooker/models/event'
|
|
245
|
+
require 'facebooker/models/group'
|
|
246
|
+
require 'facebooker/models/notifications'
|
|
247
|
+
require 'facebooker/models/page'
|
|
248
|
+
require 'facebooker/models/photo'
|
|
249
|
+
require 'facebooker/models/cookie'
|
|
250
|
+
require 'facebooker/models/applicationproperties'
|
|
251
|
+
require 'facebooker/models/applicationrestrictions'
|
|
252
|
+
require 'facebooker/models/tag'
|
|
253
|
+
require 'facebooker/models/user'
|
|
254
|
+
require 'facebooker/models/info_item'
|
|
255
|
+
require 'facebooker/models/info_section'
|
|
256
|
+
require 'facebooker/models/friend_list'
|
|
257
|
+
require 'facebooker/models/video'
|
|
258
|
+
require 'facebooker/models/message_thread'
|
|
259
|
+
require 'facebooker/adapters/adapter_base'
|
|
260
|
+
require 'facebooker/adapters/facebook_adapter'
|
|
261
|
+
require 'facebooker/adapters/bebo_adapter'
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
module Facebooker
|
|
2
|
+
|
|
3
|
+
class AdapterBase
|
|
4
|
+
class UnableToLoadAdapter < Exception; end
|
|
5
|
+
require 'active_support/inflector'
|
|
6
|
+
include ActiveSupport::CoreExtensions::String::Inflections
|
|
7
|
+
def facebook_path_prefix
|
|
8
|
+
"/" + (@facebook_path_prefix || canvas_page_name || ENV['FACEBOOK_CANVAS_PATH'] || ENV['FACEBOOKER_RELATIVE_URL_ROOT'])
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def facebook_path_prefix=(prefix)
|
|
12
|
+
@facebook_path_prefix = prefix
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def facebooker_config
|
|
16
|
+
@config
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def api_server_base_url
|
|
20
|
+
"http://" + api_server_base
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def is_for?(application_context)
|
|
24
|
+
raise "SubClassShouldDefine"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def initialize(config)
|
|
28
|
+
@config = config
|
|
29
|
+
@facebook_path_prefix = nil
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.facebooker_config
|
|
33
|
+
Facebooker.facebooker_config
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def self.load_adapter(params)
|
|
38
|
+
|
|
39
|
+
config_key_base = params[:config_key_base] # This allows for loading of a aspecific adapter
|
|
40
|
+
config_key_base += "_" if config_key_base && config_key_base.length > 0
|
|
41
|
+
|
|
42
|
+
unless api_key = (params[:fb_sig_api_key] || facebooker_config["#{config_key_base}api_key"])
|
|
43
|
+
raise Facebooker::AdapterBase::UnableToLoadAdapter
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
unless facebooker_config
|
|
47
|
+
return self.default_adapter(params)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
facebooker_config.each do |key,value|
|
|
51
|
+
next unless value == api_key
|
|
52
|
+
|
|
53
|
+
key_base = key.match(/(.*)[_]?api_key/)[1]
|
|
54
|
+
|
|
55
|
+
adapter_class_name = if !key_base || key_base.length == 0
|
|
56
|
+
"FacebookAdapter"
|
|
57
|
+
else
|
|
58
|
+
facebooker_config[key_base + "adapter"]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
adapter_class = "Facebooker::#{adapter_class_name}".constantize
|
|
62
|
+
|
|
63
|
+
# Collect the rest of the configuration
|
|
64
|
+
adapter_config = {}
|
|
65
|
+
facebooker_config.each do |key,value|
|
|
66
|
+
if (match = key.match(/#{key_base}[_]?(.*)/))
|
|
67
|
+
adapter_config[match[1]] = value
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
return adapter_class.new(adapter_config)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
return self.default_adapter(params)
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def self.default_adapter(params = {})
|
|
78
|
+
if facebooker_config.nil? || (facebooker_config.blank? rescue nil)
|
|
79
|
+
config = { "api_key" => ENV['FACEBOOK_API_KEY'], "secret_key" => ENV['FACEBOOK_SECRET_KEY']}
|
|
80
|
+
else
|
|
81
|
+
config = facebooker_config
|
|
82
|
+
end
|
|
83
|
+
FacebookAdapter.new(config)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
[:canvas_page_name, :api_key,:secret_key].each do |key_method|
|
|
87
|
+
define_method(key_method){ return facebooker_config[key_method.to_s]}
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
module Facebooker
|
|
2
|
+
class BeboAdapter < AdapterBase
|
|
3
|
+
|
|
4
|
+
def canvas_server_base
|
|
5
|
+
"apps.bebo.com"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def api_server_base
|
|
9
|
+
'apps.bebo.com'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def api_rest_path
|
|
13
|
+
"/restserver.php"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def is_for?(application_context)
|
|
17
|
+
application_context == :bebo
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def www_server_base_url
|
|
21
|
+
"www.bebo.com"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def login_url_base
|
|
26
|
+
"http://#{www_server_base_url}/SignIn.jsp?ApiKey=#{api_key}&v=1.0"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def install_url_base
|
|
30
|
+
"http://#{www_server_base_url}/c/apps/add?ApiKey=#{api_key}&v=1.0"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Things that don't actually work as expected in BEBO
|
|
36
|
+
module Facebooker
|
|
37
|
+
class User
|
|
38
|
+
def set_profile_fbml_with_bebo_adapter(profile_fbml, mobile_fbml, profile_action_fbml, profile_main = nil)
|
|
39
|
+
if(Facebooker.is_for?(:bebo))
|
|
40
|
+
self.session.post('facebook.profile.setFBML', :uid => @id, :markup => profile_fbml)
|
|
41
|
+
else
|
|
42
|
+
set_profile_fbml_without_bebo_adapter(profile_fbml,mobile_fbml, profile_action_fbml, profile_main)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
alias_method :set_profile_fbml_without_bebo_adapter, :set_profile_fbml
|
|
46
|
+
alias_method :set_profile_fbml, :set_profile_fbml_with_bebo_adapter
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
BEBO_FIELDS = FIELDS - [:meeting_sex, :wall_count, :meeting_for]
|
|
51
|
+
|
|
52
|
+
remove_method :collect
|
|
53
|
+
|
|
54
|
+
def collect(fields)
|
|
55
|
+
if(Facebooker.is_for?(:bebo) )
|
|
56
|
+
BEBO_FIELDS.reject{|field_name| !fields.empty? && !fields.include?(field_name)}.join(',')
|
|
57
|
+
else
|
|
58
|
+
FIELDS.reject{|field_name| !fields.empty? && !fields.include?(field_name)}.join(',')
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class PublishTemplatizedAction < Parser#:nodoc:
|
|
65
|
+
class <<self
|
|
66
|
+
def process_with_bebo_adapter(data)
|
|
67
|
+
if(Facebooker.is_for?(:bebo))
|
|
68
|
+
element('feed_publishTemplatizedAction_response', data).content
|
|
69
|
+
else
|
|
70
|
+
process_without_bebo_adapter(data)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
alias_method :process_without_bebo_adapter, :process
|
|
74
|
+
alias_method :process, :process_with_bebo_adapter
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|