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