koala 3.2.0 → 3.3.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f879bff1a0797804e8a89a2d8d34366ba21fafedd5317b4649326169dc9b7ed
4
- data.tar.gz: 8f77e5f1d2f3eebcf5e08983ba4f2af69b64566d7d2d4dac6185a8b5c3222ba6
3
+ metadata.gz: f3709b2644f9f0259e68e181d629754ffe3ba0213322cfb3bad0d369ad04543c
4
+ data.tar.gz: 7c3e3760d2ee7958b199713c7308f291552ee80a7badddc9ea9434a71cb024a9
5
5
  SHA512:
6
- metadata.gz: 704dee302c62d906fd9f065abc86ea0e9268a4b160460ccfb455f8a7dbd3d41631bacf75e155953e5fd9d54e01fa81abc39f7730db4ea1023893b80dd378aa22
7
- data.tar.gz: 38c9e731f1a76e3d441c3e783032a8f306168723e1552e00167dcd0bd5ad696833afffd2797ff4f4e0ed97e986578f08533b58f5064fa0610819fb409d10ddd3
6
+ metadata.gz: a22e1b9de96408d3273816150d5e0d55768f72b8b48a93ea276b7d2dc5d35f45de38cb8aad847345faf9c6997d7d0f19d21f177882cfb024e472e8681c9bbd2d
7
+ data.tar.gz: 5d66a1c10d8bd3d8153eb8faa02ee7ae901aae7321141d12f39abaeb33b6193cea2e3c7215b813942b714965d6048abda867f1d269de39dbdfc0bc137f3a0dc6
@@ -10,7 +10,7 @@ jobs:
10
10
  strategy:
11
11
  fail-fast: false
12
12
  matrix:
13
- ruby: [2.5, 2.6, 2.7, "3.0", 3.1, head]
13
+ ruby: [2.7, "3.0", 3.1, head]
14
14
 
15
15
  steps:
16
16
  - name: Checkout repository
data/Gemfile CHANGED
@@ -10,6 +10,7 @@ group :development, :test do
10
10
  gem "psych", '< 4.0.0' # safe_load signature not compatible with older rubies
11
11
  gem "rake"
12
12
  gem "typhoeus" unless defined? JRUBY_VERSION
13
+ gem 'faraday-typhoeus' unless defined? JRUBY_VERSION
13
14
  end
14
15
 
15
16
  group :test do
data/changelog.md CHANGED
@@ -15,6 +15,22 @@ Testing improvements:
15
15
 
16
16
  Others:
17
17
 
