On Mon, Nov 16, 2009 at 2:12 PM, Kris Nuttycombe <kris.nuttyco...@gmail.com>wrote:
> > Hi, all, > > I was just informed that my changes broke MetaMegaProtoUser > interaction. I've reverted the commit until I can get that sorted out. > How was it broken? > > Sorry, > > Kris > > On Mon, Nov 16, 2009 at 11:27 AM, Kris Nuttycombe > <kris.nuttyco...@gmail.com> wrote: > > Hi, all, > > > > I have committed a number of enhancements to Loc & LocParam which > > involves a number of breaking changes. The changes and their rationale > > is listed below. Unless you have created your own subclasses of Loc or > > LocParam, these changes should not have any repercussions for you. If > > the effect of any of these changes on your particular codebase are > > excessively disruptive, please contact me and I will work with you to > > resolve the issue. > > > > Breaking Changes: > > > > 1) LocParam > > > > LocParam has been made a sealed trait to facilitate pattern matching > > within the Lift codebase and has had a contravariant type parameter > > added to its type to facilitate typesafe interactions with Loc[T]. The > > new trait is hence LocParam[-T]. As LocParam is now a sealed trait, I > > have added an extension point for user-specified LocParam subtypes as > > UserLocParam[-T] extends LocParam[T]. Since the new type parameter is > > contravariant, LocParam subclasses that are applicable for any Loc[T] > > have the type LocParam[Any], and a type alias AnyLocParam has been > > added for this type. > > > > The Loc.checkProtected method now enforces type consistency between > > the evaluated Link[T] and the list of LocParam[T] which are used to > > evaluate whether the link is accessible given the specified > > parameters. > > > > 2) Renames > > > > Previously, the "Param" suffix was used for two unrelated purposes > > within Loc: first, to refer to the type parameter of the Loc, and > > secondly for the LocParam configuration. This overloading made the > > code and the API somewhat difficult to read, so the first usage has > > been removed resulting in the following renames: > > > > ParamType => T > > NullLocParams => //removed, Unit is sufficient! > > Loc.defaultParams => Loc.defaultValue > > Loc.forceParam => Loc.overrideValue > > Loc.foundParam => Loc.requestValue > > Loc.additionalKidParams => Loc.childValues > > > > After this change, all instances of the "param" name within Loc should > > refer to something having to do with LocParam instances. > > > > Non-Breaking Additions: > > > > case class IfValue[T](test: Box[T] => Boolean, failMsg: FailMsg) > > extends LocParam[T] > > case class UnlessValue[T](test: Box[T] => Boolean, failMsg: FailMsg) > > extends LocParam[T] > > case class TestValueAccess[T](func: Box[T] => Box[LiftResponse]) > > extends LocParam[T] > > > > If you are using a non-Unit typed Loc, you can use these LocParam > > instances to enforce access rules at the value level. > > > > case class ValueTemplate[T](template: Box[T] => NodeSeq) extends > > LocParam[T] //per-value template selection > > > > DataLoc[T] subclass of Loc was added to facilitate the use of the new > > more typeful LocParam subtypes. > > > > A few changes to Link: > > > > Since Link.createLink creates a Box[Text] (and not a clickable link) a > > couple of methods were added to create the intermediate, unboxed > > values in order that subclasses can more easily manipulate the resulting > path: > > > > Link.pathList(value: T): List[String] // added to facilitate creation > > of value-aware paths by subclasses. > > Link.createPath(value: T): String //creates the String representation > > of the path that is subsequently turned into XML and boxed by > > Link.createLink > > > > Again, please let me know if any of these changes cause you headaches! > > My hope is that much of the modified functionality has not been used > > by very many people yet and that as a result it's a good time to make > > these changes before typeful Locs get too widely used to make breaking > > changes. > > > > Thanks, > > > > Kris > > > > > > -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to liftweb@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 -~----------~----~----~----~------~----~------~--~---