lhc 3.8.0 → 3.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lhc/error.rb +34 -3
- data/lib/lhc/version.rb +1 -1
- data/spec/error/to_s_spec.rb +44 -0
- data/spec/interceptors/after_request_spec.rb +1 -2
- data/spec/interceptors/before_response_spec.rb +1 -2
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e327e8cf911398de6860f5e328bfee3d4ec4a117
|
4
|
+
data.tar.gz: eee4da06a4953d23eaef467a935a0a6ab7198454
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63b5203325d62df8aec412bb04e0e4bd6cffdafa29527641a8e0319a91e7fd39300135d31a0a9e3e169ad287c5c678f248994a71eb786a558957017ff6c8bed5
|
7
|
+
data.tar.gz: b13e872cab4a98c6e06a49d1c5e59ce86fdb1c1ae0ddc2b1bfb11366b5157e2444953b0d6cb52db4d0192656d64c413a24f83295b040afec96cfb795378db954
|
data/lib/lhc/error.rb
CHANGED
@@ -55,12 +55,43 @@ class LHC::Error < StandardError
|
|
55
55
|
def to_s
|
56
56
|
request = response.request
|
57
57
|
debug = []
|
58
|
-
debug <<
|
59
|
-
debug << "
|
58
|
+
debug << [request.method, request.url].map { |str| fix_invalid_encoding(str) }.join(' ')
|
59
|
+
debug << "Options: #{request.options}"
|
60
60
|
debug << "Headers: #{request.headers}"
|
61
61
|
debug << "Response Code: #{response.code}"
|
62
62
|
debug << response.body
|
63
63
|
debug << _message
|
64
|
-
debug.join("\n")
|
64
|
+
debug.map { |str| fix_invalid_encoding(str) }.join("\n")
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
# fix strings that contain non-UTF8 encoding in a forceful way
|
70
|
+
# should none of the fix-attempts be successful,
|
71
|
+
# an empty string is returned instead
|
72
|
+
def fix_invalid_encoding(string)
|
73
|
+
return string unless string.is_a?(String)
|
74
|
+
result = string.dup
|
75
|
+
|
76
|
+
# we assume it's ISO-8859-1 first
|
77
|
+
if !result.valid_encoding? || !utf8?(result)
|
78
|
+
result.encode!('UTF-8', 'ISO-8859-1', invalid: :replace, undef: :replace, replace: '')
|
79
|
+
end
|
80
|
+
|
81
|
+
# if it's still an issue, try with BINARY
|
82
|
+
if !result.valid_encoding? || !utf8?(result)
|
83
|
+
result.encode!('UTF-8', 'BINARY', invalid: :replace, undef: :replace, replace: '')
|
84
|
+
end
|
85
|
+
|
86
|
+
# if its STILL an issue, return an empty string :(
|
87
|
+
if !result.valid_encoding? || !utf8?(result)
|
88
|
+
result = ""
|
89
|
+
end
|
90
|
+
|
91
|
+
result
|
92
|
+
end
|
93
|
+
|
94
|
+
def utf8?(string)
|
95
|
+
string.encoding == Encoding::UTF_8
|
65
96
|
end
|
66
97
|
end
|
data/lib/lhc/version.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe LHC::Error do
|
4
|
+
context 'to_s' do
|
5
|
+
let(:invalid) { "in\xc3lid".force_encoding('ASCII-8BIT') }
|
6
|
+
let(:valid) { "vælid" }
|
7
|
+
|
8
|
+
context 'check assumptions' do
|
9
|
+
it 'joining raises an error' do
|
10
|
+
expect { [valid, invalid].join }.to raise_error Encoding::CompatibilityError
|
11
|
+
end
|
12
|
+
it 'interpolation raises an error' do
|
13
|
+
expect { "#{valid} #{invalid}" }.to raise_error Encoding::CompatibilityError
|
14
|
+
end
|
15
|
+
it 'to_json on an array raises an error' do
|
16
|
+
expect { [valid, invalid].to_json }.to raise_error Encoding::UndefinedConversionError
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'to_s on a hash does not raise an error' do
|
20
|
+
expect { { valid: valid, invalid: invalid }.to_s }.not_to raise_error
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'to_json on a hash does raise an error' do
|
24
|
+
expect { { valid: valid, invalid: invalid }.to_json }.to raise_error Encoding::UndefinedConversionError
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'invalid body, valid message' do
|
29
|
+
stub_request(:get, 'http://local.ch')
|
30
|
+
.to_return(status: 200, body: "{ text : '#{invalid}' }")
|
31
|
+
response = LHC.get('http://local.ch')
|
32
|
+
expect { LHC::Error.new(valid, response).to_s }.not_to raise_error # Encoding::CompatibilityError
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'valid body, invalid message' do
|
36
|
+
stub_request(:get, 'http://local.ch')
|
37
|
+
.to_return(status: 200, body: "{ text : '#{valid}' }")
|
38
|
+
response = LHC.get('http://local.ch')
|
39
|
+
expect { LHC::Error.new(invalid, response).to_s }.not_to raise_error # Encoding::CompatibilityError
|
40
|
+
end
|
41
|
+
# the other cases cannot be tested (for example what happens if the headers contain invalid data)
|
42
|
+
# because the mocking framework triggers the encoding error already
|
43
|
+
end
|
44
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lhc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.8.
|
4
|
+
version: 3.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- local.ch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typhoeus
|
@@ -241,6 +241,7 @@ files:
|
|
241
241
|
- spec/error/find_spec.rb
|
242
242
|
- spec/error/response_spec.rb
|
243
243
|
- spec/error/timeout_spec.rb
|
244
|
+
- spec/error/to_s_spec.rb
|
244
245
|
- spec/formats/json_spec.rb
|
245
246
|
- spec/interceptors/after_request_spec.rb
|
246
247
|
- spec/interceptors/after_response_spec.rb
|
@@ -295,7 +296,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
295
296
|
requirements:
|
296
297
|
- Ruby >= 1.9.2
|
297
298
|
rubyforge_project:
|
298
|
-
rubygems_version: 2.
|
299
|
+
rubygems_version: 2.6.8
|
299
300
|
signing_key:
|
300
301
|
specification_version: 4
|
301
302
|
summary: LocalHttpClient
|
@@ -354,6 +355,7 @@ test_files:
|
|
354
355
|
- spec/error/find_spec.rb
|
355
356
|
- spec/error/response_spec.rb
|
356
357
|
- spec/error/timeout_spec.rb
|
358
|
+
- spec/error/to_s_spec.rb
|
357
359
|
- spec/formats/json_spec.rb
|
358
360
|
- spec/interceptors/after_request_spec.rb
|
359
361
|
- spec/interceptors/after_response_spec.rb
|