To test further, I've created a simple test project with only one dependency, lift-couchdb, and this code:
object Settings extends Settings with CouchMetaRecord[ Settings] class Settings extends CouchRecord[ Settings] { def meta = Settings object updated extends JSONDateTimeField( this) } object Testing { def main( args: Array[ String]) { import CouchDB.defaultDatabase defaultDatabase = new Database( :/( "localhost", 5984) as_! ( "username", "password"), "database") val settings = Settings.createRecord settings.updated( Calendar.getInstance( TimeZone.getTimeZone( "UTC"))) settings.save } } I get the same error: java.lang.AbstractMethodError: test.Settings$updated$.encode(Ljava/lang/Object;)Ljava/lang/String; I've also put the test code in Github in case anyone might be able to reproduce it locally: g...@github.com:craigwblake/lift-couchdb-test.git Thanks, Craig On Mar 3, 2010, at 9:54 PM, Naftoli Gugenheim wrote: > AbstractMethodError means you need to do a clean build and make sure you > don't have multiple scala versions. > > ------------------------------------- > Craig Blake<craigwbl...@gmail.com> wrote: > > Just took a minor change to compile (didn't like ?~) and I'll let you know > how it goes soon. I'm running into one more problem, this time a runtime > exception saving a document: > > java.lang.AbstractMethodError: > test.Settings$updated$.encode(Ljava/lang/Object;)Ljava/lang/String; > at > net.liftweb.couchdb.JSONEncodedStringFieldMixin$$anonfun$asJValue$6.apply(JSONRecord.scala:319) > at > net.liftweb.couchdb.JSONEncodedStringFieldMixin$$anonfun$asJValue$6.apply(JSONRecord.scala:319) > at net.liftweb.common.Full.map(Box.scala:330) > at net.liftweb.couchd... > > > The field is defined as: > > object updated extends JSONDateTimeField( this) > > Surely something else I missed? > > 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. > > -- > 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.