Skip to content
This repository has been archived by the owner on Jan 19, 2022. It is now read-only.

Commit

Permalink
fix for GPMONGODB-153 "grails.gorm.failOnError=true in Config.groovy …
Browse files Browse the repository at this point in the history
…has no effect on plugin"
  • Loading branch information
graemerocher committed Dec 12, 2011
1 parent 4daa360 commit 60518f2
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 4 deletions.
Expand Up @@ -64,7 +64,6 @@ abstract class DynamicMethodsConfigurer {
else {
def staticApi = createGormStaticApi(cls, enhancer.finders)
def instanceApi = createGormInstanceApi(cls)
instanceApi.failOnError = failOnError
cls.metaClass.static."get$type" = {-> staticApi }
cls.metaClass."get$type" = {-> new InstanceProxy(instance:delegate, target:instanceApi) }
}
Expand All @@ -82,10 +81,14 @@ abstract class DynamicMethodsConfigurer {
}

protected GormInstanceApi createGormInstanceApi(Class cls) {
return new GormInstanceApi(cls, datastore)
def instanceApi = new GormInstanceApi(cls, datastore)
instanceApi.failOnError = failOnError
return instanceApi
}

protected GormEnhancer createEnhancer() {
new GormEnhancer(datastore, transactionManager)
def enhancer = new GormEnhancer(datastore, transactionManager)
enhancer.failOnError = failOnError
return enhancer
}
}
Expand Up @@ -6,6 +6,11 @@ import org.springframework.transaction.PlatformTransactionManager
import org.grails.datastore.mapping.simple.SimpleMapDatastore
import org.grails.datastore.mapping.transactions.DatastoreTransactionManager
import grails.persistence.Entity
import org.springframework.validation.Validator
import org.springframework.validation.Errors
import org.codehaus.groovy.grails.commons.GrailsDomainConfigurationUtil
import org.codehaus.groovy.grails.validation.ConstrainedProperty
import grails.validation.ValidationException

/**
*
Expand Down Expand Up @@ -50,6 +55,29 @@ class DynamicMethodsConfigurerSpec extends Specification{
thrown(MissingMethodException)
}

void "Test that failOnError can be activated"() {
given:"A dynamic methods configurer with a single domain class and failOnError activated"
final configurer = systemUnderTest()
configurer.failOnError = true
def entity = configurer.datastore.mappingContext.addPersistentEntity(Simple)
configurer.datastore.mappingContext.addEntityValidator(entity, [
supports:{java.lang.Class c -> true},
validate:{target, Errors errors->
def constrainedProperties = GrailsDomainConfigurationUtil.evaluateConstraints(Simple)
for (ConstrainedProperty cp in constrainedProperties.values()) {
cp.validate(target, target[cp.propertyName], errors)
}

}
] as Validator)

when:"Dynamic methods are configured"
configurer.configure()
new Simple(name: "").save()

then:"Dynamic methods can be called on the domain"
thrown(ValidationException)
}
DynamicMethodsConfigurer systemUnderTest() {
return new SimpleDynamicMethodsConfigurer(new SimpleMapDatastore(), new DatastoreTransactionManager())
}
Expand All @@ -70,4 +98,8 @@ class SimpleDynamicMethodsConfigurer extends DynamicMethodsConfigurer {
@Entity
class Simple {
Long id
String name
static constraints = {
name blank:false
}
}
Expand Up @@ -47,6 +47,7 @@ class GormEnhancer {
Datastore datastore
PlatformTransactionManager transactionManager
List<FinderMethod> finders
boolean failOnError

GormEnhancer(Datastore datastore) {
this(datastore, null)
Expand Down Expand Up @@ -205,7 +206,9 @@ class GormEnhancer {
}

protected <D> GormInstanceApi<D> getInstanceApi(Class<D> cls) {
new GormInstanceApi<D>(cls, datastore)
def instanceApi = new GormInstanceApi<D>(cls, datastore)
instanceApi.failOnError = failOnError
return instanceApi
}

protected <D> GormValidationApi<D> getValidationApi(Class<D> cls) {
Expand Down

0 comments on commit 60518f2

Please sign in to comment.