tilia-http 4.1.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.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +1 -0
  4. data/.rubocop.yml +35 -0
  5. data/.simplecov +4 -0
  6. data/.travis.yml +3 -0
  7. data/CHANGELOG.sabre.md +235 -0
  8. data/CONTRIBUTING.md +25 -0
  9. data/Gemfile +18 -0
  10. data/Gemfile.lock +69 -0
  11. data/LICENSE +27 -0
  12. data/LICENSE.sabre +27 -0
  13. data/README.md +68 -0
  14. data/Rakefile +17 -0
  15. data/examples/asyncclient.rb +45 -0
  16. data/examples/basicauth.rb +39 -0
  17. data/examples/client.rb +20 -0
  18. data/examples/reverseproxy.rb +39 -0
  19. data/examples/stringify.rb +37 -0
  20. data/lib/tilia/http/auth/abstract_auth.rb +51 -0
  21. data/lib/tilia/http/auth/aws.rb +191 -0
  22. data/lib/tilia/http/auth/basic.rb +43 -0
  23. data/lib/tilia/http/auth/bearer.rb +37 -0
  24. data/lib/tilia/http/auth/digest.rb +187 -0
  25. data/lib/tilia/http/auth.rb +12 -0
  26. data/lib/tilia/http/client.rb +452 -0
  27. data/lib/tilia/http/client_exception.rb +15 -0
  28. data/lib/tilia/http/client_http_exception.rb +37 -0
  29. data/lib/tilia/http/http_exception.rb +21 -0
  30. data/lib/tilia/http/message.rb +241 -0
  31. data/lib/tilia/http/message_decorator_trait.rb +183 -0
  32. data/lib/tilia/http/message_interface.rb +154 -0
  33. data/lib/tilia/http/request.rb +235 -0
  34. data/lib/tilia/http/request_decorator.rb +160 -0
  35. data/lib/tilia/http/request_interface.rb +126 -0
  36. data/lib/tilia/http/response.rb +164 -0
  37. data/lib/tilia/http/response_decorator.rb +58 -0
  38. data/lib/tilia/http/response_interface.rb +36 -0
  39. data/lib/tilia/http/sapi.rb +165 -0
  40. data/lib/tilia/http/url_util.rb +70 -0
  41. data/lib/tilia/http/util.rb +51 -0
  42. data/lib/tilia/http/version.rb +9 -0
  43. data/lib/tilia/http.rb +416 -0
  44. data/test/http/auth/aws_test.rb +189 -0
  45. data/test/http/auth/basic_test.rb +60 -0
  46. data/test/http/auth/bearer_test.rb +47 -0
  47. data/test/http/auth/digest_test.rb +141 -0
  48. data/test/http/client_mock.rb +101 -0
  49. data/test/http/client_test.rb +331 -0
  50. data/test/http/message_decorator_test.rb +67 -0
  51. data/test/http/message_test.rb +163 -0
  52. data/test/http/request_decorator_test.rb +87 -0
  53. data/test/http/request_test.rb +132 -0
  54. data/test/http/response_decorator_test.rb +28 -0
  55. data/test/http/response_test.rb +38 -0
  56. data/test/http/sapi_mock.rb +12 -0
  57. data/test/http/sapi_test.rb +133 -0
  58. data/test/http/url_util_test.rb +155 -0
  59. data/test/http/util_test.rb +186 -0
  60. data/test/http_test.rb +102 -0
  61. data/test/test_helper.rb +6 -0
  62. data/tilia-http.gemspec +18 -0
  63. metadata +192 -0
