refacebook 0.4.5 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/Rakefile +0 -1
  2. data/VERSION.yml +1 -1
  3. data/lib/refacebook.rb +50 -14
  4. data/spec/api_spec.rb +10 -4
  5. metadata +1 -1
data/Rakefile CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'rubygems'
4
4
  require 'rake/rdoctask'
5
- require './lib/refacebook.rb'
6
5
 
7
6
  begin
8
7
  require 'jeweler'
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :minor: 4
3
3
  :major: 0
4
- :patch: 5
4
+ :patch: 6
data/lib/refacebook.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'net/http'
2
2
  require 'uri'
3
3
  require 'md5'
4
+ require 'cgi'
4
5
  require 'json'
5
6
 
6
7
  module ReFacebook
@@ -68,14 +69,12 @@ module ReFacebook
68
69
  # If you create a session update the session_key with the session value so that
69
70
  # all the calls become authenticated.
70
71
  #
71
- # Example calls:
72
- # <pre><code>
73
- # # This is without a parameter
74
- # @api = API.new 'MY_API_KEY, 'MY_SECRET_KEY'
75
- # token = @api.auth_createToken
76
- # # This is with a parameter
77
- # app_properties = @api.admin_getAppProperties :properties => ['application_name','callback_url']
78
- # </pre></code>
72
+ # Example code:
73
+ # # This is without a parameter
74
+ # @api = API.new 'MY_API_KEY, 'MY_SECRET_KEY'
75
+ # token = @api.auth_createToken
76
+ # # This is with a parameter
77
+ # app_properties = @api.admin_getAppProperties :properties => ['application_name','callback_url']
79
78
  class API
80
79
  attr_accessor :session_key
81
80
 
@@ -85,18 +84,49 @@ module ReFacebook
85
84
  @api_key = api_key
86
85
  @secret = secret
87
86
  @session_key = nil
87
+
88
+ # For batch operations.
89
+ @in_batch = false
90
+ @method_feed = []
88
91
  end
89
92
 
90
- # FIXME: This is not implemented yet. It is just a placeholder.
91
- def batch_run *args
92
- raise
93
+ # Run a batch call to the API. This doesn't return a APIError if there are
94
+ # errors since some of the calls could have valid responses. Please catch
95
+ # the errors yourselves!
96
+ #
97
+ # Example code:
98
+ # ret = @api.batch do |b|
99
+ # b.auth_createToken
100
+ # b.admin_getAppProperties :properties => ['application_name','callback_url']
101
+ # end
102
+ def batch &block
103
+ @in_batch = true
104
+ block.call(self)
105
+ @in_batch = false
106
+
107
+ ret = self.batch_run :call_id => Time.now, :method_feed => @method_feed.to_json
108
+
109
+ @method_feed = []
110
+
111
+ ret
93
112
  end
94
113
 
95
114
  def method_missing method, *args
96
115
  request = {}
97
116
 
98
117
  args[0].each do |k,v|
99
- request[k.to_s] = v.kind_of?(Array) ? v.to_json : v
118
+ request[k.to_s] = \
119
+ if v.kind_of?(Array) && @in_batch
120
+ # If we are in a batch should return a escaped string
121
+ # since we will be within an another array
122
+ CGI.escape(v.to_json)
123
+ elsif v.kind_of?(Array) && !@in_batch
124
+ v.to_json
125
+ elsif v.kind_of?(Time)
126
+ v.to_f
127
+ else
128
+ v
129
+ end
100
130
  end if args[0]
101
131
 
102
132
  request['api_key'] = @api_key
@@ -107,14 +137,20 @@ module ReFacebook
107
137
 
108
138
  request['sig'] = generate_sig(request.sort)
109
139
 
140
+ if @in_batch
141
+ # If we are in a batch call just return the formatted request for method_feed
142
+ @method_feed << request.collect { |k,v| "#{k}=#{v}" }.join('&')
143
+ return
144
+ end
145
+
110
146
  req = Net::HTTP.post_form(URI.parse(APIRestServer), request)
111
147
  ret = JSON.parse("[#{req.body}]")[0]
112
148
 
113
- if ret.class == Hash && ret.has_key?('error_code')
149
+ if ret.kind_of?(Hash) and ret.has_key?('error_code')
114
150
  raise APIError.new(ret), ret['error_msg']
115
151
  end
116
152
 
117
- ret
153
+ return ret
118
154
  end
119
155
 
120
156
  private
data/spec/api_spec.rb CHANGED
@@ -53,10 +53,16 @@ describe ReFacebook::API do
53
53
  end
54
54
 
55
55
  it "does a batch.run" do
56
- # violated "not implemented yet"
57
- end
56
+ ret = @api.batch do |b|
57
+ b.auth_createToken
58
+ b.admin_getAppProperties :properties => ['application_name','callback_url']
59
+ end
60
+
61
+ ret.length.should == 2
58
62
 
59
- it "creates a session" do
60
- # violated "not implemented yet"
63
+ # TODO: Error in JSON.parse. Right now just check that application_name is availiable
64
+ app_properties = ret[1]
65
+ app_properties['application_name'].should == 'application_name'
66
+ app_properties['traytwo'].should == 'traytwo'
61
67
  end
62
68
  end
metadata CHANGED
@@ -54,7 +54,7 @@ test_files:
54
54
  - spec/api_spec.rb
55
55
  - examples/example.rb
56
56
  version: !ruby/object:Gem::Version
57
- version: 0.4.5
57
+ version: 0.4.6
58
58
  require_paths:
59
59
  - lib
60
60
  dependencies: