Skip to content

Commit 27bf83a

Browse files
author
Fábio Neves
committed
Merge pull request zendesk#266 from zendesk/fneves/handle_bad_characters
Handling bad utf-8 characters on a response
2 parents 7062ccf + 8eb94b2 commit 27bf83a

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed

lib/zendesk_api/client.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
require 'zendesk_api/middleware/response/callback'
1414
require 'zendesk_api/middleware/response/deflate'
1515
require 'zendesk_api/middleware/response/gzip'
16+
require 'zendesk_api/middleware/response/sanitize_response'
1617
require 'zendesk_api/middleware/response/parse_iso_dates'
1718
require 'zendesk_api/middleware/response/parse_json'
1819
require 'zendesk_api/middleware/response/raise_error'
@@ -142,6 +143,7 @@ def build_connection
142143
builder.use ZendeskAPI::Middleware::Response::Logger, config.logger if config.logger
143144
builder.use ZendeskAPI::Middleware::Response::ParseIsoDates
144145
builder.use ZendeskAPI::Middleware::Response::ParseJson
146+
builder.use ZendeskAPI::Middleware::Response::SanitizeResponse
145147

146148
adapter = config.adapter || Faraday.default_adapter
147149

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
require 'scrub_rb'
2+
3+
module ZendeskAPI
4+
module Middleware
5+
module Response
6+
class SanitizeResponse < Faraday::Response::Middleware
7+
def on_complete(env)
8+
env[:body].scrub!('')
9+
end
10+
end
11+
end
12+
end
13+
end
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
require 'core/spec_helper'
2+
3+
describe ZendeskAPI::Middleware::Response::SanitizeResponse do
4+
def fake_response(data)
5+
stub_json_request(:get, %r{blergh}, data)
6+
response = client.connection.get('blergh')
7+
expect(response.status).to eq(200)
8+
response
9+
end
10+
11+
describe 'with bad characters' do
12+
let(:response) { fake_response("{\"x\":\"2012-02-01T13:14:15Z\", \"y\":\"\u0315\u0316\u01333\u0270\u022712awesome!\ud83d\udc4d\"}") }
13+
14+
it 'removes bad characters' do
15+
expect(response.body.to_s.valid_encoding?).to be(true)
16+
expect(response.body['y'].to_s).to eq("\u0315\u0316\u01333\u0270\u022712awesome!")
17+
end
18+
end
19+
end

zendesk_api.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
3030
s.add_runtime_dependency "inflection"
3131
s.add_runtime_dependency "multipart-post", "~> 2.0"
3232
s.add_runtime_dependency "mime-types"
33+
s.add_runtime_dependency "scrub_rb", "~> 1.0.1"
3334

3435
s.files = `git ls-files -x Gemfile.lock`.split("\n") rescue ''
3536
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")

0 commit comments

Comments
 (0)