koala 2.5.0 → 3.0.0.beta1

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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -2
  3. data/Gemfile +1 -1
  4. data/changelog.md +26 -0
  5. data/lib/koala/api/batch_operation.rb +3 -6
  6. data/lib/koala/api/graph_api.rb +6 -45
  7. data/lib/koala/api/graph_batch_api.rb +1 -2
  8. data/lib/koala/api/graph_collection.rb +1 -5
  9. data/lib/koala/api/graph_error_checker.rb +1 -1
  10. data/lib/koala/api.rb +3 -7
  11. data/lib/koala/errors.rb +1 -1
  12. data/lib/koala/http_service/multipart_request.rb +6 -10
  13. data/lib/koala/http_service/request.rb +139 -0
  14. data/lib/koala/http_service/response.rb +0 -4
  15. data/lib/koala/http_service/uploadable_io.rb +0 -4
  16. data/lib/koala/http_service.rb +16 -68
  17. data/lib/koala/oauth.rb +3 -3
  18. data/lib/koala/version.rb +1 -1
  19. data/lib/koala.rb +2 -1
  20. data/readme.md +5 -26
  21. data/spec/cases/api_spec.rb +1 -7
  22. data/spec/cases/graph_api_batch_spec.rb +12 -22
  23. data/spec/cases/graph_api_spec.rb +0 -19
  24. data/spec/cases/graph_collection_spec.rb +18 -18
  25. data/spec/cases/graph_error_checker_spec.rb +6 -1
  26. data/spec/cases/http_service/request_spec.rb +240 -0
  27. data/spec/cases/http_service_spec.rb +102 -296
  28. data/spec/cases/koala_spec.rb +6 -1
  29. data/spec/cases/oauth_spec.rb +1 -1
  30. data/spec/cases/test_users_spec.rb +4 -1
  31. data/spec/cases/uploadable_io_spec.rb +31 -31
  32. data/spec/fixtures/mock_facebook_responses.yml +0 -37
  33. data/spec/spec_helper.rb +2 -2
  34. data/spec/support/graph_api_shared_examples.rb +6 -142
  35. data/spec/support/koala_test.rb +6 -6
  36. data/spec/support/mock_http_service.rb +6 -6
  37. data/spec/support/uploadable_io_shared_examples.rb +4 -4
  38. metadata +7 -7
  39. data/lib/koala/api/rest_api.rb +0 -135
  40. data/spec/support/rest_api_shared_examples.rb +0 -168
@@ -8,7 +8,7 @@ module Koala::MIME
8
8
  end
9
9
  end
10
10
 
11
- describe "Koala::UploadableIO" do
11
+ describe "Koala::HTTPService::UploadableIO" do
12
12
  def rails_3_mocks
13
13
  tempfile = double('Tempfile', :path => "foo")
14
14
  uploaded_file = double('ActionDispatch::Http::UploadedFile',
@@ -39,15 +39,15 @@ describe "Koala::UploadableIO" do
39
39
  end
40
40
 
41
41
  it "returns an UploadIO with the same file path" do
42
- expect(Koala::UploadableIO.new(*@koala_io_params).io_or_path).to eq(@path)
42
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).io_or_path).to eq(@path)
43
43
  end
44
44
 
45
45
  it "returns an UploadIO with the same content type" do
46
- expect(Koala::UploadableIO.new(*@koala_io_params).content_type).to eq(@stub_type)
46
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).content_type).to eq(@stub_type)
47
47
  end
48
48
 
49
49
  it "returns an UploadIO with the file's name" do
50
- expect(Koala::UploadableIO.new(*@koala_io_params).filename).to eq(File.basename(@path))
50
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).filename).to eq(File.basename(@path))
51
51
  end
52
52
  end
53
53
 
@@ -68,16 +68,16 @@ describe "Koala::UploadableIO" do
68
68
  end
69
69
 
70
70
  it "returns an UploadIO with the same io" do
71
- expect(Koala::UploadableIO.new(*@koala_io_params).io_or_path).to eq(@koala_io_params[0])
71
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).io_or_path).to eq(@koala_io_params[0])
72
72
  end
73
73
 
74
74
  it "returns an UploadableIO with the same content_type" do
75
75
  content_stub = @koala_io_params[1] = double('Content Type')
76
- expect(Koala::UploadableIO.new(*@koala_io_params).content_type).to eq(content_stub)
76
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).content_type).to eq(content_stub)
77
77
  end
78
78
 
79
79
  it "returns an UploadableIO with the right filename" do
80
- expect(Koala::UploadableIO.new(*@koala_io_params).filename).to eq(File.basename(@file.path))
80
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).filename).to eq(File.basename(@file.path))
81
81
  end
