cwninja-facebooker 1.0.8
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/CHANGELOG.txt +0 -0
- data/COPYING +19 -0
- data/History.txt +16 -0
- data/Manifest.txt +114 -0
- data/README +46 -0
- data/README.txt +81 -0
- data/Rakefile +76 -0
- data/TODO.txt +10 -0
- data/generators/facebook/facebook_generator.rb +14 -0
- data/generators/facebook/templates/config/facebooker.yml +46 -0
- data/generators/facebook/templates/public/javascripts/facebooker.js +106 -0
- data/generators/facebook_controller/USAGE +33 -0
- data/generators/facebook_controller/facebook_controller_generator.rb +40 -0
- data/generators/facebook_controller/templates/controller.rb +7 -0
- data/generators/facebook_controller/templates/functional_test.rb +11 -0
- data/generators/facebook_controller/templates/helper.rb +2 -0
- data/generators/facebook_controller/templates/view.fbml.erb +2 -0
- data/generators/facebook_controller/templates/view.html.erb +2 -0
- data/generators/facebook_publisher/facebook_publisher_generator.rb +14 -0
- data/generators/facebook_publisher/templates/create_facebook_templates.rb +15 -0
- data/generators/facebook_publisher/templates/publisher.rb +3 -0
- data/generators/facebook_scaffold/USAGE +27 -0
- data/generators/facebook_scaffold/facebook_scaffold_generator.rb +118 -0
- data/generators/facebook_scaffold/templates/controller.rb +93 -0
- data/generators/facebook_scaffold/templates/facebook_style.css +2579 -0
- data/generators/facebook_scaffold/templates/functional_test.rb +89 -0
- data/generators/facebook_scaffold/templates/helper.rb +2 -0
- data/generators/facebook_scaffold/templates/layout.fbml.erb +6 -0
- data/generators/facebook_scaffold/templates/layout.html.erb +17 -0
- data/generators/facebook_scaffold/templates/style.css +74 -0
- data/generators/facebook_scaffold/templates/view_edit.fbml.erb +13 -0
- data/generators/facebook_scaffold/templates/view_edit.html.erb +18 -0
- data/generators/facebook_scaffold/templates/view_index.fbml.erb +24 -0
- data/generators/facebook_scaffold/templates/view_index.html.erb +24 -0
- data/generators/facebook_scaffold/templates/view_new.fbml.erb +12 -0
- data/generators/facebook_scaffold/templates/view_new.html.erb +17 -0
- data/generators/facebook_scaffold/templates/view_show.fbml.erb +10 -0
- data/generators/facebook_scaffold/templates/view_show.html.erb +10 -0
- data/generators/publisher/publisher_generator.rb +14 -0
- data/generators/xd_receiver/templates/xd_receiver.html +10 -0
- data/generators/xd_receiver/xd_receiver_generator.rb +9 -0
- data/init.rb +70 -0
- data/install.rb +12 -0
- data/lib/facebooker.rb +160 -0
- data/lib/facebooker/adapters/adapter_base.rb +87 -0
- data/lib/facebooker/adapters/bebo_adapter.rb +75 -0
- data/lib/facebooker/adapters/facebook_adapter.rb +48 -0
- data/lib/facebooker/admin.rb +28 -0
- data/lib/facebooker/batch_request.rb +44 -0
- data/lib/facebooker/data.rb +57 -0
- data/lib/facebooker/feed.rb +78 -0
- data/lib/facebooker/logging.rb +51 -0
- data/lib/facebooker/model.rb +123 -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/cookie.rb +10 -0
- data/lib/facebooker/models/education_info.rb +11 -0
- data/lib/facebooker/models/event.rb +26 -0
- data/lib/facebooker/models/friend_list.rb +14 -0
- data/lib/facebooker/models/group.rb +35 -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/notifications.rb +17 -0
- data/lib/facebooker/models/page.rb +27 -0
- data/lib/facebooker/models/photo.rb +10 -0
- data/lib/facebooker/models/tag.rb +12 -0
- data/lib/facebooker/models/user.rb +369 -0
- data/lib/facebooker/models/work_info.rb +9 -0
- data/lib/facebooker/parser.rb +547 -0
- data/lib/facebooker/rails/controller.rb +280 -0
- data/lib/facebooker/rails/facebook_asset_path.rb +18 -0
- data/lib/facebooker/rails/facebook_form_builder.rb +112 -0
- data/lib/facebooker/rails/facebook_pretty_errors.rb +14 -0
- data/lib/facebooker/rails/facebook_request_fix.rb +24 -0
- data/lib/facebooker/rails/facebook_session_handling.rb +69 -0
- data/lib/facebooker/rails/facebook_url_helper.rb +191 -0
- data/lib/facebooker/rails/facebook_url_rewriting.rb +39 -0
- data/lib/facebooker/rails/helpers.rb +642 -0
- data/lib/facebooker/rails/helpers/fb_connect.rb +34 -0
- data/lib/facebooker/rails/profile_publisher_extensions.rb +42 -0
- data/lib/facebooker/rails/publisher.rb +511 -0
- data/lib/facebooker/rails/routing.rb +49 -0
- data/lib/facebooker/rails/test_helpers.rb +88 -0
- data/lib/facebooker/rails/utilities.rb +22 -0
- data/lib/facebooker/server_cache.rb +24 -0
- data/lib/facebooker/service.rb +83 -0
- data/lib/facebooker/session.rb +564 -0
- data/lib/facebooker/version.rb +9 -0
- data/lib/net/http_multipart_post.rb +123 -0
- data/lib/tasks/facebooker.rake +18 -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/adapters_test.rb +98 -0
- data/test/batch_request_test.rb +82 -0
- data/test/event_test.rb +15 -0
- data/test/facebook_admin_test.rb +76 -0
- data/test/facebook_cache_test.rb +44 -0
- data/test/facebook_data_test.rb +86 -0
- data/test/facebooker_test.rb +855 -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/http_multipart_post_test.rb +54 -0
- data/test/logging_test.rb +43 -0
- data/test/model_test.rb +91 -0
- data/test/publisher_test.rb +458 -0
- data/test/rails_integration_test.rb +1221 -0
- data/test/session_test.rb +613 -0
- data/test/test_helper.rb +60 -0
- data/test/user_test.rb +270 -0
- metadata +185 -0
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'))
|
data/lib/facebooker.rb
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
begin
|
|
2
|
+
unless Object.const_defined?("ActiveSupport") and ActiveSupport.const_defined?("JSON")
|
|
3
|
+
require 'json'
|
|
4
|
+
module Facebooker
|
|
5
|
+
def self.json_decode(str)
|
|
6
|
+
JSON.parse(str)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
else
|
|
10
|
+
module Facebooker
|
|
11
|
+
def self.json_decode(str)
|
|
12
|
+
ActiveSupport::JSON.decode(str)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
rescue
|
|
17
|
+
require 'json'
|
|
18
|
+
end
|
|
19
|
+
require 'zlib'
|
|
20
|
+
require 'digest/md5'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
module Facebooker
|
|
25
|
+
|
|
26
|
+
class << self
|
|
27
|
+
|
|
28
|
+
def load_configuration(facebooker_yaml_file)
|
|
29
|
+
if File.exist?(facebooker_yaml_file)
|
|
30
|
+
if defined? RAILS_ENV
|
|
31
|
+
facebooker = YAML.load_file(facebooker_yaml_file)[RAILS_ENV]
|
|
32
|
+
else
|
|
33
|
+
facebooker = YAML.load_file(facebooker_yaml_file)
|
|
34
|
+
end
|
|
35
|
+
ENV['FACEBOOK_API_KEY'] = facebooker['api_key']
|
|
36
|
+
ENV['FACEBOOK_SECRET_KEY'] = facebooker['secret_key']
|
|
37
|
+
ENV['FACEBOOKER_RELATIVE_URL_ROOT'] = facebooker['canvas_page_name']
|
|
38
|
+
ENV['FACEBOOKER_API'] = facebooker['api']
|
|
39
|
+
Facebooker.timeout = facebooker['timeout']
|
|
40
|
+
if Object.const_defined?("ActionController")
|
|
41
|
+
ActionController::Base.asset_host = facebooker['callback_url'] if(ActionController::Base.asset_host.blank?) && facebooker['set_asset_host_to_callback_url']
|
|
42
|
+
end
|
|
43
|
+
@facebooker_configuration = facebooker
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def facebooker_config
|
|
48
|
+
@facebooker_configuration
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def current_adapter=(adapter_class)
|
|
52
|
+
@current_adapter = adapter_class
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def current_adapter
|
|
56
|
+
@current_adapter || Facebooker::AdapterBase.default_adapter
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def load_adapter(params)
|
|
60
|
+
self.current_adapter = Facebooker::AdapterBase.load_adapter(params)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def facebook_path_prefix=(path)
|
|
64
|
+
current_adapter.facebook_path_prefix = path
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Default is canvas_page_name in yml file
|
|
68
|
+
def facebook_path_prefix
|
|
69
|
+
current_adapter.facebook_path_prefix
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def is_for?(application_container)
|
|
73
|
+
current_adapter.is_for?(application_container)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def use_curl=(val)
|
|
77
|
+
@use_curl=val
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def use_curl?
|
|
81
|
+
@use_curl
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def timeout=(val)
|
|
85
|
+
@timeout = val.to_i
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def timeout
|
|
89
|
+
@timeout
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
[:api_key,:secret_key, :www_server_base_url,:login_url_base,:install_url_base,:api_rest_path,:api_server_base,:api_server_base_url,:canvas_server_base].each do |delegated_method|
|
|
93
|
+
define_method(delegated_method){ return current_adapter.send(delegated_method)}
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def path_prefix
|
|
98
|
+
@path_prefix
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
# Set the asset path to the canvas path for just this one request
|
|
103
|
+
# by definition, we will make this a canvas request
|
|
104
|
+
def with_asset_path_for_canvas
|
|
105
|
+
original_asset_host = ActionController::Base.asset_host
|
|
106
|
+
begin
|
|
107
|
+
ActionController::Base.asset_host = Facebooker.api_server_base_url
|
|
108
|
+
request_for_canvas(true) do
|
|
109
|
+
yield
|
|
110
|
+
end
|
|
111
|
+
ensure
|
|
112
|
+
ActionController::Base.asset_host = original_asset_host
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# If this request is_canvas_request
|
|
117
|
+
# then use the application name as the url root
|
|
118
|
+
def request_for_canvas(is_canvas_request)
|
|
119
|
+
original_path_prefix = @path_prefix
|
|
120
|
+
begin
|
|
121
|
+
@path_prefix = facebook_path_prefix if is_canvas_request
|
|
122
|
+
yield
|
|
123
|
+
ensure
|
|
124
|
+
@path_prefix = original_path_prefix
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
require 'facebooker/batch_request'
|
|
131
|
+
require 'facebooker/feed'
|
|
132
|
+
require 'facebooker/logging'
|
|
133
|
+
require 'facebooker/model'
|
|
134
|
+
require 'facebooker/parser'
|
|
135
|
+
require 'facebooker/service'
|
|
136
|
+
require 'facebooker/server_cache'
|
|
137
|
+
require 'facebooker/data'
|
|
138
|
+
require 'facebooker/admin'
|
|
139
|
+
require 'facebooker/session'
|
|
140
|
+
require 'facebooker/version'
|
|
141
|
+
require 'facebooker/models/location'
|
|
142
|
+
require 'facebooker/models/affiliation'
|
|
143
|
+
require 'facebooker/models/album'
|
|
144
|
+
require 'facebooker/models/education_info'
|
|
145
|
+
require 'facebooker/models/work_info'
|
|
146
|
+
require 'facebooker/models/event'
|
|
147
|
+
require 'facebooker/models/group'
|
|
148
|
+
require 'facebooker/models/notifications'
|
|
149
|
+
require 'facebooker/models/page'
|
|
150
|
+
require 'facebooker/models/photo'
|
|
151
|
+
require 'facebooker/models/cookie'
|
|
152
|
+
require 'facebooker/models/applicationproperties'
|
|
153
|
+
require 'facebooker/models/tag'
|
|
154
|
+
require 'facebooker/models/user'
|
|
155
|
+
require 'facebooker/models/info_item'
|
|
156
|
+
require 'facebooker/models/info_section'
|
|
157
|
+
require 'facebooker/adapters/adapter_base'
|
|
158
|
+
require 'facebooker/adapters/facebook_adapter'
|
|
159
|
+
require 'facebooker/adapters/bebo_adapter'
|
|
160
|
+
require 'facebooker/models/friend_list'
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.facebooker_config
|
|
32
|
+
Facebooker.facebooker_config
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def self.load_adapter(params)
|
|
37
|
+
|
|
38
|
+
config_key_base = params[:config_key_base] # This allows for loading of a aspecific adapter
|
|
39
|
+
config_key_base += "_" unless config_key_base.blank?
|
|
40
|
+
|
|
41
|
+
unless api_key = (params[:fb_sig_api_key] || facebooker_config["#{config_key_base}api_key"])
|
|
42
|
+
raise Facebooker::AdapterBase::UnableToLoadAdapter
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
unless facebooker_config
|
|
46
|
+
return self.default_adapter(params)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
facebooker_config.each do |key,value|
|
|
50
|
+
next unless value == api_key
|
|
51
|
+
|
|
52
|
+
key_base = key.match(/(.*)[_]?api_key/)[1]
|
|
53
|
+
|
|
54
|
+
adapter_class_name = if key_base.blank?
|
|
55
|
+
"FacebookAdapter"
|
|
56
|
+
else
|
|
57
|
+
facebooker_config[key_base + "adapter"]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
adapter_class = "Facebooker::#{adapter_class_name}".constantize
|
|
61
|
+
|
|
62
|
+
# Collect the rest of the configuration
|
|
63
|
+
adapter_config = {}
|
|
64
|
+
facebooker_config.each do |key,value|
|
|
65
|
+
if (match = key.match(/#{key_base}[_]?(.*)/))
|
|
66
|
+
adapter_config[match[1]] = value
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
return adapter_class.new(adapter_config)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def self.default_adapter(params = {})
|
|
74
|
+
if facebooker_config.nil? || (facebooker_config.blank? rescue nil)
|
|
75
|
+
config = { "api_key" => ENV['FACEBOOK_API_KEY'], "secret_key" => ENV['FACEBOOK_SECRET_KEY']}
|
|
76
|
+
else
|
|
77
|
+
config = facebooker_config
|
|
78
|
+
end
|
|
79
|
+
FacebookAdapter.new(config)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
[:canvas_page_name, :api_key,:secret_key].each do |key_method|
|
|
83
|
+
define_method(key_method){ return facebooker_config[key_method.to_s]}
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
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
|
+
Facebooker::PublishTemplatizedAction
|
|
37
|
+
module Facebooker
|
|
38
|
+
class User
|
|
39
|
+
def set_profile_fbml_with_bebo_adapter(profile_fbml, mobile_fbml, profile_action_fbml, profile_main = nil)
|
|
40
|
+
if(Facebooker.is_for?(:bebo))
|
|
41
|
+
self.session.post('facebook.profile.setFBML', :uid => @id, :markup => profile_fbml)
|
|
42
|
+
else
|
|
43
|
+
set_profile_fbml_without_bebo_adapter(profile_fbml,mobile_fbml, profile_action_fbml, profile_main)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
alias_method :set_profile_fbml_without_bebo_adapter, :set_profile_fbml
|
|
47
|
+
alias_method :set_profile_fbml, :set_profile_fbml_with_bebo_adapter
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
BEBO_FIELDS = FIELDS - [:meeting_sex, :wall_count, :meeting_for]
|
|
52
|
+
def collect(fields)
|
|
53
|
+
if(Facebooker.is_for?(:bebo) )
|
|
54
|
+
BEBO_FIELDS.reject{|field_name| !fields.empty? && !fields.include?(field_name)}.join(',')
|
|
55
|
+
else
|
|
56
|
+
FIELDS.reject{|field_name| !fields.empty? && !fields.include?(field_name)}.join(',')
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class PublishTemplatizedAction < Parser#:nodoc:
|
|
63
|
+
class <<self
|
|
64
|
+
def process_with_bebo_adapter(data)
|
|
65
|
+
if(Facebooker.is_for?(:bebo))
|
|
66
|
+
element('feed_publishTemplatizedAction_response', data).text_value
|
|
67
|
+
else
|
|
68
|
+
process_without_bebo_adapter(data)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
alias_method :process_without_bebo_adapter, :process
|
|
72
|
+
alias_method :process, :process_with_bebo_adapter
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Facebooker
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class FacebookAdapter < AdapterBase
|
|
5
|
+
|
|
6
|
+
def canvas_server_base
|
|
7
|
+
"apps.facebook.com"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def api_server_base
|
|
11
|
+
"api.facebook.com"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def www_server_base_url
|
|
15
|
+
"www.facebook.com"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def api_rest_path
|
|
19
|
+
"/restserver.php"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def api_key
|
|
23
|
+
ENV['FACEBOOK_API_KEY'] || super
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def secret_key
|
|
27
|
+
ENV['FACEBOOK_SECRET_KEY'] || super
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def is_for?(application_context)
|
|
31
|
+
application_context == :facebook
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def login_url_base
|
|
37
|
+
"http://#{www_server_base_url}/login.php?api_key=#{api_key}&v=1.0"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def install_url_base
|
|
41
|
+
"http://#{www_server_base_url}/install.php?api_key=#{api_key}&v=1.0"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Facebooker
|
|
2
|
+
class Admin
|
|
3
|
+
def initialize(session)
|
|
4
|
+
@session = session
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
# ** BETA ***
|
|
8
|
+
# +properties+: Hash of properties you want to set
|
|
9
|
+
def set_app_properties(properties)
|
|
10
|
+
properties = properties.respond_to?(:to_json) ? properties.to_json : properties
|
|
11
|
+
(@session.post 'facebook.admin.setAppProperties', :properties => properties) == '1'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# ** BETA ***
|
|
15
|
+
# +properties+: Hash of properties you want to view.
|
|
16
|
+
def get_app_properties(*properties)
|
|
17
|
+
json = @session.post('facebook.admin.getAppProperties', :properties => properties.to_json)
|
|
18
|
+
hash = JSON.parse(CGI.unescapeHTML(json))
|
|
19
|
+
@properties = ApplicationProperties.from_hash(hash)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Integration points include..
|
|
23
|
+
# :notifications_per_day, :requests_per_day, :emails_per_day, :email_disable_message_location
|
|
24
|
+
def get_allocation(integration_point)
|
|
25
|
+
@session.post('facebook.admin.getAllocation', :integration_point_name => integration_point.to_s).to_i
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module Facebooker
|
|
2
|
+
class BatchRequest
|
|
3
|
+
instance_methods.each { |m| undef_method m unless m =~ /(^__|^nil\?$|^send$|proxy_|^respond_to\?$|^new$)/ }
|
|
4
|
+
attr_reader :uri
|
|
5
|
+
attr_reader :method
|
|
6
|
+
class UnexecutedRequest < StandardError; end
|
|
7
|
+
def initialize(params,proc)
|
|
8
|
+
@method=params[:method]
|
|
9
|
+
@uri=params.map{|k,v| "#{k}=#{CGI.escape(v.to_s)}"}.join("&")
|
|
10
|
+
@proc=proc
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def result=(result_object)
|
|
14
|
+
@result = @proc.nil? ? result_object : @proc.call(result_object)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def exception_raised=(ex)
|
|
18
|
+
@exception=ex
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def exception_raised?
|
|
22
|
+
@exception.nil? ? false : raise(@exception)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def respond_to?(name)
|
|
26
|
+
super || @result.respond_to?(name)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def ===(other)
|
|
30
|
+
other === @result
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def method_missing(name,*args,&proc)
|
|
35
|
+
if @exception
|
|
36
|
+
raise @exception
|
|
37
|
+
elsif @result.nil?
|
|
38
|
+
raise UnexecutedRequest.new("You must execute the batch before accessing the result: #{@uri}")
|
|
39
|
+
else
|
|
40
|
+
@result.send(name,*args,&proc)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|