sequent 0.1.7 → 0.1.8

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: 6cfc6364eb9b237df9e8869ef5d602e7e2509954
4
- data.tar.gz: 4a280a35f92badb08aa8dbe2919d6aa329c6a23b
3
+ metadata.gz: ecf3a14a1b1acf03a8269e158bad28a533c54095
4
+ data.tar.gz: af4beb48c4dc6323e2baaf5f0047a41fed3fff6e
5
5
  SHA512:
6
- metadata.gz: 6b56f436d037c8a9ba3718c512d413a2fe7e03822618c1a48c386cf45167490ee987223d596c432ce8bdfb367a76f044317ffb5081e5c4ec6056af065e4e1a09
7
- data.tar.gz: 9bd699e91835b989e6f417bd9976826576742ef98e5c84e815ae9f68f6a9447993f28ed622426599b9fb242a5321e46f18ae4f1066d1454f1eb2e1463f01a9f7
6
+ metadata.gz: 8d4478a2872b35922943920af4d572933f6cef35ae7c8b872326237687cfd9b4b2dc0ef44c7731ef3ae5dfc245fd5533b512b7e0be11d0bf1ee235e799afc89d
7
+ data.tar.gz: 20bc101b0fa43c2e04635e390d7529a2b2c1d86c33d45283410c3066a0a645f24dd1eeff1ca937c663ddb39b277d49ca37a3f83e6ce173f74d267571344c6589
@@ -6,28 +6,36 @@ module Sequent
6
6
  # Validator for associations. Typically used in Sequent::Core::Command,
7
7
  # Sequent::Core::Event and Sequent::Core::ValueObjects.
8
8
  #
9
+ # When you define attrs that are also value object or array(..) then this class is
10
+ # automatically used.
11
+ #
9
12
  # Example:
10
13
  #
11
- # class RegisterForTrainingCommand < UpdateCommand
14
+ # class RegisterForTrainingCommand < Sequent::Core::Command
12
15
  # attrs trainee: Person
16
+ # end
13
17
  #
14
- # validates_presence_of :trainee
15
- # validates_with Sequent::Core::Helpers::AssociationValidator, associations: [:trainee]
18
+ # This will register :trainee with the AssociationValidator and is equivilant to
19
+ #
20
+ # validates_with Sequent::Core::AssociationValidator, associations: [:trainee]
16
21
  #
17
- # end
18
22
  class AssociationValidator < ActiveModel::Validator
19
23
 
24
+ def initialize(options = {})
25
+ super
26
+ raise "Must provide ':associations' to validate" unless options[:associations].present?
27
+ end
28
+
20
29
  def validate(record)
21
30
  associations = options[:associations]
22
31
  associations = [associations] unless associations.instance_of?(Array)
23
32
  associations.each do |association|
24
- next unless association # since ruby 2.0...?
25
33
  value = record.instance_variable_get("@#{association.to_s}")
26
34
  if value && incorrect_type?(value, record, association)
27
35
  record.errors[association] = "is not of type #{record.class.types[association]}"
28
36
  elsif value && value.kind_of?(Array)
29
37
  item_type = record.class.type_for(association).item_type
30
- record.errors[association] = "is invalid" if all_valid?(value, item_type)
38
+ record.errors[association] = "is invalid" unless validate_all(value, item_type).all?
31
39
  else
32
40
  record.errors[association] = "is invalid" if value && value.invalid?
33
41
  end
@@ -40,14 +48,14 @@ module Sequent
40
48
  !value.kind_of?(Array) && record.class.respond_to?(:types) && !value.kind_of?(record.class.types[association])
41
49
  end
42
50
 
43
- def all_valid?(value, item_type)
44
- value.any? do |v|
45
- if v.nil?
46
- true
47
- elsif v.respond_to? :valid?
48
- not v.valid?
51
+ def validate_all(values, item_type)
52
+ values.map do |value|
53
+ if value.nil?
54
+ false
55
+ elsif value.respond_to?(:valid?)
56
+ value.valid?
49
57
  else
50
- not Sequent::Core::Helpers::ValueValidators.for(item_type).valid_value?(v)
58
+ Sequent::Core::Helpers::ValueValidators.for(item_type).valid_value?(value)
51
59
  end
52
60
  end
53
61
  end
@@ -132,6 +132,14 @@ EOS
132
132
  value = self.instance_variable_get("@#{field[0]}")
133
133
  if value.respond_to? :validation_errors
134
134
  value.validation_errors.each { |k, v| result["#{field[0].to_s}_#{k.to_s}".to_sym] = v }
135
+ elsif field[1].class == ArrayWithType and value.present?
136
+ value
137
+ .select { |val| val.respond_to?(:validation_errors) }
138
+ .each_with_index do |val, index|
139
+ val.validation_errors.each do |k, v|
140
+ result["#{field[0].to_s}_#{index}_#{k.to_s}".to_sym] = v
141
+ end
142
+ end
135
143
  end
136
144
  end
137
145
  prefix ? HashWithIndifferentAccess[result.map { |k, v| ["#{prefix}_#{k}", v] }] : result
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sequent
2
- VERSION = '0.1.7'
2
+ VERSION = '0.1.8'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lars Vonk
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-08-03 00:00:00.000000000 Z
13
+ date: 2015-08-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord