params_ready 0.0.2 → 0.0.5
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/lib/params_ready.rb +1 -1
- data/lib/params_ready/parameter/value_parameter.rb +13 -9
- data/lib/params_ready/value/coder.rb +30 -7
- metadata +48 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3fe16e13531ab2ae207b8656a5daf5e71ad4db06adf638936e5a4f80803dc0a8
|
4
|
+
data.tar.gz: 0357fb20e9c206e68a257936760d8d20c1c9fdf863c61f50d730d29340362742
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd90dfe134db52a495589a8a56245be744e20239285afef6a04dc38f47337ecdadcbf02a758391e936d48654da3ffd9b72a938654aec05a3b9cc19390240bdf5
|
7
|
+
data.tar.gz: 2389b613a4fe45e2fb32cc2469da23b761e670e6af9d5305758caa52254a66545237606046955d8ec848f4a58aea2e27c8b878f281fbecbd9e0064edc899d9d7
|
data/lib/params_ready.rb
CHANGED
@@ -70,28 +70,32 @@ module ParamsReady
|
|
70
70
|
builder_class.register name
|
71
71
|
end
|
72
72
|
|
73
|
-
def self.instance(name, coder_or_name = nil, altn: nil)
|
73
|
+
def self.instance(name, coder_or_name = nil, altn: nil, **opts)
|
74
74
|
coder = if coder_or_name.is_a? Symbol
|
75
|
-
self.coder(coder_or_name)
|
76
|
-
|
77
|
-
Value::GenericCoder.new(name)
|
75
|
+
coder_class = self.coder(coder_or_name)
|
76
|
+
coder_class.instance(**opts)
|
78
77
|
else
|
79
|
-
|
78
|
+
raise ParamsReadyError, 'Expected option hash to be empty' unless opts.empty?
|
79
|
+
if coder_or_name.nil?
|
80
|
+
Value::GenericCoder.new(name)
|
81
|
+
else
|
82
|
+
coder_or_name
|
83
|
+
end
|
80
84
|
end
|
81
85
|
new ValueParameterDefinition.new(name, coder, altn: altn)
|
82
86
|
end
|
83
87
|
|
84
|
-
def self.[](
|
88
|
+
def self.[](coder_name)
|
85
89
|
builder = Class.new(self)
|
86
|
-
capitalized =
|
90
|
+
capitalized = coder_name.to_s.split('_').map(&:capitalize).join
|
87
91
|
qualified = "#{self.name}::#{capitalized}Builder".freeze
|
88
92
|
|
89
93
|
builder.define_singleton_method :name do
|
90
94
|
qualified
|
91
95
|
end
|
92
96
|
|
93
|
-
builder.define_singleton_method :instance do |name, altn: nil|
|
94
|
-
superclass.instance(name,
|
97
|
+
builder.define_singleton_method :instance do |name, altn: nil, **opts|
|
98
|
+
superclass.instance(name, coder_name, altn: altn, **opts)
|
95
99
|
end
|
96
100
|
|
97
101
|
builder
|
@@ -18,9 +18,8 @@ module ParamsReady
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
class
|
21
|
+
class AbstractCoder
|
22
22
|
extend Extensions::ClassReaderWriter
|
23
|
-
extend Coercion
|
24
23
|
|
25
24
|
def self.value_class_name
|
26
25
|
last = self.name.split("::").last
|
@@ -31,10 +30,38 @@ module ParamsReady
|
|
31
30
|
type_identifier :value
|
32
31
|
end
|
33
32
|
|
33
|
+
class Coder < AbstractCoder
|
34
|
+
extend Coercion
|
35
|
+
|
36
|
+
def self.instance(**opts)
|
37
|
+
raise ParamsReadyError, "No options expected, got: #{opts}" unless opts.empty?
|
38
|
+
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
class Instantiable < AbstractCoder
|
43
|
+
include Coercion
|
44
|
+
|
45
|
+
def self.instance(**opts)
|
46
|
+
new **opts
|
47
|
+
end
|
48
|
+
|
49
|
+
def type_identifier
|
50
|
+
self.class.type_identifier
|
51
|
+
end
|
52
|
+
|
53
|
+
def strict_default?
|
54
|
+
self.class.strict_default?
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
|
34
60
|
class GenericCoder
|
35
61
|
extend Extensions::LateInit
|
36
62
|
extend Extensions::Finalizer
|
37
63
|
include Extensions::Finalizer::InstanceMethods
|
64
|
+
include Coercion
|
38
65
|
|
39
66
|
def initialize(name)
|
40
67
|
@name = name
|
@@ -43,8 +70,6 @@ module ParamsReady
|
|
43
70
|
@type_identifier = nil
|
44
71
|
end
|
45
72
|
|
46
|
-
def strict_default?; true; end
|
47
|
-
|
48
73
|
late_init(:coerce, getter: false)
|
49
74
|
late_init(:format, getter: false)
|
50
75
|
late_init(:type_identifier, obligatory: false)
|
@@ -53,10 +78,8 @@ module ParamsReady
|
|
53
78
|
@name
|
54
79
|
end
|
55
80
|
|
56
|
-
def
|
81
|
+
def coerce(input, context)
|
57
82
|
@coerce[input, context]
|
58
|
-
rescue => _error
|
59
|
-
raise CoercionError.new(input, @name)
|
60
83
|
end
|
61
84
|
|
62
85
|
def format(value, format)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: params_ready
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Milsimer
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '6'
|
34
|
-
type: :
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
@@ -66,9 +66,52 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0.9'
|
69
|
-
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest-rg
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '5'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '5'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simplecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.20'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.20'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: sqlite3
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1'
|
111
|
+
description: "Create well defined controller interfaces. Sanitize, coerce and constrain
|
70
112
|
\nincoming parameters to safely populate data models, hold session state in URI
|
71
|
-
variables \nacross different locations, build SQL queries
|
113
|
+
variables \nacross different locations, build SQL queries, apply ordering and offset/keyset
|
114
|
+
pagination.\n"
|
72
115
|
email: tomas.milsimer@protonmail.com
|
73
116
|
executables: []
|
74
117
|
extensions: []
|
@@ -174,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
217
|
- !ruby/object:Gem::Version
|
175
218
|
version: '0'
|
176
219
|
requirements: []
|
177
|
-
rubygems_version: 3.
|
220
|
+
rubygems_version: 3.0.3
|
178
221
|
signing_key:
|
179
222
|
specification_version: 4
|
180
223
|
summary: Define controller interfaces in Rails
|