82
82
  end
83
83
 
@@ -100,16 +100,16 @@ describe "Koala::UploadableIO" do
100
100
 
101
101
  it "returns an UploadIO with the same io" do
102
102
  #Problem comparing Tempfile in Ruby 1.8, REE and Rubinius mode 1.8
103
- expect(Koala::UploadableIO.new(*@koala_io_params).io_or_path.path).to eq(@koala_io_params[0].path)
103
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).io_or_path.path).to eq(@koala_io_params[0].path)
104
104
  end
105
105
 
106
106
  it "returns an UploadableIO with the same content_type" do
107
107
  content_stub = @koala_io_params[1] = double('Content Type')
108
- expect(Koala::UploadableIO.new(*@koala_io_params).content_type).to eq(content_stub)
108
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).content_type).to eq(content_stub)
109
109
  end
110
110
 
111
111
  it "returns an UploadableIO with the right filename" do
112
- expect(Koala::UploadableIO.new(*@koala_io_params).filename).to eq(File.basename(@file.path))
112
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).filename).to eq(File.basename(@file.path))
113
113
  end
114
114
  end
115
115
 
@@ -130,18 +130,18 @@ describe "Koala::UploadableIO" do
130
130
  end
131
131
 
132
132
  it "returns an UploadableIO with the same io" do
133
- expect(Koala::UploadableIO.new(*@koala_io_params).io_or_path).to eq(@koala_io_params[0])
133
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).io_or_path).to eq(@koala_io_params[0])
134
134
  end
135
135
 
136
136
  it "returns an UploadableIO with the same content_type" do
137
137
  content_stub = @koala_io_params[1] = double('Content Type')
138
- expect(Koala::UploadableIO.new(*@koala_io_params).content_type).to eq(content_stub)
138
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).content_type).to eq(content_stub)
139
139
  end
140
140
  end
141
141
 
142
142
  describe "and no content type" do
143
143
  it "raises an exception" do
144
- expect { Koala::UploadableIO.new(*@koala_io_params) }.to raise_exception(Koala::KoalaError)
144
+ expect { Koala::HTTPService::UploadableIO.new(*@koala_io_params) }.to raise_exception(Koala::KoalaError)
145
145
  end
146
146
  end
147
147
  end
@@ -154,17 +154,17 @@ describe "Koala::UploadableIO" do
154
154
  it "gets the path from the tempfile associated with the UploadedFile" do
155
155
  expected_path = double('Tempfile')
156
156
  expect(@tempfile).to receive(:path).and_return(expected_path)
157
- expect(Koala::UploadableIO.new(@uploaded_file).io_or_path).to eq(expected_path)
157
+ expect(Koala::HTTPService::UploadableIO.new(@uploaded_file).io_or_path).to eq(expected_path)
158
158
  end
159
159
 
160
160
  it "gets the content type via the content_type method" do
161
161
  expected_content_type = double('Content Type')
162
162
  expect(@uploaded_file).to receive(:content_type).and_return(expected_content_type)
163
- expect(Koala::UploadableIO.new(@uploaded_file).content_type).to eq(expected_content_type)
163
+ expect(Koala::HTTPService::UploadableIO.new(@uploaded_file).content_type).to eq(expected_content_type)
164
164
  end
165
165
 
166
166
  it "gets the filename from the UploadedFile" do
167
- expect(Koala::UploadableIO.new(@uploaded_file).filename).to eq(@uploaded_file.original_filename)
167
+ expect(Koala::HTTPService::UploadableIO.new(@uploaded_file).filename).to eq(@uploaded_file.original_filename)
168
168
  end
169
169
  end
170
170
 
@@ -177,7 +177,7 @@ describe "Koala::UploadableIO" do
177
177
  expected_file = double('File')
178
178
  @file_hash[:tempfile] = expected_file
179
179
 
180
- uploadable = Koala::UploadableIO.new(@file_hash)
180
+ uploadable = Koala::HTTPService::UploadableIO.new(@file_hash)
181
181
  expect(uploadable.io_or_path).to eq(expected_file)
182
182
  end
183
183
 
@@ -185,12 +185,12 @@ describe "Koala::UploadableIO" do
185
185
  expected_content_type = double('Content Type')
186
186
  @file_hash[:type] = expected_content_type
187
187
 
188
- uploadable = Koala::UploadableIO.new(@file_hash)
188
+ uploadable = Koala::HTTPService::UploadableIO.new(@file_hash)
189
189
  expect(uploadable.content_type).to eq(expected_content_type)
190
190
  end
191
191
 
192
192
  it "gets the content type from the :type key" do
