dry-mutations 0.99.100 → 1.0.0

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: ef60a2ff49f64d8a640292d1bb70e5ff52bc8cf8
4
- data.tar.gz: 21c45010a109911e25d397994128ad3e5fe81ed1
3
+ metadata.gz: 23228f617c8162feb245848da2e562f4b9425bc7
4
+ data.tar.gz: 40dc518c5051e58a87950020bccdaf0de17b7dd9
5
5
  SHA512:
6
- metadata.gz: faf1055254a03e47b49298b821c7d8a73f04dd616b776bb33dcf46548728e811e8d7145187e82dfa276615f3f77b4c5bb1892ec0f1fe17ad6322917423e10eda
7
- data.tar.gz: be638ebe8f86ddcbf46dc1fd05e10ca9d68fc6b0c702014ed928fdae83e8f69b1c3ac60fd1f31417622b23c80eed549ea0305eeff60140987c0d571cc21f3fcf
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
- Exclude:
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
@@ -1,9 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.1
4
3
  - 2.1.8
5
4
  - 2.2.2
6
- - 2.3.1
7
5
  - 2.4.0
8
6
  before_install: gem install bundler -v 1.13.7
9
7
  addons:
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dry-mutations (0.99.100)
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.4)
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.1)
71
+ i18n (0.8.4)
63
72
  inflecto (0.0.2)
64
- json (1.8.3)
73
+ json (2.0.3)
65
74
  method_source (0.8.2)
66
- minitest (5.10.1)
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.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'
@@ -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
- [:call, :to_proc].include?(method_name) || super
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) && (p = p.predicate).is_a?(Method) && "#{p.owner}##{p.name}" == 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 { |p| "#{p.owner}##{p.name}" == predicate }
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?(&current.method(:respond_to?))
8
19
  end
@@ -14,7 +14,6 @@ module Dry
14
14
  end
15
15
 
16
16
  configure(&CONFIGURATOR)
17
- # predicates(::Dry::Mutations::Predicates)
18
17
 
19
18
  def discarded
20
19
  @@discarded
@@ -78,8 +78,8 @@ module Dry
78
78
  end
79
79
  end
80
80
  )
81
- when -> (t) { DRY_TYPES.include?(t) } then :"#{type}?"
82
- # else nil # implicit # FIXME: IS IT OK?
81
+ when ->(t) { DRY_TYPES.include?(t) } then :"#{type}?"
82
+ # else type implicitly return `nil` here TODO
83
83
  end
84
84
  end
85
85
 
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module Mutations
3
- VERSION = '0.99.100'.freeze
3
+ VERSION = '1.0.0'.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.99.100
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-02-25 00:00:00.000000000 Z
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