koala 1.6.0 → 1.7.0rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -20,7 +20,7 @@ describe "Koala::Facebook::TestUsers" do
20
20
  # Facebook only allows us 500 test users per app, so we have to clean up
21
21
  # This would be a good place to clean up and accumulate all of them for
22
22
  # later deletion.
23
- unless KoalaTest.mock_interface?
23
+ unless KoalaTest.mock_interface? || @stubbed
24
24
  ((@network || []) + [@user1, @user2]).each do |u|
25
25
  puts "Unable to delete test user #{u.inspect}" if u && !(@test_users.delete(u) rescue false)
26
26
  end
@@ -149,6 +149,7 @@ describe "Koala::Facebook::TestUsers" do
149
149
  end
150
150
 
151
151
  it "accepts http options" do
152
+ @stubbed = true
152
153
  options = {:some_http_option => true}
153
154
  @test_users.api.should_receive(:graph_call).with(anything, anything, anything, options)
154
155
  @test_users.list(options)
@@ -178,6 +179,7 @@ describe "Koala::Facebook::TestUsers" do
178
179
  it "lets you specify http options that get passed through to the graph call" do
179
180
  options = {:some_http_option => true}
180
181
  # technically this goes through delete_object, but this makes it less brittle
182
+ @stubbed = true
181
183
  @test_users.graph_api.should_receive(:graph_call).with(anything, anything, anything, options)
182
184
  @test_users.delete("user", options)
183
185
  end
@@ -229,6 +231,7 @@ describe "Koala::Facebook::TestUsers" do
229
231
 
230
232
  it "accepts an options hash" do
231
233
  options = {:some_http_option => true}
234
+ @stubbed = true
232
235
  @test_users2.graph_api.should_receive(:graph_call).with(anything, anything, anything, options)
233
236
  @test_users2.update("foo", @updates, options)
234
237
  end
@@ -269,6 +272,7 @@ describe "Koala::Facebook::TestUsers" do
269
272
  it "accepts http options passed to both calls" do
270
273
  options = {:some_http_option => true}
271
274
  # should come twice, once for each user
275
+ @stubbed = true
272
276
  Koala.http_service.should_receive(:make_request).with(anything, anything, anything, options).twice.and_return(Koala::HTTPService::Response.new(200, "{}", {}))
273
277
  @test_users.befriend(@user1, @user2, options)
274
278
  end
@@ -126,9 +126,6 @@ graph_api:
126
126
  post:
127
127
  with_token: '[{"code": 200, "body":"{\"id\": \"MOCK_PHOTO\"}"}, {"code": 200, "body":"{\"id\": \"MOCK_PHOTO\"}"}]'
128
128
 
129
-
130
-
131
-
132
129
  /me:
133
130
  no_args:
134
131
  get:
@@ -166,9 +163,9 @@ graph_api:
166
163
  link=http://oauth.twoalex.com/&message=Hello, world, from the test suite again!&name=OAuth Playground:
167
164
  post:
168
165
  with_token: '{"id": "FEED_ITEM_CONTEXT"}'
169
- link=http://oauth.twoalex.com/&message=body&name=It's a big question&picture=http://oauth.twoalex.com//images/logo.png&properties=<%= {"name"=>"Link1'", "text"=>"Left", "href"=>"http://oauth.twoalex.com/"}.to_s %>=<%= {"name"=>"other", "text"=>"Straight ahead"}.to_s %>&type=link:
166
+ link=http://oauth.twoalex.com/&message=body&name=It's a big question&picture=http://oauth.twoalex.com//images/logo.png&properties=<%= MultiJson.encode({"Link1"=>{"text"=>"Left", "href"=>"http://oauth.twoalex.com/"}, "other" => {"text"=>"Straight ahead", "href"=>"http://oauth.twoalex.com/?"}}) %>&type=link:
170
167
  post:
171
- with_token: '{"id": "FEED_ITEM_CONTEXT"}'
168
+ with_token: '{"id": "FEED_ITEM_DICTIONARY"}'
172
169
 
173
170
  /me/photos:
174
171
  source=[FILE]:
@@ -308,6 +305,11 @@ graph_api:
308
305
  post:
309
306
  with_token: "true"
