rails-param-validation 0.2.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rails-param-validation/rails/action_definition.rb +15 -1
- data/lib/rails-param-validation/rails/config.rb +7 -1
- data/lib/rails-param-validation/rails/extensions/annotation_extension.rb +12 -2
- data/lib/rails-param-validation/rails/openapi/openapi.rb +4 -0
- data/lib/rails-param-validation/rails/openapi/routing_helper.rb +3 -1
- data/lib/rails-param-validation/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e81185301762be6703608dfc575c27813c49fde9969057c0b821c7cc78f7680
|
4
|
+
data.tar.gz: 5c3c75f3d2a8e6275d1c794540d972e62b13ada2592a5602ca71bb80794d6f05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1af2e48e2ef3d6af489e009177839378b5e19b8817a456a9cb1e399e525b2a974d52ed1986a321c44035248c527d8ef1b7711de0e175252791a12567a8bd98da
|
7
|
+
data.tar.gz: b4528b9e92d0c7079cced511255760766771ba6b6f9e5f013d8f1049bdf1fce6f10f86750760bae7ebb12d53ce66b027d18d4228c7dd953d5f1e6fa70af60979
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module RailsParamValidation
|
2
2
|
|
3
3
|
class ActionDefinition
|
4
|
-
attr_reader :params, :request_body_type, :paths, :responses, :controller, :action
|
4
|
+
attr_reader :params, :request_body_type, :paths, :responses, :controller, :action, :security
|
5
5
|
attr_accessor :description
|
6
6
|
|
7
7
|
def initialize
|
@@ -11,6 +11,8 @@ module RailsParamValidation
|
|
11
11
|
@description = ''
|
12
12
|
@request_body_type = RailsParamValidation.config.default_body_content_type if defined?(Rails)
|
13
13
|
@responses = {}
|
14
|
+
@flags = {}
|
15
|
+
@security = []
|
14
16
|
end
|
15
17
|
|
16
18
|
def store_origin!(controller, action)
|
@@ -38,6 +40,18 @@ module RailsParamValidation
|
|
38
40
|
}
|
39
41
|
end
|
40
42
|
|
43
|
+
def add_security(security)
|
44
|
+
@security.push(security.is_a?(Hash) ? security : { security => [] })
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_flag(name, value)
|
48
|
+
@flags[name.to_sym] = value
|
49
|
+
end
|
50
|
+
|
51
|
+
def flag(name, default)
|
52
|
+
@flags.fetch(name, default)
|
53
|
+
end
|
54
|
+
|
41
55
|
def add_response(status, schema, description)
|
42
56
|
@responses[status] = {
|
43
57
|
schema: schema,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module RailsParamValidation
|
2
2
|
|
3
3
|
class OpenApiMetaConfig
|
4
|
-
attr_accessor :title, :version, :url, :description, :file_path
|
4
|
+
attr_accessor :title, :version, :url, :description, :file_path, :security_schemes, :skip_format_endpoints
|
5
5
|
|
6
6
|
def initialize
|
7
7
|
app_class = Rails.application.class
|
@@ -11,6 +11,8 @@ module RailsParamValidation
|
|
11
11
|
self.version = '1.0'
|
12
12
|
self.description = "#{app_name(app_class)} application"
|
13
13
|
self.file_path = Rails.root.join("openapi.yaml").to_s
|
14
|
+
self.security_schemes = {}
|
15
|
+
self.skip_format_endpoints = true
|
14
16
|
end
|
15
17
|
|
16
18
|
private
|
@@ -27,6 +29,8 @@ module RailsParamValidation
|
|
27
29
|
attr_accessor :use_validator_caching
|
28
30
|
attr_accessor :raise_on_missing_annotation
|
29
31
|
attr_accessor :default_body_content_type
|
32
|
+
attr_accessor :default_action_flags
|
33
|
+
attr_accessor :post_action_definition_hook
|
30
34
|
attr_reader :openapi
|
31
35
|
|
32
36
|
def initialize
|
@@ -35,6 +39,8 @@ module RailsParamValidation
|
|
35
39
|
@use_validator_caching = Rails.env.production?
|
36
40
|
@raise_on_missing_annotation = true
|
37
41
|
@default_body_content_type = 'application/json'
|
42
|
+
@default_action_flags = {}
|
43
|
+
@post_action_definition_hook = ->(_action_definition) {}
|
38
44
|
end
|
39
45
|
end
|
40
46
|
|
@@ -22,6 +22,7 @@ module RailsParamValidation
|
|
22
22
|
method_name = name.to_sym
|
23
23
|
|
24
24
|
@param_definition.store_origin! class_name, method_name
|
25
|
+
RailsParamValidation.config.post_action_definition_hook.call(@param_definition)
|
25
26
|
@param_definition.finalize! class_name, method_name
|
26
27
|
|
27
28
|
AnnotationManager.instance.annotate_method! self, name, :param_definition, @param_definition
|
@@ -84,12 +85,21 @@ module RailsParamValidation
|
|
84
85
|
param_definition.add_response status, schema, description
|
85
86
|
end
|
86
87
|
|
87
|
-
def
|
88
|
+
def flag(name, value, _comment = nil)
|
89
|
+
@param_definition.add_flag name, value
|
90
|
+
end
|
91
|
+
|
92
|
+
def security_hint(security)
|
93
|
+
@param_definition.add_security(security)
|
94
|
+
end
|
95
|
+
|
96
|
+
def action(description = nil, flags = RailsParamValidation.config.default_action_flags)
|
88
97
|
@param_definition = ActionDefinition.new
|
89
98
|
@param_definition.description = description
|
99
|
+
flags.each { |name, value| @param_definition.add_flag name, value }
|
90
100
|
|
91
101
|
yield
|
92
102
|
end
|
93
103
|
end
|
94
104
|
end
|
95
|
-
end
|
105
|
+
end
|
@@ -51,6 +51,7 @@ module RailsParamValidation
|
|
51
51
|
operationId: "#{route[:method].downcase}#{route[:path].split(/[^a-zA-Z0-9]+/).map(&:downcase).map(&:capitalize).join}",
|
52
52
|
tags: [operation.controller],
|
53
53
|
parameters: parameters,
|
54
|
+
security: operation.security,
|
54
55
|
responses: operation.responses.map do |status, values|
|
55
56
|
[
|
56
57
|
status.to_s,
|
@@ -90,6 +91,9 @@ module RailsParamValidation
|
|
90
91
|
object[:components][:schemas][name] = ValidatorFactory.create(AnnotationTypes::CustomT.registered(name)).to_openapi
|
91
92
|
end
|
92
93
|
|
94
|
+
if RailsParamValidation.openapi.security_schemes.any?
|
95
|
+
object[:components][:securitySchemes] = RailsParamValidation.openapi.security_schemes
|
96
|
+
end
|
93
97
|
stringify_values object
|
94
98
|
end
|
95
99
|
|
@@ -29,7 +29,9 @@ module RailsParamValidation
|
|
29
29
|
Rails.application.routes.routes.each do |route|
|
30
30
|
if route.defaults[:controller] == controller && route.defaults[:action] == action
|
31
31
|
Formatter.new.accept(route.path.ast, [""]).each do |path|
|
32
|
-
|
32
|
+
if !RailsParamValidation.openapi.skip_format_endpoints || !path.end_with?('.{format}')
|
33
|
+
routes.push(path: path, method: route.verb)
|
34
|
+
end
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-param-validation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oskar Kirmis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Declarative parameter definition and validation for Rails
|
14
14
|
email:
|