Writing into the database with the new field type works fine, but I'm running into a little hitch trying to access the value. Given the test code (again this is in the Github test project, g...@github.com:craigwblake/lift-couchdb-test.git):
object TestEnum extends Enumeration { val One = Value( "One")} object Settings extends Settings with CouchMetaRecord[ Settings] class Settings extends CouchRecord[ Settings] { def meta = Settings object testEnum extends JSONEnumNameField( this, TestEnum) } val settings = Settings.fetch( "id").open_! val testEnum: TestEnum.Value = settings.testEnum.valueBox.open_! Results in a compilation error: [ERROR] /lift-couchdb-test/src/main/scala/test/Testing.scala:24: error: type mismatch; [INFO] found : settings.testEnum.MyType [INFO] required: test.TestEnum.Value [INFO] val testEnum: TestEnum.Value = settings.testEnum.valueBox.open_! Any ideas? Thanks, Craig On Mar 3, 2010, at 8:39 PM, Ross Mellgren wrote: > Try this: > > /** Enum data field for JSON records. Encodes as JString */ > class JSONEnumNameField[OwnerType <: JSONRecord[OwnerType], EnumType <: > Enumeration] > (rec: OwnerType, enum: EnumType)(implicit > enumValueType: Manifest[EnumType#Value]) > extends EnumField[OwnerType, EnumType](rec, enum) with JSONField > { > def this(rec: OwnerType, enum: EnumType, value: EnumType#Value)(implicit > enumValueType: Manifest[EnumType#Value]) = { > this(rec, enum) > set(value) > } > > def this(rec: OwnerType, enum: EnumType, value: > Box[EnumType#Value])(implicit enumValueType: Manifest[EnumType#Value]) = { > this(rec, enum) > setBox(value) > } > > def asJValue: JValue = valueBox.map(v => JString(v.toString)) openOr > (JNothing: JValue) > def fromJValue(jvalue: JValue): Box[EnumType#Value] = jvalue match { > case JNothing|JNull if optional_? => setBox(Empty) > case JString(s) => setBox(enum.valueOf(s) ?~ ("Unknown > value \"" + s + "\"")) > case other => setBox(expectedA("JString", other)) > } > } > > Let me know if it works for you. If so, I'll start the process of getting it > into master as soon as I can. > > -Ross > > On Mar 3, 2010, at 8:12 PM, Craig Blake wrote: > >> Sure, will do. The only thing I think I'll need to figure out is how to >> persist an enumeration by name rather than ordinal value, but I imagine that >> it should be pretty straight-forward to add a new field type in my app to >> handle it. >> >> Thanks, >> Craig >> >> On Mar 3, 2010, at 7:45 PM, Ross Mellgren wrote: >> >>> It's no problem, as I mentioned the compiler error is practically useless. >>> >>> Hope you get along well, let me know if you have any other issues. >>> >>> -Ross >>> >>> On Mar 3, 2010, at 7:29 PM, Craig Blake wrote: >>> >>>> Yep, that seems to be better. Sorry for the noise, I don't know why I >>>> didn't think to check that. >>>> >>>> Thanks for the quick answer. >>>> >>>> Craig >>>> >>>> On Mar 3, 2010, at 4:44 PM, Ross Mellgren wrote: >>>> >>>>> Unfortunately the compiler error is bizarre (due to some of the type >>>>> shuffling involved), but the underlying problem you're experiencing is >>>>> that DateTimeFields (and therefore JSONDateTimeFields) have a storage >>>>> type of Calendar, and you're trying to assign a Date to them. Try >>>>> Calendar.getInstance instead of new Date() and see if that resolves it >>>>> for you? >>>>> >>>>> -Ross >>>>> >>>>> On Mar 3, 2010, at 4:32 PM, Craig Blake wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> I am getting familiar with the lift-couchdb module, and trying to put >>>>>> together a sample based on the tests in the module. Trying to create a >>>>>> record, based on this test code: >>>>>> >>>>>> def testRec1: Person = Person.createRecord.name("Alice").age(25) >>>>>> >>>>>> this is what I have: >>>>>> >>>>>> class Account extends CouchRecord[Account] { >>>>>> def meta = Account >>>>>> object created extends JSONDateTimeField(this) >>>>>> } >>>>>> object Account extends Account with CouchMetaRecord[Account] >>>>>> >>>>>> ... >>>>>> >>>>>> val account = Account.createRecord.created(new Date()) >>>>>> >>>>>> >>>>>> I get a compilation error: >>>>>> >>>>>> [WARNING] Test.scala:44: error: overloaded method value apply with >>>>>> alternatives ((net.liftweb.common.Box[_12.MyType])test.Account) forSome >>>>>> { val _12: object test.Account#created } <and> >>>>>> ((_13.MyType)test.Account) forSome { val _13: object >>>>>> test.Account#created } cannot be applied to (java.util.Date) >>>>>> [WARNING] val account = Account.createRecord.created( new >>>>>> Date()) >>>>>> >>>>>> >>>>>> I'm sure that I am just missing something obvious. Any ideas what? >>>>>> >>>>>> Thanks, >>>>>> Craig >>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "Lift" group. >>>>>> To post to this group, send email to lift...@googlegroups.com. >>>>>> To unsubscribe from this group, send email to >>>>>> liftweb+unsubscr...@googlegroups.com. >>>>>> For more options, visit this group at >>>>>> http://groups.google.com/group/liftweb?hl=en. >>>>>> >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google Groups >>>>> "Lift" group. >>>>> To post to this group, send email to lift...@googlegroups.com. >>>>> To unsubscribe from this group, send email to >>>>> liftweb+unsubscr...@googlegroups.com. >>>>> For more options, visit this group at >>>>> http://groups.google.com/group/liftweb?hl=en. >>>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google Groups >>>> "Lift" group. >>>> To post to this group, send email to lift...@googlegroups.com. >>>> To unsubscribe from this group, send email to >>>> liftweb+unsubscr...@googlegroups.com. >>>> For more options, visit this group at >>>> http://groups.google.com/group/liftweb?hl=en. >>>> >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "Lift" group. >>> To post to this group, send email to lift...@googlegroups.com. >>> To unsubscribe from this group, send email to >>> liftweb+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/liftweb?hl=en. >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Lift" group. >> To post to this group, send email to lift...@googlegroups.com. >> To unsubscribe from this group, send email to >> liftweb+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/liftweb?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "Lift" group. > To post to this group, send email to lift...@googlegroups.com. > To unsubscribe from this group, send email to > liftweb+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/liftweb?hl=en. > -- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.