djanowski-facebooker 1.0.11 → 1.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -168,4 +168,4 @@ require 'facebooker/models/info_section'
168
168
  require 'facebooker/adapters/adapter_base'
169
169
  require 'facebooker/adapters/facebook_adapter'
170
170
  require 'facebooker/adapters/bebo_adapter'
171
- require 'facebooker/models/friend_list'
171
+ require 'facebooker/models/friend_list'
@@ -12,7 +12,7 @@ module Facebooker
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, :uid, :work_history, :sex, :religion, :notes_count, :activities, :pic_square, :movies, :has_added_app, :education_history, :birthday, :first_name, :meeting_for, :last_name, :interests, :current_location, :pic, :books, :affiliations, :locale, :profile_url, :proxied_email,:email_hashes]
14
14
  STANDARD_FIELDS = [:uid, :first_name, :last_name, :name, :timezone, :birthday, :sex, :affiliations, :locale, :profile_url]
15
- attr_accessor :id, :session
15
+ attr_accessor :session
16
16
  populating_attr_accessor *FIELDS
17
17
  attr_reader :affiliations
18
18
  populating_hash_settable_accessor :current_location, Location
@@ -28,10 +28,10 @@ module Facebooker
28
28
  # attribute_hash
29
29
  def initialize(*args)
30
30
  if (args.first.kind_of?(String) || args.first.kind_of?(Integer)) && args.size==1
31
- @id=Integer(args.shift)
31
+ self.uid = args.shift
32
32
  @session = Session.current
33
33
  elsif (args.first.kind_of?(String) || args.first.kind_of?(Integer)) && args[1].kind_of?(Session)
34
- @id = Integer(args.shift)
34
+ self.uid = args.shift
35
35
  @session = args.shift
36
36
  end
37
37
  if args.last.kind_of?(Hash)
@@ -39,6 +39,18 @@ module Facebooker
39
39
  end
40
40
  end
41
41
 
42
+ def uid
43
+ @uid
44
+ end
45
+
46
+ def uid=(uid)
47
+ @uid = uid.to_i
48
+ end
49
+
50
+ alias :id :uid
51
+ alias :id= :uid=
52
+ alias :facebook_id :uid
53
+
42
54
  # Returns a user's events, params correspond to API call parameters (except UID):
43
55
  # http://wiki.developers.facebook.com/index.php/Events.get
44
56
  # E.g:
@@ -86,7 +98,7 @@ module Facebooker
86
98
 
87
99
  #use __blank instead of nil so that this is cached
88
100
  cache_key = flid||"__blank"
89
- options = {:uid=>@id}
101
+ options = {:uid=>self.id}
90
102
  options[:flid] = flid unless flid.nil?
91
103
  @friends_hash[cache_key] ||= @session.post('facebook.friends.get', options,false).map do |uid|
92
104
  User.new(uid, @session)
@@ -203,7 +215,7 @@ module Facebooker
203
215
  end
204
216
 
205
217
  def profile_fbml
206
- session.post('facebook.profile.getFBML', :uid => @id)
218
+ session.post('facebook.profile.getFBML', :uid => id)
207
219
  end
208
220
 
209
221
  ##
@@ -229,7 +241,7 @@ module Facebooker
229
241
  end
230
242
 
231
243
  def set_profile_fbml(profile_fbml, mobile_fbml, profile_action_fbml, profile_main = nil)
232
- parameters = {:uid => @id}
244
+ parameters = {:uid => id}
233
245
  parameters[:profile] = profile_fbml if profile_fbml
234
246
  parameters[:profile_action] = profile_action_fbml if profile_action_fbml
235
247
  parameters[:mobile_profile] = mobile_fbml if mobile_fbml
@@ -243,12 +255,12 @@ module Facebooker
243
255
  # Note: using set_profile_info as I feel using user.set_info could be confused with the user.getInfo facebook method.
244
256
  # Also, I feel it fits in line with user.set_profile_fbml.
245
257
  def set_profile_info(title, info_fields, format = :text)