18
+ v3.3.0 (2022-09-27)
19
+ ======
20
+
21
+ Updated features:
22
+
23
+ * Removed restriction on faraday < 2 ([#666](https://github.com/arsduo/koala/pull/666))
24
+
25
+ Internal improvements:
26
+
27
+ * Remove multipart hack and use default faraday multipart middleware ([#664](https://github.com/arsduo/koala/pull/664))
28
+
29
+ Testing improvements:
30
+
31
+ * Fix tests with ruby-head ([#674](https://github.com/arsduo/koala/pull/674))
32
+ * Keep supported rubies (non EOL) for CI ([#675](https://github.com/arsduo/koala/pull/675))
33
+
18
34
  v3.2.0 (2022-05-27)
19
35
  ======
20
36
 
data/koala.gemspec CHANGED
@@ -23,7 +23,8 @@ Gem::Specification.new do |gem|
23
23
 
24
24
  gem.required_ruby_version = '>= 2.1'
25
25
 
26
- gem.add_runtime_dependency("faraday", "< 2")
26
+ gem.add_runtime_dependency("faraday")
27
+ gem.add_runtime_dependency("faraday-multipart")
27
28
  gem.add_runtime_dependency("addressable")
28
29
  gem.add_runtime_dependency("json", ">= 1.8")
29
30
  gem.add_runtime_dependency("rexml")
@@ -1,4 +1,3 @@
1
- require "net/http/post/multipart"
2
1
  require "tempfile"
3
2
 
4
3
  module Koala
@@ -1,5 +1,5 @@
1
1
  require 'faraday'
2
- require 'koala/http_service/multipart_request'
2
+ require 'faraday/multipart' unless defined? Faraday::FilePart # hack for faraday < 1.9 to avoid warnings
3
3
  require 'koala/http_service/uploadable_io'
4
4
  require 'koala/http_service/response'
5
5
  require 'koala/http_service/request'
@@ -19,7 +19,7 @@ module Koala
19
19
  # We encode requests in a Facebook-compatible multipart request,
20
20
  # and use whichever adapter has been configured for this application.
21
21
  DEFAULT_MIDDLEWARE = Proc.new do |builder|
22
- builder.use Koala::HTTPService::MultipartRequest
22
+ builder.request :multipart
23
23
  builder.request :url_encoded
24
24
  builder.adapter Faraday.default_adapter
25
25
  end
data/lib/koala/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Koala
2
- VERSION = "3.2.0"
2
+ VERSION = "3.3.0"
3
3
  end
@@ -345,7 +345,7 @@ describe "Koala::Facebook::API" do
345
345
  response = Koala::HTTPService::Response.new(200, result.to_json, { "x-ad-account-usage" => "{\"acc_id_util_pct\"9.67}"})
346
346
  allow(Koala).to receive(:make_request).and_return(response)
347
347
 
348
- expect(Koala::Utils.logger).to receive(:error).with("JSON::ParserError: 859: unexpected token at '{\"acc_id_util_pct\"9.67}' while parsing x-ad-account-usage = {\"acc_id_util_pct\"9.67}")
348
+ expect(Koala::Utils.logger).to receive(:error).with(/JSON::ParserError:.*unexpected token at '{"acc_id_util_pct"9.67}' while parsing x-ad-account-usage = {"acc_id_util_pct"9.67}/)
349
349
  api.graph_call('anything')
350
350
  end
351
351
 
@@ -104,7 +104,7 @@ module Koala
104
104
  "x-app-usage" => '{invalid:json}'
105
105
  )
106
106
 
107
- expect(Koala::Utils.logger).to receive(:error).with("JSON::ParserError: 859: unexpected token at '{invalid:json}' while parsing x-app-usage = {invalid:json}")
107
+ expect(Koala::Utils.logger).to receive(:error).with(/JSON::ParserError:.*unexpected token at '{invalid:json}' while parsing x-app-usage = {invalid:json}/)
108
108
  expect(error.fb_app_usage).to eq(nil)
109
109
  end
110
110
 
@@ -39,8 +39,7 @@ describe Koala::HTTPService do
39
39
 
40
40
  it "adds the right default middleware" do
41
41
  Koala::HTTPService::DEFAULT_MIDDLEWARE.call(builder)
42
- expect(builder.requests).to eq([:url_encoded])
43
- expect(builder.uses).to eq([Koala::HTTPService::MultipartRequest])
42
+ expect(builder.requests).to eq([:multipart, :url_encoded])
44
43
  expect(builder.adapters).to eq([Faraday.default_adapter])
45
44
  end
46
45
  end
@@ -194,18 +193,16 @@ describe Koala::HTTPService do
194
193
 
195
194
  it "uses the default builder block if HTTPService.faraday_middleware block is not defined" do
196
195
  block = Proc.new { |builder|
197
- builder.use Koala::HTTPService::MultipartRequest
196
+ builder.request :multipart
198
197
  builder.request :url_encoded
199
- builder.use Koala::HTTPService::MultipartRequest
200
198
  }
201
199
  stub_const("Koala::HTTPService::DEFAULT_MIDDLEWARE", block)
202
200
  allow(Koala::HTTPService).to receive(:faraday_middleware).and_return(nil)
203
201
 
204
202
  expect_any_instance_of(Faraday::Connection).to receive(:get) do |instance|
205
203
  expect(instance.builder.handlers).to eq([
206
- Koala::HTTPService::MultipartRequest,
204
+ Faraday::Multipart::Middleware,
207
205
  Faraday::Request::UrlEncoded,
208
- Koala::HTTPService::MultipartRequest
209
206
  ])
210
207
  mock_http_response
211
208
  end
@@ -215,17 +212,15 @@ describe Koala::HTTPService do
215
212
 
216
213
  it "uses the defined HTTPService.faraday_middleware block if defined" do
217
214
  block = Proc.new { |builder|
218
- builder.use Koala::HTTPService::MultipartRequest
215
+ builder.request :multipart
219
216
  builder.request :url_encoded
220
- builder.use Koala::HTTPService::MultipartRequest
221
217
  }
222
218
  expect(Koala::HTTPService).to receive(:faraday_middleware).and_return(block)
223
219
 
224
220
  expect_any_instance_of(Faraday::Connection).to receive(:get) do |instance|
225
221
  expect(instance.builder.handlers).to eq([
226
- Koala::HTTPService::MultipartRequest,
222
+ Faraday::Multipart::Middleware,
227
223
  Faraday::Request::UrlEncoded,
228
- Koala::HTTPService::MultipartRequest
229
224
  ])
230
225
  mock_http_response
231
226
  end
@@ -238,11 +238,11 @@ module KoalaTest
238
238
  # JRuby doesn't support typhoeus on Travis
239
239
  unless defined? JRUBY_VERSION
240
240
  require adapter
241
- require 'typhoeus/adapters/faraday' if adapter.to_s == "typhoeus"
241
+ require "faraday/#{adapter}"
242
242
  Faraday.default_adapter = adapter.to_sym
243
243
  end
244
- rescue ParserError
245
- puts "Unable to load adapter #{adapter}, using Net::HTTP."
244
+ rescue => e
245
+ puts "Unable to load adapter #{adapter}, using Net::HTTP. #{e.class} #{e.message}"
246
246
  ensure
247
247
  @adapter_activation_attempted = true
248
248
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: koala
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Koppel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-27 00:00:00.000000000 Z
11
+ date: 2022-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "<"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2'
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "<"
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday-multipart
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
25
32
  - !ruby/object:Gem::Version
26
- version: '2'
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: addressable
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -101,7 +115,6 @@ files:
101
115
  - lib/koala/configuration.rb
102
116
  - lib/koala/errors.rb
103
117
  - lib/koala/http_service.rb
104
- - lib/koala/http_service/multipart_request.rb
105
118
  - lib/koala/http_service/request.rb
106
119
  - lib/koala/http_service/response.rb
107
120
  - lib/koala/http_service/uploadable_io.rb
@@ -123,7 +136,6 @@ files:
123
136
  - spec/cases/http_service_spec.rb
124
137
  - spec/cases/koala_spec.rb
125
138
  - spec/cases/koala_test_spec.rb
126
- - spec/cases/multipart_request_spec.rb
127
139
  - spec/cases/oauth_spec.rb
128
140
  - spec/cases/realtime_updates_spec.rb
129
141
  - spec/cases/test_users_spec.rb
@@ -165,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
177
  - !ruby/object:Gem::Version
166
178
  version: '0'
167
179
  requirements: []
168
- rubygems_version: 3.0.0
180
+ rubygems_version: 3.4.0.dev
169
181
  signing_key:
170
182
  specification_version: 4
171
183
  summary: A lightweight, flexible library for Facebook with support for the Graph API,
@@ -1,37 +0,0 @@
1
- require 'faraday'
2
-
3
- module Koala
4
- module HTTPService
5
- class MultipartRequest < Faraday::Request::Multipart
6
- # Facebook expects nested parameters to be passed in a certain way
7
- # Based on our testing (https://github.com/arsduo/koala/issues/125),
8
- # Faraday needs two changes to make that work:
9
- # 1) [] need to be escaped (e.g. params[foo]=bar ==> params%5Bfoo%5D=bar)
10
- # 2) such messages need to be multipart-encoded
11
-
12
- self.mime_type = 'multipart/form-data'.freeze
13
-
14
- def process_request?(env)
15
- # if the request values contain any hashes or arrays, multipart it
16
- super || !!(env[:body].respond_to?(:values) && env[:body].values.find {|v| v.is_a?(Hash) || v.is_a?(Array)})
17
- end
18
-
19
-
20
- def process_params(params, prefix = nil, pieces = nil, &block)
21
- params.inject(pieces || []) do |all, (key, value)|
22
- key = "#{prefix}%5B#{key}%5D" if prefix
23
-
24
- case value
25
- when Array
26
- values = value.inject([]) { |a,v| a << [nil, v] }
27
- process_params(values, key, all, &block)
28
- when Hash
29
- process_params(value, key, all, &block)
30
- else
31
- all << block.call(key, value)
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end
@@ -1,65 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Koala::HTTPService::MultipartRequest do
4
- it "is a subclass of Faraday::Request::Multipart" do
5
- expect(Koala::HTTPService::MultipartRequest.superclass).to eq(Faraday::Request::Multipart)
6
- end
7
-
8
- it "defines mime_type as multipart/form-data" do
9
- expect(Koala::HTTPService::MultipartRequest.mime_type).to eq('multipart/form-data')
10
- end
11
-
12
- describe "#process_request?" do
13
- before :each do
14
- @env = Faraday::Env.new
15
- @multipart = Koala::HTTPService::MultipartRequest.new
16
- allow(@multipart).to receive(:request_type).and_return("")
17
- end
18
-
19
- # no way to test the call to super, unfortunately
20
- it "returns true if env[:body] is a hash with at least one hash in its values" do
21
- @env[:body] = {:a => {:c => 2}}
22
- expect(@multipart.process_request?(@env)).to be_truthy
23
- end
24
-
25
- it "returns true if env[:body] is a hash with at least one array in its values" do
26
- @env[:body] = {:a => [:c, 2]}
27
- expect(@multipart.process_request?(@env)).to be_truthy
28
- end
29
-
30
- it "returns true if env[:body] is a hash with mixed objects in its values" do
31
- @env[:body] = {:a => [:c, 2], :b => {:e => :f}}
32
- expect(@multipart.process_request?(@env)).to be_truthy
33
- end
34
-
35
- it "returns false if env[:body] is a string" do
36
- @env[:body] = "my body"
37
- expect(@multipart.process_request?(@env)).to be_falsey
38
- end
39
-
40
- it "returns false if env[:body] is a hash without an array or hash value" do
41
- @env[:body] = {:a => 3}
42
- expect(@multipart.process_request?(@env)).to be_falsey
43
- end
44
- end
45
-
46
- describe "#process_params" do
47
- before :each do
48
- @parent = Faraday::Request::Multipart.new
49
- @multipart = Koala::HTTPService::MultipartRequest.new
50
- @block = lambda {|k, v| "#{k}=#{v}"}
51
- end
52
-
53
- it "is identical to the parent for requests without a prefix" do
54
- hash = {:a => 2, :c => "3"}
55
- expect(@multipart.process_params(hash, &@block)).to eq(@parent.process_params(hash, &@block))
56
- end
57
-
58
- it "replaces encodes [ and ] if the request has a prefix" do
59
- hash = {:a => 2, :c => "3"}
60
- prefix = "foo"
61
- # process_params returns an array
62
- expect(@multipart.process_params(hash, prefix, &@block).join("&")).to eq(@parent.process_params(hash, prefix, &@block).join("&").gsub(/\[/, "%5B").gsub(/\]/, "%5D"))
63
- end
64
- end
65
- end