dry-mutations 0.10.0 → 0.10.1
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/config/messages.yml +1 -0
- data/lib/dry/mutations/dsl/types.rb +14 -7
- data/lib/dry/mutations/extensions/command.rb +22 -1
- data/lib/dry/mutations/predicates.rb +4 -0
- data/lib/dry/mutations/schema.rb +16 -0
- data/lib/dry/mutations/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 760fe6575962834c3d430912f8caf909a1fb110b
|
4
|
+
data.tar.gz: 0de4a65993b087bcd3474f54f0a7633eb9a69148
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35a791a79e10cb3aadf1ea351359aa6e92f554b3bcd481a3d61615839fc00750487184f6ec4d58b930a6903630471e3323fe98a61bc9aef50b1858f9f8df79e7
|
7
|
+
data.tar.gz: 6f42e471b03e94e146f8c273697808f080938a795ed75acdbe5c4e184faef00bb6a137d4777ce9078eb023adf64cdd1916c39d4000573bd9790dd7f4a4ef0135
|
data/config/messages.yml
CHANGED
@@ -20,16 +20,20 @@ module Dry
|
|
20
20
|
########################################################################
|
21
21
|
|
22
22
|
# FIXME: errors in double+ nested hashes are not nested! dry-rb glitch?
|
23
|
-
def hash name, **
|
23
|
+
def hash name, **params, &cb
|
24
24
|
current = @current # closure scope
|
25
25
|
|
26
26
|
schema { __send__(current, name).schema(Nested.!(current, &cb)) }
|
27
27
|
|
28
|
-
|
28
|
+
case
|
29
|
+
when params[:discard_empty] then schema.discarded!(name)
|
30
|
+
when Nested === self then # do nothing
|
31
|
+
else define_method(name) { Utils::Hash(@inputs[name]) }
|
32
|
+
end
|
29
33
|
end
|
30
34
|
|
31
35
|
# FIXME: array of anonymous objects
|
32
|
-
def array name, **
|
36
|
+
def array name, **params, &cb
|
33
37
|
current = @current # closure scope
|
34
38
|
|
35
39
|
nested = begin
|
@@ -40,7 +44,11 @@ module Dry
|
|
40
44
|
|
41
45
|
name.nil? ? schema { each(nested) } : schema { __send__(current, name).each(nested) }
|
42
46
|
|
43
|
-
|
47
|
+
case
|
48
|
+
when params[:discard_empty] then schema.discarded!(name)
|
49
|
+
when Nested === self then # do nothing
|
50
|
+
else define_method(name) { @inputs[name] }
|
51
|
+
end
|
44
52
|
end
|
45
53
|
|
46
54
|
########################################################################
|
@@ -95,7 +103,7 @@ module Dry
|
|
95
103
|
Utils.smart_send(__send__(current, name), *type, **opts)
|
96
104
|
end
|
97
105
|
|
98
|
-
|
106
|
+
params[:discard_empty] ? schema.discarded!(name) : define_helper_methods(name)
|
99
107
|
end
|
100
108
|
|
101
109
|
%i(string integer float date time boolean).each do |m|
|
@@ -107,9 +115,8 @@ module Dry
|
|
107
115
|
private
|
108
116
|
|
109
117
|
def optionality params
|
110
|
-
nils, empty = params.delete(:nils), params.delete(:empty)
|
111
118
|
# FIXME: Should we treat `empty?` in some specific way?
|
112
|
-
nils || empty ? :maybe : :filled
|
119
|
+
params.delete(:nils) || params.delete(:empty) || params[:discard_empty] ? :maybe : :filled
|
113
120
|
end
|
114
121
|
|
115
122
|
def define_helper_methods name
|
@@ -37,7 +37,7 @@ module Dry
|
|
37
37
|
def initialize(*args)
|
38
38
|
@raw_inputs = Utils.RawInputs(*args)
|
39
39
|
|
40
|
-
@validation_result =
|
40
|
+
@validation_result = discard_empty!
|
41
41
|
|
42
42
|
@inputs = Utils.Hash @validation_result.output
|
43
43
|
|
@@ -66,6 +66,27 @@ module Dry
|
|
66
66
|
run.either
|
67
67
|
end
|
68
68
|
|
69
|
+
########################################################################
|
70
|
+
### Legacy mutations support
|
71
|
+
########################################################################
|
72
|
+
|
73
|
+
def vacant?(value)
|
74
|
+
case value
|
75
|
+
when NilClass then true
|
76
|
+
when Integer, Float then false # FIXME make sure!
|
77
|
+
when ->(v) { v.respond_to? :empty? } then value.empty?
|
78
|
+
when ->(v) { v.respond_to? :blank? } then value.blank?
|
79
|
+
else false
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def discard_empty!
|
84
|
+
discarded = schema.discarded
|
85
|
+
schema.(
|
86
|
+
::Dry::Mutations::Utils.Hash(@raw_inputs.reject { |k, v| discarded.include?(k.to_sym) && vacant?(v) })
|
87
|
+
)
|
88
|
+
end
|
89
|
+
|
69
90
|
########################################################################
|
70
91
|
### Overrides
|
71
92
|
########################################################################
|
data/lib/dry/mutations/schema.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module Dry
|
2
2
|
module Mutations
|
3
3
|
class Schema < ::Dry::Validation::Schema
|
4
|
+
@@discarded = []
|
5
|
+
|
4
6
|
MESSAGES_FILE = (::File.join __dir__, '..', '..', '..', 'config', 'messages.yml').freeze
|
5
7
|
|
6
8
|
configure do |config|
|
@@ -8,8 +10,22 @@ module Dry
|
|
8
10
|
config.hash_type = :symbolized
|
9
11
|
config.input_processor = :sanitizer
|
10
12
|
|
13
|
+
config.instance_variable_set :@discarded, []
|
14
|
+
|
11
15
|
predicates(::Dry::Mutations::Predicates)
|
12
16
|
end
|
17
|
+
|
18
|
+
def discarded
|
19
|
+
@@discarded
|
20
|
+
end
|
21
|
+
|
22
|
+
def discarded?
|
23
|
+
discarded.empty?
|
24
|
+
end
|
25
|
+
|
26
|
+
def discarded! value
|
27
|
+
discarded << value
|
28
|
+
end
|
13
29
|
end
|
14
30
|
end
|
15
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-mutations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aleksei Matiushkin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -389,7 +389,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
389
389
|
version: '0'
|
390
390
|
requirements: []
|
391
391
|
rubyforge_project:
|
392
|
-
rubygems_version: 2.4.
|
392
|
+
rubygems_version: 2.4.8
|
393
393
|
signing_key:
|
394
394
|
specification_version: 4
|
395
395
|
summary: Mutations gem interface implemented with `dry-rb`’s validation schemas.
|