koala 1.4.0 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ v.1.4.1
2
+ -- Update MultiJson to 1.3 and change syntax to silence warnings (thanks, eckz and masterkain!)
3
+
1
4
  v1.4
2
5
  New methods:
3
6
  -- OAuth#exchange_access_token(_info) allows you to extend access tokens you receive (thanks, etiennebarrie!)
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>, ["~> 1.0"])
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.decode to fail -- so we account for that by wrapping the result in []
61
- body = MultiJson.decode("[#{result.body.to_s}]")[0]
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
@@ -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.encode(queries)), options)
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.encode(restrictions_hash)), "post", options)
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.encode(batch_calls.map { |batch_op|
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.decode("[#{call_result['body'].to_s}]")[0]
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
@@ -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.encode(properties)), options, "post")
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.
@@ -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.encode(key_and_value[1]) unless key_and_value[1].is_a? String
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.decode(base64_url_decode(encoded_envelope))
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.decode(response)
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.decode(result)["error"] rescue nil) || {}) if result =~ /error/
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
@@ -1,3 +1,3 @@
1
1
  module Koala
2
- VERSION = "1.4.0"
2
+ VERSION = "1.4.1"
3
3
  end
@@ -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(:decode).and_return([json_body])
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.decode(body)
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.encode([op.to_batch_params(access_token), op.to_batch_params(access_token)])
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(:encode).with(not_a_string).and_return(val)
102
+ MultiJson.should_receive(:dump).with(not_a_string).and_return(val)
103
103
 
104
104
  string = "hi"
105
105
 
@@ -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(:decode).and_return("algorithm" => "my fun algorithm")
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.encode([{"method" => "get", "relative_url" => "me"},{"method" => "get", "relative_url" => "koppel"}]) %>:
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.encode([{"method" => "get", "relative_url" => "me/picture"}]) %>:
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.encode([{"method" => "get", "relative_url" => "me"},{"method" => "get", "relative_url" => "me/friends"}]) %>:
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.encode([{"method"=>"get", "relative_url"=>"me"}, {"method"=>"get", "relative_url"=>"#{OAUTH_DATA["app_id"]}/insights?access_token=#{CGI.escape APP_ACCESS_TOKEN}"}]) %>:
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.encode([{"method"=>"get", "relative_url"=>"2/invalidconnection"}, {"method"=>"get", "relative_url"=>"koppel?access_token=#{CGI.escape APP_ACCESS_TOKEN}"}]) %>:
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.encode([{"method"=>"post", "relative_url"=>"FEED_ITEM_BATCH/likes"}, {"method"=>"delete", "relative_url"=> "FEED_ITEM_BATCH"}]) %>:
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.encode([{"method" => "post", "relative_url" => "method/fql.query", "body" => "query=select+first_name+from+user+where+uid%3D2905623"}]) %>:
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.encode([{"method"=>"get", "relative_url"=>"me", "name" => "getme"}, {"method"=>"get", "relative_url"=>"koppel", "depends_on" => "getme"}]) %>:
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.encode([{"method"=>"get", "relative_url"=>"2/invalidconnection", "name" => "getdata"}, {"method"=>"get", "relative_url"=>"koppel", "depends_on" => "getdata"}]) %>:
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.encode([{"method" => "get", "relative_url" => "me/friends?limit=5", "name" => "get-friends"}, {"method" => "get", "relative_url" => "?ids=#{CGI.escape "{result=get-friends:$.data.*.id}"}"}]) %>:
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.encode([{"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}"}"}]) %>:
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.encode([{"method" => "get", "relative_url" => "me/friends?limit=5"}, {"method" => "get", "relative_url" => "?ids=#{CGI.escape "{result=i-dont-exist:$.data.*.id}"}"}]) %>:
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.encode([{"method"=>"post", "relative_url"=>"me/photos", "attached_files" => "op1_file0"}]) %>&op1_file0=[FILE]:
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.encode([{"method"=>"post", "relative_url"=>"me/photos", "attached_files" => "op1_file0"}]) %>&op1_file0=[FILE]:
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.encode([{"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]:
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.encode({"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)"}) %>':
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.encode({"query1" => "select uid, first_name from user where uid = 2901279", "query2" => "select uid, first_name from user where uid = 2905623"}) %>':
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.encode({"age_distr" => "13+"}) %>:
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(:encode).with(queries).and_return(queries_json)
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.encode(@restrictions)), anything, anything)
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.engine = :ok_json
5
+ self.use :ok_json
6
6
 
7
7
  class << self
8
- def encode_with_ordering(object)
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
- encode_original(sort_object(object))
12
+ dump_original(sort_object(object))
13
13
  end
14
14
 
15
- alias_method :encode_original, :encode
16
- alias_method :encode, :encode_with_ordering
15
+ alias_method :dump_original, :dump
16
+ alias_method :dump, :dump_with_ordering
17
17
 
18
- def decode_with_ordering(string)
19
- sort_object(decode_original(string))
18
+ def load_with_ordering(string)
19
+ sort_object(load_original(string))
20
20
  end
21
21
 
22
- alias_method :decode_original, :decode
23
- alias_method :decode, :decode_with_ordering
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.engine = :ok_json
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.encode(props)), anything, anything)
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.0
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-03-11 00:00:00.000000000Z
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: &70104159239520 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: '1.0'
21
+ version: 1.3.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70104159239520
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: &70104159238080 !ruby/object:Gem::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: *70104159238080
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: &70104159236640 !ruby/object:Gem::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: *70104159236640
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: &70104159224060 !ruby/object:Gem::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: *70104159224060
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: 3977306572275608217
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.10
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,