ur 0.1.1 → 0.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/ur.rb +22 -19
- data/lib/ur/content_type.rb +1 -1
- data/lib/ur/faraday.rb +1 -1
- data/lib/ur/faraday/yield_ur.rb +3 -15
- data/lib/ur/metadata.rb +4 -4
- data/lib/ur/middleware.rb +3 -3
- data/lib/ur/request.rb +2 -2
- data/lib/ur/request_and_response.rb +1 -1
- data/lib/ur/response.rb +2 -2
- data/lib/ur/sub_ur.rb +2 -2
- data/lib/ur/version.rb +1 -1
- data/test/ur_faraday_test.rb +8 -8
- data/test/ur_test.rb +2 -2
- data/ur.gemspec +1 -1
- metadata +6 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '08e517b90ad97d890764bc228d8836e7e48d7f8250ed7c3a4878368b77b2deb2'
|
4
|
+
data.tar.gz: e87aedb3a622a5606bff0370cc1a06f43d98be53488389c1902e989226760cd1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '069f50e6768b41beb13830308fd3a3d18845c32fc38f6e95755b8f929ba88e20efcfce8f84abf50ed393a93f9c2971bb7b280e5793d43098c06dc034f136487c'
|
7
|
+
data.tar.gz: 42c005bf4853f4bb946a2bd143696c84fa84c6f933b71a6425505722aab150f290ab21265ac2b6e9fdaa313e0207becb46f5a14ff20a7cd2c18e4daa53d12084
|
data/CHANGELOG.md
CHANGED
data/lib/ur.rb
CHANGED
@@ -8,8 +8,8 @@ require 'addressable/uri'
|
|
8
8
|
require 'pathname'
|
9
9
|
|
10
10
|
UR_ROOT = Pathname.new(__FILE__).dirname.parent.expand_path
|
11
|
-
Ur = JSI.
|
12
|
-
|
11
|
+
Ur = JSI::Schema.new(YAML.load_file(UR_ROOT.join('resources/ur.schema.yml'))).jsi_schema_module
|
12
|
+
module Ur
|
13
13
|
VERSION = UR_VERSION
|
14
14
|
|
15
15
|
autoload :SubUr, 'ur/sub_ur'
|
@@ -19,9 +19,9 @@ class Ur
|
|
19
19
|
autoload :RackMiddleware, 'ur/middleware'
|
20
20
|
autoload :Faraday, 'ur/faraday'
|
21
21
|
|
22
|
-
Request =
|
23
|
-
Response =
|
24
|
-
Metadata =
|
22
|
+
Request = self.schema.properties['request'].jsi_schema_module
|
23
|
+
Response = self.schema.properties['response'].jsi_schema_module
|
24
|
+
Metadata = self.schema.properties['metadata'].jsi_schema_module
|
25
25
|
require 'ur/request'
|
26
26
|
require 'ur/response'
|
27
27
|
require 'ur/metadata'
|
@@ -29,7 +29,20 @@ class Ur
|
|
29
29
|
autoload :ContentType, 'ur/content_type'
|
30
30
|
|
31
31
|
class << self
|
32
|
-
def
|
32
|
+
def new(instance = {}, schemas: Set[], **options)
|
33
|
+
unless instance.respond_to?(:to_hash)
|
34
|
+
raise(TypeError, "expected hash for ur instance. got: #{instance.pretty_inspect.chomp}")
|
35
|
+
end
|
36
|
+
|
37
|
+
ur_class = JSI.class_for_schemas(Set[schema] + schemas)
|
38
|
+
ur_class.new(instance, options).tap do |ur|
|
39
|
+
ur.request = {} if ur.request.nil?
|
40
|
+
ur.response = {} if ur.response.nil?
|
41
|
+
ur.metadata = {} if ur.metadata.nil?
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def from_rack_request(request_env, **options)
|
33
46
|
if request_env.is_a?(Rack::Request)
|
34
47
|
rack_request = request_env
|
35
48
|
env = request_env.env
|
@@ -38,7 +51,7 @@ class Ur
|
|
38
51
|
env = request_env
|
39
52
|
end
|
40
53
|
|
41
|
-
new({'bound' => 'inbound'}).tap do |ur|
|
54
|
+
new({'bound' => 'inbound'}, options).tap do |ur|
|
42
55
|
ur.request['method'] = rack_request.request_method
|
43
56
|
|
44
57
|
ur.request.addressable_uri = Addressable::URI.new(
|
@@ -68,8 +81,8 @@ class Ur
|
|
68
81
|
end
|
69
82
|
end
|
70
83
|
|
71
|
-
def from_faraday_request(request_env)
|
72
|
-
new({'bound' => 'outbound'}).tap do |ur|
|
84
|
+
def from_faraday_request(request_env, **options)
|
85
|
+
new({'bound' => 'outbound'}, options).tap do |ur|
|
73
86
|
ur.request['method'] = request_env[:method].to_s
|
74
87
|
ur.request.uri = request_env[:url].normalize.to_s
|
75
88
|
ur.request.headers = request_env[:request_headers]
|
@@ -78,16 +91,6 @@ class Ur
|
|
78
91
|
end
|
79
92
|
end
|
80
93
|
|
81
|
-
def initialize(ur = {}, **opt, &b)
|
82
|
-
super(ur, **opt, &b)
|
83
|
-
unless instance.respond_to?(:to_hash)
|
84
|
-
raise(TypeError, "expected hash argument. got: #{ur.pretty_inspect.chomp}")
|
85
|
-
end
|
86
|
-
self.request = {} if self.request.nil?
|
87
|
-
self.response = {} if self.response.nil?
|
88
|
-
self.metadata = {} if self.metadata.nil?
|
89
|
-
end
|
90
|
-
|
91
94
|
# Ur#logger_tags applies tags from a tagged logger to this ur's metadata.
|
92
95
|
# note: ur does not log anything and this logger is not stored.
|
93
96
|
# @param [logger] a tagged logger
|
data/lib/ur/content_type.rb
CHANGED
data/lib/ur/faraday.rb
CHANGED
data/lib/ur/faraday/yield_ur.rb
CHANGED
@@ -1,24 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
module Ur
|
4
4
|
module Faraday
|
5
5
|
# Faraday middleware which yields an Ur to the given block
|
6
6
|
class YieldUr < ::Ur::FaradayMiddleware
|
7
|
-
def initialize(app, options
|
7
|
+
def initialize(app, **options, &block)
|
8
8
|
raise(ArgumentError, "no block given to yield ur") unless block
|
9
|
-
|
10
|
-
@app = app
|
11
|
-
@options = options
|
12
|
-
@yield_to = block
|
13
|
-
end
|
14
|
-
|
15
|
-
def call(request_env)
|
16
|
-
ur = (@options[:ur_class] || Ur).from_faraday_request(request_env)
|
17
|
-
begin_request(ur)
|
18
|
-
ur.faraday_on_complete(@app, request_env) do |response_env|
|
19
|
-
finish_request(ur)
|
20
|
-
@yield_to.call(ur)
|
21
|
-
end
|
9
|
+
super(app, options.merge(after_response: block))
|
22
10
|
end
|
23
11
|
end
|
24
12
|
end
|
data/lib/ur/metadata.rb
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'ur' unless Object.const_defined?(:Ur)
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
module Ur
|
6
|
+
module Metadata
|
7
7
|
include SubUr
|
8
8
|
|
9
9
|
def began_at
|
@@ -17,8 +17,8 @@ class Ur
|
|
17
17
|
|
18
18
|
# sets began_at from the current time
|
19
19
|
def begin!
|
20
|
-
self.began_at
|
21
|
-
self.began_at_ns
|
20
|
+
self.began_at = Time.now
|
21
|
+
self.began_at_ns = Process.clock_gettime(Process::CLOCK_MONOTONIC, :nanosecond)
|
22
22
|
end
|
23
23
|
|
24
24
|
# sets the duration from the current time and began_at
|
data/lib/ur/middleware.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'ur' unless Object.const_defined?(:Ur)
|
4
4
|
|
5
|
-
|
5
|
+
module Ur
|
6
6
|
module Middleware
|
7
7
|
def initialize(app, options = {})
|
8
8
|
@app = app
|
@@ -30,7 +30,7 @@ class Ur
|
|
30
30
|
class FaradayMiddleware < ::Faraday::Middleware
|
31
31
|
include Ur::Middleware
|
32
32
|
def call(request_env)
|
33
|
-
ur = Ur.from_faraday_request(request_env)
|
33
|
+
ur = Ur.from_faraday_request(request_env, @options.select { |k, _| [:schemas].include?(k) })
|
34
34
|
invoke_callback(:before_request, ur)
|
35
35
|
begin_request(ur)
|
36
36
|
ur.faraday_on_complete(@app, request_env) do |response_env|
|
@@ -43,7 +43,7 @@ class Ur
|
|
43
43
|
class RackMiddleware
|
44
44
|
include Ur::Middleware
|
45
45
|
def call(env)
|
46
|
-
ur = Ur.from_rack_request(env)
|
46
|
+
ur = Ur.from_rack_request(env, @options.select { |k, _| [:schemas].include?(k) })
|
47
47
|
invoke_callback(:before_request, ur)
|
48
48
|
begin_request(ur)
|
49
49
|
ur.with_rack_response(@app, env) do
|
data/lib/ur/request.rb
CHANGED
data/lib/ur/response.rb
CHANGED
data/lib/ur/sub_ur.rb
CHANGED
data/lib/ur/version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
UR_VERSION = "0.
|
1
|
+
UR_VERSION = "0.2.0".freeze
|
data/test/ur_faraday_test.rb
CHANGED
@@ -9,11 +9,11 @@ describe 'Ur faraday integration' do
|
|
9
9
|
builder.use(Ur::FaradayMiddleware,
|
10
10
|
after_response: -> (ur_) { ur = ur_ },
|
11
11
|
)
|
12
|
-
builder.
|
12
|
+
builder.adapter(:rack, -> (env) { [200, {'Content-Type' => 'text/plain'}, ['ᚒ']] })
|
13
13
|
end
|
14
14
|
res = faraday_conn.get('/')
|
15
15
|
assert_equal('ᚒ', res.body)
|
16
|
-
|
16
|
+
assert_kind_of(Ur, ur)
|
17
17
|
assert_equal('get', ur.request['method'])
|
18
18
|
assert_equal('text/plain', ur.response.headers['Content-Type'])
|
19
19
|
assert_equal('ᚒ', ur.response.body)
|
@@ -25,11 +25,11 @@ describe 'Ur faraday integration' do
|
|
25
25
|
builder.use(Ur::FaradayMiddleware,
|
26
26
|
after_response: -> (ur_) { ur = ur_ },
|
27
27
|
)
|
28
|
-
builder.
|
28
|
+
builder.adapter(:rack, -> (env) { [200, {'Content-Type' => 'text/plain'}, ['☺']] })
|
29
29
|
end
|
30
30
|
res = faraday_conn.post('/', StringIO.new('hello!'))
|
31
31
|
assert_equal('☺', res.body)
|
32
|
-
|
32
|
+
assert_kind_of(Ur, ur)
|
33
33
|
assert_equal('post', ur.request['method'])
|
34
34
|
assert_equal('hello!', ur.request.body)
|
35
35
|
assert_equal('text/plain', ur.response.headers['Content-Type'])
|
@@ -44,11 +44,11 @@ describe 'Ur faraday integration' do
|
|
44
44
|
after_response: -> (ur_) { ur = ur_ },
|
45
45
|
)
|
46
46
|
builder.response :json, preserve_raw: true
|
47
|
-
builder.
|
47
|
+
builder.adapter(:rack, -> (env) { [200, {'Content-Type' => 'application/json'}, ['{}']] })
|
48
48
|
end
|
49
49
|
res = faraday_conn.post('/', {'a' => 'b'})
|
50
50
|
assert_equal({}, res.body)
|
51
|
-
|
51
|
+
assert_kind_of(Ur, ur)
|
52
52
|
assert_equal('post', ur.request['method'])
|
53
53
|
assert_equal('{"a":"b"}', ur.request.body)
|
54
54
|
assert_equal('application/json', ur.response.headers['Content-Type'])
|
@@ -63,11 +63,11 @@ describe 'Ur faraday integration' do
|
|
63
63
|
)
|
64
64
|
builder.request :json
|
65
65
|
builder.response :json
|
66
|
-
builder.
|
66
|
+
builder.adapter(:rack, -> (env) { [200, {'Content-Type' => 'application/json'}, ['{}']] })
|
67
67
|
end
|
68
68
|
res = faraday_conn.post('/', {'a' => 'b'})
|
69
69
|
assert_equal({}, res.body)
|
70
|
-
|
70
|
+
assert_kind_of(Ur, ur)
|
71
71
|
assert_equal('post', ur.request['method'])
|
72
72
|
assert_nil(ur.request.body) # no good
|
73
73
|
assert_json_equal({"a" => "b"}, ur.request['body_parsed']) # best we get here
|
data/test/ur_test.rb
CHANGED
@@ -8,7 +8,7 @@ describe 'Ur' do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'initializes' do
|
11
|
-
Ur.
|
11
|
+
Ur.new_jsi({})
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'would prefer not to initialize' do
|
@@ -92,7 +92,7 @@ describe 'Ur' do
|
|
92
92
|
assert(ur.validate)
|
93
93
|
end,
|
94
94
|
)
|
95
|
-
builder.
|
95
|
+
builder.adapter(:rack, rack_app)
|
96
96
|
end
|
97
97
|
res = faraday_conn.get('/', nil, {'Foo' => 'bar'})
|
98
98
|
assert(called_rack_before_request)
|
data/ur.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.test_files = `git ls-files -z test`.split("\x0") + ['.simplecov']
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
-
spec.add_dependency "jsi", "
|
22
|
+
spec.add_dependency "jsi", "~> 0.4"
|
23
23
|
spec.add_dependency "addressable", "~> 2.0"
|
24
24
|
spec.add_development_dependency "rack"
|
25
25
|
spec.add_development_dependency "rack-test"
|
metadata
CHANGED
@@ -1,35 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ur
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ethan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jsi
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.2.0
|
20
|
-
- - "<"
|
17
|
+
- - "~>"
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.4
|
19
|
+
version: '0.4'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 0.2.0
|
30
|
-
- - "<"
|
24
|
+
- - "~>"
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version: 0.4
|
26
|
+
version: '0.4'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: addressable
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|