@@ -2,6 +2,18 @@ require 'faraday' |
||
| 2 | 2 |
require 'faraday_middleware' |
| 3 | 3 |
|
| 4 | 4 |
module WebRequestConcern |
| 5 |
+ module DoNotEncoder |
|
| 6 |
+ def self.encode(params) |
|
| 7 |
+ params.map do |key, value| |
|
| 8 |
+ value.nil? ? "#{key}" : "#{key}=#{value}"
|
|
| 9 |
+ end.join('&')
|
|
| 10 |
+ end |
|
| 11 |
+ |
|
| 12 |
+ def self.decode(val) |
|
| 13 |
+ [val] |
|
| 14 |
+ end |
|
| 15 |
+ end |
|
| 16 |
+ |
|
| 5 | 17 |
extend ActiveSupport::Concern |
| 6 | 18 |
|
| 7 | 19 |
def validate_web_request_options! |
@@ -38,6 +50,11 @@ module WebRequestConcern |
||
| 38 | 50 |
|
| 39 | 51 |
builder.use FaradayMiddleware::FollowRedirects |
| 40 | 52 |
builder.request :url_encoded |
| 53 |
+ |
|
| 54 |
+ if boolify(options['disable_url_encoding']) |
|
| 55 |
+ builder.options.params_encoder = DoNotEncoder |
|
| 56 |
+ end |
|
| 57 |
+ |
|
| 41 | 58 |
if userinfo = basic_auth_credentials |
| 42 | 59 |
builder.request :basic_auth, *userinfo |
| 43 | 60 |
end |
@@ -26,6 +26,7 @@ module Agents |
||
| 26 | 26 |
* `headers` - When present, it should be a hash of headers to send with the request. |
| 27 | 27 |
* `basic_auth` - Specify HTTP basic auth parameters: `"username:password"`, or `["username", "password"]`. |
| 28 | 28 |
* `disable_ssl_verification` - Set to `true` to disable ssl verification. |
| 29 |
+ * `disable_url_encoding` - Set to `true` to disable url encoding. |
|
| 29 | 30 |
* `user_agent` - A custom User-Agent name (default: "Faraday v#{Faraday::VERSION}").
|
| 30 | 31 |
* `max_events_per_run` - Limit number of events created (items parsed) per run for feed. |
| 31 | 32 |
MD |
@@ -141,5 +141,38 @@ shared_examples_for WebRequestConcern do |
||
| 141 | 141 |
agent.options['disable_ssl_verification'] = false |
| 142 | 142 |
expect(agent.faraday.ssl.verify).to eq(true) |
| 143 | 143 |
end |
| 144 |
+ |
|
| 145 |
+ it "should use faradays default params_encoder" do |
|
| 146 |
+ expect(agent.faraday.options.params_encoder).to eq(nil) |
|
| 147 |
+ agent.options['disable_url_encoding'] = 'false' |
|
| 148 |
+ expect(agent.faraday.options.params_encoder).to eq(nil) |
|
| 149 |
+ agent.options['disable_url_encoding'] = false |
|
| 150 |
+ expect(agent.faraday.options.params_encoder).to eq(nil) |
|
| 151 |
+ end |
|
| 152 |
+ |
|
| 153 |
+ it "should use WebRequestConcern::DoNotEncoder when disable_url_encoding is truthy" do |
|
| 154 |
+ agent.options['disable_url_encoding'] = true |
|
| 155 |
+ expect(agent.faraday.options.params_encoder).to eq(WebRequestConcern::DoNotEncoder) |
|
| 156 |
+ agent.options['disable_url_encoding'] = 'true' |
|
| 157 |
+ expect(agent.faraday.options.params_encoder).to eq(WebRequestConcern::DoNotEncoder) |
|
| 158 |
+ end |
|
| 159 |
+ end |
|
| 160 |
+ |
|
| 161 |
+ describe WebRequestConcern::DoNotEncoder do |
|
| 162 |
+ it "should not encode special characters" do |
|
| 163 |
+ expect(WebRequestConcern::DoNotEncoder.encode('GetRss?CategoryNr=39207' => 'test')).to eq('GetRss?CategoryNr=39207=test')
|
|
| 164 |
+ end |
|
| 165 |
+ |
|
| 166 |
+ it "should work without a value present" do |
|
| 167 |
+ expect(WebRequestConcern::DoNotEncoder.encode('GetRss?CategoryNr=39207' => nil)).to eq('GetRss?CategoryNr=39207')
|
|
| 168 |
+ end |
|
| 169 |
+ |
|
| 170 |
+ it "should work without an empty value" do |
|
| 171 |
+ expect(WebRequestConcern::DoNotEncoder.encode('GetRss?CategoryNr=39207' => '')).to eq('GetRss?CategoryNr=39207=')
|
|
| 172 |
+ end |
|
| 173 |
+ |
|
| 174 |
+ it "should return the value when decoding" do |
|
| 175 |
+ expect(WebRequestConcern::DoNotEncoder.decode('val')).to eq(['val'])
|
|
| 176 |
+ end |
|
| 144 | 177 |
end |
| 145 | 178 |
end |