typed-parameter 0.3.0 → 0.4.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/README.md +76 -1
- data/lib/typed_parameter.rb +2 -3
- data/lib/typed_parameter/base.rb +8 -6
- data/lib/typed_parameter/constraints.rb +2 -2
- data/lib/typed_parameter/enum_constraint.rb +1 -1
- data/lib/typed_parameter/errors.rb +7 -0
- data/lib/typed_parameter/permit_field_generator.rb +1 -1
- data/lib/typed_parameter/swagger/component_generator.rb +6 -0
- data/lib/typed_parameter/swagger/type_generator.rb +1 -1
- data/lib/typed_parameter/swagger/types.rb +24 -0
- data/lib/typed_parameter/type_constraint.rb +1 -1
- data/lib/typed_parameter/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85aaf512215b5dd4abc568b69190dde93d0894befac1a1f1b6c9097cd468a9f1
|
4
|
+
data.tar.gz: 51d58c512d2f057b6ce7071876a8b01ad6360fd9d9d70aaa323ce56e96ecdaca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26b48a740e5f53583003ef50f9c2a3c016cb19a8146b74e90660865fa224f8de9e01bbe150e83c379091f069021281f394d36e7ec204e40f4b586c15126c2034
|
7
|
+
data.tar.gz: 144a0dab8ec0676cdb4fb3d0447769df7d8c0cc007d38830f2499fd16cba1cf78a194b64644b5e223a3e3a82188ccc30f0e7b5cdb5fa3f2d60b0f2d47bc1a426
|
data/README.md
CHANGED
@@ -163,10 +163,85 @@ end
|
|
163
163
|
~~~
|
164
164
|
Example 4. CustomType
|
165
165
|
------
|
166
|
-
|
166
|
+
If You want to use your custom type like Email, just create two file.
|
167
|
+
- your type file. like "Email"
|
168
|
+
- yout type constant. like "EmailConstrant"
|
169
|
+
|
170
|
+
~~~ruby
|
171
|
+
class Email
|
172
|
+
def initialize(value)
|
173
|
+
@email = value
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
class EmailConstrant
|
178
|
+
class << self
|
179
|
+
EMAIL_REGREX = //
|
180
|
+
|
181
|
+
# using convert value to your type
|
182
|
+
def value(value)
|
183
|
+
raise ArgumentError unless EMAIL_REGREX.match? value
|
184
|
+
|
185
|
+
Email.new(value)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
class EmailSwaggerType
|
191
|
+
class << self
|
192
|
+
def value
|
193
|
+
{ type: :string }
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
# Register your type to typed-parameter when application initialize.
|
199
|
+
TypedParameter::ParameterTypes.register Email
|
200
|
+
TypedParameter::Constants.register :Email, EmailConstrant
|
201
|
+
TypedParameter::Swagger::Types.register :Email, EmailSwaggerType
|
202
|
+
~~~
|
167
203
|
|
168
204
|
Example 5. Swaggerize
|
169
205
|
------
|
206
|
+
With Rswag(https://github.com/rswag/rswag), you can swaggerize your parameter types.
|
207
|
+
|
208
|
+
~~~ruby
|
209
|
+
class SwaggerParameter < TypedParameter::Base
|
210
|
+
field :string, String, enum: ["one", "two"], description: "String Field"
|
211
|
+
field :integer, Integer, description: "Integer Field"
|
212
|
+
field :ref_field, SwaggerRefParameter
|
213
|
+
end
|
214
|
+
|
215
|
+
class SwaggerRefParameter < TypedParameter::Base
|
216
|
+
field :string, String, description: "Ref String Field"
|
217
|
+
end
|
218
|
+
|
219
|
+
SwaggerParameter.swagger_properties
|
220
|
+
# =>
|
221
|
+
# {
|
222
|
+
# string: { type: :string, enum: ["one", "two" ], description: "String Field" },
|
223
|
+
# integer: { type: :integer, description: "Integer Field" },
|
224
|
+
# ref_field: { "$ref": "#/components/schemas/SwaggerRefParamter" }
|
225
|
+
# }
|
226
|
+
#
|
227
|
+
|
228
|
+
# Add Components in your swagger
|
229
|
+
# in swagger_helper
|
230
|
+
components = TypedParameter::Swagger::ComponentGenerator.generate_all!
|
231
|
+
|
232
|
+
config.swagger_docs = {
|
233
|
+
'v1/swagger.yaml' => {
|
234
|
+
openapi: '3.0.1',
|
235
|
+
# ...,
|
236
|
+
components: {
|
237
|
+
schemas: {
|
238
|
+
**components
|
239
|
+
}
|
240
|
+
}
|
241
|
+
#...
|
242
|
+
}
|
243
|
+
}
|
244
|
+
~~~
|
170
245
|
...
|
171
246
|
|
172
247
|
|
data/lib/typed_parameter.rb
CHANGED
@@ -13,6 +13,5 @@ require 'typed_parameter/swagger/type_generator'
|
|
13
13
|
require 'typed_parameter/swagger/property_generator'
|
14
14
|
require 'typed_parameter/swagger/component_generator'
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
end
|
16
|
+
require 'typed_parameter/errors'
|
17
|
+
module TypedParameter; end
|
data/lib/typed_parameter/base.rb
CHANGED
@@ -2,7 +2,7 @@ module TypedParameter
|
|
2
2
|
class Base
|
3
3
|
class << self
|
4
4
|
def field(name, type, **kargs)
|
5
|
-
initialize_permitted_fields(name, type)
|
5
|
+
initialize_permitted_fields(name, type) # Need to remove! we don't need strong_parameter's filter
|
6
6
|
initialize_swagger_properties(name, type, kargs)
|
7
7
|
initialize_constraints(name, type, kargs)
|
8
8
|
end
|
@@ -10,7 +10,7 @@ module TypedParameter
|
|
10
10
|
def permit(params)
|
11
11
|
raise ArgumentError unless params.class <= ActionController::Parameters
|
12
12
|
|
13
|
-
use_constraints
|
13
|
+
use_constraints(params).permit! # will change to use_constraints(params).permit!
|
14
14
|
end
|
15
15
|
|
16
16
|
def fields
|
@@ -46,16 +46,18 @@ module TypedParameter
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def use_constraints(params)
|
49
|
+
paramters = ActionController::Parameters.new
|
50
|
+
|
49
51
|
__constraints.each do |name, type, options|
|
50
52
|
value = params[name]
|
51
|
-
raise
|
53
|
+
raise RequiredFieldError, "(#{self.name}) #{name} is required" if options[:required] && !value.present?
|
52
54
|
next unless value.present?
|
53
55
|
|
54
|
-
|
55
|
-
|
56
|
+
paramters[name] = TypeConstraint.value(type, value)
|
57
|
+
paramters[name] = EnumConstraint.value(value, options[:enum]) if options[:enum]
|
56
58
|
end
|
57
59
|
|
58
|
-
|
60
|
+
paramters
|
59
61
|
end
|
60
62
|
|
61
63
|
def __fields
|
@@ -3,7 +3,7 @@ require 'typed_parameter/constraints/integer_constraint'
|
|
3
3
|
require 'typed_parameter/constraints/float_constraint'
|
4
4
|
require 'typed_parameter/constraints/string_constraint'
|
5
5
|
require 'typed_parameter/constraints/date_constraint'
|
6
|
-
require 'typed_parameter/constraints/
|
6
|
+
require 'typed_parameter/constraints/date_time_constraint'
|
7
7
|
require 'typed_parameter/constraints/boolean_constraint'
|
8
8
|
|
9
9
|
module TypedParameter
|
@@ -14,7 +14,7 @@ module TypedParameter
|
|
14
14
|
@constraints[key] = constraint
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
17
|
+
def [](name)
|
18
18
|
@constraints[name].freeze
|
19
19
|
end
|
20
20
|
end
|
@@ -2,7 +2,7 @@ module TypedParameter
|
|
2
2
|
module EnumConstraint
|
3
3
|
def self.value(value, enums)
|
4
4
|
enums = enums.map(&:to_s) if value.is_a? String
|
5
|
-
raise
|
5
|
+
raise EnumFieldError, "#{value} must be in #{enums.join(', ')}" unless value.in? enums
|
6
6
|
|
7
7
|
value
|
8
8
|
end
|
@@ -5,7 +5,7 @@ module TypedParameter
|
|
5
5
|
type_class = [type].flatten.first
|
6
6
|
|
7
7
|
props = if type.is_a? Array
|
8
|
-
type_class.in?
|
8
|
+
type_class.in?(TypedParameter::ParameterTypes.types) ? [] : generate_properties(type_class)
|
9
9
|
else
|
10
10
|
generate_properties(type_class)
|
11
11
|
end
|
@@ -8,6 +8,12 @@ module TypedParameter
|
|
8
8
|
|
9
9
|
{ "#{key}": { type: :object, properties: properties } }
|
10
10
|
end
|
11
|
+
|
12
|
+
def generate_all!
|
13
|
+
parameter_classes = TypedParameter::Base.descendants.reject { |c| c.fields.empty? }
|
14
|
+
|
15
|
+
parameter_classes.reduce({}) { |prev, curr| prev.merge(generate(curr)) }
|
16
|
+
end
|
11
17
|
end
|
12
18
|
end
|
13
19
|
end
|
@@ -6,7 +6,7 @@ module TypedParameter
|
|
6
6
|
return array_generate(type) if type.is_a? Array
|
7
7
|
return hash_generate(type) if type.is_a? Hash
|
8
8
|
|
9
|
-
swagger_type =
|
9
|
+
swagger_type = Swagger::Types[type.name.to_sym]
|
10
10
|
swagger_type&.value || { ref: type }
|
11
11
|
end
|
12
12
|
|
@@ -5,3 +5,27 @@ require 'typed_parameter/swagger/types/string_type'
|
|
5
5
|
require 'typed_parameter/swagger/types/date_type'
|
6
6
|
require 'typed_parameter/swagger/types/date_time_type'
|
7
7
|
require 'typed_parameter/swagger/types/boolean_type'
|
8
|
+
|
9
|
+
module TypedParameter
|
10
|
+
module Swagger
|
11
|
+
module Types
|
12
|
+
class << self
|
13
|
+
def register(key, type)
|
14
|
+
@swagger_types ||= {}
|
15
|
+
@swagger_types[key] = type
|
16
|
+
end
|
17
|
+
|
18
|
+
def [](key)
|
19
|
+
@swagger_types[key].freeze
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
TypedParameter::Swagger::Types.register :Integer, TypedParameter::Swagger::Types::IntegerType
|
27
|
+
TypedParameter::Swagger::Types.register :String, TypedParameter::Swagger::Types::StringType
|
28
|
+
TypedParameter::Swagger::Types.register :Float, TypedParameter::Swagger::Types::FloatType
|
29
|
+
TypedParameter::Swagger::Types.register :Date, TypedParameter::Swagger::Types::DateType
|
30
|
+
TypedParameter::Swagger::Types.register :DateTime, TypedParameter::Swagger::Types::DateTimeType
|
31
|
+
TypedParameter::Swagger::Types.register :Boolean, TypedParameter::Swagger::Types::BooleanType
|
@@ -7,7 +7,7 @@ module TypedParameter
|
|
7
7
|
if type_class < TypedParameter::Base
|
8
8
|
type.is_a?(Array) ? parameter_array(type_class, value) : type.permit(value)
|
9
9
|
else
|
10
|
-
constraint = TypedParameter::Constraints
|
10
|
+
constraint = TypedParameter::Constraints[type_class.name.to_sym]
|
11
11
|
constraint ||= TypedParameter::Constraints::StringConstraint # Default
|
12
12
|
|
13
13
|
type.is_a?(Array) ? constraint_array(constraint, value) : constraint.value(value)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: typed-parameter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Minwoo Jo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- lib/typed_parameter/constraints/integer_constraint.rb
|
67
67
|
- lib/typed_parameter/constraints/string_constraint.rb
|
68
68
|
- lib/typed_parameter/enum_constraint.rb
|
69
|
+
- lib/typed_parameter/errors.rb
|
69
70
|
- lib/typed_parameter/parameter_types.rb
|
70
71
|
- lib/typed_parameter/permit_field_generator.rb
|
71
72
|
- lib/typed_parameter/swagger/component_generator.rb
|