As I mentioned before, I was planning to make some breaking changes to 
lift-record, and since I got no additional feedback, I've now pushed to master.

These changes make some cleanups to method naming and functionality in 
lift-record, and all code using 2.0-SNAPSHOT will need some changes:

 - Each MetaRecord implementation must define createRecord. To migrate, add 
this method to your MetaRecord:
     def createRecord: MyRecord = new MyRecord

 - If you previously used Record#fromJSON, you will need to use 
Record#setFieldsFromJSON instead.
 - If you previously used MetaRecord#createRecord(json: String), you will need 
to use MetaRecord#fromJSON instead.
 - If you previously used MetaRecord#fromJSON(inst, json), you will need to use 
MetaRecord#setFieldsFromJSON instead.

In addition, lift-couchdb has been updated to track these changes:

 - If you previously used JSONRecord#fromJValue, you will need to use 
JSONRecord#setFieldsFromJValue instead.
 - If you previously used JSONMetaRecord#fromJValue(rec, jvalue), you will need 
to use JSONMetaRecord#setFieldsFromJValue instead.
 - CouchMetaRecord#create and CouchMetaRecord#createFromJValue have been 
removed. Use MetaRecord#createRecord and JSONMetaRecord#fromJValue instead.

Let me know if anyone has any problems.

-Ross

On Feb 27, 2010, at 11:53 AM, Ross Mellgren wrote:

> Hey all,
> 
> So as a result of an infelicity in the way records are initialized that 
> tripped up Tim a week or two ago, I'm planning on doing some cleanup to 
> lift-record. It is a breaking change, and it was noted that it'd be good to 
> get opinions on this, so here we are!
> 
> The original problem was that if you used "new MyRecord" then you'd get a 
> record that was basically functional but some of the extended metadata 
> (notably field.name) would not be initialized correctly. This is because the 
> correct way to create a record was MyRecordMeta.createRecord.
> 
> I fixed it so that new MyRecord is equivalent to MyRecordMeta.createRecord, 
> but Marius pointed out there was more cleaning to do.
> 
> Here are the changes:
> - I made the createRecord method on MetaRecord abstract, so that MyRecordMeta 
> must now implement it. If you are porting over old code, then just do:
>     def createRecord = new MyRecord
>   This change is so that record creation must be explicitly specified in case 
> it is different from new MyRecord (the default implementation)
> 
> - MetaRecord.fromJSON(inst, json) has been renamed to setFieldsFromJSON(inst, 
> json)
> - a new method MetaRecord.setFieldsFromReq(inst, req) has been created to 
> parallel the new name of fromJSON
> - MetaRecord.createRecord(json) has been renamed to fromJSON(json)
> - Record.fromJSON has been renamed to setFieldsFromJSON
> - Record.setFieldsFromReq has been added -- they just call the meta methods 
> of the same name.
> 
> These changes at the end make it so that fromSomething(something) are 
> consistently factory methods that create records from some source (JSON or 
> Req), and that setFieldsFromSomething(inst, something) is consistently there 
> for setting the fields from the source.
> 
> Let me know what you think.
> 
> -Ross
> 
> 

-- 
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