Some tips to upgrade your lift 2.5 2.6 application to lift 3 (3.0-SNAPSHOT, 3.0-M2, ...etc) MongoDb ======= replace `ensureIndex(` by `createIndex(` replace `setIsUnset(` by `setIfUnset(` New Features ============ Promise Actor ------------- ``` for (sess <- S.session) { val roundTrip = sess.buildRoundtrip(List[RoundTripInfo]( "loop" -> doLoop _, "findUser" -> doFindUser _, ))} ``` Rest Promise ------------ ``` object DelayedRest extends RestHelper { serve { case "delay" :: Nil Get _ => LAFuture(() => { Thread.sleep(2000) <b>Hello</b>}) } } ``` http://lift.la/blog/lift_30 Renaming -------- `updateListeners` to `sendListenersMessage` - `JsonHandler` => replaced with RoundTrips and SHtml.jsonCall - `jsonCall` => `jsonSend` - CometActor handleJson => `receiveJson` Markdown ======== remove EmbedMD and use template md from lift core support. <div data-lift="embed?what=/docs/about-dev-text"></div> Box === No more `get`, you can replace it by `openOrThrowException("some msg")` JSon ==== ``` val v = "user" -> u.asJValue ~ ("whenCreated" -> "someDate")) // { "user" { "some JValue Fields u.asJValue" , "whenCreated" : "someDate" }} ``` is now : ``` val v = "user" -> (u.asJValue ++ ("whenCreated" -> "someDate"))) ``` will produce an JArray or for a JObject ``` val v = "user" -> (u.asJObject ++ ("whenCreated" -> "someDate"))) ``` where asJObject is : ``` import net.liftweb.common._ import net.liftweb.http._ import S._ import net.liftweb.json.JsonAST.JObject import net.liftweb.json._ import net.liftweb.record.{MetaRecord, Record} import net.liftweb.util._ import Helpers._ import scala.xml._ trait RecordExt[BaseRecord <: Record[BaseRecord]] extends Record[BaseRecord] { self: BaseRecord => def meta: MetaRecord[BaseRecord] with MetaRecordExt[BaseRecord] /** Encode a record instance into a JObject */ def asJObject(): JObject = { meta.asJObject(this) } } trait MetaRecordExt[BaseRecord <: Record[BaseRecord]] extends MetaRecord[BaseRecord] { self: BaseRecord => /** Encode a record instance into a JObject */ def asJObject(rec: BaseRecord): JObject = { JObject(fields(rec).map(f => JField(f.name, f.asJValue))) } } ``` https://groups.google.com/forum/#!searchin/liftweb/JValue$20lift$203$20~$20/liftweb/b0uIqoUi2ck/O0acAaZOscAJ Template ======== Surround have a new attribute `eat` to to drop the element that invoked the surround. The `at` attribute of surround is bind to element id. `<lift:bind>` disappears. Wizard ====== Now include in lift core, no more sbt adds like lift-wizard. wizard html template integrate new lift 3 constraints, no more specific lift node. New example at : https://github.com/tuhlmann/lift-3-demo/blob/master/src/main/webapp/templates-hidden/wizard-all.html Test ==== mock Request replace mockReq.body = s by mockReq.body_(s) New deprecations ================ JSONParser, Lift's legacy JSON parser, along with its dependents: MetaRecord.setFieldsFromJSON MetaRecord.fromJSON CometActor's handleJson, jsonCall, and jsonInCode S.buildJsonFunc S.jsonFmapFunc with Any=>JsCmd JsonHandler SHtml.fjsonCall SHtml.jsonButton with Any=>JsCmd SHtml.jsonForm Mapper and MetaMapper's snippet bindings that use PartialFunctions: addSnippet, editSnippet, viewSnippet (in favor of addFormSnippet, editFormSnippet, andviewTransform, all based on CSS selector transforms) modSnippet, used in addSnippet and editSnippet, superseded by formSnippet. add, edit, and view snippets in HTML, in favor of addForm, editForm, and viewTransform fieldMapperPF, in favor of fieldMapperTransforms fieldPF, appendField, and prependField, in favor of fieldTransforms, appendFieldTransform, and prependFieldTransform. Reference: ========== - [Lift Framework 3.0-M0](https://github.com/lift/framework/releases/tag/3.0-M0-release) - [Lift Framework 3.0-M2](https://github.com/lift/framework/releases/tag/3.0-M2-release) - http://lift.la/blog/lift_30 - https://shadowfiend.svbtle.com/lift-monthly-recap-1 - https://shadowfiend.svbtle.com/lift-monthly-recap-2 - https://shadowfiend.svbtle.com/lift-weekly-recap-4 - https://shadowfiend.svbtle.com/lift-weekly-recap-5-comets-and-funcnames-oh-my - https://shadowfiend.svbtle.com/lift-weekly-recap-6-speed-data-and-elementals