dryer_routes 0.2.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a133f0a65c2b005f047880978e21502314b61d5a2553c75fa08cebf7059a2f2
4
- data.tar.gz: 2d6c30dcaa3d7558b9544e3bea8c999f67d334f2d62c21a9d43a511747cc1dac
3
+ metadata.gz: b6a00c3b22caa974de5bec04599dc6b40a32523eaaa484d6d571834d778646ca
4
+ data.tar.gz: 7cdb3a01b272969893c262d41766e1a5da1267f80862d21e0f96644811fe9a0d
5
5
  SHA512:
6
- metadata.gz: 5f31bd2c263ed221cda9edb8adda25a202c02046db8657977d96456700cb09fa3e6e383e3c3e0d15e3edd7efe5771fc3d0d6d53e9fc0b5799ae5724c7ba1292d
7
- data.tar.gz: 243599ab47690a8a38a77d70d78650a179a49b7027880dc0662999cc16e814e0206315f2c93a7f88639f07041b7fbcac5cc9ece7708aa4e05b7641133b5082fd
6
+ metadata.gz: 8665e3876446c5dc83971571917abfdc6aab99ebba6966d4a4a9e926121bdf30ce36118c653602250b1be30fe3dece2af7eb35219e6fea9e966e4284ee63211d
7
+ data.tar.gz: 28f31b3bbd90f85cef8d04e843607544bd234c512817d07a5ccfe2a501f23db66a9394aaa51be489d36de8c947348656d6462d95b812aa7c5252878b481bc0f4
data/README.md CHANGED
@@ -91,7 +91,9 @@ class ApplicationController < ActionController::Base
91
91
  def validate_request
92
92
  request_errors = RouteRegistry.validate_request(request)
93
93
  if request_errors.empty?
94
- @validated_request_body = Dry::Monads::Success(request.params)
94
+ @validated_request_body = Dry::Monads::Success(
95
+ RouteRegistry.get_validated_values(request)
96
+ )
95
97
  else
96
98
  @validated_request_body = Dry::Monads::Failure(request_errors)
97
99
  end
@@ -136,6 +138,7 @@ class UsersController < ApplicationController
136
138
  end
137
139
  end
138
140
  ```
141
+ where `body` will only contain the keys specified by the contract.
139
142
 
140
143
  ## Development
141
144
  This gem is set up to be developed using [Nix](https://nixos.org/) and
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.2.2"
3
+ spec.version = "0.4.0"
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'
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
  ]
25
25
  spec.add_dependency "dry-validation", "~> 1.10"
26
26
  spec.add_dependency "dry-types", "~> 1.7"
27
- spec.add_dependency "dryer_services", "~> 1.0"
27
+ spec.add_dependency "dryer_services", "~> 2.0"
28
28
  spec.add_development_dependency "rspec", "~> 3.10"
29
29
  spec.add_development_dependency "debug", "~> 1.8"
30
30
  end
@@ -0,0 +1,45 @@
1
+ require "dryer_services"
2
+
3
+ module Dryer
4
+ module Routes
5
+ class ExtractValidatedKeys < Dryer::Services::SimpleService
6
+ def initialize(payload:, contract:)
7
+ @payload = payload
8
+ @contract = contract
9
+ end
10
+
11
+ def call
12
+ return {} if payload == nil || contract == nil
13
+ extract_keys(
14
+ to_symbol_keys(payload),
15
+ contract.send(:key_map)
16
+ )
17
+ end
18
+
19
+ private
20
+ def extract_keys(payload, key_map)
21
+ key_map.inject({}) do |validated_keys, key|
22
+ validated_keys[key.name.to_sym] = if key.respond_to?(:members)
23
+ extract_keys(payload[key.name.to_sym], key.members)
24
+ else
25
+ payload[key.name.to_sym]
26
+ end
27
+ validated_keys
28
+ end
29
+ end
30
+
31
+ def to_symbol_keys(hash)
32
+ hash.inject({}) do |sym_hash, (key, value)|
33
+ sym_hash[key.to_sym] = if value.is_a?(Hash)
34
+ to_symbol_keys(value)
35
+ else
36
+ value
37
+ end
38
+ sym_hash
39
+ end
40
+ end
41
+
42
+ attr_reader :payload, :contract
43
+ end
44
+ end
45
+ end
@@ -1,6 +1,7 @@
1
1
  require_relative "./build_from_resource.rb"
2
2
  require_relative "./hash_object.rb"
3
3
  require_relative "./resource_schema.rb"
4
+ require_relative "./extract_validated_keys.rb"
4
5
 
5
6
  module Dryer
6
7
  module Routes
@@ -59,6 +60,18 @@ module Dryer
59
60
  end.first
60
61
  end
61
62
 
63
+ def get_validated_values(request)
64
+ route_for(
65
+ controller: request.controller_class,
66
+ method: request.request_method_symbol
67
+ ).then do |route|
68
+ ExtractValidatedKeys.call(
69
+ payload: request.params,
70
+ contract: route.request_contract
71
+ )
72
+ end
73
+ end
74
+
62
75
  attr_reader :routes, :resources
63
76
 
64
77
  private
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.2.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Bernier
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.0'
47
+ version: '2.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.0'
54
+ version: '2.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -93,6 +93,7 @@ files:
93
93
  - README.md
94
94
  - dryer_routes.gemspec
95
95
  - lib/dryer/routes/build_from_resource.rb
96
+ - lib/dryer/routes/extract_validated_keys.rb
96
97
  - lib/dryer/routes/hash_object.rb
97
98
  - lib/dryer/routes/registries/create.rb
98
99
  - lib/dryer/routes/registry.rb