193
- uploadable = Koala::UploadableIO.new(@file_hash)
193
+ uploadable = Koala::HTTPService::UploadableIO.new(@file_hash)
194
194
  expect(uploadable.filename).to eq(@file_hash[:filename])
195
195
  end
196
196
  end
@@ -199,12 +199,12 @@ describe "Koala::UploadableIO" do
199
199
  # what that means is tested below
200
200
  it "should accept a file object alone" do
201
201
  params = [BEACH_BALL_PATH]
202
- expect { Koala::UploadableIO.new(*params) }.not_to raise_exception
202
+ expect { Koala::HTTPService::UploadableIO.new(*params) }.not_to raise_exception
203
203
  end
204
204
 
205
205
  it "should accept a file path alone" do
206
206
  params = [BEACH_BALL_PATH]
207
- expect { Koala::UploadableIO.new(*params) }.not_to raise_exception
207
+ expect { Koala::HTTPService::UploadableIO.new(*params) }.not_to raise_exception
208
208
  end
209
209
  end
210
210
  end
@@ -218,7 +218,7 @@ describe "Koala::UploadableIO" do
218
218
  context "if no filename was provided" do
219
219
  it "should call the constructor with the content type, file name, and a dummy file name" do
220
220
  expect(UploadIO).to receive(:new).with(BEACH_BALL_PATH, "content/type", anything).and_return(@upload_io)
221
- expect(Koala::UploadableIO.new(BEACH_BALL_PATH, "content/type").to_upload_io).to eq(@upload_io)
221
+ expect(Koala::HTTPService::UploadableIO.new(BEACH_BALL_PATH, "content/type").to_upload_io).to eq(@upload_io)
222
222
  end
223
223
  end
224
224
 
@@ -226,7 +226,7 @@ describe "Koala::UploadableIO" do
226
226
  it "should call the constructor with the content type, file name, and the filename" do
227
227
  filename = "file"
228
228
  expect(UploadIO).to receive(:new).with(BEACH_BALL_PATH, "content/type", filename).and_return(@upload_io)
229
- Koala::UploadableIO.new(BEACH_BALL_PATH, "content/type", filename).to_upload_io
229
+ Koala::HTTPService::UploadableIO.new(BEACH_BALL_PATH, "content/type", filename).to_upload_io
230
230
  end
231
231
  end
232
232
  end
@@ -234,33 +234,33 @@ describe "Koala::UploadableIO" do
234
234
  describe "getting a file" do
235
235
  it "returns the File if initialized with a file" do
236
236
  f = File.new(BEACH_BALL_PATH)
237
- expect(Koala::UploadableIO.new(f).to_file).to eq(f)
237
+ expect(Koala::HTTPService::UploadableIO.new(f).to_file).to eq(f)
238
238
  end
239
239
 
240
240
  it "should open up and return a file corresponding to the path if io_or_path is a path" do
241
241
  result = double("File")
242
242
  expect(File).to receive(:open).with(BEACH_BALL_PATH).and_return(result)
243
- expect(Koala::UploadableIO.new(BEACH_BALL_PATH).to_file).to eq(result)
243
+ expect(Koala::HTTPService::UploadableIO.new(BEACH_BALL_PATH).to_file).to eq(result)
244
244
  end
245
245
  end
246
246
 
247
247
  describe ".binary_content?" do
248
248
  it "returns true for Rails 3 file uploads" do
249
- expect(Koala::UploadableIO.binary_content?(rails_3_mocks.last)).to be_truthy
249
+ expect(Koala::HTTPService::UploadableIO.binary_content?(rails_3_mocks.last)).to be_truthy
250
250
  end
251
251
 
252
252
  it "returns true for Sinatra file uploads" do
253
- expect(Koala::UploadableIO.binary_content?(rails_3_mocks.last)).to be_truthy
253
+ expect(Koala::HTTPService::UploadableIO.binary_content?(rails_3_mocks.last)).to be_truthy
254
254
  end
255
255
 
256
256
  it "returns true for File objects" do
257
- expect(Koala::UploadableIO.binary_content?(File.open(BEACH_BALL_PATH))).to be_truthy
257
+ expect(Koala::HTTPService::UploadableIO.binary_content?(File.open(BEACH_BALL_PATH))).to be_truthy
258
258
  end
259
259
 
260
260
  it "returns false for everything else" do
261
- expect(Koala::UploadableIO.binary_content?(StringIO.new)).to be_falsey
262
- expect(Koala::UploadableIO.binary_content?(BEACH_BALL_PATH)).to be_falsey
263
- expect(Koala::UploadableIO.binary_content?(nil)).to be_falsey
261
+ expect(Koala::HTTPService::UploadableIO.binary_content?(StringIO.new)).to be_falsey
262
+ expect(Koala::HTTPService::UploadableIO.binary_content?(BEACH_BALL_PATH)).to be_falsey
263
+ expect(Koala::HTTPService::UploadableIO.binary_content?(nil)).to be_falsey
264
264
  end