310
307
 
308
+ /debug_token:
309
+ input_token=<%= APP_ACCESS_TOKEN %>:
310
+ get:
311
+ with_token: '{ "data": { "app_id": <%= APP_ID %>, "application": "Social Cafe", "expires_at": 1352419328, "is_valid": true, "issued_at": 1347235328, "metadata": { "sso": "iphone-safari" }, "scopes": [ "email", "publish_actions" ], "user_id": 1207059 } }'
312
+
311
313
  # -- OAuth responses --
312
314
  /oauth/access_token:
313
315
  client_id=<%= APP_ID %>&client_secret=<%= SECRET %>&code=<%= OAUTH_CODE %>&redirect_uri=<%= OAUTH_DATA["callback_url"] %>:
@@ -316,7 +318,7 @@ graph_api:
316
318
  client_id=<%= APP_ID %>&client_secret=<%= SECRET %>&code=foo&redirect_uri=<%= OAUTH_DATA["callback_url"] %>:
317
319
  get:
318
320
  <<: *oauth_error
319
- client_id=<%= APP_ID %>&client_secret=<%= SECRET %>&type=client_cred:
321
+ client_id=<%= APP_ID %>&client_secret=<%= SECRET %>&grant_type=client_credentials:
320
322
  post:
321
323
  no_token: access_token=<%= APP_ACCESS_TOKEN %>
322
324
  client_id=<%= APP_ID %>&client_secret=<%= SECRET %>&fb_exchange_token=<%= ACCESS_TOKEN %>&grant_type=fb_exchange_token:
@@ -407,6 +409,12 @@ graph_api:
407
409
  get:
408
410
  with_token: '{"link":"http://oauth.twoalex.com/", "name": "OAuth Playground"}'
409
411
 
412
+ /FEED_ITEM_DICTIONARY:
413
+ no_args:
414
+ <<: *item_deleted
415
+ get:
416
+ with_token: '{"link":"http://oauth.twoalex.com/", "name": "OAuth Playground", "properties": {}}'
417
+
410
418
  /FEED_ITEM_CATS:
411
419
  no_args:
412
420
  <<: *item_deleted
@@ -1,46 +1,30 @@
1
- begin
2
- require 'bundler/setup'
3
- rescue LoadError
4
- puts 'Although not required, bundler is recommended for running the tests.'
1
+ if RUBY_VERSION == '1.9.2' && RUBY_PATCHLEVEL < 290 && RUBY_ENGINE != "macruby"
2
+ # In Ruby 1.9.2 versions before patchlevel 290, the default Psych
3
+ # parser has an issue with YAML merge keys, which
4
+ # fixtures/mock_facebook_responses.yml relies heavily on.
5
+ #
6
+ # Anyone using an earlier version will see missing mock response
7
+ # errors when running the test suite similar to this:
8
+ #
9
+ # RuntimeError:
10
+ # Missing a mock response for graph_api: /me/videos: source=[FILE]: post: with_token
11
+ # API PATH: /me/videos?source=[FILE]&format=json&access_token=*
12
+ #
13
+ # For now, it seems the best fix is to just downgrade to the old syck YAML parser
14
+ # for these troubled versions.
15
+ #
16
+ # See https://github.com/tenderlove/psych/issues/8 for more details
17
+ YAML::ENGINE.yamler = 'syck'
5
18
  end
6
19
 
7
- # In Ruby 1.9.2 versions before patchlevel 290, the default Psych
8
- # parser has an issue with YAML merge keys, which
9
- # fixtures/mock_facebook_responses.yml relies heavily on.
10
- #
11
- # Anyone using an earlier version will see missing mock response
12
- # errors when running the test suite similar to this:
13
- #
14
- # RuntimeError:
15
- # Missing a mock response for graph_api: /me/videos: source=[FILE]: post: with_token
16
- # API PATH: /me/videos?source=[FILE]&format=json&access_token=*
17
- #
18
- # For now, it seems the best fix is to just downgrade to the old syck YAML parser
19
- # for these troubled versions.
20
- #
21
- # See https://github.com/tenderlove/psych/issues/8 for more details
22
- YAML::ENGINE.yamler = 'syck' if RUBY_VERSION == '1.9.2' && RUBY_PATCHLEVEL < 290
23
-
24
- # load custom RSpec matchers
25
- require 'support/custom_matchers'
26
-
27
20
  # load the library
