Cleanups in lift-record **possible breaking changes**

7 views
Skip to first unread message

Ross Mellgren

unread,
Feb 27, 2010, 11:53:47 AM2/27/10
to liftweb
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


Ross Mellgren

unread,
Mar 4, 2010, 6:42:31 PM3/4/10
to liftweb, lift-a...@googlegroups.com
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

Reply all
Reply to author
Forward
0 new messages