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.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.gitlab-ci.yml +34 -0
  4. data/Gemfile +8 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +63 -0
  7. data/Rakefile +6 -0
  8. data/bin/.keep +0 -0
  9. data/docs/_config.yml +3 -0
  10. data/docs/annotations.md +62 -0
  11. data/docs/getting-started.md +32 -0
  12. data/docs/image/error-screenshot.png +0 -0
  13. data/docs/index.md +61 -0
  14. data/docs/main-idea.md +72 -0
  15. data/docs/openapi.md +39 -0
  16. data/docs/type-definition.md +178 -0
  17. data/lib/rails-param-validation/errors/missing_parameter_annotation.rb +9 -0
  18. data/lib/rails-param-validation/errors/no_matching_factory.rb +9 -0
  19. data/lib/rails-param-validation/errors/param_validation_failed_error.rb +12 -0
  20. data/lib/rails-param-validation/errors/type_not_found.rb +9 -0
  21. data/lib/rails-param-validation/rails/action_definition.rb +66 -0
  22. data/lib/rails-param-validation/rails/annotation_manager.rb +40 -0
  23. data/lib/rails-param-validation/rails/config.rb +48 -0
  24. data/lib/rails-param-validation/rails/extensions/annotation_extension.rb +95 -0
  25. data/lib/rails-param-validation/rails/extensions/custom_type_extension.rb +13 -0
  26. data/lib/rails-param-validation/rails/extensions/error.template.html.erb +86 -0
  27. data/lib/rails-param-validation/rails/extensions/validation_extension.rb +105 -0
  28. data/lib/rails-param-validation/rails/helper.rb +9 -0
  29. data/lib/rails-param-validation/rails/openapi/openapi.rb +128 -0
  30. data/lib/rails-param-validation/rails/openapi/routing_helper.rb +40 -0
  31. data/lib/rails-param-validation/rails/rails.rb +31 -0
  32. data/lib/rails-param-validation/rails/tasks/openapi.rake +32 -0
  33. data/lib/rails-param-validation/types/types.rb +100 -0
  34. data/lib/rails-param-validation/validator.rb +51 -0
  35. data/lib/rails-param-validation/validator_factory.rb +37 -0
  36. data/lib/rails-param-validation/validators/alternatives.rb +42 -0
  37. data/lib/rails-param-validation/validators/array.rb +49 -0
  38. data/lib/rails-param-validation/validators/boolean.rb +38 -0
  39. data/lib/rails-param-validation/validators/constant.rb +38 -0
  40. data/lib/rails-param-validation/validators/custom_type.rb +28 -0
  41. data/lib/rails-param-validation/validators/date.rb +39 -0
  42. data/lib/rails-param-validation/validators/datetime.rb +39 -0
  43. data/lib/rails-param-validation/validators/float.rb +39 -0
  44. data/lib/rails-param-validation/validators/hash.rb +52 -0
  45. data/lib/rails-param-validation/validators/integer.rb +39 -0
  46. data/lib/rails-param-validation/validators/object.rb +63 -0
  47. data/lib/rails-param-validation/validators/optional.rb +44 -0
  48. data/lib/rails-param-validation/validators/regex.rb +37 -0
  49. data/lib/rails-param-validation/validators/string.rb +31 -0
  50. data/lib/rails-param-validation/validators/uuid.rb +39 -0
  51. data/lib/rails-param-validation/version.rb +3 -0
  52. data/lib/rails-param-validation.rb +42 -0
  53. data/rails-param-validation.gemspec +33 -0
  54. 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,3 @@
1
+ module RailsParamValidation
2
+ VERSION = "0.1.0"
3
+ 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: []