gate 0.8.0 → 0.9.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/.gitignore +1 -0
- data/README.md +37 -2
- data/gate.gemspec +1 -0
- data/lib/gate.rb +3 -0
- data/lib/gate/rails.rb +62 -0
- data/lib/gate/version.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c22d3f53ed88e1d283f720231af1c4a8021a1be6e0a622344b6060cf5b205f21
|
4
|
+
data.tar.gz: d796d15296a46a91024811b362338d35c53dca326955f561609861518a0844ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3ec912ce725441be96af00f68272dc069be63c035e26999d2d8c63ae3376402b9960d66646ae0891b87614d8c28c7f96f95ed77cba38b85965e73f25cb43fa2
|
7
|
+
data.tar.gz: 4e9eaf0e4c2bde5ed8ae01815e62737622f4bfba29ef6e045e1c9ae3fc163224996d213c35feb5ff1d695cb9ee50d47b25ad2cbf65e905e5feb79cc6ce97ccf1
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -6,7 +6,9 @@
|
|
6
6
|
[](https://codeclimate.com/github/monterail/gate)
|
7
7
|
[](https://codeclimate.com/github/monterail/gate/coverage)
|
8
8
|
|
9
|
-
Gate is a small wrapper on [dry-validation](http://dry-rb.org/gems/dry-validation/) that might be used as Command in CQRS pattern
|
9
|
+
Gate is a small wrapper on [dry-validation](http://dry-rb.org/gems/dry-validation/) that might be used as Command in CQRS pattern or replace [Strong Params](http://api.rubyonrails.org/classes/ActionController/Parameters.html) in [Ruby on Rails](https://rubyonrails.org/) applications.
|
10
|
+
|
11
|
+
`Gate::Command` will raise `InvalidCommand` error for invalid input and provide simple struct with access to coerced input.
|
10
12
|
|
11
13
|
## Installation
|
12
14
|
|
@@ -24,7 +26,7 @@ Or install it yourself as:
|
|
24
26
|
|
25
27
|
$ gem install gate
|
26
28
|
|
27
|
-
## Usage
|
29
|
+
## Command Usage
|
28
30
|
|
29
31
|
Define structure
|
30
32
|
|
@@ -54,6 +56,39 @@ rescue DoSomethingCommand::InvalidCommand => e
|
|
54
56
|
end
|
55
57
|
```
|
56
58
|
|
59
|
+
## Rails Usage
|
60
|
+
|
61
|
+
Define schemas per action
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
class ExampleController < ActionController::Base
|
65
|
+
include Gate::Rails
|
66
|
+
|
67
|
+
before_action :validate_params, if: { |c| c.params_schema_registered? }
|
68
|
+
|
69
|
+
# Define schema just before action method
|
70
|
+
def_schema do
|
71
|
+
required(:id).filled
|
72
|
+
required(:message).schema do
|
73
|
+
required(:title).filled
|
74
|
+
optional(:value).maybe(:decimal?)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def foo
|
79
|
+
# you can access Dry::Validation result with:
|
80
|
+
validated_params
|
81
|
+
end
|
82
|
+
|
83
|
+
# default handler for invalid params which you can override
|
84
|
+
def handle_invalid_params(_errors)
|
85
|
+
# errors is Dry::Validation messages hash
|
86
|
+
|
87
|
+
head :bad_request
|
88
|
+
end
|
89
|
+
end
|
90
|
+
```
|
91
|
+
|
57
92
|
## Development
|
58
93
|
|
59
94
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/gate.gemspec
CHANGED
@@ -26,5 +26,6 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency "codeclimate-test-reporter", "~> 1.0"
|
27
27
|
spec.add_development_dependency "minitest", "~> 5.11"
|
28
28
|
spec.add_development_dependency "pry", "~> 0.11"
|
29
|
+
spec.add_development_dependency "rails", "~> 5.2"
|
29
30
|
spec.add_development_dependency "rake", "~> 12.0"
|
30
31
|
end
|
data/lib/gate.rb
CHANGED
data/lib/gate/rails.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Gate
|
4
|
+
module Rails
|
5
|
+
attr_reader :validated_params
|
6
|
+
|
7
|
+
SchemaNotDefined = Class.new(StandardError)
|
8
|
+
|
9
|
+
def self.included(base)
|
10
|
+
base.send(:extend, ClassMethods)
|
11
|
+
end
|
12
|
+
|
13
|
+
module ClassMethods
|
14
|
+
def params_schemas
|
15
|
+
@params_schemas ||= {}
|
16
|
+
end
|
17
|
+
|
18
|
+
def fetch_params_schema(schema_name)
|
19
|
+
params_schemas.fetch(schema_name) do
|
20
|
+
raise SchemaNotDefined, "Missing `#{schema_name}` schema"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def def_schema(&block)
|
25
|
+
@_schema = Dry::Validation.Params(&block)
|
26
|
+
end
|
27
|
+
|
28
|
+
def method_added(method_name)
|
29
|
+
return unless instance_variable_defined?(:@_schema)
|
30
|
+
|
31
|
+
params_schemas[method_name] = @_schema
|
32
|
+
remove_instance_variable(:@_schema)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def validate_params
|
37
|
+
result = params_schema.call(request.params)
|
38
|
+
|
39
|
+
if result.success?
|
40
|
+
@validated_params = result.output
|
41
|
+
else
|
42
|
+
handle_invalid_params(result.messages)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def handle_invalid_params(_errors)
|
47
|
+
head :bad_request
|
48
|
+
end
|
49
|
+
|
50
|
+
def params_schema_registered?
|
51
|
+
self.class.params_schemas.key?(params_schema_name)
|
52
|
+
end
|
53
|
+
|
54
|
+
def params_schema
|
55
|
+
self.class.fetch_params_schema(params_schema_name)
|
56
|
+
end
|
57
|
+
|
58
|
+
def params_schema_name
|
59
|
+
action_name.to_sym
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/gate/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Dudulski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-validation
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0.11'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rails
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '5.2'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '5.2'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rake
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,6 +130,7 @@ files:
|
|
116
130
|
- gate.gemspec
|
117
131
|
- lib/gate.rb
|
118
132
|
- lib/gate/command.rb
|
133
|
+
- lib/gate/rails.rb
|
119
134
|
- lib/gate/version.rb
|
120
135
|
homepage: https://github.com/monterail/gate
|
121
136
|
licenses:
|