28
21
  require 'koala'
29
22
 
30
- # ensure consistent to_json behavior
31
- # this must be required first so mock_http_service loads the YAML as expected
32
- require 'support/ordered_hash'
33
- require 'support/json_testing_fix'
23
+ # Support files
24
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
34
25
 
35
26
  # set up our testing environment
36
- require 'support/mock_http_service'
37
- require 'support/koala_test'
38
27
  # load testing data and (if needed) create test users or validate real users
39
28
  KoalaTest.setup_test_environment!
40
29
 
41
- # load supporting files for our tests
42
- require 'support/rest_api_shared_examples'
43
- require 'support/graph_api_shared_examples'
44
- require 'support/uploadable_io_shared_examples'
45
-
46
30
  BEACH_BALL_PATH = File.join(File.dirname(__FILE__), "fixtures", "beach.jpg")
@@ -85,12 +85,19 @@ shared_examples_for "Koala GraphAPI" do
85
85
  results.should have(2).items
86
86
  end
87
87
 
88
- it "can access a user's picture" do
89
- @api.get_picture(KoalaTest.user2).should =~ /http[s]*\:\/\//
90
- end
88
+ describe "#get_picture" do
89
+ it "can access a user's picture" do
90
+ @api.get_picture(KoalaTest.user2).should =~ /http[s]*\:\/\//
91
+ end
92
+
93
+ it "can access a user's picture, given a picture type" do
94
+ @api.get_picture(KoalaTest.user2, {:type => 'large'}).should =~ /^http[s]*\:\/\//
95
+ end
91
96
 
92
- it "can access a user's picture, given a picture type" do
93
- @api.get_picture(KoalaTest.user2, {:type => 'large'}).should =~ /^http[s]*\:\/\//
97
+ it "works even if Facebook returns nil" do
98
+ @api.stub(:graph_call).and_return(nil)
99
+ @api.get_picture(KoalaTest.user2, {:type => 'large'}).should be_nil
100
+ end
94
101
  end
95
102
 
96
103
  it "can access connections from public Pages" do
@@ -251,22 +258,25 @@ shared_examples_for "Koala GraphAPI with an access token" do
251
258
 
252
259
  it "can post a message whose attachment has a properties dictionary" do
253
260
  url = KoalaTest.oauth_test_data["callback_url"]
