rails-param-validation 0.1.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 +7 -0
- data/.gitignore +2 -0
- data/.gitlab-ci.yml +34 -0
- data/Gemfile +8 -0
- data/LICENSE.txt +21 -0
- data/README.md +63 -0
- data/Rakefile +6 -0
- data/bin/.keep +0 -0
- data/docs/_config.yml +3 -0
- data/docs/annotations.md +62 -0
- data/docs/getting-started.md +32 -0
- data/docs/image/error-screenshot.png +0 -0
- data/docs/index.md +61 -0
- data/docs/main-idea.md +72 -0
- data/docs/openapi.md +39 -0
- data/docs/type-definition.md +178 -0
- data/lib/rails-param-validation/errors/missing_parameter_annotation.rb +9 -0
- data/lib/rails-param-validation/errors/no_matching_factory.rb +9 -0
- data/lib/rails-param-validation/errors/param_validation_failed_error.rb +12 -0
- data/lib/rails-param-validation/errors/type_not_found.rb +9 -0
- data/lib/rails-param-validation/rails/action_definition.rb +66 -0
- data/lib/rails-param-validation/rails/annotation_manager.rb +40 -0
- data/lib/rails-param-validation/rails/config.rb +48 -0
- data/lib/rails-param-validation/rails/extensions/annotation_extension.rb +95 -0
- data/lib/rails-param-validation/rails/extensions/custom_type_extension.rb +13 -0
- data/lib/rails-param-validation/rails/extensions/error.template.html.erb +86 -0
- data/lib/rails-param-validation/rails/extensions/validation_extension.rb +105 -0
- data/lib/rails-param-validation/rails/helper.rb +9 -0
- data/lib/rails-param-validation/rails/openapi/openapi.rb +128 -0
- data/lib/rails-param-validation/rails/openapi/routing_helper.rb +40 -0
- data/lib/rails-param-validation/rails/rails.rb +31 -0
- data/lib/rails-param-validation/rails/tasks/openapi.rake +32 -0
- data/lib/rails-param-validation/types/types.rb +100 -0
- data/lib/rails-param-validation/validator.rb +51 -0
- data/lib/rails-param-validation/validator_factory.rb +37 -0
- data/lib/rails-param-validation/validators/alternatives.rb +42 -0
- data/lib/rails-param-validation/validators/array.rb +49 -0
- data/lib/rails-param-validation/validators/boolean.rb +38 -0
- data/lib/rails-param-validation/validators/constant.rb +38 -0
- data/lib/rails-param-validation/validators/custom_type.rb +28 -0
- data/lib/rails-param-validation/validators/date.rb +39 -0
- data/lib/rails-param-validation/validators/datetime.rb +39 -0
- data/lib/rails-param-validation/validators/float.rb +39 -0
- data/lib/rails-param-validation/validators/hash.rb +52 -0
- data/lib/rails-param-validation/validators/integer.rb +39 -0
- data/lib/rails-param-validation/validators/object.rb +63 -0
- data/lib/rails-param-validation/validators/optional.rb +44 -0
- data/lib/rails-param-validation/validators/regex.rb +37 -0
- data/lib/rails-param-validation/validators/string.rb +31 -0
- data/lib/rails-param-validation/validators/uuid.rb +39 -0
- data/lib/rails-param-validation/version.rb +3 -0
- data/lib/rails-param-validation.rb +42 -0
- data/rails-param-validation.gemspec +33 -0
- metadata +100 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
module RailsParamValidation
|
2
|
+
|
3
|
+
class RegexValidator < Validator
|
4
|
+
def initialize(schema)
|
5
|
+
super schema
|
6
|
+
end
|
7
|
+
|
8
|
+
def matches?(path, data)
|
9
|
+
if data.is_a?(String) || data.is_a?(Symbol)
|
10
|
+
data = data.to_s
|
11
|
+
match = data.match self.schema
|
12
|
+
if match && match.to_s.size == data.size
|
13
|
+
return MatchResult.new data
|
14
|
+
else
|
15
|
+
return MatchResult.new nil, path, "String does not match the required pattern"
|
16
|
+
end
|
17
|
+
else
|
18
|
+
MatchResult.new nil, path, "Expected a string matching the given pattern"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_openapi
|
23
|
+
{ type: :string, pattern: self.schema.source }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class RegexValidatorFactory < ValidatorFactory
|
28
|
+
def supports?(schema)
|
29
|
+
schema.is_a? Regexp
|
30
|
+
end
|
31
|
+
|
32
|
+
def create(schema)
|
33
|
+
RegexValidator.new schema
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module RailsParamValidation
|
2
|
+
|
3
|
+
class StringValidator < Validator
|
4
|
+
def initialize(schema)
|
5
|
+
super schema
|
6
|
+
end
|
7
|
+
|
8
|
+
def matches?(path, data)
|
9
|
+
if data.is_a?(String) || data.is_a?(Symbol) || data.is_a?(Numeric) || data.is_a?(TrueClass) || data.is_a?(FalseClass)
|
10
|
+
MatchResult.new data.to_s
|
11
|
+
else
|
12
|
+
MatchResult.new nil, path, "Expected a string"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_openapi
|
17
|
+
{ type: :string }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class StringValidatorFactory < ValidatorFactory
|
22
|
+
def supports?(schema)
|
23
|
+
schema == String || schema == Symbol
|
24
|
+
end
|
25
|
+
|
26
|
+
def create(schema)
|
27
|
+
StringValidator.new schema
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module RailsParamValidation
|
2
|
+
|
3
|
+
class UuidValidator < Validator
|
4
|
+
REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/
|
5
|
+
|
6
|
+
def initialize(schema)
|
7
|
+
super schema
|
8
|
+
end
|
9
|
+
|
10
|
+
def matches?(path, data)
|
11
|
+
if data.is_a?(String) || data.is_a?(Symbol)
|
12
|
+
data = data.to_s
|
13
|
+
match = data.match REGEX
|
14
|
+
if match
|
15
|
+
return MatchResult.new data
|
16
|
+
else
|
17
|
+
return MatchResult.new nil, path, "String does not match a uuid v4 scheme"
|
18
|
+
end
|
19
|
+
else
|
20
|
+
MatchResult.new nil, path, "Expected a uuid (v4)"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_openapi
|
25
|
+
{ type: :string, format: :uuid }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class UuidValidatorFactory < ValidatorFactory
|
30
|
+
def supports?(schema)
|
31
|
+
schema == Uuid
|
32
|
+
end
|
33
|
+
|
34
|
+
def create(schema)
|
35
|
+
UuidValidator.new schema
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require_relative './rails-param-validation/version'
|
2
|
+
|
3
|
+
require_relative './rails-param-validation/types/types'
|
4
|
+
|
5
|
+
require_relative './rails-param-validation/validator_factory'
|
6
|
+
|
7
|
+
require_relative './rails-param-validation/validators/integer'
|
8
|
+
require_relative './rails-param-validation/validators/float'
|
9
|
+
require_relative './rails-param-validation/validators/boolean'
|
10
|
+
require_relative './rails-param-validation/validators/string'
|
11
|
+
require_relative './rails-param-validation/validators/uuid'
|
12
|
+
require_relative './rails-param-validation/validators/regex'
|
13
|
+
require_relative './rails-param-validation/validators/date'
|
14
|
+
require_relative './rails-param-validation/validators/datetime'
|
15
|
+
require_relative './rails-param-validation/validators/custom_type'
|
16
|
+
require_relative './rails-param-validation/validators/constant'
|
17
|
+
require_relative './rails-param-validation/validators/array'
|
18
|
+
require_relative './rails-param-validation/validators/object'
|
19
|
+
require_relative './rails-param-validation/validators/optional'
|
20
|
+
require_relative './rails-param-validation/validators/hash'
|
21
|
+
require_relative './rails-param-validation/validators/alternatives'
|
22
|
+
|
23
|
+
require_relative './rails-param-validation/rails/extensions/annotation_extension' unless defined?(Rails)
|
24
|
+
require_relative './rails-param-validation/rails/rails' if defined?(Rails)
|
25
|
+
|
26
|
+
module RailsParamValidation
|
27
|
+
ValidatorFactory.register IntegerValidatorFactory.new
|
28
|
+
ValidatorFactory.register FloatValidatorFactory.new
|
29
|
+
ValidatorFactory.register BooleanValidatorFactory.new
|
30
|
+
ValidatorFactory.register StringValidatorFactory.new
|
31
|
+
ValidatorFactory.register UuidValidatorFactory.new
|
32
|
+
ValidatorFactory.register DateTimeValidatorFactory.new
|
33
|
+
ValidatorFactory.register DateValidatorFactory.new
|
34
|
+
ValidatorFactory.register CustomTypeValidatorFactory.new
|
35
|
+
ValidatorFactory.register RegexValidatorFactory.new
|
36
|
+
ValidatorFactory.register OptionalValidatorFactory.new
|
37
|
+
ValidatorFactory.register ObjectValidatorFactory.new
|
38
|
+
ValidatorFactory.register ArrayValidatorFactory.new
|
39
|
+
ValidatorFactory.register AlternativesValidatorFactory.new
|
40
|
+
ValidatorFactory.register ConstantValidatorFactory.new
|
41
|
+
ValidatorFactory.register HashValidatorFactory.new
|
42
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative 'lib/rails-param-validation/version'
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = "rails-param-validation"
|
5
|
+
spec.version = RailsParamValidation::VERSION
|
6
|
+
spec.authors = ["Oskar Kirmis"]
|
7
|
+
spec.email = ["oskar.kirmis@posteo.de"]
|
8
|
+
|
9
|
+
spec.summary = "Automatically validate rails parameter types"
|
10
|
+
spec.description = "Automatically validate rails parameter types"
|
11
|
+
spec.homepage = "https://git.iftrue.de/okirmis/rails-param-validation"
|
12
|
+
spec.license = "MIT"
|
13
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
14
|
+
|
15
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
16
|
+
|
17
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
18
|
+
spec.metadata["source_code_uri"] = "https://git.iftrue.de/okirmis/rails-param-validation"
|
19
|
+
spec.metadata["changelog_uri"] = "https://git.iftrue.de/okirmis/rails-param-validation"
|
20
|
+
|
21
|
+
# Specify which files should be added to the gem when it is released.
|
22
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
24
|
+
if `which git`.strip.size > 0
|
25
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
26
|
+
else
|
27
|
+
puts "WARNING: Not adding any files as git is missing."
|
28
|
+
end
|
29
|
+
end
|
30
|
+
spec.bindir = "bin"
|
31
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
32
|
+
spec.require_paths = ["lib"]
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rails-param-validation
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Oskar Kirmis
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-03-08 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Automatically validate rails parameter types
|
14
|
+
email:
|
15
|
+
- oskar.kirmis@posteo.de
|
16
|
+
executables:
|
17
|
+
- ".keep"
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- ".gitignore"
|
22
|
+
- ".gitlab-ci.yml"
|
23
|
+
- Gemfile
|
24
|
+
- LICENSE.txt
|
25
|
+
- README.md
|
26
|
+
- Rakefile
|
27
|
+
- bin/.keep
|
28
|
+
- docs/_config.yml
|
29
|
+
- docs/annotations.md
|
30
|
+
- docs/getting-started.md
|
31
|
+
- docs/image/error-screenshot.png
|
32
|
+
- docs/index.md
|
33
|
+
- docs/main-idea.md
|
34
|
+
- docs/openapi.md
|
35
|
+
- docs/type-definition.md
|
36
|
+
- lib/rails-param-validation.rb
|
37
|
+
- lib/rails-param-validation/errors/missing_parameter_annotation.rb
|
38
|
+
- lib/rails-param-validation/errors/no_matching_factory.rb
|
39
|
+
- lib/rails-param-validation/errors/param_validation_failed_error.rb
|
40
|
+
- lib/rails-param-validation/errors/type_not_found.rb
|
41
|
+
- lib/rails-param-validation/rails/action_definition.rb
|
42
|
+
- lib/rails-param-validation/rails/annotation_manager.rb
|
43
|
+
- lib/rails-param-validation/rails/config.rb
|
44
|
+
- lib/rails-param-validation/rails/extensions/annotation_extension.rb
|
45
|
+
- lib/rails-param-validation/rails/extensions/custom_type_extension.rb
|
46
|
+
- lib/rails-param-validation/rails/extensions/error.template.html.erb
|
47
|
+
- lib/rails-param-validation/rails/extensions/validation_extension.rb
|
48
|
+
- lib/rails-param-validation/rails/helper.rb
|
49
|
+
- lib/rails-param-validation/rails/openapi/openapi.rb
|
50
|
+
- lib/rails-param-validation/rails/openapi/routing_helper.rb
|
51
|
+
- lib/rails-param-validation/rails/rails.rb
|
52
|
+
- lib/rails-param-validation/rails/tasks/openapi.rake
|
53
|
+
- lib/rails-param-validation/types/types.rb
|
54
|
+
- lib/rails-param-validation/validator.rb
|
55
|
+
- lib/rails-param-validation/validator_factory.rb
|
56
|
+
- lib/rails-param-validation/validators/alternatives.rb
|
57
|
+
- lib/rails-param-validation/validators/array.rb
|
58
|
+
- lib/rails-param-validation/validators/boolean.rb
|
59
|
+
- lib/rails-param-validation/validators/constant.rb
|
60
|
+
- lib/rails-param-validation/validators/custom_type.rb
|
61
|
+
- lib/rails-param-validation/validators/date.rb
|
62
|
+
- lib/rails-param-validation/validators/datetime.rb
|
63
|
+
- lib/rails-param-validation/validators/float.rb
|
64
|
+
- lib/rails-param-validation/validators/hash.rb
|
65
|
+
- lib/rails-param-validation/validators/integer.rb
|
66
|
+
- lib/rails-param-validation/validators/object.rb
|
67
|
+
- lib/rails-param-validation/validators/optional.rb
|
68
|
+
- lib/rails-param-validation/validators/regex.rb
|
69
|
+
- lib/rails-param-validation/validators/string.rb
|
70
|
+
- lib/rails-param-validation/validators/uuid.rb
|
71
|
+
- lib/rails-param-validation/version.rb
|
72
|
+
- rails-param-validation.gemspec
|
73
|
+
homepage: https://git.iftrue.de/okirmis/rails-param-validation
|
74
|
+
licenses:
|
75
|
+
- MIT
|
76
|
+
metadata:
|
77
|
+
allowed_push_host: https://rubygems.org
|
78
|
+
homepage_uri: https://git.iftrue.de/okirmis/rails-param-validation
|
79
|
+
source_code_uri: https://git.iftrue.de/okirmis/rails-param-validation
|
80
|
+
changelog_uri: https://git.iftrue.de/okirmis/rails-param-validation
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options: []
|
83
|
+
require_paths:
|
84
|
+
- lib
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 2.3.0
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
requirements: []
|
96
|
+
rubygems_version: 3.0.1
|
97
|
+
signing_key:
|
98
|
+
specification_version: 4
|
99
|
+
summary: Automatically validate rails parameter types
|
100
|
+
test_files: []
|