Как применить преобразования / фильтры к полю 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}
Другие вопросы по тегам