dryer_routes 0.5.3 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/dryer_routes.gemspec +1 -1
- data/lib/dryer/routes/build_from_resource.rb +1 -0
- data/lib/dryer/routes/registry.rb +26 -1
- data/lib/dryer/routes/resource_schema.rb +9 -2
- data/lib/dryer/routes/route.rb +4 -0
- data/lib/dryer/routes.rb +2 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b58629b1454f554ec5b1611ce37386e01c8c2a51a142efde989a44faf5af8d26
|
4
|
+
data.tar.gz: 3824be71f8ef88e5c004a572adb0033d7a1ccc1739250bb686476c300117f0ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c0ccdfcd2d49920d32f2ce44a2aae48e5a951ea8fcf1b74693077490760e8f9897b862414f2ef63fd2b8914f303c8163d51eb8b184076ed3cfe2eac905b1560
|
7
|
+
data.tar.gz: ab44c6e93542e64928d7080475c7f930e9821c2a07f225924c55242796a411187abac8fdfd2940e3342fe8b2f2e4e915ba6e195797eecffc02149b7e3c99d028
|
data/dryer_routes.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = 'dryer_routes'
|
3
|
-
spec.version = "0.
|
3
|
+
spec.version = "0.6.1"
|
4
4
|
spec.authors = ['John Bernier']
|
5
5
|
spec.email = ['john.b.bernier@gmail.com']
|
6
6
|
spec.summary = 'Typed routing for rails leveraging dry-validation contracts'
|
@@ -35,6 +35,19 @@ module Dryer
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
def validate_url_parameters(request)
|
39
|
+
route_for(
|
40
|
+
controller: request.controller_class,
|
41
|
+
method: request.request_method_symbol
|
42
|
+
).then do |route|
|
43
|
+
if route && route.url_parameters_contract
|
44
|
+
route.url_parameters_contract.new.call(request.params).errors
|
45
|
+
else
|
46
|
+
[]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
38
51
|
def validate_response(controller:, method:, status:, body:)
|
39
52
|
route_for(
|
40
53
|
controller: controller.class,
|
@@ -55,7 +68,7 @@ module Dryer
|
|
55
68
|
end.first
|
56
69
|
end
|
57
70
|
|
58
|
-
def
|
71
|
+
def validated_request_body(request)
|
59
72
|
route_for(
|
60
73
|
controller: request.controller_class,
|
61
74
|
method: request.request_method_symbol
|
@@ -67,6 +80,18 @@ module Dryer
|
|
67
80
|
end
|
68
81
|
end
|
69
82
|
|
83
|
+
def validated_url_parameters(request)
|
84
|
+
route_for(
|
85
|
+
controller: request.controller_class,
|
86
|
+
method: request.request_method_symbol
|
87
|
+
).then do |route|
|
88
|
+
ExtractValidatedKeys.call(
|
89
|
+
payload: request.params,
|
90
|
+
contract: route.url_parameters_contract
|
91
|
+
)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
70
95
|
attr_reader :routes, :resources
|
71
96
|
|
72
97
|
private
|
@@ -13,18 +13,25 @@ module Dryer
|
|
13
13
|
params do
|
14
14
|
required(:method).filled(:symbol)
|
15
15
|
optional(:request_contract)
|
16
|
+
optional(:url_parameters_contract)
|
16
17
|
optional(:response_contracts).hash()
|
17
18
|
end
|
18
19
|
|
19
20
|
rule(:request_contract) do
|
20
|
-
if value && !value
|
21
|
+
if value && !(value <= Dry::Validation::Contract)
|
22
|
+
key.failure('must be a dry-validation contract')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
rule(:url_parameters_contract) do
|
27
|
+
if value && !(value <= Dry::Validation::Contract)
|
21
28
|
key.failure('must be a dry-validation contract')
|
22
29
|
end
|
23
30
|
end
|
24
31
|
|
25
32
|
rule(:response_contracts) do
|
26
33
|
values[:response_contracts].each do |key, value|
|
27
|
-
if !value
|
34
|
+
if !(value <= Dry::Validation::Contract)
|
28
35
|
key(:response_contracts).failure(
|
29
36
|
'must be a dry-validation contract'
|
30
37
|
)
|
data/lib/dryer/routes/route.rb
CHANGED
data/lib/dryer/routes.rb
CHANGED
@@ -13,10 +13,10 @@ module Dryer
|
|
13
13
|
@loader ||= Zeitwerk::Loader.new.tap do |loader|
|
14
14
|
root = File.expand_path("..", __dir__)
|
15
15
|
loader.tag = "dryer_routes"
|
16
|
-
loader.inflector = Zeitwerk::GemInflector.new("#{root}/
|
16
|
+
loader.inflector = Zeitwerk::GemInflector.new("#{root}/dryer_routes.rb")
|
17
17
|
loader.push_dir(root)
|
18
18
|
loader.ignore(
|
19
|
-
"#{root}/
|
19
|
+
"#{root}/dryer_routes.rb",
|
20
20
|
)
|
21
21
|
end
|
22
22
|
end
|