Releases: lift/framework
Lift Framework 2.6-M3
I'm pleased to announce that Lift 2.6-M3 is out the door and should be available on Sonatype shortly.
Here's the rundown.
Notable Changes
- Box.get is officially deprecated. Previously, calling
.get
on a box would trigger an implicit conversion from Box => Option. As we move towards encouraging people even more to utilize flatMap, map, etc to open boxes and to specify exceptions when they can't (a laopenOrThowException
), we're officially deprecating the use of.get
on a box, and you will start seeing warnings in your code if you do it as of this release. In Lift 3.0, the ability to call.get
on a box will disappear.
New Features / Enhancements
- Case class decomposition performance improvements. By doing some clever code @chriswebster was able to bring the complexity of case class decomposition down to O(n).
- Memoization to prevent additional reflection during decomposition, also thanks to @chriswebster.
- Implementation of LiftRules.funcNameGenerator. You can now use your own logic for generating Func names. Thanks @japgolly
- The Framework should be capable of compiling in Scala 2.10.1+ now thanks to @pbrant.
- Some variable name cleanup in lift-json.
- Implementation of toSingleBox that converts a List[Box[T]] => Box[List[T]].
Bugfixes
- IE 11 detection is working. IE changed their typical user agent signature in IE 11. The detection code has been updated to account for this change.
- MockHttpServletRequest correctly handles empty parameters thanks to contributions by @dmclean62.
- Unexpected warnings related to page/instance resource IDs should no longer appear, a hat tip to @Shadowfiend for that one.
- Fixes for an issue where bad database connections wouldn't be released correctly. Thanks to @rofreytag for this.
Once again, thank you to everyone involved in making this release possible. Have a spectacular Saturday.
Lift 2.6-M2
Bugfixes
- Fix
JObject
'shashCode
to work withequals
(#1499).
2.6-M1
New Features & Enhancements
Markdown parser included: the Actuarius Markdown parser is now part of Lift. Thanks to @chenkelmann and @dpp. There's an example in Torsten's Lift 3 demo source.
Add support for X-Frame-Options: Lift now sets the "SAMEORIGIN" X-Frame-Options header. Thanks to @dpp and @fmpwizard.
Improved LAFutures: The improvements to LAFuture
in Lift 3.0 have been back-ported to 2.6. This brings map
, flatMap
, filter
, withFilter
, onSuccess
, onFail
, and onComplete
. Thanks to @dpp and @fmpwizard.
CSS Selector for first match: You can now use "^ [href]"
as a CSS selector, and it will only apply a transformation to the first match on your NodeSeq. Thanks to @dpp and @fmpwizard.
Run-mode auto-detection: when run.mode
isn't set, you can now supply a function to determine the run mode to use by setting Props.autDetectRuModeFn
before referencing run.mode
. Thanks to @japgolly for this.
Make LiftRules use the html5 parser by default: you no longer need to set the parser in your Boot.scala
file. Thanks @fmpwizard.
No more warnings in JValue in for comprehensions: withFilter
has been implemented on JValue
. Thanks @hedefalk.
Mock Lift Actor for better unit tests: The details and example are in the pull request. Thanks to @farmdawgnation.
Lift now defaults to the HTML5 parser: You don't need to specify HTML5 anymore in your Boot.scala
. Thanks @fmpwizard.
Addition of ajaxOnSubmit
to SHtml
: Use ajaxOnSubmit
to bind a () => JsCmd
submit handling function to an <input>
or <button>
. This allows you to retain the entire element content, except for the onclick attribute, without resorting to a hidden field. Thanks to @Shadowfiend.
Conditional onEvent: A convenience for prompting the user before carrying out an action. For example: SHtml.onEventIf("Are you sure you want to do that?", s => deleteUser())
. Thanks to @farmdawgnation
Support for form=ajax
as a snippet attribute: You can now invoke a snippet with a ?form=ajax
parameter and Lft will do the right thing and convert it into an Ajax form. Prior to this, you had to enclose your form with an extra div and call data-lift="form.ajax"
. Thanks to @fmpwizard.
Logging not found GUIDs: Lift now logs POST or GET requests that contain no callback functions, but look like they should. You can control this behaviour with LiftRules.handleUnmappedParameter
. Thanks to @Shadowfiend and @serioga.
Easier testing and customization of Mailer: Mailer's inner class is now a trait, which allows any class extending the trait to accept From()
, To()
etc. Thanks to @japgolly.
Custom handling of Menu Param failing to match: Normally a Menu.param
404s if the current value is Empty
. You can now change the behaviour via Loc.MatchWithoutCurrentValue
. There's an example of using this in the ScalaDoc. Thank you @farmdawgnation.
Scheme-relative URLs now supported: Scheme relative URLs (e.g., those starting //
) no longer have the context path pre-pended. Thanks to @serveace.
Lifecycle callbacks added to MongoMetaRecord.update: there's now support for beforeUpdate
and afterUpdate
on Mongo records. Thanks to @eltimn.
Mongo Record creation date: a document creation date is now available via createdAt
. This uses the timestamp from Mongo's ObjectId
. Thanks to @eltimn.
Joda Time support for Mongo Record: you can now use Joda's DateTime
via JodaTimeField
. Thanks to @eltimn.
Dirty check on Record: use myrecord.dirty_?
to test if a record has been modified since being loaded. Thanks to @eltimn
Maven archetypes updated: thanks to @ldeck.
Bug fixes, Compatibility and Performance Gains
Remove ActorWatcher: BREAKING CHANGE ActorWatcher
has been removed, as it referenced the old deprecated Scala Actor code. Thanks @fmpwizard.
Workaround for Scala regression SI-7612: Annotate type of primaryKeyField in Mapper to avoid a StackOverflow (will be fixed in 2.10.3 or 2.11). Thanks to @retronym and @fmpwizard.
LAFuture.collect IndexOutOfBoundsException fix: it was possible for LAFuture to throw an IndexOutOfBoundsException for futures resolved in a particular order. This has been resolved, thanks to @tuhlmann.
Jetty 9 null safety checks: Under Jetty 9 it's possible for a request to say it has a header, but when you ask for the header you get null. We now protect against this, and you won't get a null header value. Thanks to @dpp.
JSON parser fix for handing scientific notation: The parser was fine with e and e-, but now can handle e+ (e.g., 1.23e+1). Thank you @kluyg.
CSS parser robustness improvements: Including allowing the # character in URLs. Thanks @pbrant.
Menu.item swallowed surrounding Elem. From @dpp and @hedefalk.
Helpers.toBoolean("on")
now returns true
: it didn't before! Thanks @fmpwizard and Denis Nevmerzhitsky.
S.ieMode is misleading and so deprecated: This flag is used for a specific XML handling issue, and is not a general IE detection check. To avoid this confusion, isMode is deprecated and will probably be removed in Lift 3. This improvement from @farmdawgnation.
Spelling fixes for Vendor and supplimentalKidMenuItems: there have been a number of fixes to spelling mistakes in functions. Incorrect spellings have been deprecated. Thanks to @farmdawgnation and @nafg
ScalaDoc improvement to ListenerManager
, thanks to @timr.
Typos in the source: fixed by @pbrant.
Out of date references to Can removed by @Shadowfiend.