Great, thanks for taking the time to look into it!
Craig
On Mar 4, 2010, at 2:23 PM, Ross Mellgren wrote:
> I can reproduce this locally, and offhand looks like a scala compiler bug
> (this should never have compiled).
>
> I have to run right now, but I'll look at in ~2-4 hours and hopefully figure
> it out for you.
>
> -Ross
>
> On Mar 4, 2010, at 1:28 PM, Craig Blake wrote:
>
>> 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:
>>
>> [email protected]: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<[email protected]> 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 [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.
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> 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.
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> 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.
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> 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.
>>>>>>
>>>>>
>>>>> --
>>>>> 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.
>>>>>
>>>>
>>>> --
>>>> 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.
>>>>
>>>
>>> --
>>> 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.
>>>
>>> --
>>> 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.
>>>
>>
>> --
>> 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.
>>
>
> --
> 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.
>
--
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.