Как применить преобразования / фильтры к полю Lift Record перед записью / чтением его значения
Я использую постоянство Lift Record и хочу применить некоторые преобразования к полю всякий раз, когда я устанавливаю или получаю его значение. Например, для StringField я хочу установить его в нижнем регистре автоматически в объекте Record.
object someField extends StringField(this, 64) {
...
// how do I apply transformations here?
...
}
В Lift Mapper есть метод setFilter
который делает именно это, но я не могу найти его эквивалент в записи. В Mapper это выглядит так:
object someField extends MappedString(this, 64) {
...
override def setFilter = trim _ :: toUpper _ :: super.setFilter
...
}
Пара вариантов, которые я рассматриваю:
- переопределение
set
метод, но их много, я боюсь не полностью переопределить подмножество необходимых методов, поэтому не могу представить себе последствия.:) - использование обратных вызовов жизненного цикла - кажется излишним.
Любая помощь приветствуется. Спасибо;)
1 ответ
Решение
Благодарю @jcern за указание на это:
Запись имеет метод def setFilter: List[(ValueType) ⇒ ValueType]
что очень похоже на def setFilter: List[(FieldType) ⇒ FieldType]
,
Он используется таким же образом, то есть фильтр будет применяться при установке или запросе значений. Вот быстрый пример:
class Tag extends MongoRecord[Tag] with ObjectIdPk[Tag] {
...
object name extends StringField(this, 32) {
override def setFilter = trim _ :: toLower _ :: super.setFilter
}
...
}
Tag.createRecord.name("UPPER")
// lowercases tag name:
//res1: Tag = class Tag={name=upper, _id=521bb306e4b04eacd74dd217}