ur 0.2.0 → 0.2.2

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.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ur
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-06 00:00:00.000000000 Z
11
+ date: 2023-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jsi
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.4'
19
+ version: '0.6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.4'
26
+ version: '0.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: addressable
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,148 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.0'
41
- - !ruby/object:Gem::Dependency
42
- name: rack
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rack-test
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: faraday
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: faraday_middleware
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: activesupport
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: rake
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: minitest
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: minitest-reporters
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: simplecov
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
41
  description: ur provides a unified representation of a request and response. it can
168
42
  be interpreted from rack, faraday, or potentially other sources, and provides a
169
43
  consistent interface to access the attributes inherent to the request and additional
170
44
  useful parsers and computation from the request.
171
45
  email:
172
- - ethan@unth
46
+ - ethan.ur@unth.net
173
47
  executables: []
174
48
  extensions: []
175
49
  extra_rdoc_files: []
176
50
  files:
177
- - ".simplecov"
178
51
  - ".yardopts"
179
52
  - CHANGELOG.md
180
53
  - LICENSE.md
181
54
  - README.md
182
- - Rakefile.rb
183
55
  - lib/ur.rb
184
56
  - lib/ur/content_type.rb
185
57
  - lib/ur/faraday.rb
@@ -191,20 +63,14 @@ files:
191
63
  - lib/ur/response.rb
192
64
  - lib/ur/sub_ur.rb
193
65
  - lib/ur/version.rb
194
- - resources/icons/LGPL-3.0.png
66
+ - lib/ur/weblink.rb
195
67
  - resources/ur.schema.yml
196
- - test/content_type_test.rb
197
- - test/test_helper.rb
198
- - test/ur_faraday_test.rb
199
- - test/ur_metadata_test.rb
200
- - test/ur_rack_test.rb
201
- - test/ur_test.rb
202
68
  - ur.gemspec
203
69
  homepage: https://github.com/notEthan/ur
204
70
  licenses:
205
71
  - LGPL-3.0
206
72
  metadata: {}
207
- post_install_message:
73
+ post_install_message:
208
74
  rdoc_options: []
209
75
  require_paths:
210
76
  - lib
@@ -219,15 +85,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
219
85
  - !ruby/object:Gem::Version
220
86
  version: '0'
221
87
  requirements: []
222
- rubygems_version: 3.0.6
223
- signing_key:
88
+ rubygems_version: 3.1.6
89
+ signing_key:
224
90
  specification_version: 4
225
91
  summary: 'ur: unified request representation'