265
265
  end
266
266
  end # describe UploadableIO
@@ -10,22 +10,6 @@
10
10
  # with_token:
11
11
  # no_token:
12
12
 
13
- # ====== REST API =====
14
- rest_api:
15
-
16
- # -- Stubbed Responses --
17
- /method/admin.setAppProperties:
18
- 'properties={"desktop":0}':
19
- post:
20
- with_token: 'true'
21
- /method/fql.query: # for testing the beta tier
22
- query=select first_name from user where uid = 2901279:
23
- get:
24
- no_token: '[{"first_name":"Luke"}]'
25
- with_token: '[{"first_name":"Luke"}]'
26
-
27
-
28
-
29
13
  # ====== GRAPH API =====
30
14
  graph_api:
31
15
 
@@ -95,9 +79,6 @@ graph_api:
95
79
  batch=<%= JSON.dump([{"method"=>"post", "relative_url"=>"FEED_ITEM_BATCH/likes"}, {"method"=>"delete", "relative_url"=> "FEED_ITEM_BATCH"}]) %>:
96
80
  post:
97
81
  with_token: '[{"code": 200, "body": "{\"id\": \"MOCK_LIKE\"}"},{"code": 200, "body":true}]'
98
- batch=<%= JSON.dump([{"method" => "post", "relative_url" => "method/fql.query", "body" => "query=select+first_name+from+user+where+uid%3D2905623"}]) %>:
99
- post:
100
- with_token: '[{"code": 200, "body":"[{\"first_name\":\"Alex\"}]"}]'
101
82
 
102
83
  # dependencies
103
84
  batch=<%= JSON.dump([{"method"=>"get", "relative_url"=>"me", "name" => "getme"}, {"method"=>"get", "relative_url"=>"koppel", "depends_on" => "getme"}]) %>:
@@ -296,24 +277,6 @@ graph_api:
296
277
  with_token: '{"data": [{"id": "507731521_100412693339488"}], "paging": {"previous": "https:\/\/graph.facebook.com\/7204941866\/photos?limit=25&until=2008-09-15T18%3A30%3A25%2B0000", "next": "https:\/\/graph.facebook.com\/7204941866\/photos?limit=25&until=2008-09-15T18%3A30%3A25%2B0000"}}'
297
278
  no_token: '{"data": [{"id": "507731521_100412693339488"}], "paging": {"previous": "https:\/\/graph.facebook.com\/7204941866\/photos?limit=25&until=2008-09-15T18%3A30%3A25%2B0000", "next": "https:\/\/graph.facebook.com\/7204941866\/photos?limit=25&until=2008-09-15T18%3A30%3A25%2B0000"}}'
298
279
 
299
- /fql:
300
- q=select uid, first_name from user where uid = 2901279:
301
- get:
302
- no_token: '[{"uid":2901279,"first_name":"Luke"}]'
303
- with_token: '[{"uid":2901279,"first_name":"Luke"}]'
304
- q=select read_stream from permissions where uid = 2901279:
305
- get:
306
- <<: *token_required
307
- with_token: '[{"read_stream":1}]'
308
- 'q=<%= JSON.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)"}) %>':
309
- get:
310
- <<: *token_required
311
- with_token: '[{"name":"query1", "fql_result_set":[]},{"name":"query2", "fql_result_set":[]},{"name":"query3", "fql_result_set":[]}]'
312
- 'q=<%= JSON.dump({"query1" => "select uid, first_name from user where uid = 2901279", "query2" => "select uid, first_name from user where uid = 2905623"}) %>':
313
- get:
314
- with_token: '[{"name":"query1", "fql_result_set":[{"uid":2901279,"first_name":"Luke"}]},{"name":"query2", "fql_result_set":[{"uid":"2905623","first_name":"Alex"}]}]'
315
- no_token: '[{"name":"query1", "fql_result_set":[{"uid":2901279,"first_name":"Luke"}]},{"name":"query2", "fql_result_set":[{"uid":"2905623","first_name":"Alex"}]}]'
316
-
317
280
 
318
281
  '/115349521819193_113815981982767':
319
282
  no_args:
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # Quantify coverage
2
- require "codeclimate-test-reporter"
3
- CodeClimate::TestReporter.start
2
+ require 'simplecov'
3
+ SimpleCov.start
4
4
 
5
5
  # load the library
6
6
  require 'koala'
