dry-mutations 0.10.0 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9ed6f4872b96d36e2fea5b3eee2126c0555a0be
4
- data.tar.gz: 30fcd69467a7a873d9c39085b5be1f5bf2bd5d0c
3
+ metadata.gz: 760fe6575962834c3d430912f8caf909a1fb110b
4
+ data.tar.gz: 0de4a65993b087bcd3474f54f0a7633eb9a69148
5
5
  SHA512:
6
- metadata.gz: 59771ac3fd3024eb83451a8ba84ff4abb741ef5ce18954830e6da5f00ceda526ae09d1cb866577f5c3a1328bbb4e3edf09c3cc024b645e786758047551674e9f
7
- data.tar.gz: f74ccc264978e504a0c4a261c22db1c243e2c6936e6ee2546d0806f28e175a18241cd968c9dfb4db8e5ddcc0b0088b5fe3bb1b3bad51cc9d8335c075a5e413b5
6
+ metadata.gz: 35a791a79e10cb3aadf1ea351359aa6e92f554b3bcd481a3d61615839fc00750487184f6ec4d58b930a6903630471e3323fe98a61bc9aef50b1858f9f8df79e7
7
+ data.tar.gz: 6f42e471b03e94e146f8c273697808f080938a795ed75acdbe5c4e184faef00bb6a137d4777ce9078eb023adf64cdd1916c39d4000573bd9790dd7f4a4ef0135
@@ -2,3 +2,4 @@ en:
2
2
  errors:
3
3
  duck?: 'must respond to %{expected}'
4
4
  model?: 'must be a model (instance of %{expected})'
5
+ discard_empty: 'aleksei’s too dumb error (%{expected},) you won :-P'
@@ -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, **_params, &cb
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
- define_method(name) { Utils::Hash(@inputs[name]) } unless Nested === self
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, **_params, &cb
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
- define_method(name) { @inputs[name] } unless Nested === self
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
- define_helper_methods name
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 = schema.(@raw_inputs)
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
  ########################################################################
@@ -23,6 +23,10 @@ module Dry
23
23
  end unless expected.is_a? Module
24
24
  current.is_a?(expected)
25
25
  end
26
+
27
+ predicate(:discard_empty) do |_expected, _current|
28
+ true
29
+ end
26
30
  end
27
31
  end
28
32
  end
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module Mutations
3
- VERSION = '0.10.0'.freeze
3
+ VERSION = '0.10.1'.freeze
4
4
  end
5
5
  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.0
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-18 00:00:00.000000000 Z
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.6
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.