also_validates 0.0.1 → 0.0.2

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.
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # AlsoValidates
2
2
 
3
- An ActiveModel validator that validates associated models, adding any errors on those models back onto the "primary" model.
3
+ An ActiveModel validator that validates associated models, copying any errors from composed models up to their parent.
4
4
 
5
5
  ## Installation
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
- gem 'validation_aggregator'
9
+ gem 'also_validates'
10
10
 
11
11
  And then execute:
12
12
 
@@ -14,36 +14,59 @@ And then execute:
14
14
 
15
15
  Or install it yourself as:
16
16
 
17
- $ gem install validation_aggregator
17
+ $ gem install also_validates
18
18
 
19
19
  ## Usage
20
20
 
21
+ Given existing models with their own validations:
22
+
21
23
  class Beer
22
24
  include ActiveModel::Validations
25
+ attr_accessor :hops
26
+ validates_presence_of :hops
23
27
 
24
- validate_presence_of :hops
28
+ def initialize(attrs = {})
29
+ @hops = attrs[:hops]
30
+ end
25
31
  end
26
32
 
27
33
  class Belly
28
34
  include ActiveModel::Validations
35
+ attr_accessor :button
36
+ validates_presence_of :button
29
37
 
30
- validate_presence_of :button
38
+ def initialize(attrs = {})
39
+ @button = attrs[:button]
40
+ end
31
41
  end
32
42
 
43
+ And you need a model that composes those models:
44
+
33
45
  class MonsterTruckRally
34
46
  include ActiveModel::Validations
35
47
 
36
- attr_accessor :beer, :belly
48
+ attr_accessor :beer, :belly, :truck_count
37
49
 
38
- validate_presence_of :truck_count
39
- also_validate :beer, :belly
50
+ validates_presence_of :truck_count
51
+ also_validates :beer, :belly
40
52
 
41
- def initialize(beer, belly)
42
- @beer = beer
43
- @belly = belly
53
+ def initialize(attrs = {})
54
+ @beer = attrs[:beer]
55
+ @belly = attrs[:belly]
56
+ @truck_count = attrs[:truck_count]
44
57
  end
45
58
  end
46
59
 
60
+ Calling `valid?` on an instance of monster truck rally, will run validations on both the monster truck rally as well as any models specified by `also_validates`. If there are any validation errors on the composed model, they are copied up (to the "base") of the parent model (in this case a MonsterTruckRally).
61
+
62
+ Note: Currently does not pass the attribute information (the field of the composed model) along to its parent. Errors are added to "base".
63
+
64
+ Only supported option currently is `allow_nil: true`:
65
+
66
+ also_validates :beer, :belly, allow_nil: true
67
+
68
+ Which, as the option states, allows nil values and will not attempt to validate those models.
69
+
47
70
  ## Contributing
48
71
 
49
72
  1. Fork it
@@ -4,8 +4,8 @@ require File.expand_path('../lib/also_validates/version', __FILE__)
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Noah Davis"]
6
6
  gem.email = ["noahd1@yahoo.com"]
7
- gem.description = %q{Validate associated models, and aggregate their errors onto the primary model}
8
- gem.summary = %q{Aggregate errors onto primary model from associated models}
7
+ gem.description = %q{An ActiveModel validator that validates associated models, copying any errors from composed models up to their parent.}
8
+ gem.summary = %q{An ActiveModel validator that validates associated models, copying any errors from composed models up to their parent.}
9
9
  gem.homepage = ""
10
10
 
11
11
  gem.files = `git ls-files`.split($\)
@@ -1,3 +1,3 @@
1
1
  module AlsoValidates
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: also_validates
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -27,8 +27,8 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: 3.0.0
30
- description: Validate associated models, and aggregate their errors onto the primary
31
- model
30
+ description: An ActiveModel validator that validates associated models, copying any
31
+ errors from composed models up to their parent.
32
32
  email:
33
33
  - noahd1@yahoo.com
34
34
  executables: []
@@ -71,7 +71,8 @@ rubyforge_project:
71
71
  rubygems_version: 1.8.23
72
72
  signing_key:
73
73
  specification_version: 3
74
- summary: Aggregate errors onto primary model from associated models
74
+ summary: An ActiveModel validator that validates associated models, copying any errors
75
+ from composed models up to their parent.
75
76
  test_files:
76
77
  - spec/fixtures/object_fixtures.rb
77
78
  - spec/lib/also_validates_spec.rb