@@ -32,14 +32,14 @@ shared_examples_for "Koala GraphAPI" do
32
32
  it "passes the results through GraphCollection.evaluate" do
33
33
  result = {}
34
34
  allow(@api).to receive(:api).and_return(result)
35
- expect(Koala::Facebook::GraphCollection).to receive(:evaluate).with(result, @api)
35
+ expect(Koala::Facebook::API::GraphCollection).to receive(:evaluate).with(result, @api)
36
36
  @api.graph_call("/me")
37
37
  end
38
38
 
39
39
  it "returns the results of GraphCollection.evaluate" do
40
40
  expected = {}
41
41
  allow(@api).to receive(:api).and_return([])
42
- expect(Koala::Facebook::GraphCollection).to receive(:evaluate).and_return(expected)
42
+ expect(Koala::Facebook::API::GraphCollection).to receive(:evaluate).and_return(expected)
43
43
  expect(@api.graph_call("/me")).to eq(expected)
44
44
  end
45
45
 
@@ -158,63 +158,6 @@ shared_examples_for "Koala GraphAPI" do
158
158
  # the results should have an ID and a name, among other things
159
159
  expect(result["id"] && result["name"]).to be_truthy
160
160
  end
161
-
162
- # FQL
163
- describe "#fql_query" do
164
- it "makes a request to /fql" do
165
- expect(@api).to receive(:get_object).with("fql", anything, anything)
166
- @api.fql_query double('query string')
167
- end
168
-
169
- it "passes a query argument" do
170
- query = double('query string')
171
- expect(@api).to receive(:get_object).with(anything, hash_including(:q => query), anything)
172
- @api.fql_query(query)
173
- end
174
-
175
- it "passes on any other arguments provided" do
176
- args = {:a => 2}
177
- expect(@api).to receive(:get_object).with(anything, hash_including(args), anything)
178
- @api.fql_query("a query", args)
179
- end
180
- end
181
-
182
- describe "#fql_multiquery" do
183
- it "makes a request to /fql" do
184
- expect(@api).to receive(:get_object).with("fql", anything, anything)
185
- @api.fql_multiquery 'query string'
186
- end
187
-
188
- it "passes a queries argument" do
189
- queries = double('query string')
190
- queries_json = "some JSON"
191
- allow(JSON).to receive(:dump).with(queries).and_return(queries_json)
192
-
193
- expect(@api).to receive(:get_object).with(anything, hash_including(:q => queries_json), anything)
194
- @api.fql_multiquery(queries)
195
- end
196
-
197
- it "simplifies the response format" do
198
- raw_results = [
199
- {"name" => "query1", "fql_result_set" => [1, 2, 3]},
200
- {"name" => "query2", "fql_result_set" => [:a, :b, :c]}
201
- ]
202
- expected_results = {
203
- "query1" => [1, 2, 3],
204
- "query2" => [:a, :b, :c]
205
- }
206
-
207
- allow(@api).to receive(:get_object).and_return(raw_results)
208
- results = @api.fql_multiquery({:query => true})
209
- expect(results).to eq(expected_results)
210
- end
211
-
212
- it "passes on any other arguments provided" do
213
- args = {:a => 2}
214
- expect(@api).to receive(:get_object).with(anything, hash_including(args), anything)
215
- @api.fql_multiquery("a query", args)
216
- end
217
- end
218
161
  end
219
162
 
220
163
 
@@ -370,7 +313,7 @@ shared_examples_for "Koala GraphAPI with an access token" do
370
313
 
371
314
  it "sets options[:video] to true" do
372
315
  source = double("UploadIO")
373
- allow(Koala::UploadableIO).to receive(:new).and_return(source)
316
+ allow(Koala::HTTPService::UploadableIO).to receive(:new).and_return(source)
374
317
  allow(source).to receive(:requires_base_http_service).and_return(false)
375
318
  expect(Koala).to receive(:make_request).with(anything, anything, anything, hash_including(:video => true)).and_return(Koala::HTTPService::Response.new(200, "[]", {}))
376
319
  @api.put_video("foo")
@@ -508,51 +451,6 @@ shared_examples_for "Koala GraphAPI with an access token" do
508
451
  end
509
452
  end
510
453
 
