dryer_routes 0.5.1 → 0.5.3
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 -3
- data/lib/dryer/routes/hash_object.rb +17 -8
- data/lib/dryer/routes/registry.rb +1 -25
- data/lib/dryer/routes/resource_accessors.rb +41 -0
- data/lib/dryer/routes.rb +5 -3
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c692380d53fff96240d6883e92c95894cd6eaf16ba0d18de34ae70eed293c0c
|
4
|
+
data.tar.gz: 3ce4ca0aa75e253a70f994c86efca79491257bd4562deff01f1621c3eff78d0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1fb38fc119af2c46a455ebe7e647060c02de3abff1604dd40ae2e63a324b44ee74180630d3d84f068866572db658b5cbfef4a30d6b28e7cd7648c63fb37523df
|
7
|
+
data.tar.gz: cc9083eb11bd03929b09e40be4cc1d6c33f824c0ba3fc91cee0f30f9b23d70287a13a2b590519aa9863775d29bfd6c9736c7b36a5028ec4812a2ef0981806d6e
|
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.5.
|
3
|
+
spec.version = "0.5.3"
|
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'
|
@@ -11,9 +11,7 @@ module Dryer
|
|
11
11
|
resource[:actions].map do |action, config|
|
12
12
|
Route.new(
|
13
13
|
controller: resource[:controller],
|
14
|
-
url:
|
15
|
-
config[:url] || resource[:url]
|
16
|
-
),
|
14
|
+
url: config[:url] || resource[:url],
|
17
15
|
method: config[:method],
|
18
16
|
controller_action: action,
|
19
17
|
request_contract: config[:request_contract],
|
@@ -1,16 +1,25 @@
|
|
1
|
+
require 'dryer_services'
|
2
|
+
|
1
3
|
module Dryer
|
2
4
|
module Routes
|
3
|
-
class HashObject
|
4
|
-
|
5
|
+
class HashObject < Dryer::Services::SimpleService
|
6
|
+
def initialize(hash)
|
5
7
|
hash.each do |k,v|
|
6
8
|
key = k.is_a?(Numeric) ? "_#{k}" : k
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
if v.is_a?(Proc)
|
11
|
+
self.send(:define_singleton_method, key, proc do |*args, **kwargs, &block|
|
12
|
+
v.arity != 0 ? v.call(*args, **kwargs, &block) : v.call
|
13
|
+
end)
|
14
|
+
else
|
15
|
+
self.instance_variable_set(
|
16
|
+
"@#{key}", v.is_a?(Hash) ? HashObject.new(v) : v
|
17
|
+
)
|
18
|
+
|
19
|
+
self.send(
|
20
|
+
:define_singleton_method, key, proc{self.instance_variable_get("@#{key}")}
|
21
|
+
)
|
22
|
+
end
|
14
23
|
end
|
15
24
|
end
|
16
25
|
end
|
@@ -14,7 +14,7 @@ module Dryer
|
|
14
14
|
@routes = resources.map do |r|
|
15
15
|
BuildFromResource.call(r)
|
16
16
|
end.flatten
|
17
|
-
|
17
|
+
ResourceAccessors.call(object: self, resources: resources)
|
18
18
|
@routes
|
19
19
|
end
|
20
20
|
|
@@ -72,30 +72,6 @@ module Dryer
|
|
72
72
|
private
|
73
73
|
attr_writer :routes, :resources
|
74
74
|
|
75
|
-
def add_accessors_for_resources(resources)
|
76
|
-
denormalize_resources(resources).inject(self) do |obj, (key, value)|
|
77
|
-
obj.define_singleton_method(key) { HashObject.new(value) }
|
78
|
-
obj
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def denormalize_resources(resources)
|
83
|
-
resources.inject({}) do | h, resource |
|
84
|
-
h[
|
85
|
-
resource[:controller].controller_name.to_sym
|
86
|
-
] = denormalize_resource(resource)
|
87
|
-
h
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def denormalize_resource(resource)
|
92
|
-
resource[:actions].each do |key, value|
|
93
|
-
resource[:actions][key][:url] =
|
94
|
-
resource[:actions][key][:url] || resource[:url]
|
95
|
-
end
|
96
|
-
resource.merge(resource[:actions])
|
97
|
-
end
|
98
|
-
|
99
75
|
def validate_resources!(resources)
|
100
76
|
errors = resources.map do |r|
|
101
77
|
ResourceSchema.new.call(r)
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'dryer_services'
|
2
|
+
|
3
|
+
module Dryer
|
4
|
+
module Routes
|
5
|
+
class ResourceAccessors < Dryer::Services::SimpleService
|
6
|
+
|
7
|
+
def initialize(object:, resources:)
|
8
|
+
@object = object
|
9
|
+
@resources = resources
|
10
|
+
end
|
11
|
+
|
12
|
+
def call
|
13
|
+
denormalize_resources(resources).inject(object) do |obj, (key, value)|
|
14
|
+
obj.define_singleton_method(key) { HashObject.new(value) }
|
15
|
+
obj
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
attr_reader :object, :resources
|
21
|
+
|
22
|
+
def denormalize_resources(resources)
|
23
|
+
resources.inject({}) do | h, resource|
|
24
|
+
h[
|
25
|
+
resource[:controller].controller_name.to_sym
|
26
|
+
] = denormalize_resource(resource)
|
27
|
+
h
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def denormalize_resource(resource)
|
32
|
+
resource[:actions].each do |key, value|
|
33
|
+
resource[:actions][key][:url] = UrlBuilder.call(
|
34
|
+
resource[:actions][key][:url] || resource[:url]
|
35
|
+
)
|
36
|
+
end
|
37
|
+
resource.merge(resource[:actions])
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/dryer/routes.rb
CHANGED
@@ -3,9 +3,11 @@ require "rubygems"
|
|
3
3
|
|
4
4
|
module Dryer
|
5
5
|
module Routes
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
def self.version
|
7
|
+
Gem::Specification::load(
|
8
|
+
"./dryer_routes.gemspec"
|
9
|
+
).version
|
10
|
+
end
|
9
11
|
|
10
12
|
def self.loader
|
11
13
|
@loader ||= Zeitwerk::Loader.new.tap do |loader|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dryer_routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Bernier
|
@@ -111,6 +111,7 @@ files:
|
|
111
111
|
- lib/dryer/routes/extract_validated_keys.rb
|
112
112
|
- lib/dryer/routes/hash_object.rb
|
113
113
|
- lib/dryer/routes/registry.rb
|
114
|
+
- lib/dryer/routes/resource_accessors.rb
|
114
115
|
- lib/dryer/routes/resource_schema.rb
|
115
116
|
- lib/dryer/routes/route.rb
|
116
117
|
- lib/dryer/routes/url_builder.rb
|