226
- test_files:
227
- - test/content_type_test.rb
228
- - test/test_helper.rb
229
- - test/ur_faraday_test.rb
230
- - test/ur_metadata_test.rb
231
- - test/ur_rack_test.rb
232
- - test/ur_test.rb
233
- - ".simplecov"
92
+ test_files: []
data/.simplecov DELETED
@@ -1 +0,0 @@
1
- SimpleCov.start
data/Rakefile.rb DELETED
@@ -1,9 +0,0 @@
1
- require "rake/testtask"
2
-
3
- Rake::TestTask.new(:test) do |t|
4
- t.libs << "test"
5
- t.libs << "lib"
6
- t.test_files = FileList["test/**/*_test.rb"]
7
- end
8
-
9
- task :default => :test
Binary file
@@ -1,342 +0,0 @@
1
- require_relative 'test_helper'
2
-
3
- describe 'Ur::ContentType' do
4
- let(:content_type) { Ur::ContentType.new(content_type_str) }
5
- describe 'application/vnd.github+json; charset="utf-8"' do
6
- let(:content_type_str) { 'application/vnd.github+json; charset="utf-8"' }
7
- it 'parses' do
8
- assert_equal(content_type, content_type_str)
9
-
10
- assert_equal('application/vnd.github+json', content_type.media_type)
11
-
12
- assert_equal('application', content_type.type)
13
- assert(content_type.type?('Application'))
14
- assert(content_type.type_application?)
15
-
16
- assert_equal('vnd.github+json', content_type.subtype)
17
- assert_equal('vnd', content_type.facet)
18
- assert_equal('json', content_type.suffix)
19
-
20
- assert_equal({'charset' => 'utf-8'}, content_type.parameters)
21
- assert_equal('utf-8', content_type.parameters['CharSet'])
22
- end
23
- end
24
- describe 'no subtype' do
25
- let(:content_type_str) { 'application; charset="utf-8"' }
26
- it 'will allow it' do
27
- assert_equal(content_type, content_type_str)
28
-
29
- assert_equal('application', content_type.media_type)
30
-
31
- assert_equal('application', content_type.type)
32
- assert(content_type.type?('Application'))
33
-
34
- assert_equal(nil, content_type.subtype)
35
- assert_equal(nil, content_type.facet)
36
- assert_equal(nil, content_type.suffix)
37
-
38
- assert_equal({'charset' => 'utf-8'}, content_type.parameters)
39
- assert_equal('utf-8', content_type.parameters['CharSet'])
40
- end
41
- end
42
- describe 'no facet' do
43
- let(:content_type_str) { 'application/github+json; charset="utf-8"' }
44
- it 'parses' do
45
- assert_equal(content_type, content_type_str)
46
-
47
- assert_equal('application/github+json', content_type.media_type)
48
-
49
- assert_equal('application', content_type.type)
50
- assert(content_type.type?('Application'))
51
-
52
- assert_equal('github+json', content_type.subtype)
53
- assert_equal(nil, content_type.facet)
54
- assert_equal('json', content_type.suffix)
55
-
56
- assert_equal({'charset' => 'utf-8'}, content_type.parameters)
57
- assert_equal('utf-8', content_type.parameters['CharSet'])
58
- end
59
- end
60
- describe 'no suffix' do
61
- let(:content_type_str) { 'application/vnd.github.json; charset="utf-8"' }
62
- it 'parses' do
63
- assert_equal(content_type, content_type_str)
64
-
65
- assert_equal('application/vnd.github.json', content_type.media_type)
66
-
67
- assert_equal('application', content_type.type)
68
- assert(content_type.type?('Application'))
69
-
70
- assert_equal('vnd.github.json', content_type.subtype)
71
- assert_equal('vnd', content_type.facet)
72
- assert_equal(nil, content_type.suffix)
73
-
74
- assert_equal({'charset' => 'utf-8'}, content_type.parameters)
75
- assert_equal('utf-8', content_type.parameters['CharSet'])
76
- end
77
- describe('[invalid] quote in type') do
78
- let(:content_type_str) { 'applic"ation/foo; foo=bar' }
79
- it('gives up') do
80
- assert_equal('applic', content_type.type)
81
- assert_equal(nil, content_type.subtype)
82
- end
83
- end
84
- describe('[invalid] backslash in type') do
85
- let(:content_type_str) { 'applicati\on/foo; foo=bar' }
86
- it('parses') do
87
- assert_equal('applicati\\on', content_type.type)
88
- assert_equal('foo', content_type.subtype)
89
- end
90
- end
91
- describe('[invalid] quote in subtype') do
92
- let(:content_type_str) { 'application/f"oo; foo=bar' }
93
- it('gives up') do
94
- assert_equal('application', content_type.type)
95
- assert_equal('f', content_type.subtype)
96
- end
97
- end
98
- describe('[invalid] backslash in subtype') do
99
- let(:content_type_str) { 'application/fo\\o; foo=bar' }
100
- it('parses') do
101
- assert_equal('application', content_type.type)
102
- assert_equal('fo\\o', content_type.subtype)
103
- end
104
- end
105
- end
106
- describe 'parameters' do
107
- describe 'basic usage' do
108
- let(:content_type_str) { 'application/foo; charset="utf-8"; foo=bar' }
109
- it('parses') do
110
- assert_equal({'charset' => 'utf-8', 'foo' => 'bar'}, content_type.parameters)
111
- end
112
- end
113
- describe 'params with capitalization' do
114
- let(:content_type_str) { 'application/foo; Charset="utf-8"; FOO=bar' }
115
- it('parses') do
116
- assert_equal({'charset' => 'utf-8', 'foo' => 'bar'}, content_type.parameters)
117
- assert_equal('utf-8', content_type.parameters['CharSet'])
118
- assert_equal('utf-8', content_type.parameters['Charset'])
119
- assert_equal('bar', content_type.parameters['foo'])
120
- assert_equal('bar', content_type.parameters['FOO'])
121
- end
122
- end
123
- describe 'repeated params' do
124
- let(:content_type_str) { 'application/foo; foo="first"; foo=second' }
125
- it('will just overwrite') do
126
- assert_equal({'foo' => 'second'}, content_type.parameters)
127
- end
128
- end
129
- describe 'repeated params, different capitalization' do
130
- let(:content_type_str) { 'application/foo; FOO=first; Foo=second' }
131
- it('will just overwrite') do
132
- assert_equal({'foo' => 'second'}, content_type.parameters)
133
- end
134
- end
135
- describe 'empty strings' do
136
- let(:content_type_str) { 'application/foo; empty1=; empty2=""' }
137
- it('parses') do
138
- assert_equal({'empty1' => '', 'empty2' => ''}, content_type.parameters)
139
- end
140
- end
141
- describe 'empty strings with whitespace' do
142
- let(:content_type_str) { 'application/foo; empty1= ; empty2="" ' }
143
- it('parses') do
144
- assert_equal({'empty1' => '', 'empty2' => ''}, content_type.parameters)
145
- end
146
- end
147
- describe('[invalid] opening quote only') do
148
- let(:content_type_str) { 'application/foo; foo=1; bar="' }
149
- it('parses') do
150
- assert_equal({'foo' => '1', 'bar' => ''}, content_type.parameters)
151
- end
152
- end
153
- describe('[invalid] backlash with no character') do
154
- let(:content_type_str) { 'application/foo; foo=1; bar="\\' }
155
- it('parses') do
156
- assert_equal({'foo' => '1', 'bar' => ''}, content_type.parameters)
157
- end
158
- end
159
- describe('[invalid] extra following quoted string') do
160
- let(:content_type_str) { 'application/foo; foo="1" 2; bar=3' }
161
- it('sorta parses') do
162
- assert_equal({'foo' => '1 2', 'bar' => '3'}, content_type.parameters)
163
- end
164
- end
165
- describe('[invalid] quotes silliness') do
166
- let(:content_type_str) { 'application/foo; foo="1" 2 "3 4" "5 " ; bar=3' }
167
- it('sorta parses') do
168
- assert_equal({'foo' => '1 2 3 4 5 ', 'bar' => '3'}, content_type.parameters)
169
- end
170
- end
171
- describe('[invalid] backlash quote') do
172
- let(:content_type_str) { 'application/foo; foo=1; bar="\\"' }
173
- it('parses') do
174
- assert_equal({'foo' => '1', 'bar' => '"'}, content_type.parameters)
175
- end
176
- end
177
- describe('[invalid] trailing ;') do
178
- let(:content_type_str) { 'application/foo; foo=bar;' }
179
- it('parses') do
180
- assert_equal({'foo' => 'bar'}, content_type.parameters)
181
- end
182
- end
183
- describe('[invalid] extra ; inline') do
184
- let(:content_type_str) { 'application/foo; ; ; foo=bar' }
185
- it('parses') do
186
- assert_equal({'foo' => 'bar'}, content_type.parameters)
187
- end
188
- end
189
- describe('[invalid] whitespace around the =') do
190
- let(:content_type_str) { 'application/foo; foo = bar; baz = qux' }
191
- it('parses') do
192
- assert_equal({'foo ' => ' bar', 'baz ' => ' qux'}, content_type.parameters)
193
- end
194
- end
195
- describe('whitespace before the ;') do
196
- let(:content_type_str) { 'application/foo; foo=bar ; baz=qux' }
197
- it('parses') do
198
- assert_equal({'foo' => 'bar', 'baz' => 'qux'}, content_type.parameters)
199
- end
200
- end
201
- describe('no media_type') do
202
- let(:content_type_str) { '; foo=bar' }
203
- it('parses') do
204
- assert_equal({'foo' => 'bar'}, content_type.parameters)
205
- end
206
- end
207
- describe('[invalid] quote in parameter name') do
208
- let(:content_type_str) { 'application/foo; fo"o=bar' }
209
- it('gives up') do
210
- assert_equal({}, content_type.parameters)
211
- end
212
- end
213
- describe('[invalid] backslash in parameter name') do
214
- let(:content_type_str) { 'application/foo; fo\\o=bar' }
215
- it('parses') do
216
- assert_equal({'fo\\o' => 'bar'}, content_type.parameters)
217
- end
218
- end
219
- end
220
- describe 'binary?' do
221
- binary_content_type_strs = [
222
- 'audio/ogg',
223
- 'Audio/OGG; foo=bar',
224
- 'VIDEO/foo+bar',
225
- ]
226
- binary_content_type_strs.each do |binary_content_type_str|
227
- describe(binary_content_type_str) do
228
- let(:content_type_str) { binary_content_type_str }
229
- it 'is binary' do
230
- assert(content_type.binary?(unknown: false))
231
- end
232
- end
233
- end
234
- not_binary_content_type_strs = [
235
- 'text/anything',
236
- 'TEXT/plain; charset=foo',
237
- 'application/JSON',
238
- 'media/foo+Json; foo="bar"',
239
- ]
240
- not_binary_content_type_strs.each do |not_binary_content_type_str|
241
- describe(not_binary_content_type_str) do
242
- let(:content_type_str) { not_binary_content_type_str }
243
- it 'is not binary' do
244
- assert(!content_type.binary?(unknown: true))
245
- end
246
- end
247
- end
248
- unknown_content_type_strs = [
249
- 'foo',
250
- 'foo/bar; note="not application/json"',
251
- 'application/jsonisnotthis',
252
- 'application/octet-stream',
253
- ]
254
- unknown_content_type_strs.each do |unknown_content_type_str|
255
- describe(unknown_content_type_str) do
256
- let(:content_type_str) { unknown_content_type_str }
257
- it 'is unknown' do
258
- assert(content_type.binary?(unknown: true))
259
- assert(!content_type.binary?(unknown: false))
260
- end
261
- end
262
- end
263
- end
264
- describe 'json?' do
265
- json_content_type_strs = [
266
- 'application/json',
267
- 'Application/Json; charset=EBCDIC',
268
- 'Text/json',
269
- 'MEDIA/JSON',
270
- 'media/foo.bar+json',
271
- 'media/foo.bar+json; foo=',
272
- ]
273
- json_content_type_strs.each do |json_content_type_str|
274
- describe(json_content_type_str) do
275
- let(:content_type_str) { json_content_type_str }
276
- it 'is json' do
277
- assert(content_type.json?)
278
- end
279
- end
280
- end
281
- not_json_content_type_strs = [
282
- 'json',
283
- 'foo/bar; note="not application/json"',
284
- 'application/jsonisnotthis',
285
- 'text/json+xml', # I don't even know what I'm trying for here
286
- ]
287
- not_json_content_type_strs.each do |not_json_content_type_str|
288
- describe(not_json_content_type_str) do
289
- let(:content_type_str) { not_json_content_type_str }
290
- it 'is not json' do
291
- assert(!content_type.json?)
292
- end
293
- end
294
- end
295
- end
296
- describe 'xml?' do
297
- xml_content_type_strs = [
298
- 'application/xml',
299
- 'Application/Xml; charset=EBCDIC',
300
- 'Text/xml',
301
- 'MEDIA/XML',
302
- 'media/foo.bar+xml',
303
- 'media/foo.bar+xml; foo=',
304
- ]
305
- xml_content_type_strs.each do |xml_content_type_str|
306
- describe(xml_content_type_str) do
307
- let(:content_type_str) { xml_content_type_str }
308
- it 'is xml' do
309
- assert(content_type.xml?)
310
- end
311
- end
312
- end
313
- not_xml_content_type_strs = [
314
- 'xml',
315
- 'foo/bar; note="not application/xml"',
316
- 'application/xmlisnotthis',
317
- 'text/xml+json', # I don't even know what I'm trying for here
318
- ]
319
- not_xml_content_type_strs.each do |not_xml_content_type_str|
320
- describe(not_xml_content_type_str) do
321
- let(:content_type_str) { not_xml_content_type_str }
322
- it 'is not xml' do
323
- assert(!content_type.xml?)
324
- end
325
- end
326
- end
327
- end
328
- describe 'form_urlencoded?' do
329
- describe('application/x-www-form-urlencoded') do
330
- let(:content_type_str) { 'application/x-www-form-urlencoded' }
331
- it 'is form_urlencoded' do
332
- assert(content_type.form_urlencoded?)
333
- end
334
- end
335
- describe('application/foo') do
336
- let(:content_type_str) { 'application/foo' }
337
- it 'is not form_urlencoded' do
338
- assert(!content_type.form_urlencoded?)
339
- end
340
- end
341
- end
342
- end
data/test/test_helper.rb DELETED
@@ -1,33 +0,0 @@
1
- proc { |p| $:.unshift(p) unless $:.any? { |lp| File.expand_path(lp) == p } }.call(File.expand_path('../lib', File.dirname(__FILE__)))
2
-
3
- require 'simplecov'
4
- require 'byebug'
5
-
6
- # NO EXPECTATIONS
7
- ENV["MT_NO_EXPECTATIONS"] = ''
8
-
9
- require 'minitest/autorun'
10
- require 'minitest/reporters'
11
- Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
12
-
13
- class UrSpec < Minitest::Spec
14
- if ENV['UR_TEST_ALPHA']
15
- # :nocov:
16
- define_singleton_method(:test_order) { :alpha }
17
- # :nocov:
18
- end
19
-
20
- def assert_json_equal(exp, act, *a)
21
- assert_equal(JSI::Typelike.as_json(exp), JSI::Typelike.as_json(act), *a)
22
- end
23
-
24
- def assert_equal exp, act, msg = nil
25
- msg = message(msg, E) { diff exp, act }
26
- assert exp == act, msg
27
- end
28
- end
29
-
30
- # register this to be the base class for specs instead of Minitest::Spec
31
- Minitest::Spec.register_spec_type(//, UrSpec)
32
-
33
- require 'ur'
@@ -1,79 +0,0 @@
1
- require_relative 'test_helper'
2
- require 'faraday'
3
- require 'faraday_middleware'
4
-
5
- describe 'Ur faraday integration' do
6
- it 'integrates, basic usage' do
7
- ur = nil
8
- faraday_conn = ::Faraday.new('https://ur.unth.net/') do |builder|
9
- builder.use(Ur::FaradayMiddleware,
10
- after_response: -> (ur_) { ur = ur_ },
11
- )
12
- builder.adapter(:rack, -> (env) { [200, {'Content-Type' => 'text/plain'}, ['ᚒ']] })
13
- end
14
- res = faraday_conn.get('/')
15
- assert_equal('ᚒ', res.body)
16
- assert_kind_of(Ur, ur)
17
- assert_equal('get', ur.request['method'])
18
- assert_equal('text/plain', ur.response.headers['Content-Type'])
19
- assert_equal('ᚒ', ur.response.body)
20
- assert(ur.validate)
21
- end
22
- it 'integrates, IO body' do
23
- ur = nil
24
- faraday_conn = ::Faraday.new('https://ur.unth.net/') do |builder|
25
- builder.use(Ur::FaradayMiddleware,
26
- after_response: -> (ur_) { ur = ur_ },
27
- )
28
- builder.adapter(:rack, -> (env) { [200, {'Content-Type' => 'text/plain'}, ['☺']] })
29
- end
30
- res = faraday_conn.post('/', StringIO.new('hello!'))
31
- assert_equal('☺', res.body)
32
- assert_kind_of(Ur, ur)
33
- assert_equal('post', ur.request['method'])
34
- assert_equal('hello!', ur.request.body)
35
- assert_equal('text/plain', ur.response.headers['Content-Type'])
36
- assert_equal('☺', ur.response.body)
37
- assert(ur.validate)
38
- end
39
- it 'integrates, faraday middleware munges the json bodies but uses preserve_raw' do
40
- ur = nil
41
- faraday_conn = ::Faraday.new('https://ur.unth.net/') do |builder|
42
- builder.request :json
43
- builder.use(Ur::FaradayMiddleware,
44
- after_response: -> (ur_) { ur = ur_ },
45
- )
46
- builder.response :json, preserve_raw: true
47
- builder.adapter(:rack, -> (env) { [200, {'Content-Type' => 'application/json'}, ['{}']] })
48
- end
49
- res = faraday_conn.post('/', {'a' => 'b'})
50
- assert_equal({}, res.body)
51
- assert_kind_of(Ur, ur)
52
- assert_equal('post', ur.request['method'])
53
- assert_equal('{"a":"b"}', ur.request.body)
54
- assert_equal('application/json', ur.response.headers['Content-Type'])
55
- assert_equal('{}', ur.response.body)
56
- assert(ur.validate)
57
- end
58
- it 'integrates, faraday middleware munges the json bodies and does not preserve_raw' do
59
- ur = nil
60
- faraday_conn = ::Faraday.new('https://ur.unth.net/') do |builder|
61
- builder.use(Ur::FaradayMiddleware,
62
- after_response: -> (ur_) { ur = ur_ },
63
- )
64
- builder.request :json
65
- builder.response :json
66
- builder.adapter(:rack, -> (env) { [200, {'Content-Type' => 'application/json'}, ['{}']] })
67
- end
68
- res = faraday_conn.post('/', {'a' => 'b'})
69
- assert_equal({}, res.body)
70
- assert_kind_of(Ur, ur)
71
- assert_equal('post', ur.request['method'])
72
- assert_nil(ur.request.body) # no good
73
- assert_json_equal({"a" => "b"}, ur.request['body_parsed']) # best we get here
74
- assert_equal('application/json', ur.response.headers['Content-Type'])
75
- assert_nil(ur.response.body) # no good
76
- assert_json_equal({}, ur.response['body_parsed']) # best we get here
77
- assert(ur.validate)
78
- end
79
- end