511
- it "can access public information via FQL" do
512
- result = @api.fql_query("select uid, first_name from user where uid = #{KoalaTest.user2_id}")
513
- expect(result.size).to eq(1)
514
- expect(result.first['first_name']).to eq(KoalaTest.user2_name)
515
- expect(result.first['uid']).to eq(KoalaTest.user2_id.to_i)
516
- end
517
-
518
- it "can access public information via FQL.multiquery" do
519
- result = @api.fql_multiquery(
520
- :query1 => "select uid, first_name from user where uid = #{KoalaTest.user2_id}",
521
- :query2 => "select uid, first_name from user where uid = #{KoalaTest.user1_id}"
522
- )
523
- expect(result.size).to eq(2)
524
- # this should check for first_name, but there's an FB bug currently
525
- expect(result["query1"].first['uid']).to eq(KoalaTest.user2_id.to_i)
526
- # result["query1"].first['first_name'].should == KoalaTest.user2_name
527
- expect(result["query2"].first['first_name']).to eq(KoalaTest.user1_name)
528
- end
529
-
530
- it "can access protected information via FQL" do
531
- # Tests agains the permissions fql table
532
-
533
- # get the current user's ID
534
- # we're sneakily using the Graph API, which should be okay since it has its own tests
535
- g = Koala::Facebook::API.new(@token)
536
- id = g.get_object("me", :fields => "id")["id"]
537
-
538
- # now send a query about your permissions
539
- result = @api.fql_query("select read_stream from permissions where uid = #{id}")
540
-
541
- expect(result.size).to eq(1)
542
- # we've verified that you have read_stream permissions, so we can test against that
543
- expect(result.first["read_stream"]).to eq(1)
544
- end
545
-
546
- it "can access protected information via FQL.multiquery" do
547
- result = @api.fql_multiquery(
548
- :query1 => "select post_id from stream where source_id = me()",
549
- :query2 => "select fromid from comment where post_id in (select post_id from #query1)",
550
- :query3 => "select uid, name from user where uid in (select fromid from #query2)"
551
- )
552
- expect(result.size).to eq(3)
553
- expect(result.keys).to include("query1", "query2", "query3")
554
- end
555
-
556
454
  # test all methods to make sure they pass data through to the API
557
455
  # we run the tests here (rather than in the common shared example group)
558
456
  # since some require access tokens
@@ -572,7 +470,6 @@ shared_examples_for "Koala GraphAPI with an access token" do
572
470
  :search => 3,
573
471
  :set_app_restrictions => 4,
574
472
  :get_page_access_token => 3,
575
- :fql_query => 3, :fql_multiquery => 3,
576
473
  # methods that have special arguments
577
474
  :get_comments_for_urls => [["url1", "url2"], {}],
578
475
  :put_picture => ["x.jpg", "image/jpg", {}, "me"],
@@ -609,7 +506,7 @@ shared_examples_for "Koala GraphAPI with GraphCollection" do
609
506
  # GraphCollection methods
610
507
  it "gets a GraphCollection when getting connections" do
611
508
  @result = @api.get_connections(KoalaTest.page, "photos")
612
- expect(@result).to be_a(Koala::Facebook::GraphCollection)
509
+ expect(@result).to be_a(Koala::Facebook::API::GraphCollection)
613
510
  end
614
511
 
615
512
  it "returns nil if the get_collections call fails with nil" do
@@ -620,7 +517,7 @@ shared_examples_for "Koala GraphAPI with GraphCollection" do
620
517
 
621
518
  it "gets a GraphCollection when searching" do
622
519
  result = @api.search("facebook")
623
- expect(result).to be_a(Koala::Facebook::GraphCollection)
520
+ expect(result).to be_a(Koala::Facebook::API::GraphCollection)
624
521
  end
625
522
 
626
523
  it "returns nil if the search call fails with nil" do
@@ -631,7 +528,7 @@ shared_examples_for "Koala GraphAPI with GraphCollection" do
631
528
 
632
529
  it "gets a GraphCollection when paging through results" do
633
530
  @results = @api.get_page(["search", {"q"=>"facebook", "limit"=>"25", "until"=> KoalaTest.search_time}])
634
- expect(@results).to be_a(Koala::Facebook::GraphCollection)
531
+ expect(@results).to be_a(Koala::Facebook::API::GraphCollection)
635
532
  end
636
533
 
637
534
  it "returns nil if the page call fails with nil" do
@@ -691,37 +588,4 @@ shared_examples_for "Koala GraphAPI without an access token" do
691
588
  it "can't delete a like" do
692
589
  expect { @api.delete_like("7204941866_119776748033392") }.to raise_error(Koala::Facebook::AuthenticationError)
693
590
  end