246
- session.post('facebook.profile.setInfo', :title => title, :uid => @id,
258
+ session.post('facebook.profile.setInfo', :title => title, :uid => id,
247
259
  :type => format.to_s == "text" ? 1 : 5, :info_fields => info_fields.to_json)
248
260
  end
249
261
 
250
262
  def get_profile_info
251
- session.post('facebook.profile.getInfo', :uid => @id)
263
+ session.post('facebook.profile.getInfo', :uid => id)
252
264
  end
253
265
 
254
266
  ##
@@ -284,19 +296,19 @@ module Facebooker
284
296
  ##
285
297
  # Convenience method to send email to the current user
286
298
  def send_email(subject, text=nil, fbml=nil)
287
- session.send_email([@id], subject, text, fbml)
299
+ session.send_email([id], subject, text, fbml)
288
300
  end
289
301
 
290
302
  ##
291
303
  # Convenience method to set cookie for the current user
292
304
  def set_cookie(name, value, expires=nil, path=nil)
293
- session.data.set_cookie(@id, name, value, expires, path)
305
+ session.data.set_cookie(id, name, value, expires, path)
294
306
  end
295
307
 
296
308
  ##
297
309
  # Convenience method to get cookies for the current user
298
310
  def get_cookies(name=nil)
299
- session.data.get_cookies(@id, name)
311
+ session.data.get_cookies(id, name)
300
312
  end
301
313
 
302
314
  ##
@@ -359,10 +371,6 @@ module Facebooker
359
371
  end
360
372
  end
361
373
 
362
- def facebook_id
363
- @id
364
- end
365
-
366
374
  def self.user_fields(fields = [])
367
375
  valid_fields(fields)
368
376
  end
@@ -385,7 +393,7 @@ module Facebooker
385
393
  end
386
394
 
387
395
  def profile_pic_album_id
388
- merge_aid(-3, @id)
396
+ merge_aid(-3, id)
389
397
  end
390
398
 
391
399
  def merge_aid(aid, uid)
@@ -94,13 +94,14 @@ module Facebooker
94
94
 
95
95
  #returning gracefully if the cookies aren't set or have expired
96
96
  return unless parsed['session_key'] && parsed['user'] && parsed['expires'] && parsed['ss']
97
- return unless Time.at(parsed['expires'].to_f) > Time.now
97
+ return unless Time.at(parsed['expires'].to_f) > Time.now || (parsed['expires'] == "0")
98
98
 
99
99
  #if we have the unexpired cookies, we'll throw an exception if the sig doesn't verify
100
100
  verify_signature(parsed,cookies[Facebooker.api_key])
101
101
 
102
102
  @facebook_session = new_facebook_session
103
103
  @facebook_session.secure_with!(parsed['session_key'],parsed['user'],parsed['expires'],parsed['ss'])
104
+ session[:facebook_session] = @facebook_session
104
105
  end
105
106
 
106
107
  def secure_with_token!
@@ -277,4 +278,4 @@ module Facebooker
277
278
  end
278
279
  end
279
280
  end
280
- end
281
+ end
@@ -31,7 +31,7 @@ class CGI
31
31
  def initialize(request, option={})
32
32
  @request = request
33
33
  @initialization_options = option
34
- option['session_id'] = set_session_id
34
+ option['session_id'] ||= set_session_id
35
35
  initialize_aliased_by_facebooker(request, option)
36
36
  end
37
37
 
@@ -90,9 +90,9 @@ module ActionView
90
90
  # Altered to throw an error on :popup and sanitize the javascript
91
91
  # for Facebook.
92
92
  def convert_options_to_javascript_with_facebooker!(html_options, url ='')
93
- if !request_comes_from_facebook?
93
+ if !respond_to?(:request_comes_from_facebook?) || !request_comes_from_facebook?
94
94
  convert_options_to_javascript_without_facebooker!(html_options,url)
95
- else
95
+ else
96
96
  confirm, popup = html_options.delete("confirm"), html_options.delete("popup")
97
97
 
98
98
  method, href = html_options.delete("method"), html_options['href']
@@ -124,23 +124,24 @@ module ActionView
124
124
  # link_to("Facebooker", "http://rubyforge.org/projects/facebooker", :confirm=>"Go to Facebooker?")
125
125
  # link_to("Facebooker", "http://rubyforge.org/projects/facebooker", :confirm=>{:title=>"the page says:, :content=>"Go to Facebooker?"})
126
126
  # link_to("Facebooker", "http://rubyforge.org/projects/facebooker", :confirm=>{:title=>"the page says:, :content=>"Go to Facebooker?", :color=>"pink"})
127
- def confirm_javascript_function_with_facebooker(confirm, fun = nil)
128
- if !request_comes_from_facebook?
129
- confirm_javascript_function_without_facebooker(confirm)
130
- else
131
- if(confirm.is_a?(Hash))
132
- confirm_options = confirm.stringify_keys
133
- title = confirm_options.delete("title") || "Please Confirm"
134
- content = confirm_options.delete("content") || "Are you sure?"
135
- style = confirm_options.empty? ? "" : convert_options_to_css(confirm_options)
136
- else
137
- title,content,style = 'Please Confirm', confirm, ""
127
+ def confirm_javascript_function_with_facebooker(confirm, fun = nil)
128
+ if !request_comes_from_facebook?
129
+ confirm_javascript_function_without_facebooker(confirm)
130
+ else
131
+ if(confirm.is_a?(Hash))
132
+ confirm_options = confirm.stringify_keys
133
+ title = confirm_options.delete("title") || "Please Confirm"
134
+ content = confirm_options.delete("content") || "Are you sure?"
135
+ button_confirm = confirm_options.delete("button_confirm") || "Okay"
136
+ button_cancel = confirm_options.delete("button_cancel") || "Cancel"
137
+ style = confirm_options.empty? ? "" : convert_options_to_css(confirm_options)
138
+ else
139
+ title,content,style,button_confirm,button_cancel = 'Please Confirm', confirm, "", "Okay", "Cancel"
138
140
  end
139
-
140
- "var dlg = new Dialog().showChoice('#{escape_javascript(title.to_s)}','#{escape_javascript(content.to_s)}').setStyle(#{style});"+
141
+ "var dlg = new Dialog().showChoice('#{escape_javascript(title.to_s)}','#{escape_javascript(content.to_s)}','#{escape_javascript(button_confirm.to_s)}','#{escape_javascript(button_cancel.to_s)}').setStyle(#{style});"+
141
142
  "var a=this;dlg.onconfirm = function() { #{fun ? fun : 'document.setLocation(a.getHref());'} };"
142
143
  end
143
- end
144
+ end
144
145
 
145
146
  alias_method_chain :confirm_javascript_function, :facebooker
146
147
 
@@ -4,7 +4,11 @@ module Facebooker
4
4
  module FbConnect
5
5
 
6
6
  def fb_connect_javascript_tag
7
- javascript_include_tag "http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"
7
+ if request.ssl?
8
+ javascript_include_tag "https://www.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"
9
+ else
10
+ javascript_include_tag "http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"
11
+ end
8
12
  end
9
13
 
10
14
  def init_fb_connect(*required_features)
@@ -31,4 +35,4 @@ module Facebooker
31
35
  end
32
36
  end
33
37
  end
34
- end
38
+ end
@@ -176,8 +176,8 @@ module Facebooker
176
176
  publisher = setup_publisher(klass,method)
177
177
  # sort the Hash elements (in the short_story and full_story) before generating MD5
178
178
  Digest::MD5.hexdigest [publisher.one_line_story_templates,
179
- (publisher.short_story_templates and publisher.short_story_templates.collect{|ss| ss.to_a.sort_by{|e| e[0]}}),
180
- (publisher.full_story_template and publisher.full_story_template.to_a.sort_by{|e| e[0]})
179
+ (publisher.short_story_templates and publisher.short_story_templates.collect{|ss| ss.to_a.sort_by{|e| e[0].to_s}}),
180
+ (publisher.full_story_template and publisher.full_story_template.to_a.sort_by{|e| e[0].to_s})
181
181
  ].to_json
182
182
  end
183
183
 
@@ -396,6 +396,9 @@ module Facebooker
396
396
  returning ActionView::Base.new([template_root,controller_root], assigns, self) do |template|
397
397
  template.controller=self
398
398
  template.extend(self.class.master_helper_module)
399
+ def template.request_comes_from_facebook?
400
+ true
401
+ end
399
402
  end
400
403
  end
401
404
 
@@ -34,11 +34,6 @@ module Facebooker
34
34
  send verb, path, params
35
35
  end
36
36
 
37
- def facebook_post(path, params={}, fb_params=facebook_parameters)
38
- params = fb_params.merge(:canvas => true).merge(params)
39
- post path, params
40
- end
41
-
42
37
  def facebook_parameters(overrides=nil)
43
38
  overrides ||= {}
44
39
  params = default_facebook_parameters.merge(overrides)
@@ -1,8 +1,8 @@
1
1
  begin
2
2
  require 'curb'
3
3
  Facebooker.use_curl = true
4
- rescue Exception=>e
5
- puts e
4
+ rescue LoadError
5
+ $stderr.puts "Curb not found. Using Net::HTTP."
6
6
  require 'net/http'
7
7
  end
8
8
  require 'facebooker/parser'
@@ -319,24 +319,15 @@ module Facebooker
319
319
  # Register a template bundle with Facebook.
320
320
  # returns the template id to use to send using this template
321
321
  def register_template_bundle(one_line_story_templates,short_story_templates=nil,full_story_template=nil, action_links=nil)
322
- if !one_line_story_templates.is_a?(Array)
323
- one_line_story_templates = [one_line_story_templates]
324
- end
325
- parameters = {:one_line_story_templates=>one_line_story_templates.to_json}
322
+ parameters = {:one_line_story_templates => Array(one_line_story_templates).to_json}
326
323
 
327
- if !action_links.blank?
328
- parameters[:action_links] = action_links.to_json
329
- end
324
+ parameters[:action_links] = action_links.to_json unless action_links.blank?
330
325
 
331
- if !short_story_templates.blank?
332
- short_story_templates = [short_story_templates] unless short_story_templates.is_a?(Array)
333
- parameters[:short_story_templates]= short_story_templates.to_json
334
- end
326
+ parameters[:short_story_templates] = Array(short_story_templates).to_json unless short_story_templates.blank?
335
327
 
336
- if !full_story_template.blank?
337
- parameters[:full_story_template]= full_story_template.to_json
338
- end
339
- post("facebook.feed.registerTemplateBundle", parameters,false)
328
+ parameters[:full_story_template] = full_story_template.to_json unless full_story_template.blank?
329
+
330
+ post("facebook.feed.registerTemplateBundle", parameters, false)
340
331
  end
341
332
 
342
333
  ##
@@ -542,6 +542,9 @@ class RailsHelperTest < Test::Unit::TestCase
542
542
  def url_for(arg)
543
543
  arg
544
544
  end
545
+ def request
546
+ ActionController::TestRequest.new
547
+ end
545
548
  def fields_for(*args)
546
549
  ""
547
550
  end
@@ -1097,6 +1100,14 @@ class RailsUrlHelperExtensionsTest < Test::Unit::TestCase
1097
1100
  def protect_against_forgery?
1098
1101
  false
1099
1102
  end
1103
+
1104
+ def request_comes_from_facebook?
1105
+ @request_comes_from_facebook
1106
+ end
1107
+
1108
+ def request_comes_from_facebook=(val)
1109
+ @request_comes_from_facebook = val
1110
+ end
1100
1111
 
1101
1112
  end
1102
1113
  class UrlHelperExtensionsController < NoisyController
@@ -1117,10 +1128,10 @@ class RailsUrlHelperExtensionsTest < Test::Unit::TestCase
1117
1128
  @response = ActionController::TestResponse.new
1118
1129
 
1119
1130
  @u = UrlHelperExtensionsClass.new(@controller)
1120
- @u.stubs(:request_comes_from_facebook?).returns(true)
1131
+ @u.request_comes_from_facebook = true
1121
1132
 
1122
1133
  @non_canvas_u = UrlHelperExtensionsClass.new(@controller)
1123
- @non_canvas_u.stubs(:request_comes_from_facebook?).returns(false)
1134
+ @non_canvas_u.request_comes_from_facebook = false
1124
1135
 
1125
1136
  @label = "Testing"
1126
1137
  @url = "test.host"
@@ -1129,6 +1140,8 @@ class RailsUrlHelperExtensionsTest < Test::Unit::TestCase
1129
1140
  @title = "Confirm Request"
1130
1141
  @style = {:color => 'black', :background => 'white'}
1131
1142
  @verbose_style = "{background: 'white', color: 'black'}"
1143
+ @default_okay = "Okay"
1144
+ @default_cancel = "Cancel"
1132
1145
  @default_style = "" #"'width','200px'"
1133
1146
  end
1134
1147
 
@@ -1141,19 +1154,19 @@ class RailsUrlHelperExtensionsTest < Test::Unit::TestCase
1141
1154
  end
1142
1155
 
1143
1156
  def test_link_to_with_confirm
1144
- assert_dom_equal( "<a href=\"#{@url}\" onclick=\"var dlg = new Dialog().showChoice(\'#{@default_title}\',\'#{@prompt}\').setStyle(#{@default_style});"+
1157
+ assert_dom_equal( "<a href=\"#{@url}\" onclick=\"var dlg = new Dialog().showChoice(\'#{@default_title}\',\'#{@prompt}\',\'#{@default_okay}\',\'#{@default_cancel}\').setStyle(#{@default_style});"+
1145
1158
  "var a=this;dlg.onconfirm = function() { " +
1146
1159
  "document.setLocation(a.getHref()); };return false;\">#{@label}</a>",
1147
1160
  @u.link_to(@label, @url, :confirm => @prompt) )
1148
1161
  end
1149
1162
  def test_link_to_with_confirm_with_title
1150
- assert_dom_equal( "<a href=\"#{@url}\" onclick=\"var dlg = new Dialog().showChoice(\'#{@title}\',\'#{@prompt}\').setStyle(#{@default_style});"+
1163
+ assert_dom_equal( "<a href=\"#{@url}\" onclick=\"var dlg = new Dialog().showChoice(\'#{@title}\',\'#{@prompt}\',\'#{@default_okay}\',\'#{@default_cancel}\').setStyle(#{@default_style});"+
1151
1164
  "var a=this;dlg.onconfirm = function() { " +
1152
1165
  "document.setLocation(a.getHref()); };return false;\">#{@label}</a>",
1153
1166
  @u.link_to(@label, @url, :confirm => {:title=>@title,:content=>@prompt}) )
1154
1167
  end
1155
1168
  def test_link_to_with_confirm_with_title_and_style
1156
- assert_dom_equal( "<a href=\"#{@url}\" onclick=\"var dlg = new Dialog().showChoice(\'#{@title}\',\'#{@prompt}\').setStyle(#{@verbose_style});"+
1169
+ assert_dom_equal( "<a href=\"#{@url}\" onclick=\"var dlg = new Dialog().showChoice(\'#{@title}\',\'#{@prompt}\',\'#{@default_okay}\',\'#{@default_cancel}\').setStyle(#{@verbose_style});"+
1157
1170
  "var a=this;dlg.onconfirm = function() { " +
1158
1171
  "document.setLocation(a.getHref()); };return false;\">#{@label}</a>",
1159
1172
  @u.link_to(@label, @url, :confirm => {:title=>@title,:content=>@prompt}.merge!(@style)) )
@@ -1168,7 +1181,7 @@ class RailsUrlHelperExtensionsTest < Test::Unit::TestCase
1168
1181
  end
1169
1182
 
1170
1183
  def test_link_to_with_confirm_and_method
1171
- assert_dom_equal( "<a href=\"#{@url}\" onclick=\"var dlg = new Dialog().showChoice(\'#{@default_title}\',\'#{@prompt}\').setStyle(#{@default_style});"+
1184
+ assert_dom_equal( "<a href=\"#{@url}\" onclick=\"var dlg = new Dialog().showChoice(\'#{@default_title}\',\'#{@prompt}\',\'#{@default_okay}\',\'#{@default_cancel}\').setStyle(#{@default_style});"+
1172
1185
  "var a=this;dlg.onconfirm = function() { " +
1173
1186
  "var f = document.createElement('form'); f.setStyle('display','none'); "+
1174
1187
  "a.getParentNode().appendChild(f); f.setMethod('POST'); f.setAction(a.getHref());" +
@@ -1191,7 +1204,7 @@ class RailsUrlHelperExtensionsTest < Test::Unit::TestCase
1191
1204
 
1192
1205
  def test_button_to_with_confirm
1193
1206
  assert_equal "<form method=\"post\" action=\"#{@url}\" class=\"button-to\"><div>" +
1194
- "<input onclick=\"var dlg = new Dialog().showChoice(\'#{@default_title}\',\'#{@prompt}\').setStyle(#{@default_style});"+
1207
+ "<input onclick=\"var dlg = new Dialog().showChoice(\'#{@default_title}\',\'#{@prompt}\',\'#{@default_okay}\',\'#{@default_cancel}\').setStyle(#{@default_style});"+
1195
1208
  "var a=this;dlg.onconfirm = function() { "+
1196
1209
  "a.getForm().submit(); };return false;\" type=\"submit\" value=\"#{@label}\" /></div></form>",
1197
1210
  @u.button_to(@label,@url, :confirm=>@prompt)
@@ -27,6 +27,22 @@ class UserTest < Test::Unit::TestCase
27
27
  def test_can_ask_user_if_he_or_she_is_friends_with_another_user_by_user_id
28
28
  assert(@user.friends_with?(@other_user.id))
29
29
  end
30
+
31
+ def test_does_not_query_facebook_for_uid
32
+ @session.expects(:post).never
33
+ assert_equal 1234, Facebooker::User.new(1234, @session).uid
34
+ end
35
+
36
+ def test_uid_is_always_an_integer
37
+ assert_equal 1234, Facebooker::User.new(:uid => "1234").uid
38
+ assert_equal 1234, Facebooker::User.new(:id => "1234").uid
39
+
40
+ assert_equal 1234, Facebooker::User.new(:uid => "1234").id
41
+ assert_equal 1234, Facebooker::User.new(:id => "1234").id
42
+
43
+ assert_equal 1234, Facebooker::User.new(:uid => "1234").facebook_id
44
+ assert_equal 1234, Facebooker::User.new(:id => "1234").facebook_id
45
+ end
30
46
 
31
47
  def test_cast_to_friend_list_id_with_nil
32
48
  assert_nil @user.cast_to_friend_list_id(nil)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: djanowski-facebooker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.11
4
+ version: 1.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chad Fowler
@@ -24,15 +24,6 @@ dependencies:
24
24
  - !ruby/object:Gem::Version
25
25
  version: 1.5.0
26
26
  version:
27
- - !ruby/object:Gem::Dependency
28
- name: curb
29
- version_requirement:
30
- version_requirements: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: 0.1.4
35
- version:
36
27
  description: "== DESCRIPTION: Facebooker is a Ruby wrapper over the Facebook[http://facebook.com] {REST API}[http://developer.facebook.com]. Its goals are: * Idiomatic Ruby * No dependencies outside of the Ruby standard library * Concrete classes and methods modeling the Facebook data, so it's easy for a Rubyist to understand what's available * Well tested == FEATURES/PROBLEMS:"
37
28
  email: mmangino@elevatedrails.com
38
29
  executables: []