Skip to content

Commit 92eca4a

Browse files
committed
Merge pull request #5 from rmorrise/pr/4
Updated version. Collection field name was missing '.0.' for the first collection item.
2 parents bf4b1c4 + cc66e6e commit 92eca4a

File tree

5 files changed

+29
-10
lines changed

5 files changed

+29
-10
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/.settings
22
/.idea
33
/target
4+
/classes
45
/web-app/WEB-INF
56
grails-cascade-validation-*.zip
67
grails-cascade-validation-*.zip.sha1

CascadeValidationGrailsPlugin.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import com.cscinfo.platform.constraint.CascadeValidationConstraint
22
import org.codehaus.groovy.grails.validation.ConstrainedProperty
33

44
class CascadeValidationGrailsPlugin {
5-
def version = "0.1.3"
5+
def version = "0.1.4"
66
def grailsVersion = "2.3 > *"
77
def title = "Cascade Validation Plugin"
88
def author = "Russell Morrisey"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ To use this plugin, add the plugin to BuildConfig.groovy:
99
```groovy
1010
plugins {
1111
//CSC custom plugin for 'cascade' constraint
12-
compile ":cascade-validation:0.1.3"
12+
compile ":cascade-validation:0.1.4"
1313
}
1414
```
1515
Here is an example of a command object that uses the plugin:

src/groovy/com/cscinfo/platform/constraint/CascadeValidationConstraint.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class CascadeValidationConstraint extends AbstractVetoingConstraint {
4949
List<FieldError> childFieldErrors = childErrors.fieldErrors
5050
childFieldErrors.each { FieldError childFieldError ->
5151
String field
52-
if(index) {
52+
if(index != null) {
5353
field = "${propertyName}.${index}.${childFieldError.field}"
5454
} else {
5555
field = "${propertyName}.${childFieldError.field}"

test/unit/com/cscinfo/platform/constraint/CascadeValidationConstraintSpec.groovy

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ class CascadeValidationConstraintSpec extends Specification {
7777
String[] codes = ['A', 'B']
7878
def defaultMessage = 'default'
7979
Object[] args = [Mock(Object)]
80-
def fieldError = new FieldError('obj', 'field', rejected, true, codes,
80+
81+
def field = 'field'
82+
def fieldError = new FieldError('obj', field, rejected, true, codes,
8183
args, defaultMessage)
8284
def fieldErrors = [fieldError]
8385
def parentName = 'foo'
@@ -91,8 +93,12 @@ class CascadeValidationConstraintSpec extends Specification {
9193
1 * childErrors.fieldErrors >> fieldErrors
9294
1 * errors.objectName >> parentName
9395
1 * errors.addError({
94-
it.objectName == parentName && it.bindingFailure == true && it.codes == codes && it.arguments == args && it
95-
.defaultMessage == defaultMessage
96+
it.objectName == parentName &&
97+
it.field == "property." + field &&
98+
it.bindingFailure == true &&
99+
it.codes == codes &&
100+
it.arguments == args &&
101+
it.defaultMessage == defaultMessage
96102
})
97103
result == true
98104
}
@@ -112,7 +118,8 @@ class CascadeValidationConstraintSpec extends Specification {
112118
String[] codes = ['A', 'B']
113119
def defaultMessage = 'default'
114120
Object[] args = [Mock(Object)]
115-
def fieldError = new FieldError('obj', 'field', rejected, true, codes,
121+
def field = 'field'
122+
def fieldError = new FieldError('obj', field, rejected, true, codes,
116123
args, defaultMessage)
117124
def fieldErrors = [fieldError]
118125
def parentName = 'foo'
@@ -128,9 +135,20 @@ class CascadeValidationConstraintSpec extends Specification {
128135
1 * child1Errors.fieldErrors >> fieldErrors
129136
1 * child2Errors.fieldErrors >> fieldErrors
130137
target.size() * errors.objectName >> parentName
131-
target.size() * errors.addError({
132-
it.objectName == parentName && it.bindingFailure == true && it.codes == codes && it.arguments == args && it
133-
.defaultMessage == defaultMessage
138+
1 * errors.addError({
139+
it.objectName == parentName &&
140+
it.field == "children.0." + field &&
141+
it.bindingFailure == true &&
142+
it.codes == codes &&
143+
it.arguments == args &&
144+
it.defaultMessage == defaultMessage
145+
})
146+
1 * errors.addError({
147+
it.objectName == parentName && it.field == "children.1." + field &&
148+
it.bindingFailure == true &&
149+
it.codes == codes &&
150+
it.arguments == args &&
151+
it.defaultMessage == defaultMessage
134152
})
135153
result == true
136154
}

0 commit comments

Comments
 (0)