694
-
695
- # FQL_QUERY
696
- describe "when making a FQL request" do
697
- it "can access public information via FQL" do
698
- result = @api.fql_query("select uid, first_name from user where uid = #{KoalaTest.user2_id}")
699
- expect(result.size).to eq(1)
700
- expect(result.first['first_name']).to eq(KoalaTest.user2_name)
701
- end
702
-
703
- it "can access public information via FQL.multiquery" do
704
- result = @api.fql_multiquery(
705
- :query1 => "select uid, first_name from user where uid = #{KoalaTest.user2_id}",
706
- :query2 => "select uid, first_name from user where uid = #{KoalaTest.user1_id}"
707
- )
708
- expect(result.size).to eq(2)
709
- expect(result["query1"].first['first_name']).to eq(KoalaTest.user2_name)
710
- expect(result["query2"].first['first_name']).to eq(KoalaTest.user1_name)
711
- end
712
-
713
- it "can't access protected information via FQL" do
714
- expect { @api.fql_query("select read_stream from permissions where uid = #{KoalaTest.user2_id}") }.to raise_error(Koala::Facebook::APIError)
715
- end
716
-
717
- it "can't access protected information via FQL.multiquery" do
718
- expect {
719
- @api.fql_multiquery(
720
- :query1 => "select post_id from stream where source_id = me()",
721
- :query2 => "select fromid from comment where post_id in (select post_id from #query1)",
722
- :query3 => "select uid, name from user where uid in (select fromid from #query2)"
723
- )
724
- }.to raise_error(Koala::Facebook::APIError)
725
- end
726
- end
727
591
  end
@@ -157,12 +157,12 @@ module KoalaTest
157
157
  print "Validating permissions for live testing..."
158
158
  # make sure we have the necessary permissions
159
159
  api = Koala::Facebook::API.new(token)
160
- perms = api.fql_query("select #{testing_permissions} from permissions where uid = me()")[0]
161
- perms.each_pair do |perm, value|
162
- if value == (perm == "read_insights" ? 1 : 0) # live testing depends on insights calls failing
163
- puts "failed!\n" # put a new line after the print above
164
- raise ArgumentError, "Your access token must have #{testing_permissions.join(", ")}, and lack read_insights. You have: #{perms.inspect}"
165
- end
160
+ perms = api.get_connect("me", "permissions")["data"]
161
+
162
+ # live testing depends on insights calls failing
163
+ if perms.keys.include?("read_insights") || (perms.keys & testing_permissions) != testing_permissions
164
+ puts "failed!\n" # put a new line after the print above
165
+ raise ArgumentError, "Your access token must have #{testing_permissions.join(", ")}, and lack read_insights. You have: #{perms.inspect}"
166
166
  end
167
167
  puts "done!"
168
168
  end
@@ -32,8 +32,8 @@ module Koala
32
32
  mock_response_file_path = File.join(File.dirname(__FILE__), '..', 'fixtures', 'mock_facebook_responses.yml')
33
33
  RESPONSES = YAML.load(ERB.new(IO.read(mock_response_file_path)).result(binding))
34
34
 
35
- def self.make_request(path, args, verb, options = {})
36
- if response = match_response(path, args, verb, options)
35
+ def self.make_request(request)
36
+ if response = match_response(request.raw_path, request.raw_args, request.raw_verb, request.raw_options)
37
37
  # create response class object
38
38
  response_object = if response.is_a? String
39
39
  Koala::HTTPService::Response.new(200, response, {})
@@ -65,7 +65,7 @@ module Koala
65
65
 
66
66
  # For a given query, see if our mock responses YAML has a resopnse for it.
67
67
  def self.match_response(path, args, verb, options = {})
68
- server = options[:rest_api] ? 'rest_api' : 'graph_api'
68
+ server = 'graph_api'
69
69
  path = 'root' if path == '' || path == '/'
70
70
  verb = (verb || 'get').to_s
71
71
  token = args.delete('access_token')
@@ -88,8 +88,8 @@ module Koala
88
88
  args = arguments.inject({}) do |hash, (k, v)|
89
89
  # ensure our args are all stringified
90
90
  value = if v.is_a?(String)
91
- should_json_decode?(v) ? JSON.load(v) : v
92
- elsif v.is_a?(Koala::UploadableIO)
91
+ should_json_decode?(v) ? JSON.parse(v) : v
92
+ elsif v.is_a?(Koala::HTTPService::UploadableIO)
93
93
  # obviously there are no files in the yaml
94
94
  "[FILE]"
95
95
  else
@@ -119,7 +119,7 @@ module Koala
119
119
  # will remove +'s in restriction strings
120
120
  string.split("&").reduce({}) do |hash, component|
121
121
  k, v = component.split("=", 2) # we only care about the first =
122
- value = should_json_decode?(v) ? JSON.load(v) : v.to_s rescue v.to_s
122
+ value = should_json_decode?(v) ? JSON.parse(v) : v.to_s rescue v.to_s
123
123
  # some special-casing, unfortunate but acceptable in this testing
124
124
  # environment
125
125
  value = nil if value.empty?
@@ -12,7 +12,7 @@ shared_examples_for "MIME::Types can't return results" do
12
12
  else
