koala 1.4.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +3 -0
- data/koala.gemspec +3 -3
- data/lib/koala/api.rb +2 -2
- data/lib/koala/api/graph_api.rb +2 -2
- data/lib/koala/api/graph_batch_api.rb +2 -2
- data/lib/koala/api/rest_api.rb +1 -1
- data/lib/koala/http_service.rb +1 -1
- data/lib/koala/oauth.rb +3 -3
- data/lib/koala/version.rb +1 -1
- data/spec/cases/api_spec.rb +2 -2
- data/spec/cases/graph_api_batch_spec.rb +1 -1
- data/spec/cases/http_service_spec.rb +1 -1
- data/spec/cases/oauth_spec.rb +1 -1
- data/spec/fixtures/mock_facebook_responses.yml +18 -18
- data/spec/support/graph_api_shared_examples.rb +2 -2
- data/spec/support/json_testing_fix.rb +9 -9
- data/spec/support/mock_http_service.rb +1 -1
- data/spec/support/rest_api_shared_examples.rb +1 -1
- metadata +33 -13
data/CHANGELOG
CHANGED
data/koala.gemspec
CHANGED
@@ -29,18 +29,18 @@ Gem::Specification.new do |s|
|
|
29
29
|
s.specification_version = 3
|
30
30
|
|
31
31
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
32
|
-
s.add_runtime_dependency(%q<multi_json>,
|
32
|
+
s.add_runtime_dependency(%q<multi_json>, ["~> 1.3.0"])
|
33
33
|
s.add_runtime_dependency(%q<faraday>, ["~> 0.7.0"])
|
34
34
|
s.add_development_dependency(%q<rspec>, ["~> 2.8.0rc1"])
|
35
35
|
s.add_development_dependency(%q<rake>, ["~> 0.8.7"])
|
36
36
|
else
|
37
|
-
s.add_dependency(%q<multi_json>, ["~> 1.0"])
|
37
|
+
s.add_dependency(%q<multi_json>, ["~> 1.3.0"])
|
38
38
|
s.add_dependency(%q<rspec>, ["~> 2.8.0rc1"])
|
39
39
|
s.add_dependency(%q<rake>, ["~> 0.8.7"])
|
40
40
|
s.add_dependency(%q<faraday>, ["~> 0.7.0"])
|
41
41
|
end
|
42
42
|
else
|
43
|
-
s.add_dependency(%q<multi_json>, ["~> 1.0"])
|
43
|
+
s.add_dependency(%q<multi_json>, ["~> 1.3.0"])
|
44
44
|
s.add_dependency(%q<rspec>, ["~> 2.8.0rc1"])
|
45
45
|
s.add_dependency(%q<rake>, ["~> 0.8.7"])
|
46
46
|
s.add_dependency(%q<faraday>, ["~> 0.7.0"])
|
data/lib/koala/api.rb
CHANGED
@@ -57,8 +57,8 @@ module Koala
|
|
57
57
|
|
58
58
|
# parse the body as JSON and run it through the error checker (if provided)
|
59
59
|
# Note: Facebook sometimes sends results like "true" and "false", which aren't strictly objects
|
60
|
-
# and cause MultiJson.
|
61
|
-
body = MultiJson.
|
60
|
+
# and cause MultiJson.load to fail -- so we account for that by wrapping the result in []
|
61
|
+
body = MultiJson.load("[#{result.body.to_s}]")[0]
|
62
62
|
yield body if error_checking_block
|
63
63
|
|
64
64
|
# if we want a component other than the body (e.g. redirect header for images), return that
|
data/lib/koala/api/graph_api.rb
CHANGED
@@ -318,7 +318,7 @@ module Koala
|
|
318
318
|
#
|
319
319
|
# @return a hash of FQL results keyed to the appropriate query
|
320
320
|
def fql_multiquery(queries = {}, args = {}, options = {})
|
321
|
-
if results = get_object("fql", args.merge(:q => MultiJson.
|
321
|
+
if results = get_object("fql", args.merge(:q => MultiJson.dump(queries)), options)
|
322
322
|
# simplify the multiquery result format
|
323
323
|
results.inject({}) {|outcome, data| outcome[data["name"]] = data["fql_result_set"]; outcome}
|
324
324
|
end
|
@@ -353,7 +353,7 @@ module Koala
|
|
353
353
|
end
|
354
354
|
|
355
355
|
def set_app_restrictions(app_id, restrictions_hash, args = {}, options = {})
|
356
|
-
graph_call(app_id, args.merge(:restrictions => MultiJson.
|
356
|
+
graph_call(app_id, args.merge(:restrictions => MultiJson.dump(restrictions_hash)), "post", options)
|
357
357
|
end
|
358
358
|
|
359
359
|
# Certain calls such as {#get_connections} return an array of results which you can page through
|
@@ -53,7 +53,7 @@ module Koala
|
|
53
53
|
return [] unless batch_calls.length > 0
|
54
54
|
# Turn the call args collected into what facebook expects
|
55
55
|
args = {}
|
56
|
-
args["batch"] = MultiJson.
|
56
|
+
args["batch"] = MultiJson.dump(batch_calls.map { |batch_op|
|
57
57
|
args.merge!(batch_op.files) if batch_op.files
|
58
58
|
batch_op.to_batch_params(access_token)
|
59
59
|
})
|
@@ -68,7 +68,7 @@ module Koala
|
|
68
68
|
|
69
69
|
if call_result
|
70
70
|
# (see note in regular api method about JSON parsing)
|
71
|
-
body = MultiJson.
|
71
|
+
body = MultiJson.load("[#{call_result['body'].to_s}]")[0]
|
72
72
|
|
73
73
|
unless call_result["code"].to_i >= 500 || error = check_response(body)
|
74
74
|
# Get the HTTP component they want
|
data/lib/koala/api/rest_api.rb
CHANGED
@@ -22,7 +22,7 @@ module Koala
|
|
22
22
|
# @return true if successful, false if not. (This call currently doesn't give useful feedback on failure.)
|
23
23
|
def set_app_properties(properties, args = {}, options = {})
|
24
24
|
raise APIError.new({"type" => "KoalaMissingAccessToken", "message" => "setAppProperties requires an access token"}) unless @access_token
|
25
|
-
rest_call("admin.setAppProperties", args.merge(:properties => MultiJson.
|
25
|
+
rest_call("admin.setAppProperties", args.merge(:properties => MultiJson.dump(properties)), options, "post")
|
26
26
|
end
|
27
27
|
|
28
28
|
# Make a call to the REST API.
|
data/lib/koala/http_service.rb
CHANGED
@@ -87,7 +87,7 @@ module Koala
|
|
87
87
|
# @return the appropriately-encoded string
|
88
88
|
def self.encode_params(param_hash)
|
89
89
|
((param_hash || {}).sort_by{|k, v| k.to_s}.collect do |key_and_value|
|
90
|
-
key_and_value[1] = MultiJson.
|
90
|
+
key_and_value[1] = MultiJson.dump(key_and_value[1]) unless key_and_value[1].is_a? String
|
91
91
|
"#{key_and_value[0].to_s}=#{CGI.escape key_and_value[1]}"
|
92
92
|
end).join("&")
|
93
93
|
end
|
data/lib/koala/oauth.rb
CHANGED
@@ -229,7 +229,7 @@ module Koala
|
|
229
229
|
raise 'SignedRequest: Invalid (incomplete) signature data' unless encoded_sig && encoded_envelope
|
230
230
|
|
231
231
|
signature = base64_url_decode(encoded_sig).unpack("H*").first
|
232
|
-
envelope = MultiJson.
|
232
|
+
envelope = MultiJson.load(base64_url_decode(encoded_envelope))
|
233
233
|
|
234
234
|
raise "SignedRequest: Unsupported algorithm #{envelope['algorithm']}" if envelope['algorithm'] != 'HMAC-SHA256'
|
235
235
|
|
@@ -260,7 +260,7 @@ module Koala
|
|
260
260
|
})
|
261
261
|
end
|
262
262
|
|
263
|
-
MultiJson.
|
263
|
+
MultiJson.load(response)
|
264
264
|
end
|
265
265
|
|
266
266
|
# @deprecated (see #get_token_info_from_session_keys)
|
@@ -285,7 +285,7 @@ module Koala
|
|
285
285
|
result = fetch_token_string(args, post, "access_token", options)
|
286
286
|
|
287
287
|
# if we have an error, parse the error JSON and raise an error
|
288
|
-
raise APIError.new((MultiJson.
|
288
|
+
raise APIError.new((MultiJson.load(result)["error"] rescue nil) || {}) if result =~ /error/
|
289
289
|
|
290
290
|
# otherwise, parse the access token
|
291
291
|
parse_access_token(result)
|
data/lib/koala/version.rb
CHANGED
data/spec/cases/api_spec.rb
CHANGED
@@ -59,7 +59,7 @@ describe "Koala::Facebook::API" do
|
|
59
59
|
Koala.stub(:make_request).and_return(response)
|
60
60
|
|
61
61
|
json_body = mock('JSON body')
|
62
|
-
MultiJson.stub(:
|
62
|
+
MultiJson.stub(:load).and_return([json_body])
|
63
63
|
|
64
64
|
@service.api('anything').should == json_body
|
65
65
|
end
|
@@ -73,7 +73,7 @@ describe "Koala::Facebook::API" do
|
|
73
73
|
|
74
74
|
@service.api('anything', {}, "get") do |arg|
|
75
75
|
yield_test.pass
|
76
|
-
arg.should == MultiJson.
|
76
|
+
arg.should == MultiJson.load(body)
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
@@ -304,7 +304,7 @@ describe "Koala::Facebook::GraphAPI in batch mode" do
|
|
304
304
|
Koala::Facebook::GraphBatchAPI::BatchOperation.stub(:new).and_return(op)
|
305
305
|
|
306
306
|
# two requests should generate two batch operations
|
307
|
-
expected = MultiJson.
|
307
|
+
expected = MultiJson.dump([op.to_batch_params(access_token), op.to_batch_params(access_token)])
|
308
308
|
Koala.should_receive(:make_request).with(anything, hash_including("batch" => expected), anything, anything).and_return(@fake_response)
|
309
309
|
Koala::Facebook::API.new(access_token).batch do |batch_api|
|
310
310
|
batch_api.get_object('me')
|
@@ -99,7 +99,7 @@ describe "Koala::HTTPService" do
|
|
99
99
|
val = 'json_value'
|
100
100
|
not_a_string = 'not_a_string'
|
101
101
|
not_a_string.stub(:is_a?).and_return(false)
|
102
|
-
MultiJson.should_receive(:
|
102
|
+
MultiJson.should_receive(:dump).with(not_a_string).and_return(val)
|
103
103
|
|
104
104
|
string = "hi"
|
105
105
|
|
data/spec/cases/oauth_spec.rb
CHANGED
@@ -655,7 +655,7 @@ describe "Koala::Facebook::OAuth" do
|
|
655
655
|
# the signed request code is ported directly from Facebook
|
656
656
|
# so we only need to test at a high level that it works
|
657
657
|
it "throws an error if the algorithm is unsupported" do
|
658
|
-
MultiJson.stub(:
|
658
|
+
MultiJson.stub(:load).and_return("algorithm" => "my fun algorithm")
|
659
659
|
lambda { @oauth.parse_signed_request(@signed_request) }.should raise_error
|
660
660
|
end
|
661
661
|
|
@@ -68,53 +68,53 @@ graph_api:
|
|
68
68
|
no_token: '{"contextoptional":"{}","koppel":"{}"}'
|
69
69
|
|
70
70
|
# Ruby 1.8.7 and 1.9.2 generate JSON with different key ordering, hence we have to dynamically generate it here
|
71
|
-
batch=<%= MultiJson.
|
71
|
+
batch=<%= MultiJson.dump([{"method" => "get", "relative_url" => "me"},{"method" => "get", "relative_url" => "koppel"}]) %>:
|
72
72
|
post:
|
73
73
|
with_token: '[{"body":"{\"id\":\"123\"}"}, {"body":"{\"id\":\"456\"}"}]'
|
74
|
-
batch=<%= MultiJson.
|
74
|
+
batch=<%= MultiJson.dump([{"method" => "get", "relative_url" => "me/picture"}]) %>:
|
75
75
|
post:
|
76
76
|
with_token: '[{"headers":[{"name":"Location","value":"http://google.com"}]}]'
|
77
|
-
batch=<%= MultiJson.
|
77
|
+
batch=<%= MultiJson.dump([{"method" => "get", "relative_url" => "me"},{"method" => "get", "relative_url" => "me/friends"}]) %>:
|
78
78
|
post:
|
79
79
|
with_token: '[{"body":"{\"id\":\"123\"}"}, {"body":"{\"data\":[],\"paging\":{}}"}]'
|
80
|
-
batch=<%= MultiJson.
|
80
|
+
batch=<%= MultiJson.dump([{"method"=>"get", "relative_url"=>"me"}, {"method"=>"get", "relative_url"=>"#{OAUTH_DATA["app_id"]}/insights?access_token=#{CGI.escape APP_ACCESS_TOKEN}"}]) %>:
|
81
81
|
post:
|
82
82
|
with_token: '[{"body":"{\"id\":\"123\"}"}, {"body":"{\"data\":[],\"paging\":{}}"}]'
|
83
|
-
batch=<%= MultiJson.
|
83
|
+
batch=<%= MultiJson.dump([{"method"=>"get", "relative_url"=>"2/invalidconnection"}, {"method"=>"get", "relative_url"=>"koppel?access_token=#{CGI.escape APP_ACCESS_TOKEN}"}]) %>:
|
84
84
|
post:
|
85
85
|
with_token: '[{"body": "{\"error\":{\"type\":\"AnError\", \"message\":\"An error occurred!.\"}}"},{"body":"{\"id\":\"123\"}"}]'
|
86
|
-
batch=<%= MultiJson.
|
86
|
+
batch=<%= MultiJson.dump([{"method"=>"post", "relative_url"=>"FEED_ITEM_BATCH/likes"}, {"method"=>"delete", "relative_url"=> "FEED_ITEM_BATCH"}]) %>:
|
87
87
|
post:
|
88
88
|
with_token: '[{"body": "{\"id\": \"MOCK_LIKE\"}"},{"body":true}]'
|
89
|
-
batch=<%= MultiJson.
|
89
|
+
batch=<%= MultiJson.dump([{"method" => "post", "relative_url" => "method/fql.query", "body" => "query=select+first_name+from+user+where+uid%3D2905623"}]) %>:
|
90
90
|
post:
|
91
91
|
with_token: '[{"body":"[{\"first_name\":\"Alex\"}]"}]'
|
92
92
|
|
93
93
|
# dependencies
|
94
|
-
batch=<%= MultiJson.
|
94
|
+
batch=<%= MultiJson.dump([{"method"=>"get", "relative_url"=>"me", "name" => "getme"}, {"method"=>"get", "relative_url"=>"koppel", "depends_on" => "getme"}]) %>:
|
95
95
|
post:
|
96
96
|
with_token: '[null,{"body":"{\"id\":\"123\"}"}]'
|
97
|
-
batch=<%= MultiJson.
|
97
|
+
batch=<%= MultiJson.dump([{"method"=>"get", "relative_url"=>"2/invalidconnection", "name" => "getdata"}, {"method"=>"get", "relative_url"=>"koppel", "depends_on" => "getdata"}]) %>:
|
98
98
|
post:
|
99
99
|
with_token: '[{"body": "{\"error\":{\"type\":\"AnError\", \"message\":\"An error occurred!.\"}}"},null]'
|
100
|
-
batch=<%= MultiJson.
|
100
|
+
batch=<%= MultiJson.dump([{"method" => "get", "relative_url" => "me/friends?limit=5", "name" => "get-friends"}, {"method" => "get", "relative_url" => "?ids=#{CGI.escape "{result=get-friends:$.data.*.id}"}"}]) %>:
|
101
101
|
post:
|
102
102
|
with_token: '[null,{"body":"{}"}]'
|
103
|
-
batch=<%= MultiJson.
|
103
|
+
batch=<%= MultiJson.dump([{"method" => "get", "relative_url" => "me/friends?limit=5", "name" => "get-friends", "omit_response_on_success" => false}, {"method" => "get", "relative_url" => "?ids=#{CGI.escape "{result=get-friends:$.data.*.id}"}"}]) %>:
|
104
104
|
post:
|
105
105
|
with_token: '[{"body":"{\"data\":[],\"paging\":{}}"},{"body":"{}"}]'
|
106
|
-
batch=<%= MultiJson.
|
106
|
+
batch=<%= MultiJson.dump([{"method" => "get", "relative_url" => "me/friends?limit=5"}, {"method" => "get", "relative_url" => "?ids=#{CGI.escape "{result=i-dont-exist:$.data.*.id}"}"}]) %>:
|
107
107
|
post:
|
108
108
|
with_token: '{"error":190,"error_description":"Error validating access token."}'
|
109
109
|
|
110
110
|
# attached files tests
|
111
|
-
batch=<%= MultiJson.
|
111
|
+
batch=<%= MultiJson.dump([{"method"=>"post", "relative_url"=>"me/photos", "attached_files" => "op1_file0"}]) %>&op1_file0=[FILE]:
|
112
112
|
post:
|
113
113
|
with_token: '[{"body": "{\"error\":{\"type\":\"AnError\", \"message\":\"An error occurred!.\"}}"},null]'
|
114
|
-
batch=<%= MultiJson.
|
114
|
+
batch=<%= MultiJson.dump([{"method"=>"post", "relative_url"=>"me/photos", "attached_files" => "op1_file0"}]) %>&op1_file0=[FILE]:
|
115
115
|
post:
|
116
116
|
with_token: '[{"body":"{\"id\": \"MOCK_PHOTO\"}"}]'
|
117
|
-
batch=<%= MultiJson.
|
117
|
+
batch=<%= MultiJson.dump([{"method"=>"post", "relative_url"=>"me/photos", "attached_files" => "op1_file0"}, {"method"=>"post", "relative_url"=>"koppel/photos", "attached_files" => "op2_file0"}]) %>&op1_file0=[FILE]&op2_file0=[FILE]:
|
118
118
|
post:
|
119
119
|
with_token: '[{"body":"{\"id\": \"MOCK_PHOTO\"}"}, {"body":"{\"id\": \"MOCK_PHOTO\"}"}]'
|
120
120
|
|
@@ -273,11 +273,11 @@ graph_api:
|
|
273
273
|
get:
|
274
274
|
<<: *token_required
|
275
275
|
with_token: '[{"read_stream":1}]'
|
276
|
-
'q=<%= MultiJson.
|
276
|
+
'q=<%= MultiJson.dump({"query1" => "select post_id from stream where source_id = me()", "query2" => "select fromid from comment where post_id in (select post_id from #query1)", "query3" => "select uid, name from user where uid in (select fromid from #query2)"}) %>':
|
277
277
|
get:
|
278
278
|
<<: *token_required
|
279
279
|
with_token: '[{"name":"query1", "fql_result_set":[]},{"name":"query2", "fql_result_set":[]},{"name":"query3", "fql_result_set":[]}]'
|
280
|
-
'q=<%= MultiJson.
|
280
|
+
'q=<%= MultiJson.dump({"query1" => "select uid, first_name from user where uid = 2901279", "query2" => "select uid, first_name from user where uid = 2905623"}) %>':
|
281
281
|
get:
|
282
282
|
with_token: '[{"name":"query1", "fql_result_set":[{"uid":2901279,"first_name":"Luke"}]},{"name":"query2", "fql_result_set":[{"uid":"2905623","first_name":"Alex"}]}]'
|
283
283
|
no_token: '[{"name":"query1", "fql_result_set":[{"uid":2901279,"first_name":"Luke"}]},{"name":"query2", "fql_result_set":[{"uid":"2905623","first_name":"Alex"}]}]'
|
@@ -296,7 +296,7 @@ graph_api:
|
|
296
296
|
|
297
297
|
|
298
298
|
'/<%= APP_ID %>':
|
299
|
-
restrictions=<%= MultiJson.
|
299
|
+
restrictions=<%= MultiJson.dump({"age_distr" => "13+"}) %>:
|
300
300
|
post:
|
301
301
|
with_token: "true"
|
302
302
|
|
@@ -158,7 +158,7 @@ shared_examples_for "Koala GraphAPI" do
|
|
158
158
|
it "passes a queries argument" do
|
159
159
|
queries = stub('query string')
|
160
160
|
queries_json = "some JSON"
|
161
|
-
MultiJson.stub(:
|
161
|
+
MultiJson.stub(:dump).with(queries).and_return(queries_json)
|
162
162
|
|
163
163
|
@api.should_receive(:get_object).with(anything, hash_including(:q => queries_json), anything)
|
164
164
|
@api.fql_multiquery(queries)
|
@@ -426,7 +426,7 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
426
426
|
end
|
427
427
|
|
428
428
|
it "JSON-encodes the restrictions" do
|
429
|
-
@app_api.should_receive(:graph_call).with(anything, hash_including(:restrictions => MultiJson.
|
429
|
+
@app_api.should_receive(:graph_call).with(anything, hash_including(:restrictions => MultiJson.dump(@restrictions)), anything, anything)
|
430
430
|
@app_api.set_app_restrictions(KoalaTest.app_id, @restrictions)
|
431
431
|
end
|
432
432
|
|
@@ -2,25 +2,25 @@
|
|
2
2
|
# which is a problem because our mock testing service ultimately matches strings to see if requests are mocked
|
3
3
|
# this fix solves that problem by ensuring all hashes are created with a consistent key order every time
|
4
4
|
module MultiJson
|
5
|
-
self.
|
5
|
+
self.use :ok_json
|
6
6
|
|
7
7
|
class << self
|
8
|
-
def
|
8
|
+
def dump_with_ordering(object)
|
9
9
|
# if it's a hash, recreate it with k/v pairs inserted in sorted-by-key order
|
10
10
|
# (for some reason, REE fails if we don't assign the ternary result as a local variable
|
11
11
|
# separately from calling encode_original)
|
12
|
-
|
12
|
+
dump_original(sort_object(object))
|
13
13
|
end
|
14
14
|
|
15
|
-
alias_method :
|
16
|
-
alias_method :
|
15
|
+
alias_method :dump_original, :dump
|
16
|
+
alias_method :dump, :dump_with_ordering
|
17
17
|
|
18
|
-
def
|
19
|
-
sort_object(
|
18
|
+
def load_with_ordering(string)
|
19
|
+
sort_object(load_original(string))
|
20
20
|
end
|
21
21
|
|
22
|
-
alias_method :
|
23
|
-
alias_method :
|
22
|
+
alias_method :load_original, :load
|
23
|
+
alias_method :load, :load_with_ordering
|
24
24
|
|
25
25
|
private
|
26
26
|
|
@@ -6,7 +6,7 @@ module Koala
|
|
6
6
|
include Koala::HTTPService
|
7
7
|
|
8
8
|
# fix our specs to use ok_json, so we always get the same results from to_json
|
9
|
-
MultiJson.
|
9
|
+
MultiJson.use :ok_json
|
10
10
|
|
11
11
|
# Mocks all HTTP requests for with koala_spec_with_mocks.rb
|
12
12
|
# Mocked values to be included in TEST_DATA used in specs
|
@@ -126,7 +126,7 @@ shared_examples_for "Koala RestAPI with an access token" do
|
|
126
126
|
describe "#set_app_properties" do
|
127
127
|
it "sends Facebook the properties JSON-encoded as :properties" do
|
128
128
|
props = {:a => 2, :c => [1, 2, "d"]}
|
129
|
-
@api.should_receive(:rest_call).with(anything, hash_including(:properties => MultiJson.
|
129
|
+
@api.should_receive(:rest_call).with(anything, hash_including(:properties => MultiJson.dump(props)), anything, anything)
|
130
130
|
@api.set_app_properties(props)
|
131
131
|
end
|
132
132
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: koala
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,27 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-04-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 1.3.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.3.0
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: faraday
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: 0.7.0
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.7.0
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: rspec
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ~>
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: 2.8.0rc1
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.8.0rc1
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: rake
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ~>
|
@@ -54,7 +69,12 @@ dependencies:
|
|
54
69
|
version: 0.8.7
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.8.7
|
58
78
|
description: Koala is a lightweight, flexible Ruby SDK for Facebook. It allows read/write
|
59
79
|
access to the social graph via the Graph and REST APIs, as well as support for realtime
|
60
80
|
updates and OAuth and Facebook Connect authentication. Koala is fully tested and
|
@@ -143,7 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
163
|
version: '0'
|
144
164
|
segments:
|
145
165
|
- 0
|
146
|
-
hash:
|
166
|
+
hash: -3018714754119846442
|
147
167
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
168
|
none: false
|
149
169
|
requirements:
|
@@ -152,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
172
|
version: '1.2'
|
153
173
|
requirements: []
|
154
174
|
rubyforge_project:
|
155
|
-
rubygems_version: 1.8.
|
175
|
+
rubygems_version: 1.8.21
|
156
176
|
signing_key:
|
157
177
|
specification_version: 3
|
158
178
|
summary: A lightweight, flexible library for Facebook with support for the Graph API,
|