mmangino-facebooker 1.0.47 → 1.0.48
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +17 -13
- data/facebooker.gemspec +2 -2
- data/lib/facebooker.rb +1 -1
- data/lib/facebooker/adapters/facebook_adapter.rb +4 -0
- data/lib/facebooker/models/user.rb +12 -2
- data/lib/facebooker/rails/helpers.rb +2 -2
- data/lib/facebooker/rails/publisher.rb +9 -0
- data/lib/facebooker/session.rb +29 -2
- data/lib/facebooker/version.rb +1 -1
- data/test/facebooker/models/user_test.rb +6 -0
- data/test/facebooker/session_test.rb +27 -0
- metadata +2 -2
data/Rakefile
CHANGED
@@ -28,21 +28,25 @@ HOE = Hoe.spec('facebooker') do
|
|
28
28
|
self.extra_rdoc_files = FileList['*.rdoc']
|
29
29
|
end
|
30
30
|
|
31
|
-
|
31
|
+
begin
|
32
|
+
require 'rcov/rcovtask'
|
32
33
|
|
33
|
-
namespace :test do
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
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
|
45
47
|
end
|
48
|
+
rescue LoadError
|
49
|
+
$stderr.puts "Install the rcov gem to enable test coverage analysis"
|
46
50
|
end
|
47
51
|
|
48
52
|
namespace :gem do
|
data/facebooker.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
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.48"
|
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", "Mike Mangino"]
|
9
|
-
s.date = %q{2009-08-
|
9
|
+
s.date = %q{2009-08-26}
|
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
11
|
|
12
12
|
* Idiomatic Ruby
|
data/lib/facebooker.rb
CHANGED
@@ -164,7 +164,7 @@ module Facebooker
|
|
164
164
|
@timeout
|
165
165
|
end
|
166
166
|
|
167
|
-
[: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, :video_server_base].each do |delegated_method|
|
167
|
+
[:api_key,:secret_key, :www_server_base_url,:login_url_base,:install_url_base,:permission_url_base,:api_rest_path,:api_server_base,:api_server_base_url,:canvas_server_base, :video_server_base].each do |delegated_method|
|
168
168
|
define_method(delegated_method){ return current_adapter.send(delegated_method)}
|
169
169
|
end
|
170
170
|
|
@@ -44,6 +44,10 @@ 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 permission_url_base
|
49
|
+
"http://#{www_server_base_url}/connect/prompt_permissions.php?api_key=#{api_key}&v=1.0"
|
50
|
+
end
|
47
51
|
|
48
52
|
end
|
49
53
|
|
@@ -11,7 +11,7 @@ module Facebooker
|
|
11
11
|
attr_accessor :message, :time, :status_id
|
12
12
|
end
|
13
13
|
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]
|
14
|
-
STANDARD_FIELDS = [:uid, :first_name, :last_name, :name, :timezone, :birthday, :sex, :affiliations, :locale, :profile_url, :
|
14
|
+
STANDARD_FIELDS = [:uid, :first_name, :last_name, :name, :timezone, :birthday, :sex, :affiliations, :locale, :profile_url, :proxied_email]
|
15
15
|
populating_attr_accessor(*FIELDS)
|
16
16
|
attr_reader :affiliations
|
17
17
|
populating_hash_settable_accessor :current_location, Location
|
@@ -63,7 +63,17 @@ module Facebooker
|
|
63
63
|
@events[params.to_s] ||= @session.post('facebook.events.get', {:uid => self.id}.merge(params)).map do |event|
|
64
64
|
Event.from_hash(event)
|
65
65
|
end
|
66
|
-
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Rsvp to an event with the eid and rsvp_status which can be 'attending', 'unsure', or 'declined'.
|
69
|
+
# http://wiki.developers.facebook.com/index.php/Events.rsvp
|
70
|
+
# E.g:
|
71
|
+
# @user.rsvp_event('100321123', 'attending')
|
72
|
+
# # => Returns true if all went well
|
73
|
+
def rsvp_event(eid, rsvp_status, options = {})
|
74
|
+
result = @session.post('facebook.events.rsvp', options.merge(:eid => eid, :rsvp_status => rsvp_status))
|
75
|
+
result == '1' ? true : false
|
76
|
+
end
|
67
77
|
|
68
78
|
#
|
69
79
|
# Set the list of friends, given an array of User objects. If the list has been retrieved previously, will not set
|
@@ -451,10 +451,10 @@ module Facebooker
|
|
451
451
|
def facebook_messages
|
452
452
|
message=""
|
453
453
|
unless flash[:notice].blank?
|
454
|
-
message += fb_success(flash[:notice])
|
454
|
+
message += fb_success(*flash[:notice])
|
455
455
|
end
|
456
456
|
unless flash[:error].blank?
|
457
|
-
message += fb_error(flash[:error])
|
457
|
+
message += fb_error(*flash[:error])
|
458
458
|
end
|
459
459
|
message
|
460
460
|
end
|
@@ -487,6 +487,15 @@ module Facebooker
|
|
487
487
|
end
|
488
488
|
end
|
489
489
|
|
490
|
+
def unregister_inactive_templates
|
491
|
+
session = Facebooker::Session.create
|
492
|
+
active_template_ids = FacebookTemplate.all.map(&:bundle_id)
|
493
|
+
all_template_ids = session.active_template_bundles.map {|t| t["template_bundle_id"]}
|
494
|
+
(all_template_ids - active_template_ids).each do |template_bundle_id|
|
495
|
+
session.deactivate_template_bundle_by_id(template_bundle_id)
|
496
|
+
end
|
497
|
+
end
|
498
|
+
|
490
499
|
def method_missing(name,*args)
|
491
500
|
should_send = false
|
492
501
|
method = ''
|
data/lib/facebooker/session.rb
CHANGED
@@ -122,7 +122,9 @@ module Facebooker
|
|
122
122
|
# * sms
|
123
123
|
def permission_url(permission,options={})
|
124
124
|
options = default_login_url_options.merge(options)
|
125
|
-
|
125
|
+
options = add_next_parameters(options)
|
126
|
+
options << "&ext_perm=#{permission}"
|
127
|
+
"#{Facebooker.permission_url_base}#{options.join}"
|
126
128
|
end
|
127
129
|
|
128
130
|
def install_url_optional_parameters(options)
|
@@ -145,6 +147,8 @@ module Facebooker
|
|
145
147
|
optional_parameters << "&skipcookie=true" if options[:skip_cookie]
|
146
148
|
optional_parameters << "&hide_checkbox=true" if options[:hide_checkbox]
|
147
149
|
optional_parameters << "&canvas=true" if options[:canvas]
|
150
|
+
optional_parameters << "&fbconnect=true" if options[:fbconnect]
|
151
|
+
optional_parameters << "&req_perms=#{options[:req_perms]}" if options[:req_perms]
|
148
152
|
optional_parameters.join
|
149
153
|
end
|
150
154
|
|
@@ -269,6 +273,23 @@ module Facebooker
|
|
269
273
|
end
|
270
274
|
end
|
271
275
|
|
276
|
+
# Creates an event with the event_info hash and an optional Net::HTTP::MultipartPostFile for the event picture
|
277
|
+
# Returns the eid of the newly created event
|
278
|
+
# http://wiki.developers.facebook.com/index.php/Events.create
|
279
|
+
def create_event(event_info, multipart_post_file = nil)
|
280
|
+
post_file('facebook.events.create', :event_info => event_info.to_json, nil => multipart_post_file)
|
281
|
+
end
|
282
|
+
|
283
|
+
# Cancel an event
|
284
|
+
# http://wiki.developers.facebook.com/index.php/Events.cancel
|
285
|
+
# E.g:
|
286
|
+
# @session.cancel_event('100321123', :cancel_message => "It's raining...")
|
287
|
+
# # => Returns true if all went well
|
288
|
+
def cancel_event(eid, options = {})
|
289
|
+
result = post('facebook.events.cancel', options.merge(:eid => eid))
|
290
|
+
result == '1' ? true : false
|
291
|
+
end
|
292
|
+
|
272
293
|
def event_members(eid)
|
273
294
|
@members ||= post('facebook.events.getMembers', :eid => eid) do |response|
|
274
295
|
response.map do |attendee_hash|
|
@@ -347,7 +368,9 @@ module Facebooker
|
|
347
368
|
if [subj_id, pids, aid].all? {|arg| arg.nil?}
|
348
369
|
raise ArgumentError, "Can't get a photo without a picture, album or subject ID"
|
349
370
|
end
|
350
|
-
|
371
|
+
# We have to normalize params orherwise FB complain about signature
|
372
|
+
params = {:pids => pids, :subj_id => subj_id, :aid => aid}.delete_if { |k,v| v.nil? }
|
373
|
+
@photos = post('facebook.photos.get', params ) do |response|
|
351
374
|
response.map do |hash|
|
352
375
|
Photo.from_hash(hash)
|
353
376
|
end
|
@@ -422,6 +445,10 @@ module Facebooker
|
|
422
445
|
post("facebook.feed.deactivateTemplateBundleByID", {:template_bundle_id => template_bundle_id.to_s}, false)
|
423
446
|
end
|
424
447
|
|
448
|
+
def active_template_bundles
|
449
|
+
post("facebook.feed.getRegisteredTemplateBundles",{},false)
|
450
|
+
end
|
451
|
+
|
425
452
|
##
|
426
453
|
# publish a previously rendered template bundle
|
427
454
|
# see http://wiki.developers.facebook.com/index.php/Feed.publishUserAction
|
data/lib/facebooker/version.rb
CHANGED
@@ -254,6 +254,12 @@ class Facebooker::UserTest < Test::Unit::TestCase
|
|
254
254
|
assert_equal "http://www.facebook.com/profile.php?id=8055", @user.profile_url
|
255
255
|
end
|
256
256
|
|
257
|
+
def test_can_rsvp_to_event
|
258
|
+
expect_http_posts_with_responses(example_events_rsvp_xml)
|
259
|
+
result = @user.rsvp_event(1000, 'attending')
|
260
|
+
assert result
|
261
|
+
end
|
262
|
+
|
257
263
|
private
|
258
264
|
def example_profile_photos_get_xml
|
259
265
|
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>
|
@@ -22,6 +22,33 @@ class Facebooker::SessionTest < Test::Unit::TestCase
|
|
22
22
|
assert_equal("http://www.facebook.com/install.php?api_key=1234567&v=1.0&next=next_url%3Fa%3D1%26b%3D2", session.install_url(:next => "next_url?a=1&b=2"))
|
23
23
|
end
|
24
24
|
|
25
|
+
def test_permission_url_returns_correct_url_and_parameters
|
26
|
+
fb_url = "http://www.facebook.com/connect/prompt_permissions.php?api_key=#{ENV['FACEBOOK_API_KEY']}&v=1.0&next=next_url&ext_perm=publish_stream,email"
|
27
|
+
url = Facebooker::Session.new(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY']).permission_url('publish_stream,email', {:next => 'next_url'})
|
28
|
+
assert_equal url, fb_url
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_login_url_skips_all_parameters_when_not_passed_or_false
|
32
|
+
session = Facebooker::Session.new(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY'])
|
33
|
+
url = session.login_url({:fbconnect => false})
|
34
|
+
expected_url = Facebooker.login_url_base
|
35
|
+
assert_equal url, expected_url
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_login_url_adds_all_parameters_when_passed
|
39
|
+
login_options = {:skipcookie => true,
|
40
|
+
:hide_checkbox => true,
|
41
|
+
:canvas => true,
|
42
|
+
:fbconnect => true,
|
43
|
+
:req_perms => 'publish_stream',
|
44
|
+
:next => 'http://example.com'}
|
45
|
+
|
46
|
+
session = Facebooker::Session.new(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY'])
|
47
|
+
url = session.login_url(login_options)
|
48
|
+
expected_url = "#{Facebooker.login_url_base}&next=#{CGI.escape(login_options[:next])}&hide_checkbox=true&canvas=true&fbconnect=true&req_perms=publish_stream"
|
49
|
+
assert_equal url, expected_url
|
50
|
+
end
|
51
|
+
|
25
52
|
def test_can_get_api_and_secret_key_from_environment
|
26
53
|
assert_equal('1234567', Facebooker::Session.api_key)
|
27
54
|
assert_equal('7654321', Facebooker::Session.secret_key)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mmangino-facebooker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.48
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chad Fowler
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2009-08-
|
17
|
+
date: 2009-08-26 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|