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 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.