@@ -0,0 +1,155 @@
1
+ require 'test_helper'
2
+
3
+ module Tilia
4
+ module Http
5
+ class URLUtilTest < Minitest::Test
6
+ def resolve_data
7
+ [
8
+ [
9
+ 'http://example.org/foo/baz',
10
+ '/bar',
11
+ 'http://example.org/bar'
12
+ ],
13
+ [
14
+ 'https://example.org/foo',
15
+ '//example.net/',
16
+ 'https://example.net/'
17
+ ],
18
+ [
19
+ 'https://example.org/foo',
20
+ '?a=b',
21
+ 'https://example.org/foo?a=b'
22
+ ],
23
+ [
24
+ '//example.org/foo',
25
+ '?a=b',
26
+ '//example.org/foo?a=b'
27
+ ],
28
+ # Ports and fragments
29
+ [
30
+ 'https://example.org:81/foo#hey',
31
+ '?a=b#c=d',
32
+ 'https://example.org:81/foo?a=b#c=d'
33
+ ],
34
+ # Relative.. in-directory paths
35
+ [
36
+ 'http://example.org/foo/bar',
37
+ 'bar2',
38
+ 'http://example.org/foo/bar2'
39
+ ],
40
+ # Now the base path ended with a slash
41
+ [
42
+ 'http://example.org/foo/bar/',
43
+ 'bar2/bar3',
44
+ 'http://example.org/foo/bar/bar2/bar3'
45
+ ]
46
+ ]
47
+ end
48
+
49
+ def test_encode_path
50
+ str = ''
51
+ (0...128).each do |i|
52
+ str << i.chr
53
+ end
54
+
55
+ new_str = UrlUtil.encode_path(str)
56
+
57
+ assert_equal(
58
+ '%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f' \
59
+ '%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f' \
60
+ '%20%21%22%23%24%25%26%27()%2a%2b%2c-./' \
61
+ '0123456789:%3b%3c%3d%3e%3f' \
62
+ '@ABCDEFGHIJKLMNO' \
63
+ 'PQRSTUVWXYZ%5b%5c%5d%5e_' \
64
+ '%60abcdefghijklmno' \
65
+ 'pqrstuvwxyz%7b%7c%7d~%7f',
66
+ new_str
67
+ )
68
+
69
+ assert_equal(str, UrlUtil.decode_path(new_str))
70
+ end
71
+
72
+ def test_encode_path_segment
73
+ str = ''
74
+ (0...128).each do |i|
75
+ str << i.chr
76
+ end
77
+
78
+ new_str = UrlUtil.encode_path_segment(str)
79
+
80
+ assert_equal(
81
+ '%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f' \
82
+ '%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f' \
83
+ '%20%21%22%23%24%25%26%27()%2a%2b%2c-.%2f' \
84
+ '0123456789:%3b%3c%3d%3e%3f' \
85
+ '@ABCDEFGHIJKLMNO' \
86
+ 'PQRSTUVWXYZ%5b%5c%5d%5e_' \
87
+ '%60abcdefghijklmno' \
88
+ 'pqrstuvwxyz%7b%7c%7d~%7f',
89
+ new_str
90
+ )
91
+
92
+ assert_equal(str, UrlUtil.decode_path_segment(new_str))
93
+ end
94
+
95
+ def test_decode
96
+ str = 'Hello%20Test+Test2.txt'
97
+ new_str = UrlUtil.decode_path(str)
98
+ assert_equal('Hello Test+Test2.txt', new_str)
99
+ end
100
+
101
+ def test_decode_umlaut
102
+ str = 'Hello%C3%BC.txt'
103
+ new_str = UrlUtil.decode_path(str)
104
+ assert_equal("Hello\xC3\xBC.txt", new_str)
105
+ end
106
+
107
+ def test_decode_umlaut_latin1
108
+ str = 'Hello%FC.txt'
109
+ new_str = UrlUtil.decode_path(str)
110
+ assert_equal("Hello\xC3\xBC.txt", new_str)
111
+ end
112
+
113
+ def test_decode_accents_windows7
114
+ str = '/webdav/%C3%A0fo%C3%B3'
115
+ new_str = UrlUtil.decode_path(str)
116
+ assert_equal(str.downcase, UrlUtil.encode_path(new_str))
117
+ end
118
+
119
+ def test_split_path
120
+ strings = {
121
+ # input // expected result
122
+ '/foo/bar' => ['/foo', 'bar'],
123
+ '/foo/bar/' => ['/foo', 'bar'],
124
+ 'foo/bar/' => ['foo', 'bar'],
125
+ 'foo/bar' => ['foo', 'bar'],
126
+ 'foo/bar/baz' => ['foo/bar', 'baz'],
127
+ 'foo/bar/baz/' => ['foo/bar', 'baz'],
128
+ 'foo' => ['', 'foo'],
129
+ 'foo/' => ['', 'foo'],
130
+ '/foo/' => ['', 'foo'],
131
+ '/foo' => ['', 'foo'],
132
+ '' => [nil, nil],
133
+
134
+ # UTF-8
135
+ "/\xC3\xA0fo\xC3\xB3/bar" => ["/\xC3\xA0fo\xC3\xB3", 'bar'],
136
+ "/\xC3\xA0foo/b\xC3\xBCr/" => ["/\xC3\xA0foo", "b\xC3\xBCr"],
137
+ "foo/\xC3\xA0\xC3\xBCr" => ['foo', "\xC3\xA0\xC3\xBCr"]
138
+ }
139
+
140
+ strings.each do |input, expected|
141
+ output = UrlUtil.split_path(input)
142
+ assert_equal(expected, output)
143
+ end
144
+ end
145
+
146
+ def test_resolve
147
+ resolve_data.each do |data|
148
+ (base, update, expected) = data
149
+
150
+ assert_equal(expected, UrlUtil.resolve(base, update))
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,186 @@
1
+ require 'test_helper'
2
+
3
+ module Tilia
4
+ module Http
5
+ class UtilTest < Minitest::Test
6
+ def negotiate_data
7
+ [
8
+ [ # simple
9
+ 'application/xml',
10
+ ['application/xml'],
11
+ 'application/xml'
12
+ ],
13
+ [ # no header
14
+ nil,
15
+ ['application/xml'],
16
+ 'application/xml'
17
+ ],
18
+ [ # 2 options
19
+ 'application/json',
20
+ ['application/xml', 'application/json'],
21
+ 'application/json'
22
+ ],
23
+ [ # 2 choices
24
+ 'application/json, application/xml',
25
+ ['application/xml'],
26
+ 'application/xml'
27
+ ],
28
+ [ # quality
29
+ 'application/xml;q=0.2, application/json',
30
+ ['application/xml', 'application/json'],
31
+ 'application/json'
32
+ ],
33
+ [ # wildcard
34
+ 'image/jpeg, image/png, */*',
35
+ ['application/xml', 'application/json'],
36
+ 'application/xml'
37
+ ],
38
+ [ # wildcard + quality
39
+ 'image/jpeg, image/png; q=0.5, */*',
40
+ ['application/xml', 'application/json', 'image/png'],
41
+ 'application/xml'
42
+ ],
43
+ [ # no match
44
+ 'image/jpeg',
45
+ ['application/xml'],
46
+ nil
47
+ ],
48
+ [ # This is used in sabre/dav
49
+ 'text/vcard; version=4.0',
50
+ [
51
+ # Most often used mime-type. Version 3
52
+ 'text/x-vcard',
53
+ # The correct standard mime-type. Defaults to version 3 as
54
+ # well.
55
+ 'text/vcard',
56
+ # vCard 4
57
+ 'text/vcard; version=4.0',
58
+ # vCard 3
59
+ 'text/vcard; version=3.0',
60
+ # jCard
61
+ 'application/vcard+json'
62
+ ],
63
+ 'text/vcard; version=4.0'
64
+
65
+ ],
66
+ [ # rfc7231 example 1
67
+ 'audio/*; q=0.2, audio/basic',
68
+ [
69
+ 'audio/pcm',
70
+ 'audio/basic'
71
+ ],
72
+ 'audio/basic'
73
+ ],
74
+ [ # Lower quality after
75
+ 'audio/pcm; q=0.2, audio/basic; q=0.1',
76
+ [
77
+ 'audio/pcm',
78
+ 'audio/basic'
79
+ ],
80
+ 'audio/pcm'
81
+ ],
82
+ [ # Random parameter, should be ignored
83
+ 'audio/pcm; hello; q=0.2, audio/basic; q=0.1',
84
+ [
85
+ 'audio/pcm',
86
+ 'audio/basic'
87
+ ],
88
+ 'audio/pcm'
89
+ ],
90
+ [ # No whitepace after type, should pick the one that is the most specific.
91
+ 'text/vcard;version=3.0, text/vcard',
92
+ [
93
+ 'text/vcard',
94
+ 'text/vcard; version=3.0'
95
+ ],
96
+ 'text/vcard; version=3.0'
97
+ ],
98
+ [ # Same as last one, but order is different
99
+ 'text/vcard, text/vcard;version=3.0',
100
+ [
101
+ 'text/vcard; version=3.0',
102
+ 'text/vcard'
103
+ ],
104
+ 'text/vcard; version=3.0'
105
+ ],
106
+ [ # Charset should be ignored here.
107
+ 'text/vcard; charset=utf-8; version=3.0, text/vcard',
108
+ [
109
+ 'text/vcard',
110
+ 'text/vcard; version=3.0'
111
+ ],
112
+ 'text/vcard; version=3.0'
113
+ ],
114
+ [ # Undefined offset issue.
115
+ 'text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2',
116
+ ['application/xml', 'application/json', 'image/png'],
117
+ 'application/xml'
118
+ ]
119
+ ]
120
+ end
121
+
122
+ def test_parse_http_date
123
+ times = [
124
+ 'Wed, 13 Oct 2010 10:26:00 GMT',
125
+ 'Wednesday, 13-Oct-10 10:26:00 GMT',
126
+ 'Wed Oct 13 10:26:00 2010'
127
+ ]
128
+
129
+ expected = 1_286_965_560
130
+
131
+ times.each do |time|
132
+ result = Util.parse_http_date(time)
133
+ assert_equal(expected, result.to_i)
134
+ end
135
+
136
+ result = Util.parse_http_date('Wed Oct 6 10:26:00 2010')
137
+ assert_equal(1_286_360_760, result.to_i)
138
+ end
139
+
140
+ def test_parse_http_date_fail
141
+ times = [
142
+ # random string
143
+ 'NOW',
144
+ # not-GMT timezone
145
+ 'Wednesday, 13-Oct-10 10:26:00 UTC',
146
+ # No space before the 6
147
+ 'Wed Oct 6 10:26:00 2010',
148
+ # Invalid day
149
+ 'Wed Oct 0 10:26:00 2010',
150
+ 'Wed Oct 32 10:26:00 2010',
151
+ 'Wed, 0 Oct 2010 10:26:00 GMT',
152
+ 'Wed, 32 Oct 2010 10:26:00 GMT',
153
+ 'Wednesday, 32-Oct-10 10:26:00 GMT',
154
+ # Invalid hour
155
+ 'Wed, 13 Oct 2010 24:26:00 GMT',
156
+ 'Wednesday, 13-Oct-10 24:26:00 GMT',
157
+ 'Wed Oct 13 24:26:00 2010'
158
+ ]
159
+
160
+ times.each do |time|
161
+ refute(Util.parse_http_date(time))
162
+ end
163
+ end
164
+
165
+ def test_timezones
166
+ Time.use_zone('Amsterdam') do
167
+ test_parse_http_date
168
+ end
169
+ end
170
+
171
+ def test_to_http_date
172
+ dt = Time.zone.parse('2011-12-10 12:00:00 +0200')
173
+
174
+ assert_equal('Sat, 10 Dec 2011 10:00:00 GMT', Util.to_http_date(dt))
175
+ end
176
+
177
+ def test_negotiate
178
+ negotiate_data.each do |data|
179
+ (accept_header, available, expected) = data
180
+
181
+ assert_equal(expected, Util.negotiate(accept_header, available))
182
+ end
183
+ end
184
+ end
185
+ end
186
+ end
data/test/http_test.rb ADDED
@@ -0,0 +1,102 @@
1
+ require 'test_helper'
2
+
3
+ module Tilia
4
+ module Http
5
+ class FunctionsTest < Minitest::Test
6
+ def header_values_data
7
+ [
8
+ [
9
+ 'a',
10
+ ['a']
11
+ ],
12
+ [
13
+ 'a,b',
14
+ ['a', 'b']
15
+ ],
16
+ [
17
+ 'a, b',
18
+ ['a', 'b']
19
+ ],
20
+ [
21
+ ['a, b'],
22
+ ['a', 'b']
23
+ ],
24
+ [
25
+ ['a, b', 'c', 'd,e'],
26
+ ['a', 'b', 'c', 'd', 'e']
27
+ ]
28
+ ]
29
+ end
30
+
31
+ def prefer_data
32
+ [
33
+ [
34
+ 'foo; bar',
35
+ { 'foo' => true }
36
+ ],
37
+ [
38
+ 'foo; bar=""',
39
+ { 'foo' => true }
40
+ ],
41
+ [
42
+ 'foo=""; bar',
43
+ { 'foo' => true }
44
+ ],
45
+ [
46
+ 'FOO',
47
+ { 'foo' => true }
48
+ ],
49
+ [
50
+ 'respond-async',
51
+ { 'respond-async' => true }
52
+ ],
53
+ [
54
+ ['respond-async, wait=100', 'handling=lenient'],
55
+ { 'respond-async' => true, 'wait' => '100', 'handling' => 'lenient' }
56
+ ],
57
+ [
58
+ ['respond-async, wait=100, handling=lenient'],
59
+ { 'respond-async' => true, 'wait' => '100', 'handling' => 'lenient' }
60
+ ],
61
+ # Old values
62
+ [
63
+ 'return-asynch, return-representation',
64
+ { 'respond-async' => true, 'return' => 'representation' }
65
+ ],
66
+ [
67
+ 'return-minimal',
68
+ { 'return' => 'minimal' }
69
+ ],
70
+ [
71
+
72
+ 'strict',
73
+ { 'handling' => 'strict' }
74
+ ],
75
+ [
76
+ 'lenient',
77
+ { 'handling' => 'lenient' }
78
+ ],
79
+ # Invalid token
80
+ [
81
+ ['foo=%bar%'],
82
+ {}
83
+ ]
84
+ ]
85
+ end
86
+
87
+ def test_get_header_values
88
+ header_values_data.each do |data|
89
+ (input, output) = data
90
+ assert_equal(output, Http.header_values(input))
91
+ end
92
+ end
93
+
94
+ def test_prefer
95
+ prefer_data.each do |data|
96
+ (input, output) = data
97
+ assert_equal(output, Http.parse_prefer(input))
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,6 @@
1
+ require 'simplecov'
2
+ require 'minitest/autorun'
3
+
4
+ require 'tilia/http'
5
+
6
+ Time.zone = 'UTC'
@@ -0,0 +1,18 @@
1
+ require File.join(File.dirname(__FILE__), 'lib', 'tilia', 'http', 'version')
2
+ Gem::Specification.new do |s|
3
+ s.name = 'tilia-http'
4
+ s.version = Tilia::Http::Version::VERSION
5
+ s.licenses = ['BSD-3-Clause']
6
+ s.summary = 'Port of the sabre-http library to ruby'
7
+ s.description = "Port of the sabre-http library to ruby.\n\nThe tilia_http library provides utilities for dealing with http requests and responses."
8
+ s.author = 'Jakob Sack'
9
+ s.email = 'tilia@jakobsack.de'
10
+ s.files = `git ls-files`.split("\n")
11
+ s.homepage = 'https://github.com/tilia/tilia-http'
12
+ s.add_runtime_dependency 'activesupport', '~> 4.2'
13
+ s.add_runtime_dependency 'typhoeus', '~> 0.8'
14
+ s.add_runtime_dependency 'rchardet', '~>1.6'
15
+ s.add_runtime_dependency 'tilia-event', '~> 2.0'
16
+ s.add_runtime_dependency 'tilia-uri', '~> 1.0'
17
+ s.add_runtime_dependency 'rack', '~> 1.6'
18
+ end
metadata ADDED
@@ -0,0 +1,192 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tilia-http
3
+ version: !ruby/object:Gem::Version
4
+ version: 4.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jakob Sack
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: typhoeus
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.8'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rchardet
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.6'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: tilia-event
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: tilia-uri
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rack
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.6'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.6'
97
+ description: |-
98
+ Port of the sabre-http library to ruby.
99
+
100
+ The tilia_http library provides utilities for dealing with http requests and responses.
101
+ email: tilia@jakobsack.de
102
+ executables: []
103
+ extensions: []
104
+ extra_rdoc_files: []
105
+ files:
106
+ - ".gitignore"
107
+ - ".rspec"
108
+ - ".rubocop.yml"
109
+ - ".simplecov"
110
+ - ".travis.yml"
111
+ - CHANGELOG.sabre.md
112
+ - CONTRIBUTING.md
113
+ - Gemfile
114
+ - Gemfile.lock
115
+ - LICENSE
116
+ - LICENSE.sabre
117
+ - README.md
118
+ - Rakefile
119
+ - examples/asyncclient.rb
120
+ - examples/basicauth.rb
121
+ - examples/client.rb
122
+ - examples/reverseproxy.rb
123
+ - examples/stringify.rb
124
+ - lib/tilia/http.rb
125
+ - lib/tilia/http/auth.rb
126
+ - lib/tilia/http/auth/abstract_auth.rb
127
+ - lib/tilia/http/auth/aws.rb
128
+ - lib/tilia/http/auth/basic.rb
129
+ - lib/tilia/http/auth/bearer.rb
130
+ - lib/tilia/http/auth/digest.rb
131
+ - lib/tilia/http/client.rb
132
+ - lib/tilia/http/client_exception.rb
133
+ - lib/tilia/http/client_http_exception.rb
134
+ - lib/tilia/http/http_exception.rb
135
+ - lib/tilia/http/message.rb
136
+ - lib/tilia/http/message_decorator_trait.rb
137
+ - lib/tilia/http/message_interface.rb
138
+ - lib/tilia/http/request.rb
139
+ - lib/tilia/http/request_decorator.rb
140
+ - lib/tilia/http/request_interface.rb
141
+ - lib/tilia/http/response.rb
142
+ - lib/tilia/http/response_decorator.rb
143
+ - lib/tilia/http/response_interface.rb
144
+ - lib/tilia/http/sapi.rb
145
+ - lib/tilia/http/url_util.rb
146
+ - lib/tilia/http/util.rb
147
+ - lib/tilia/http/version.rb
148
+ - test/http/auth/aws_test.rb
149
+ - test/http/auth/basic_test.rb
150
+ - test/http/auth/bearer_test.rb
151
+ - test/http/auth/digest_test.rb
152
+ - test/http/client_mock.rb
153
+ - test/http/client_test.rb
154
+ - test/http/message_decorator_test.rb
155
+ - test/http/message_test.rb
156
+ - test/http/request_decorator_test.rb
157
+ - test/http/request_test.rb
158
+ - test/http/response_decorator_test.rb
159
+ - test/http/response_test.rb
160
+ - test/http/sapi_mock.rb
161
+ - test/http/sapi_test.rb
162
+ - test/http/url_util_test.rb
163
+ - test/http/util_test.rb
164
+ - test/http_test.rb
165
+ - test/test_helper.rb
166
+ - tilia-http.gemspec
167
+ homepage: https://github.com/tilia/tilia-http
168
+ licenses:
169
+ - BSD-3-Clause
170
+ metadata: {}
171
+ post_install_message:
172
+ rdoc_options: []
173
+ require_paths:
174
+ - lib
175
+ required_ruby_version: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ required_rubygems_version: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: '0'
185
+ requirements: []
186
+ rubyforge_project:
187
+ rubygems_version: 2.2.5
188
+ signing_key:
189
+ specification_version: 4
190
+ summary: Port of the sabre-http library to ruby
191
+ test_files: []
192
+ has_rdoc: