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.

Reply via email to