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 CHANGED
@@ -28,21 +28,25 @@ HOE = Hoe.spec('facebooker') do
28
28
  self.extra_rdoc_files = FileList['*.rdoc']
29
29
  end
30
30
 
31
- require 'rcov/rcovtask'
31
+ begin
32
+ require 'rcov/rcovtask'
32
33
 
33
- namespace :test do
34
- namespace :coverage do
35
- desc "Delete aggregate coverage data."
36
- task(:clean) { rm_f "coverage.data" }
37
- end
38
- desc 'Aggregate code coverage for unit, functional and integration tests'
39
- Rcov::RcovTask.new(:coverage) do |t|
40
- t.libs << "test"
41
- t.test_files = FileList["test/**/*_test.rb"]
42
- t.output_dir = "coverage/"
43
- t.verbose = true
44
- t.rcov_opts = ['--exclude', 'test,/usr/lib/ruby,/Library/Ruby,/System/Library', '--sort', 'coverage']
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
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{facebooker}
5
- s.version = "1.0.47"
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-14}
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
@@ -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, :pic_square]
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 = ''
@@ -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
- "http://#{Facebooker.www_server_base_url}/authorize.php?api_key=#{@api_key}&v=1.0&ext_perm=#{permission}#{install_url_optional_parameters(options)}"
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
- @photos = post('facebook.photos.get', :subj_id => subj_id, :pids => pids, :aid => aid ) do |response|
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
@@ -2,7 +2,7 @@ module Facebooker #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
4
  MINOR = 0
5
- TINY = 47
5
+ TINY = 48
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -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.47
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-14 00:00:00 -07:00
17
+ date: 2009-08-26 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency