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
I was just informed that my changes broke MetaMegaProtoUser
interaction. I've reverted the commit until I can get that sorted out.
Sorry,
Kris
Hi, all,
I was just informed that my changes broke MetaMegaProtoUser
interaction. I've reverted the commit until I can get that sorted out.
It's something to do with how the login form is processed - at the
On Mon, Nov 16, 2009 at 3:13 PM, David Pollak
<feeder.of...@gmail.com> wrote:
>
>
> On Mon, Nov 16, 2009 at 2:12 PM, Kris Nuttycombe <kris.nu...@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?
moment I haven't figured out anything more with that. Essentially, the
login fails silently and returns the user to the login form upon
submission.
On Mon, Nov 16, 2009 at 4:02 PM, David Pollak
<feeder.of...@gmail.com> wrote:Absolutely; I just figured I didn't want to leave people with broken
>
>
> On Mon, Nov 16, 2009 at 2:20 PM, Kris Nuttycombe <kris.nu...@gmail.com>
> wrote:
>>
>> On Mon, Nov 16, 2009 at 3:13 PM, David Pollak
>> <feeder.of...@gmail.com> wrote:
>> >
>> >
>> > On Mon, Nov 16, 2009 at 2:12 PM, Kris Nuttycombe
>> > <kris.nu...@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?
>>
>> It's something to do with how the login form is processed - at the
>> moment I haven't figured out anything more with that. Essentially, the
>> login fails silently and returns the user to the login form upon
>> submission.
>
> That sounds like a deeper issue with MetaProtoUser. I'd keep your changes
> and see why MegaProtoUser is failing.
code while I figure it out since I'm not that familiar with
MegaProtoUser and am not sure how long that will take.
Kris
--
You received this message because you are subscribed to the Google Groups "Lift" group.
To post to this group, send email to lif...@googlegroups.com.
To unsubscribe from this group, send email to liftweb+u...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/liftweb?hl=.