rfacebook 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -27,11 +27,6 @@
27
27
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  #
29
29
 
30
- #
31
- # Some code was inspired by techniques used in Alpha Chen's old client.
32
- # Some code was ported from the official PHP5 client.
33
- #
34
-
35
30
  require "facebook_session"
36
31
 
37
32
  module RFacebook
@@ -1,10 +1,38 @@
1
+ # Copyright (c) 2007, Matt Pizzimenti (www.livelearncode.com)
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification,
5
+ # are permitted provided that the following conditions are met:
6
+ #
7
+ # Redistributions of source code must retain the above copyright notice,
8
+ # this list of conditions and the following disclaimer.
9
+ #
10
+ # Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ #
14
+ # Neither the name of the original author nor the names of contributors
15
+ # may be used to endorse or promote products derived from this software
16
+ # without specific prior written permission.
17
+ #
18
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ #
29
+
1
30
  require "facebook_web_session"
2
31
 
3
32
  module RFacebook
4
33
 
5
34
  module RailsControllerExtensions
6
-
7
-
35
+
8
36
  # SECTION: StandardErrors
9
37
 
10
38
  class APIKeyNeededStandardError < StandardError; end
@@ -86,11 +86,22 @@ class FacebookSession
86
86
  @last_error = nil
87
87
  @session_expired = false
88
88
 
89
+ # cache object for API calls
90
+ @callcache = {}
91
+
89
92
  end
90
93
 
91
94
  def session_expired?
92
95
  return (@session_expired == true)
93
96
  end
97
+
98
+ def logger
99
+ return @logger
100
+ end
101
+
102
+ def logger=(externalLogger)
103
+ @logger = externalLogger
104
+ end
94
105
 
95
106
  # SECTION: Public Abstract Interface
96
107
 
@@ -133,9 +144,30 @@ class FacebookSession
133
144
  # this converts a call to "auth_getSession" to "auth.getSession"
134
145
  # and does the proper API call using the parameter hash given.
135
146
  def method_missing(methodSymbol, *params)
136
- methodString = methodSymbol.to_s.gsub("_", ".")
137
- # TODO: check here for valid method names
138
- call_method(methodString, params.first)
147
+ tokens = methodSymbol.to_s.split("_")
148
+ if tokens[0] == "cached"
149
+ tokens.shift
150
+ return cached_call_method(tokens.join("."), params.first)
151
+ else
152
+ return call_method(tokens.join("."), params.first)
153
+ end
154
+ end
155
+
156
+ def cached_call_method(method,params)
157
+ key = cache_key_for(method,params)
158
+ @logger.debug "RFacebook::FacebookSession\#cached_call_method - #{method}(#{params.inspect}) - attempting to hit cache" if @logger
159
+ return @callcache[key] ||= call_method(method,params)
160
+ end
161
+
162
+ def cache_key_for(method,params)
163
+ pairs = []
164
+ params.each do |k,v|
165
+ if v.is_a?(Array)
166
+ v = v.join(",")
167
+ end
168
+ pairs << "#{k}=#{v}"
169
+ end
170
+ return "#{method}(#{pairs.sort.join("...")})".to_sym
139
171
  end
140
172
 
141
173
 
@@ -147,7 +179,9 @@ class FacebookSession
147
179
  # params - hash of key,value pairs for the parameters to this method
148
180
  # use_ssl - set to true if the call will be made over SSL
149
181
  def call_method(method, params={}, use_ssl=false)
150
-
182
+
183
+ @logger.debug "RFacebook::FacebookSession\#call_method - #{method}(#{params.inspect}) - making remote call" if @logger
184
+
151
185
  # ensure that this object has been activated somehow
152
186
  if (!method.include?("auth") and !is_activated?)
153
187
  raise NotActivatedStandardError, "You must activate the session before using it."
@@ -175,7 +209,6 @@ class FacebookSession
175
209
 
176
210
  # prepare internal state
177
211
  @last_call_was_successful = true
178
- #@last_error = nil
179
212
 
180
213
  # do the request
181
214
  xmlstring = post_request(@api_server_base_url, @api_server_path, method, params, use_ssl)
@@ -183,6 +216,9 @@ class FacebookSession
183
216
 
184
217
  # error checking
185
218
  if xml.at("error_response")
219
+
220
+ @logger.debug "RFacebook::FacebookSession\#call_method - #{method}(#{params.inspect}) - remote call failed" if @logger
221
+
186
222
  @last_call_was_successful = false
187
223
  code = xml.at("error_code").inner_html
188
224
  msg = xml.at("error_msg").inner_html
@@ -219,7 +255,6 @@ class FacebookSession
219
255
  # params - hash of key/value pairs that get sent as form data to the server
220
256
  # use_ssl - set to true if you want to use SSL for this request
221
257
  def post_request(api_server_base_url, api_server_path, method, params, use_ssl)
222
-
223
258
  # get a server handle
224
259
  port = (use_ssl == true) ? 443 : 80
225
260
  http_server = Net::HTTP.new(@api_server_base_url, port)
@@ -232,7 +267,6 @@ class FacebookSession
232
267
 
233
268
  # return the text of the body
234
269
  return response
235
-
236
270
  end
237
271
 
238
272
  # Function: param_signature
@@ -243,7 +277,6 @@ class FacebookSession
243
277
  end
244
278
 
245
279
  def generate_signature(hash, secret)
246
-
247
280
  args = []
248
281
  hash.each do |k,v|
249
282
  args << "#{k}=#{v}"
@@ -251,7 +284,6 @@ class FacebookSession
251
284
  sortedArray = args.sort
252
285
  requestStr = sortedArray.join("")
253
286
  return Digest::MD5.hexdigest("#{requestStr}#{secret}")
254
-
255
287
  end
256
288
 
257
289
  end
@@ -27,11 +27,6 @@
27
27
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  #
29
29
 
30
- #
31
- # Some code was inspired by techniques used in Alpha Chen's old client.
32
- # Some code was ported from the official PHP5 client.
33
- #
34
-
35
30
  require "facebook_session"
36
31
 
37
32
  module RFacebook
@@ -29,28 +29,6 @@
29
29
 
30
30
  require "hpricot"
31
31
 
32
- # class HpricotHashWrapper
33
- #
34
- # def initialize(hpricotDoc)
35
- # @doc = hpricotDoc
36
- # end
37
- #
38
- # def to_hash
39
- # puts "----"
40
- # begin
41
- # hashResult = {}
42
- # @doc.each_child do |child|
43
- # puts "child node: #{child}"
44
- # hashResult[child.to_s] = HpricotHashWrapper.new(child).to_hash
45
- # end
46
- # return hashResult
47
- # rescue
48
- # return @doc.inner_html
49
- # end
50
- # end
51
- #
52
- # end
53
-
54
32
  module RFacebook
55
33
 
56
34
  module FacepricotChaining
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: rfacebook
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.7.0
7
- date: 2007-07-27 00:00:00 -07:00
6
+ version: 0.7.1
7
+ date: 2007-07-30 00:00:00 -07:00
8
8
  summary: A Ruby interface to the Facebook API v1.0+. Supports the new features from F8.
9
9
  require_paths:
10
10
  - lib