254
- options = {
255
- "picture" => "#{KoalaTest.oauth_test_data["callback_url"]}/images/logo.png",
256
- "name" => "It's a big question",
257
- "type" => "link",
258
- "link" => KoalaTest.oauth_test_data["callback_url"],
259
- "properties" => [
260
- {"name" => "Link1'", "text" => "Left", "href" => url},
261
- {"name" => "other", "text" => "Straight ahead"}
262
- ]
261
+ args = {
262
+ "picture" => "#{KoalaTest.oauth_test_data["callback_url"]}/images/logo.png",
263
+ "name" => "It's a big question",
264
+ "type" => "link",
265
+ "link" => KoalaTest.oauth_test_data["callback_url"],
266
+ "properties" => {
267
+ "Link1" => {"text" => "Left", "href" => url},
268
+ "other" => {"text" => "Straight ahead", "href" => url + "?"}
269
+ }
263
270
  }
264
271
 
265
- result = @api.put_wall_post("body", options)
272
+ result = @api.put_wall_post("body", args)
266
273
  @temporary_object_id = result["id"]
267
274
  @temporary_object_id.should_not be_nil
268
- end
269
275
 
276
+ # ensure the properties dictionary is there
277
+ api_data = @api.get_object(@temporary_object_id)
278
+ api_data["properties"].should_not be_nil
279
+ end
270
280
 
271
281
  describe "#put_picture" do
272
282
  it "can post photos to the user's wall with an open file object" do
@@ -343,7 +353,6 @@ shared_examples_for "Koala GraphAPI with an access token" do
343
353
  @temporary_object_id.should_not be_nil
344
354
  end
345
355
 
346
-
347
356
  it "can post videos to the user's wall without an open file object" do
348
357
  result = @api.put_video(@cat_movie, @content_type)
349
358
  @temporary_object_id = result["id"]
@@ -412,6 +421,14 @@ shared_examples_for "Koala GraphAPI with an access token" do
412
421
  end
413
422
  end
414
423
 
424
+ it "can get information about an access token" do
425
+ result = @api.debug_token(KoalaTest.app_access_token)
426
+ result.should be_kind_of(Hash)
427
+ result["data"].should be_kind_of(Hash)
428
+ result["data"]["app_id"].to_s.should == KoalaTest.app_id.to_s
429
+ result["data"]["application"].should_not be_nil
430
+ end
431
+
415
432
  describe "#set_app_restrictions" do
416
433
  before :all do
417
434
  oauth = Koala::Facebook::OAuth.new(KoalaTest.app_id, KoalaTest.secret)
@@ -32,6 +32,7 @@ module KoalaTest
32
32
  adapter = ENV['ADAPTER'] || "typhoeus" # use Typhoeus by default if available
33
33
  begin
34
34
  require adapter
35
+ require 'typhoeus/adapters/faraday' if adapter.to_s == "typhoeus"
35
36
  Faraday.default_adapter = adapter.to_sym
36
37
  rescue LoadError
37
38
  puts "Unable to load adapter #{adapter}, using Net::HTTP."
@@ -58,6 +59,13 @@ module KoalaTest
58
59
  end
59
60
 
60
61
  config.after :each do
62
+ # Clean up Koala config
63
+ Koala.configure do |config|
64
+ Koala::HTTPService::DEFAULT_SERVERS.each_pair do |k, v|
65
+ config.send("#{k}=", v)
66
+ end
67
+ end
68
+
61
69
  # if we're working with a real user, clean up any objects posted to Facebook
62
70
  # no need to do so for test users, since they get deleted at the end
63
71
  if @temporary_object_id && KoalaTest.real_user?
@@ -71,6 +79,7 @@ module KoalaTest
71
79
  # if we errored out or Facebook returned false, track that
72
80
  puts "Unable to delete #{@temporary_object_id}: #{result} (probably a photo or video, which can't be deleted through the API)" unless result
73
81
  end
82
+
74
83
  end
75
84
  end
76
85
  end
@@ -80,7 +89,7 @@ module KoalaTest
80
89
  self.oauth_test_data = data["oauth_test_data"]
81
90
  self.subscription_test_data = data["subscription_test_data"]
82
91
  self.oauth_token = data["oauth_token"]
83
- self.app_id = data["oauth_test_data"]["app_id"]
92
+ self.app_id = data["oauth_test_data"]["app_id"].to_s
84
93
  self.app_access_token = data["oauth_test_data"]["app_access_token"]
85
94
  self.secret = data["oauth_test_data"]["secret"]
86
95
  self.code = data["oauth_test_data"]["code"]
@@ -36,41 +36,22 @@ module Koala
36
36
  RESPONSES = YAML.load(ERB.new(IO.read(mock_response_file_path)).result(binding))
37
37
 
38
38
  def self.make_request(path, args, verb, options = {})
39
- path = 'root' if path == '' || path == '/'
40
- verb ||= 'get'
41
- server = options[:rest_api] ? 'rest_api' : 'graph_api'
42
- token = args.delete('access_token')
43
- with_token = (token == ACCESS_TOKEN || token == APP_ACCESS_TOKEN) ? 'with_token' : 'no_token'
44
-
45
- # Assume format is always JSON
46
- args.delete('format')
47
-
48
- # Create a hash key for the arguments
49
- args = create_params_key(args)
50
-
51
- begin
52
- response = RESPONSES[server][path][args][verb][with_token]
53
-
54
- # Raises an error of with_token/no_token key is missing
55
- raise NoMethodError unless response
56
-
39
+ if response = match_response(path, args, verb, options)
57
40
  # create response class object
58
41
  response_object = if response.is_a? String
59
- Koala::HTTPService::Response.new(200, response, {})
60
- else
61
- Koala::HTTPService::Response.new(response["code"] || 200, response["body"] || "", response["headers"] || {})
62
- end
63
-
64
- rescue NoMethodError
42
+ Koala::HTTPService::Response.new(200, response, {})
43
+ else
44
+ Koala::HTTPService::Response.new(response["code"] || 200, response["body"] || "", response["headers"] || {})
45
+ end
46
+ else
65
47
  # Raises an error message with the place in the data YML
66
48
  # to place a mock as well as a URL to request from
67
49
  # Facebook's servers for the actual data
68
50
  # (Don't forget to replace ACCESS_TOKEN with a real access token)
69
- data_trace = [server, path, args, verb, with_token] * ': '
51
+ data_trace = [path, args, verb, options] * ': '
70
52
 
71
53
  args = args == 'no_args' ? '' : "#{args}&"
72
54
  args += 'format=json'
73
- args += "&access_token=#{ACCESS_TOKEN}" if with_token
74
55
 
75
56
  raise "Missing a mock response for #{data_trace}\nAPI PATH: #{[path, args].join('?')}"
76
57
  end
@@ -85,15 +66,78 @@ module Koala
85
66
 
86
67
  protected
87
68
 
88
- def self.create_params_key(params_hash)
89
- if params_hash.empty?
90
- 'no_args'
69
+ # For a given query, see if our mock responses YAML has a resopnse for it.
70
+ def self.match_response(path, args, verb, options = {})
71
+ server = options[:rest_api] ? 'rest_api' : 'graph_api'
72
+ path = 'root' if path == '' || path == '/'
73
+ verb = (verb || 'get').to_s
74
+ token = args.delete('access_token')
75
+ with_token = (token == ACCESS_TOKEN || token == APP_ACCESS_TOKEN) ? 'with_token' : 'no_token'
76
+
77
+ if endpoint = RESPONSES[server][path]
78
+ # see if we have a match for the arguments
79
+ if arg_match = endpoint.find {|query, v| decode_query(query) == massage_args(args)}
80
+ # we have a match for the server/path/arguments
81
+ # so if it's the right verb and authentication, we're good
82
+ # arg_match will be [query, hash_response]
83
+ arg_match.last[verb][with_token]
84
+ end
85
+ end
86
+ end
87
+
88
+ # Since we're comparing the arguments with data in a yaml file, we need to
89
+ # massage them slightly to get to the format we expect.
90
+ def self.massage_args(arguments)
91
+ args = arguments.inject({}) do |hash, (k, v)|
92
+ # ensure our args are all stringified
93
+ value = if v.is_a?(String)
94
+ should_json_decode?(v) ? MultiJson.load(v) : v
95
+ elsif v.is_a?(Koala::UploadableIO)
96
+ # obviously there are no files in the yaml
97
+ "[FILE]"
98
+ else
99
+ v
100
+ end
101
+ # make sure all keys are strings
102
+ hash.merge(k.to_s => value)
103
+ end
104
+
105
+ # Assume format is always JSON
106
+ args.delete('format')
107
+
108
+ # if there are no args, return the special keyword no_args
109
+ args.empty? ? "no_args" : args
110
+ end
111
+
112
+ # Facebook sometimes requires us to encode JSON values in an HTTP query
113
+ # param. This complicates test matches, since we get into JSON-encoding
114
+ # issues (what order keys are written into). To avoid string comparisons
115
+ # and the hacks required to make it work, we decode the query into a
116
+ # Ruby object.
117
+ def self.decode_query(string)
118
+ if string == "no_args"
119
+ string
91
120
  else
92
- params_hash.sort{ |a,b| a[0].to_s <=> b[0].to_s}.map do |arr|
93
- arr[1] = '[FILE]' if arr[1].kind_of?(Koala::UploadableIO)
94
- arr.join('=')
95
- end.join('&')
121
+ # we can't use Faraday's decode_query because that CGI-unencodes, which
122
+ # will remove +'s in restriction strings
123
+ string.split("&").reduce({}) do |hash, component|
124
+ k, v = component.split("=", 2) # we only care about the first =
125
+ value = should_json_decode?(v) ? MultiJson.decode(v) : v.to_s rescue v.to_s
126
+ # some special-casing, unfortunate but acceptable in this testing
127
+ # environment
128
+ value = nil if value.empty?
129
+ value = true if value == "true"
130
+ value = false if value == "false"
131
+ hash.merge(k => value)
132
+ end
96
133
  end
97
134
  end
135
+
136
+ # We want to decode JSON because it may not be encoded in the same order
137
+ # all the time -- different Rubies may create a strings with equivalent
138
+ # content but different order. We want to compare the objects.
139
+ def self.should_json_decode?(v)
140
+ v.match(/^[\[\{]/)
141
+ end
98
142
  end
99
143
  end
metadata CHANGED
@@ -1,96 +1,96 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: koala
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
5
- prerelease:
4
+ version: 1.7.0rc1
5
+ prerelease: 5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Alex Koppel
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-06 00:00:00.000000000 Z
12
+ date: 2013-05-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: multi_json
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ~>
19
+ - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: '1.3'
21
+ version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - ~>
27
+ - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: '1.3'
29
+ version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: faraday
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - ~>
35
+ - - ! '>='
36
36
  - !ruby/object:Gem::Version
37
- version: '0.8'
37
+ version: '0'
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ~>
43
+ - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
- version: '0.8'
45
+ version: '0'
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: addressable
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
51
- - - ~>
51
+ - - ! '>='
52
52
  - !ruby/object:Gem::Version
53
- version: '2.2'
53
+ version: '0'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  none: false
58
58
  requirements:
59
- - - ~>
59
+ - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
- version: '2.2'
61
+ version: '0'
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: rspec
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
- - - ~>
67
+ - - ! '>='
68
68
  - !ruby/object:Gem::Version
69
- version: '2.8'
69
+ version: '0'
70
70
  type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
- - - ~>
75
+ - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
- version: '2.8'
77
+ version: '0'
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: rake
80
80
  requirement: !ruby/object:Gem::Requirement
81
81
  none: false
82
82
  requirements:
83
- - - ~>
83
+ - - ! '>='
84
84
  - !ruby/object:Gem::Version
85
- version: '0.8'
85
+ version: '0'
86
86
  type: :development
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
89
89
  none: false
90
90
  requirements:
91
- - - ~>
91
+ - - ! '>='
92
92
  - !ruby/object:Gem::Version
93
- version: '0.8'
93
+ version: '0'
94
94
  description: Koala is a lightweight, flexible Ruby SDK for Facebook. It allows read/write
95
95
  access to the social graph via the Graph and REST APIs, as well as support for realtime
96
96
  updates and OAuth and Facebook Connect authentication. Koala is fully tested and
@@ -157,7 +157,6 @@ files:
157
157
  - spec/spec_helper.rb
158
158
  - spec/support/custom_matchers.rb
159
159
  - spec/support/graph_api_shared_examples.rb
160
- - spec/support/json_testing_fix.rb
161
160
  - spec/support/koala_test.rb
162
161
  - spec/support/mock_http_service.rb
163
162
  - spec/support/ordered_hash.rb
@@ -181,19 +180,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
181
180
  version: '0'
182
181
  segments:
183
182
  - 0
184
- hash: 4609092032250353184
183
+ hash: 3438610920641769302
185
184
  required_rubygems_version: !ruby/object:Gem::Requirement
186
185
  none: false
187
186
  requirements:
188
- - - ! '>='
187
+ - - ! '>'
189
188
  - !ruby/object:Gem::Version
190
- version: '0'
191
- segments:
192
- - 0
193
- hash: 4609092032250353184
189
+ version: 1.3.1
194
190
  requirements: []
195
191
  rubyforge_project:
196
- rubygems_version: 1.8.24
192
+ rubygems_version: 1.8.23
197
193
  signing_key:
198
194
  specification_version: 3
199
195
  summary: A lightweight, flexible library for Facebook with support for the Graph API,
@@ -221,7 +217,6 @@ test_files:
221
217
  - spec/spec_helper.rb
222
218
  - spec/support/custom_matchers.rb
223
219
  - spec/support/graph_api_shared_examples.rb
224
- - spec/support/json_testing_fix.rb
225
220
  - spec/support/koala_test.rb
226
221
  - spec/support/mock_http_service.rb
227
222
  - spec/support/ordered_hash.rb