dry-mutations 0.99.100 → 1.0.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/.rubocop.yml +15 -3
- data/.travis.yml +0 -2
- data/Gemfile.lock +18 -6
- data/README.md +9 -0
- data/config/messages.yml +1 -0
- data/dry-mutations.gemspec +2 -0
- data/lib/dry/mutations/extensions/command.rb +11 -6
- data/lib/dry/mutations/predicates.rb +11 -0
- data/lib/dry/mutations/schema.rb +0 -1
- data/lib/dry/mutations/utils/dry-mutations.rb +2 -2
- data/lib/dry/mutations/version.rb +1 -1
- metadata +36 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 23228f617c8162feb245848da2e562f4b9425bc7
|
4
|
+
data.tar.gz: 40dc518c5051e58a87950020bccdaf0de17b7dd9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 72fed50dd92a78813505cb95db253999860513d8253f0c5a568fa7dba370920c7cc8439b6ebba3a58473bf7c03ffb727481f84802e090029c8b0da93621d1e85
|
7
|
+
data.tar.gz: b91a085cdc2d0a279d527734c3b55e632cda6722cacc898e0d213c3612182f8800ff7256ffe6b1be0debd2103381301278630755d6d6f219680cc7a17f611750
|
data/.rubocop.yml
CHANGED
@@ -19,15 +19,27 @@ Metrics/PerceivedComplexity:
|
|
19
19
|
Metrics/AbcSize:
|
20
20
|
Max: 42
|
21
21
|
|
22
|
+
Metrics/ModuleLength:
|
23
|
+
Max: 256
|
24
|
+
|
25
|
+
Metrics/BlockLength:
|
26
|
+
Max: 64
|
27
|
+
|
28
|
+
################################################################################
|
29
|
+
|
30
|
+
Lint/EmptyWhen:
|
31
|
+
Enabled: false
|
32
|
+
|
22
33
|
################################################################################
|
23
34
|
|
24
35
|
Style/SignalException:
|
25
36
|
EnforcedStyle: semantic
|
26
37
|
|
38
|
+
Style/PercentLiteralDelimiters:
|
39
|
+
Enabled: false
|
40
|
+
|
27
41
|
Style/MethodName:
|
28
|
-
|
29
|
-
- 'lib/dry/mutations/utils.rb'
|
30
|
-
- 'lib/dry/transactions/*.rb'
|
42
|
+
Enabled: false
|
31
43
|
|
32
44
|
Style/VariableName:
|
33
45
|
SupportedStyles: snake_case
|
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dry-mutations (0.
|
4
|
+
dry-mutations (1.0.0)
|
5
5
|
activesupport (>= 3.2, < 5)
|
6
6
|
dry-transaction (~> 0.9)
|
7
7
|
dry-validation (~> 0.10)
|
@@ -11,16 +11,25 @@ PATH
|
|
11
11
|
GEM
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
+
activemodel (4.2.8)
|
15
|
+
activesupport (= 4.2.8)
|
16
|
+
builder (~> 3.1)
|
17
|
+
activerecord (4.2.8)
|
18
|
+
activemodel (= 4.2.8)
|
19
|
+
activesupport (= 4.2.8)
|
20
|
+
arel (~> 6.0)
|
14
21
|
activesupport (4.2.8)
|
15
22
|
i18n (~> 0.7)
|
16
23
|
minitest (~> 5.1)
|
17
24
|
thread_safe (~> 0.3, >= 0.3.4)
|
18
25
|
tzinfo (~> 1.1)
|
26
|
+
arel (6.0.4)
|
19
27
|
awesome_print (1.7.0)
|
28
|
+
builder (3.2.3)
|
20
29
|
codeclimate-test-reporter (1.0.3)
|
21
30
|
simplecov
|
22
31
|
coderay (1.1.1)
|
23
|
-
concurrent-ruby (1.0.
|
32
|
+
concurrent-ruby (1.0.5)
|
24
33
|
diff-lcs (1.2.5)
|
25
34
|
docile (1.1.5)
|
26
35
|
dry-configurable (0.6.1)
|
@@ -59,11 +68,11 @@ GEM
|
|
59
68
|
dry-logic (~> 0.4, >= 0.4.0)
|
60
69
|
dry-types (~> 0.9, >= 0.9.0)
|
61
70
|
hashie (3.5.5)
|
62
|
-
i18n (0.8.
|
71
|
+
i18n (0.8.4)
|
63
72
|
inflecto (0.0.2)
|
64
|
-
json (
|
73
|
+
json (2.0.3)
|
65
74
|
method_source (0.8.2)
|
66
|
-
minitest (5.10.
|
75
|
+
minitest (5.10.2)
|
67
76
|
mutations (0.8.1)
|
68
77
|
activesupport
|
69
78
|
pry (0.10.4)
|
@@ -90,8 +99,9 @@ GEM
|
|
90
99
|
simplecov-html (~> 0.10.0)
|
91
100
|
simplecov-html (0.10.0)
|
92
101
|
slop (3.6.0)
|
102
|
+
sqlite3 (1.3.11)
|
93
103
|
thread_safe (0.3.6)
|
94
|
-
tzinfo (1.2.
|
104
|
+
tzinfo (1.2.3)
|
95
105
|
thread_safe (~> 0.1)
|
96
106
|
wisper (1.6.1)
|
97
107
|
|
@@ -99,6 +109,7 @@ PLATFORMS
|
|
99
109
|
ruby
|
100
110
|
|
101
111
|
DEPENDENCIES
|
112
|
+
activerecord (>= 3.2, < 5)
|
102
113
|
awesome_print
|
103
114
|
bundler (~> 1.10)
|
104
115
|
codeclimate-test-reporter
|
@@ -107,6 +118,7 @@ DEPENDENCIES
|
|
107
118
|
rake (~> 10.0)
|
108
119
|
rspec (~> 3)
|
109
120
|
simplecov
|
121
|
+
sqlite3
|
110
122
|
|
111
123
|
BUNDLED WITH
|
112
124
|
1.13.7
|
data/README.md
CHANGED
@@ -162,6 +162,15 @@ required do
|
|
162
162
|
end
|
163
163
|
```
|
164
164
|
|
165
|
+
## `ActiveRecord::Relation` support
|
166
|
+
|
167
|
+
|
168
|
+
```ruby
|
169
|
+
schema(Dry::Mutations.Schema do
|
170
|
+
required(:slaves).filled(relation?: Slave)
|
171
|
+
end)
|
172
|
+
```
|
173
|
+
|
165
174
|
## Combining dry schemas with mutation-like syntax
|
166
175
|
|
167
176
|
Since version `0.99.9`, one might pass the `Dry::Validation::Schema` directly
|
data/config/messages.yml
CHANGED
@@ -2,6 +2,7 @@ en:
|
|
2
2
|
errors:
|
3
3
|
duck?: 'must respond to %{expected}'
|
4
4
|
model?: 'must be a model (instance of %{expected})'
|
5
|
+
relation?: 'must be a relation (many instances of %{expected})'
|
5
6
|
discard_empty: 'aleksei’s too dumb error (%{expected},) you won :-P'
|
6
7
|
default?: 'default value implementation sucks'
|
7
8
|
class: 'class guard for arrays implementation sucks'
|
data/dry-mutations.gemspec
CHANGED
@@ -31,6 +31,8 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_development_dependency 'rspec', '~> 3'
|
32
32
|
spec.add_development_dependency 'pry', '~> 0.10'
|
33
33
|
spec.add_development_dependency 'awesome_print'
|
34
|
+
spec.add_development_dependency 'sqlite3'
|
35
|
+
spec.add_development_dependency 'activerecord', '< 5', '>= 3.2' # prevent mutations to require activerecord 5
|
34
36
|
|
35
37
|
spec.add_dependency 'activesupport', '< 5', '>= 3.2' # prevent mutations to require activesupport 5
|
36
38
|
spec.add_dependency 'mutations', '~> 0.8'
|
@@ -27,7 +27,7 @@ module Dry
|
|
27
27
|
|
28
28
|
base.singleton_class.prepend(Module.new do
|
29
29
|
def respond_to_missing?(method_name, include_private = false)
|
30
|
-
|
30
|
+
%i|call to_proc|.include?(method_name) || super
|
31
31
|
end
|
32
32
|
end)
|
33
33
|
end
|
@@ -134,26 +134,31 @@ module Dry
|
|
134
134
|
def predicates(input, digged = [])
|
135
135
|
case input
|
136
136
|
when Dry::Logic::Rule::Predicate then digged << input
|
137
|
-
when Array then input.each { |e| predicates(e, digged) }
|
138
|
-
when ->(i) { i.respond_to?(:rules) }
|
139
|
-
predicates(input.rules, digged)
|
137
|
+
when Array, ActiveRecord::Relation then input.each { |e| predicates(e, digged) }
|
138
|
+
when ->(i) { i.respond_to?(:rules) } then predicates(input.rules, digged)
|
140
139
|
end
|
141
140
|
digged
|
142
141
|
end
|
143
142
|
|
143
|
+
# rubocop:disable Style/YodaCondition
|
144
144
|
def dig(predicate, input = schema)
|
145
145
|
case input.rules
|
146
146
|
when Hash # the whole schema
|
147
147
|
input.rules.map do |k, v|
|
148
148
|
pred = predicates(v).detect do |p|
|
149
|
-
p.respond_to?(:predicate) &&
|
149
|
+
p.respond_to?(:predicate) &&
|
150
|
+
(p = p.predicate).is_a?(Method) &&
|
151
|
+
"#{p.owner}##{p.name}" == predicate
|
150
152
|
end
|
151
153
|
pred ? [k, pred] : nil
|
152
154
|
end.compact.to_h
|
153
155
|
else
|
154
|
-
predicates(input).detect
|
156
|
+
predicates(input).detect do |p|
|
157
|
+
"#{p.owner}##{p.name}" == predicate
|
158
|
+
end
|
155
159
|
end
|
156
160
|
end
|
161
|
+
# rubocop:enable Style/YodaCondition
|
157
162
|
|
158
163
|
def defaults
|
159
164
|
::Dry::Mutations::Utils.Hash(
|
@@ -3,6 +3,17 @@ module Dry
|
|
3
3
|
module Predicates # :nodoc:
|
4
4
|
include ::Dry::Logic::Predicates
|
5
5
|
|
6
|
+
RAILS_4_RELATION = 'ActiveRecord_Associations_CollectionProxy'.freeze
|
7
|
+
|
8
|
+
predicate(:relation?) do |expected, current|
|
9
|
+
if expected.const_defined?(RAILS_4_RELATION)
|
10
|
+
current.is_a?(expected.const_get(RAILS_4_RELATION))
|
11
|
+
else
|
12
|
+
# Gracefull fallback for Rails3
|
13
|
+
current.is_a?(ActiveRecord::Relation) && current.name == expected.name
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
6
17
|
predicate(:duck?) do |expected, current|
|
7
18
|
expected.empty? || expected.all?(¤t.method(:respond_to?))
|
8
19
|
end
|
data/lib/dry/mutations/schema.rb
CHANGED
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.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aleksei Matiushkin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,40 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: sqlite3
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: activerecord
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "<"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '5'
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '3.2'
|
107
|
+
type: :development
|
108
|
+
prerelease: false
|
109
|
+
version_requirements: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - "<"
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '5'
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '3.2'
|
83
117
|
- !ruby/object:Gem::Dependency
|
84
118
|
name: activesupport
|
85
119
|
requirement: !ruby/object:Gem::Requirement
|