Ограничения домена Grails - это не карта во время выполнения, как предполагают документы - PullRequest
0 голосов
/ 28 декабря 2018

В документах говорится, что в зависимости от версии, доступ к Domain.constraints или Domain.constrainedProperties должен давать карту значений ключей.

https://grails.github.io/grails2-doc/2.5.4/ref/Domain%20Classes/constraints.html

Во время выполнения статические ограничениясвойство является картой так, что ключи на карте являются именами свойств, а значения, связанные с ключами, являются экземплярами ConstrainedProperty:

Однако при использовании 2.5+ доступ к свойству ограничений во время выполнения недать карту, но замыкание, и я не могу получить доступ к экземплярам ConstrainedProperty.

Я пытался использовать утилиты класса grails для доступа к статическому свойству также

GrailsClassUtils.getStaticFieldValue(Domain,"constraints")//this is still a closure

GrailsClassUtils.getStaticFieldValue(Domain,"constrainedProperties")//null, this property doesn't exist below version 3.0

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

См. Проект на https://github.com/jeffbrown/constraintsmapdemo.

https://github.com/jeffbrown/constraintsmapdemo/blob/master/grails-app/domain/demo/Widget.groovy:

package demo

class Widget {
    int width
    int height
    static constraints = {
        width range: 1..100
        height range: 1..50
    }
}

Тест на https://github.com/jeffbrown/constraintsmapdemo/blob/master/test/unit/demo/WidgetSpec.groovy проходит:

package demo

import grails.test.mixin.TestFor
import spock.lang.Specification

@TestFor(Widget)
class WidgetSpec extends Specification {

    void "test accessing the constraints property"() {
        when:
        def propValue = Widget.constraints

        then:
        propValue instanceof Map
        propValue.containsKey 'width'
        propValue.containsKey 'height'
    }
}

Если выне используют статическую компиляцию, Widget.constraints будет оцениваться до Map.Если вы используете статическую компиляцию, Widget.getConstraints() вернет Map, но Widget.constraints будет соответствовать закрытию.

0 голосов
/ 28 декабря 2018

Доступ к свойствам не работает для меня, как в примере в документации

Domain.constraints //returns closure

, но использование метода getter дает

Domain.getConstraints() //returns the map 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...