13
13
  @koala_io_params[0] = path
14
14
  end
15
- expect(Koala::UploadableIO.new(*@koala_io_params).content_type).to eq(mime_type)
15
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).content_type).to eq(mime_type)
16
16
  end
17
17
 
18
18
  it "should get content types for #{extension} using basic analysis with file names with more than one dot" do
@@ -22,7 +22,7 @@ shared_examples_for "MIME::Types can't return results" do
22
22
  else
23
23
  @koala_io_params[0] = path
24
24
  end
25
- expect(Koala::UploadableIO.new(*@koala_io_params).content_type).to eq(mime_type)
25
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).content_type).to eq(mime_type)
26
26
  end
27
27
  end
28
28
 
@@ -37,7 +37,7 @@ shared_examples_for "MIME::Types can't return results" do
37
37
  end
38
38
 
39
39
  it "should throw an exception" do
40
- expect { Koala::UploadableIO.new(*@koala_io_params) }.to raise_exception(Koala::KoalaError)
40
+ expect { Koala::HTTPService::UploadableIO.new(*@koala_io_params) }.to raise_exception(Koala::KoalaError)
41
41
  end
42
42
  end
43
43
  end
@@ -47,7 +47,7 @@ shared_examples_for "determining a mime type" do
47
47
  it "should return an UploadIO with MIME::Types-determined type if the type exists" do
48
48
  type_result = ["type"]
49
49
  allow(Koala::MIME::Types).to receive(:type_for).and_return(type_result)
50
- expect(Koala::UploadableIO.new(*@koala_io_params).content_type).to eq(type_result.first)
50
+ expect(Koala::HTTPService::UploadableIO.new(*@koala_io_params).content_type).to eq(type_result.first)
51
51
  end
52
52
  end
53
53
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: koala
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 3.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Koppel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-16 00:00:00.000000000 Z
11
+ date: 2017-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -71,10 +71,10 @@ files:
71
71
  - lib/koala/api/graph_batch_api.rb
72
72
  - lib/koala/api/graph_collection.rb
73
73
  - lib/koala/api/graph_error_checker.rb
74
- - lib/koala/api/rest_api.rb
75
74
  - lib/koala/errors.rb
76
75
  - lib/koala/http_service.rb
77
76
  - lib/koala/http_service/multipart_request.rb
77
+ - lib/koala/http_service/request.rb
78
78
  - lib/koala/http_service/response.rb
79
79
  - lib/koala/http_service/uploadable_io.rb
80
80
  - lib/koala/oauth.rb
@@ -89,6 +89,7 @@ files:
89
89
  - spec/cases/graph_api_spec.rb
90
90
  - spec/cases/graph_collection_spec.rb
91
91
  - spec/cases/graph_error_checker_spec.rb
92
+ - spec/cases/http_service/request_spec.rb
92
93
  - spec/cases/http_service_spec.rb
93
94
  - spec/cases/koala_spec.rb
94
95
  - spec/cases/koala_test_spec.rb
@@ -109,7 +110,6 @@ files:
109
110
  - spec/support/graph_api_shared_examples.rb
110
111
  - spec/support/koala_test.rb
111
112
  - spec/support/mock_http_service.rb
112
- - spec/support/rest_api_shared_examples.rb
113
113
  - spec/support/uploadable_io_shared_examples.rb
114
114
  homepage: http://github.com/arsduo/koala
115
115
  licenses:
@@ -130,9 +130,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
130
130
  version: '0'
131
131
  required_rubygems_version: !ruby/object:Gem::Requirement
132
132
  requirements:
133
- - - ">="
133
+ - - ">"
134
134
  - !ruby/object:Gem::Version
135
- version: '0'
135
+ version: 1.3.1
136
136
  requirements: []
137
137
  rubyforge_project:
138
138
  rubygems_version: 2.4.3
@@ -147,6 +147,7 @@ test_files:
147
147
  - spec/cases/graph_api_spec.rb
148
148
  - spec/cases/graph_collection_spec.rb
149
149
  - spec/cases/graph_error_checker_spec.rb
150
+ - spec/cases/http_service/request_spec.rb
150
151
  - spec/cases/http_service_spec.rb
151
152
  - spec/cases/koala_spec.rb
152
153
  - spec/cases/koala_test_spec.rb
@@ -167,6 +168,5 @@ test_files:
167
168
  - spec/support/graph_api_shared_examples.rb
168
169
  - spec/support/koala_test.rb
169
170
  - spec/support/mock_http_service.rb
170
- - spec/support/rest_api_shared_examples.rb
171
171
  - spec/support/uploadable_io_shared_examples.rb
172
172
  has_rdoc: