Excellent work Ross ! On Feb 12, 6:49 am, Ross Mellgren <[email protected]> wrote: > I just committed a change to lift-record in 2.0-SNAPSHOT that will possibly > (probably?) break your build if you use it. > > This change makes it possible to have any record field be optional -- that > is, Box[MyType]. You use it like this: > > object MyRecord extends Record[MyRecord] { > object myNormalField extends StringField(this, 100) > object myOptionalField extends StringField(this, 100) { > override def optional_? = true > override def defaultValueBox = Empty > override def defaultValue = "nothin" > } > > } > > val r: MyRecord > > r.myNormalField.set("Hello") // as before the change > r.myOptionalField.setBox(Empty) > > r.myNormalField.value == "Hello" // as before > r.myNormalField.valueBox == Full("Hello") > r.myOptionalField.valueBox == Empty > r.myOptionalField.value == "nothin" // because defaultValue was used to give > back something > > As part of this change, the semantics for field errors has changed somewhat > -- hopefully, to be more consistent. > > Previously if you tried to set a field and checkCanWrite_? returned false > then an internal flag "valueCouldNotBeSet" on the field will be raised which > makes that field generate a validation error when validate is called on the > record. In addition, some fields (but not all) would raise the same flag and > return Failure or Empty from setFromString or setFromAny upon being given an > invalid value. > > With this change, all types of failure to set now result in the field value > becoming a Failure. setFromAny, setFromString, and setBox all return that > Failure, while set will return defaultValue (due to its return type.) > > validators and set filters have had their types changed to Boxed equivalents. > > And finally, I made consistent the setFromAny methods of all the built-in > field types so that they all follow the same contract. For setFromAny it's > essentially accept one of MyType, Box[MyType], Option[MyType], or > List[MyType] as well as null, with a default to convert an unknown input to > string and use setFromString. For setFromString, it is as before, except if > the field is optional_? and the empty string is passed in, that's treated as > Empty. > > As I'll mention in another message, I also pushed lift-couchdb to master. I > ran the unit tests that I wrote for that, but that doesn't give me full > confidence that all the fields are entirely bug free. Similarly I did not > test the form generation. If anybody runs into any issues please let me know > and I'll fix it as soon as I can. And of course if it causes too much > breakage we can revert it back out. > > -Ross
-- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
