tilia-http 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: