[Lift] Re: json extraction problem
Hi, I pasted this to scala console and it worked. I am pretty sure that the problem is that your case classes are inner classes. Inner classes get one extra implicit constructor parameter, a reference to the outer class (same way as in Java). You need to move those case classes away from enclosing class (to an object or package etc.). The error message is very bad in this case. I will fix it. Cheers Joni On Oct 1, 7:49 am, Lincoln linxbet...@gmail.com wrote: Hi, I've been playing around with lift-json and I keep running into basic problems. I'm hoping someone can point out my mistake. I'm using net.liftweb % lift-json % 1.1-M5 Here's the code I'm trying to run: implicit val formats = net.liftweb.json.DefaultFormats case class Name(first: String, last: String) case class User(name: Name, email: String) import net.liftweb.json.JsonParser._ val u = { import JsonDSL._ (name - (first - Lincoln) ~ (last - Hochberg) ) ~ (email - linxbet...@gmail.com)} val json = JsonDSL.pretty(JsonAST.render(u)) val jsonAST = JsonParser.parse(json) val user = jsonAST.extract[User] This blows up with the following exception: net.liftweb.json.MappingException: Parsed JSON values do not match with class constructor args= arg types= constructor=public pkg.TestSpec$$anonfun$1$$anonfun$apply$1(pkg.TestSpec$$anonfun$1) at net.liftweb.json.Extraction$.net$liftweb$json$Extraction$$fail(Extraction.scala:151) at net.liftweb.json.Extraction$.newInstance$1(Extraction.scala:72) at net.liftweb.json.Extraction$.build$1(Extraction.scala:84) at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84) at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84) at scala.List.flatMap(List.scala:1132) at net.liftweb.json.Extraction$.build$1(Extraction.scala:84) at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84) at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84) at scala.List.flatMap(List.scala:1132) at net.liftweb.json.Extraction$.build$1(Extraction.scala:84) at net.liftweb.json.Extraction$.extract0(Extraction.scala:109) at net.liftweb.json.Extraction$.extract(Extraction.scala:60) at net.liftweb.json.JsonAST$JValue.extract(Json.scala:109) at com.hotpotato.core.ops.TestSpec$$anonfun$1$$anonfun$apply$1.apply(TestSpec.scala:48) at com.hotpotato.core.ops.TestSpec$$anonfun$1$$anonfun$apply$1.apply(TestSpec.scala:14) at org.specs.specification.ExampleExecution$$anonfun$3$$anonfun$apply$1.apply(Example.scala:207) at org.specs.specification.Example.execute(Example.scala:121) at org.specs.specification.ExampleLifeCycle$class.executeTest(ExampleLifeCycle.scala:20) at org.specs.Specification.executeTest(Specification.scala:28) at org.specs.specification.Sus.executeTest(Sus.scala:147) at org.specs.specification.ExampleExecution$$anonfun$3.apply(Example.scala:207) at org.specs.specification.ExampleExecution$$anonfun$3.apply(Example.scala:194) at org.specs.specification.ExampleExecution$$anonfun$2.apply(Example.scala:185) at org.specs.specification.ExampleExecution.execute(Example.scala:227) at org.specs.specification.Example.execute(Example.scala:117) at org.specs.specification.Example.errors(Example.scala:143) at org.specs.specification.Sus$$anonfun$successes$1.apply(Sus.scala:122) at org.specs.specification.Sus$$anonfun$successes$1.apply(Sus.scala:122) at scala.List.filter(List.scala:859) at org.specs.specification.Sus.successes(Sus.scala:122) at org.specs.Specification$$anonfun$successes$1.apply(Specification.scala:84) at org.specs.Specification$$anonfun$successes$1.apply(Specification.scala:84) at scala.List.flatMap(List.scala:1132) at org.specs.Specification.successes(Specification.scala:84) at sbt.impl.SpecsRunner.sbt$impl$SpecsRunner$$reportSpecification(TestFrameworkImpl.scala:140) at sbt.impl.SpecsRunner.runTest(TestFrameworkImpl.scala:123) at sbt.BasicTestRunner.run(TestFramework.scala:38) at sbt.TestFramework$$anonfun$7$$anonfun$apply$8.runTest$1(TestFramework.scala:136) at sbt.TestFramework$$anonfun$7$$anonfun$apply$8$$anonfun$apply$9.apply(TestFramework.scala:147) at sbt.TestFramework$$anonfun$7$$anonfun$apply$8$$anonfun$apply$9.apply(TestFramework.scala:147) at sbt.NamedTestTask.run(TestFramework.scala:57) at sbt.ScalaProject$$anonfun$sbt$ScalaProject$$toTask$1.apply(ScalaProject.scala:167) at sbt.ScalaProject$$anonfun$sbt$ScalaProject$$toTask$1.apply(ScalaProject.scala:167) at sbt.TaskManager$Task.invoke(TaskManager.scala:62) at sbt.impl.RunTask.runTask(RunTask.scala:78) at sbt.impl.RunTask.sbt$impl$RunTask$$runIfNotRoot(RunTask.scala:63) at sbt.impl.RunTask$$anonfun$runTasksExceptRoot$3.apply(RunTask.scala:49) at sbt.impl.RunTask$$anonfun$runTasksExceptRoot$3.apply(RunTask.scala:49) at sbt.Distributor$Run$Worker$$anonfun$2.apply(ParallelRunner.scala:130) at sbt.Distributor$Run$Worker$$anonfun$2.apply(ParallelRunner.scala:130) at sbt.Control$.trapUnit(Control.scala:19) at
[Lift] Re: CometActor timeout problem
Thanks Atsuhiko very much. I really appreciate your effort and this helps alot. Jack On Thu, Oct 1, 2009 at 4:11 AM, Atsuhiko Yamanaka atsuhiko.yaman...@gmail.com wrote: Hi, On Thu, Oct 1, 2009 at 1:11 PM, Jack Widman jack.wid...@gmail.com wrote: David, I have attached a (non) working example. It compiles and runs and does a part of what I want it to do but not completely. It first displays a couple of links and the link body for both links is just 0. It then spawns a couple of threads each of which generates a random number and then puts two Page objects on a PageQueue. The comet page is supposed to reRender the screen whenever a new page object is added to the Queue. Before it does this it calls a method called insertRandomNumber which changes the zero to some random value. There is not much code and i think its pretty self-explanatory. The html page is test.html. I really do appreciate your help and understand if you can't go through the whole thing. Frankly to say, I could not understand the internal logic, and it seems it has be broken, but attached modified src.zip will work as the demonstration of CometActor at least. * JoopComet implements CometListenee * TSGetterLauncer has been rewritten, and will start TSGetters in every 3 seconds. The previous version has really short life. * TSCatcher implements ListenerManager. * url links on the web page will be updated in every 3 seconds. Sincerely, -- Atsuhiko Yamanaka JCraft,Inc. 1-14-20 HONCHO AOBA-KU, SENDAI, MIYAGI 980-0014 Japan. Tel +81-22-723-2150 +1-415-578-3454 Skype callto://jcraft/ --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: json extraction problem
Cool, thanks Joni. I'll give it a try. On Thu, Oct 1, 2009 at 2:36 AM, Joni Freeman freeman.j...@gmail.com wrote: Hi, I pasted this to scala console and it worked. I am pretty sure that the problem is that your case classes are inner classes. Inner classes get one extra implicit constructor parameter, a reference to the outer class (same way as in Java). You need to move those case classes away from enclosing class (to an object or package etc.). The error message is very bad in this case. I will fix it. Cheers Joni On Oct 1, 7:49 am, Lincoln linxbet...@gmail.com wrote: Hi, I've been playing around with lift-json and I keep running into basic problems. I'm hoping someone can point out my mistake. I'm using net.liftweb % lift-json % 1.1-M5 Here's the code I'm trying to run: implicit val formats = net.liftweb.json.DefaultFormats case class Name(first: String, last: String) case class User(name: Name, email: String) import net.liftweb.json.JsonParser._ val u = { import JsonDSL._ (name - (first - Lincoln) ~ (last - Hochberg) ) ~ (email - linxbet...@gmail.com)} val json = JsonDSL.pretty(JsonAST.render(u)) val jsonAST = JsonParser.parse(json) val user = jsonAST.extract[User] This blows up with the following exception: net.liftweb.json.MappingException: Parsed JSON values do not match with class constructor args= arg types= constructor=public pkg.TestSpec$$anonfun$1$$anonfun$apply$1(pkg.TestSpec$$anonfun$1) at net.liftweb.json.Extraction$.net$liftweb$json$Extraction$$fail(Extraction.scala:151) at net.liftweb.json.Extraction$.newInstance$1(Extraction.scala:72) at net.liftweb.json.Extraction$.build$1(Extraction.scala:84) at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84) at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84) at scala.List.flatMap(List.scala:1132) at net.liftweb.json.Extraction$.build$1(Extraction.scala:84) at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84) at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84) at scala.List.flatMap(List.scala:1132) at net.liftweb.json.Extraction$.build$1(Extraction.scala:84) at net.liftweb.json.Extraction$.extract0(Extraction.scala:109) at net.liftweb.json.Extraction$.extract(Extraction.scala:60) at net.liftweb.json.JsonAST$JValue.extract(Json.scala:109) at com.hotpotato.core.ops.TestSpec$$anonfun$1$$anonfun$apply$1.apply(TestSpec.scala:48) at com.hotpotato.core.ops.TestSpec$$anonfun$1$$anonfun$apply$1.apply(TestSpec.scala:14) at org.specs.specification.ExampleExecution$$anonfun$3$$anonfun$apply$1.apply(Example.scala:207) at org.specs.specification.Example.execute(Example.scala:121) at org.specs.specification.ExampleLifeCycle$class.executeTest(ExampleLifeCycle.scala:20) at org.specs.Specification.executeTest(Specification.scala:28) at org.specs.specification.Sus.executeTest(Sus.scala:147) at org.specs.specification.ExampleExecution$$anonfun$3.apply(Example.scala:207) at org.specs.specification.ExampleExecution$$anonfun$3.apply(Example.scala:194) at org.specs.specification.ExampleExecution$$anonfun$2.apply(Example.scala:185) at org.specs.specification.ExampleExecution.execute(Example.scala:227) at org.specs.specification.Example.execute(Example.scala:117) at org.specs.specification.Example.errors(Example.scala:143) at org.specs.specification.Sus$$anonfun$successes$1.apply(Sus.scala:122) at org.specs.specification.Sus$$anonfun$successes$1.apply(Sus.scala:122) at scala.List.filter(List.scala:859) at org.specs.specification.Sus.successes(Sus.scala:122) at org.specs.Specification$$anonfun$successes$1.apply(Specification.scala:84) at org.specs.Specification$$anonfun$successes$1.apply(Specification.scala:84) at scala.List.flatMap(List.scala:1132) at org.specs.Specification.successes(Specification.scala:84) at sbt.impl.SpecsRunner.sbt$impl$SpecsRunner$$reportSpecification(TestFrameworkImpl.scala:140) at sbt.impl.SpecsRunner.runTest(TestFrameworkImpl.scala:123) at sbt.BasicTestRunner.run(TestFramework.scala:38) at sbt.TestFramework$$anonfun$7$$anonfun$apply$8.runTest$1(TestFramework.scala:136) at sbt.TestFramework$$anonfun$7$$anonfun$apply$8$$anonfun$apply$9.apply(TestFramework.scala:147) at sbt.TestFramework$$anonfun$7$$anonfun$apply$8$$anonfun$apply$9.apply(TestFramework.scala:147) at sbt.NamedTestTask.run(TestFramework.scala:57) at sbt.ScalaProject$$anonfun$sbt$ScalaProject$$toTask$1.apply(ScalaProject.scala:167) at sbt.ScalaProject$$anonfun$sbt$ScalaProject$$toTask$1.apply(ScalaProject.scala:167) at sbt.TaskManager$Task.invoke(TaskManager.scala:62) at sbt.impl.RunTask.runTask(RunTask.scala:78) at sbt.impl.RunTask.sbt$impl$RunTask$$runIfNotRoot(RunTask.scala:63) at sbt.impl.RunTask$$anonfun$runTasksExceptRoot$3.apply(RunTask.scala:49) at
[Lift] Re: CometActor timeout problem
Atsuhiko, How would I make one small change? I would like each link to refresh only once and I would like that to happen as soon as the TSCatcher objects catch a package. Thanks in advance. Jack On Thu, Oct 1, 2009 at 4:11 AM, Atsuhiko Yamanaka atsuhiko.yaman...@gmail.com wrote: Hi, On Thu, Oct 1, 2009 at 1:11 PM, Jack Widman jack.wid...@gmail.com wrote: David, I have attached a (non) working example. It compiles and runs and does a part of what I want it to do but not completely. It first displays a couple of links and the link body for both links is just 0. It then spawns a couple of threads each of which generates a random number and then puts two Page objects on a PageQueue. The comet page is supposed to reRender the screen whenever a new page object is added to the Queue. Before it does this it calls a method called insertRandomNumber which changes the zero to some random value. There is not much code and i think its pretty self-explanatory. The html page is test.html. I really do appreciate your help and understand if you can't go through the whole thing. Frankly to say, I could not understand the internal logic, and it seems it has be broken, but attached modified src.zip will work as the demonstration of CometActor at least. * JoopComet implements CometListenee * TSGetterLauncer has been rewritten, and will start TSGetters in every 3 seconds. The previous version has really short life. * TSCatcher implements ListenerManager. * url links on the web page will be updated in every 3 seconds. Sincerely, -- Atsuhiko Yamanaka JCraft,Inc. 1-14-20 HONCHO AOBA-KU, SENDAI, MIYAGI 980-0014 Japan. Tel +81-22-723-2150 +1-415-578-3454 Skype callto://jcraft/ --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Started integrating lift in a scala+spring project. Feedback?
Hi, I have started integrating Lift in a Scala + Spring example project (see http://code.google.com/p/scala-spring). This first integration just has a single template and snippet for now but should give an idea how Lift can be integrated. Before I go further with this I would like some Lift experts to review the code I have written so far. Anybody? The changeset that adds lift integration is in http://code.google.com/p/scala-spring/source/detail?r=18 Thanks, Rintcius --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: Concurrent Web Service Requests?
Well I said what I had to say. My problem is not really the prefix name but the existence of other prefixes then lift, that are interpreted by lift. It's just how I see things now and nothing on this thread provided sufficient arguments to convince me otherwise ... not much else for me to do if majority and especially DPP thinks otherwise. It is what it is I guess. Br's, Marius On Oct 1, 4:18 am, Naftoli Gugenheim naftoli...@gmail.com wrote: I think everyone agrees in concept, that an arbitrary prefix sets a bad precendent, which is why it is no longer do:par. But on the other hand, if the part after lift: is either a reserved word or a user word--a snippet name--then the more reserved words, the more you limit snippet names. (Should S.mapSnippet(parallel, ...) throw an exception?) So we have these two considerations on either end of the spectrum. Arguably, liftx as a prefix satisfies both--it is sufficiently generic to include almost any special attribute that may be added, it clearly spells out extended lift attribute, and on the other hand it keeps reserved lift attributes separate from the user's snippet namespace. Now let's bear in mind that this is all only relevant in the future, when lift: attributes indeed will be interpreted as lift:snippet=... is now. At that point it might make sense for the explicit :snippet format to be moved to the liftx prefix-- liftx:snippet=... --for the same reason, not to encroach on the snippet namespace. - marius d.marius.dan...@gmail.com wrote: It has been debated many times in slightly different contexts. To me it is more about clarity. We add a new prefix now, tomorrow add another one and so on. People would have to remember what goes where and mix things up. To me lift prefix is enough and quite clear. It is more than just s snippet thingy. It tells the user hey this thing is telling the framework something and the framework is doing something with it. It is separating framework xml markup from the actual xhtml markup. Having a single reserved prefix promotes clarity and keeps things simple and rather intuitive. I'm not in favor of using unprefixed attributes like par=something (btw I really don't like par naming :) ...) because unprefixed attributes should be only standard xhtml ones or the ones that user explicitly specifies it. So lift:parallel=true or lift:async=true should be just fine. Br's, Marius On Sep 30, 8:05 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: Could you elaborate on why adding a new prefix may not be a good idea? And is it better or worse than having it unprefixed? - marius d.marius.dan...@gmail.com wrote: On Sep 30, 8:23 am, Kevin Wright kev.lee.wri...@googlemail.com wrote: I thought there were issues here because anything starting lift: gets executed as a snippet. Correct BUT lift:par or lift:parallel attributes are also applicable to snippets context. They determine the snippet's execution semantics. So I'm still questioning the need for a new prefix. I'm still for an eval: prefix, as these proposals all relate to how a page is evaluated. On Wed, Sep 30, 2009 at 5:34 AM, marius d. marius.dan...@gmail.com wrote: lift is already a reserved prefix for snippets. So I'd stay with simply lift prefix for these attributes as well. Br's, Marius On Sep 29, 11:11 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: So what is your proposal? Am I interpreting you correctly that you are for a prefix of 'lift'? And it will be a reserved suffix? - marius d.marius.dan...@gmail.com wrote: I realize that I may be a little late here but I do have second thoughts about liftx prefix. Yeah, I'm not a big fan of it. I understand that these attributes are not really snippets or built is snippets but is this an enough reason to introduce a new prefix? Personally I don't think so. Historically lift reserved prefix names were heavily debated and argued and this is a little sensitive area. But the good news is that I may be the only one feeling this way about this and everyone else likes it so I'm just a negligible minority. Br's, Marius On Sep 25, 12:02 pm, David Pollak feeder.of.the.be...@gmail.com wrote: On Thu, Sep 24, 2009 at 11:33 AM, Naftoli Gugenheim naftoli...@gmail.comwrote: If you like the idea of having them all as attributes but don't like the idea of using a single attribute ('xx:eager_eval=true xx:parallel=true' rather than 'xx:eval=eager parallel' as I suggested, where xx is the prefix to be chosen) then maybe the prefix should be 'eval'. I've changed the code to: liftx:eager_eval=true liftx:par=true | liftx:parallel=true The reasons for not combining them: -
[Lift] Re: Started integrating lift in a scala+spring project. Feedback?
Rintcius, Whilst I applaud the effort, what is your goal with integrating the two frameworks? What problem are you looking to solve? Cheers, Tim On 1 Oct 2009, at 10:14, rintcius wrote: Hi, I have started integrating Lift in a Scala + Spring example project (see http://code.google.com/p/scala-spring). This first integration just has a single template and snippet for now but should give an idea how Lift can be integrated. Before I go further with this I would like some Lift experts to review the code I have written so far. Anybody? The changeset that adds lift integration is in http://code.google.com/p/scala-spring/source/detail?r=18 Thanks, Rintcius --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: Javascript Commands
If you have a javascript function foo(a, b) where a is a String and b is an integer then you can call that with JE.Call(foo, one, 2) for example. If you wanted to set some variable to the result of the function, you could do: JsCmds.CrVar(myVar, JE.Call(foo, one, 2)) Derek On Wed, Sep 30, 2009 at 6:17 PM, sunanda sunanda.pa...@gmail.com wrote: Hi David, Thanks for your prompt reply. As a beginner I have started reading the book Exploring Lift. It says If you need to write large portions of JavaScript code for your pages, we recommend writing that code in pure JavaScript in an external file and then including that file in your pages. In particular, if you write your code as JavaScript functions, you can use the JE.Call class to execute those functions from your Lift code. I just want to know how can I use JE.Call function fro my external javascript file and also how to use JE abstractions like (JsFunc, ValById etc..) Could you please provide a simple example so that my understanding will be clear. Thanks Sunanda On Oct 1, 9:56 am, David Pollak feeder.of.the.be...@gmail.com wrote: Seehttp://demo.liftweb.net/ajax Specifically: var cnt = 0def doClicker(text: NodeSeq) = a(() = {cnt = cnt + 1; SetHtml(spanName, Text( cnt.toString))}, text) It increments a counter. On Wed, Sep 30, 2009 at 4:50 PM, sunanda sunanda.pa...@gmail.com wrote: Hi, I am totally new to lift framework. Can any one give me a simple example of how to call a function form a javascript file and store the results in scala variable. Thanks. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://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 -~--~~~~--~~--~--~---
[Lift] Re: CometActor timeout problem
Thanks so much Atsuhiko. You are very kind. On Thu, Oct 1, 2009 at 11:01 AM, Atsuhiko Yamanaka atsuhiko.yaman...@gmail.com wrote: Hi, On Thu, Oct 1, 2009 at 9:42 PM, Jack Widman jack.wid...@gmail.com wrote: Atsuhiko, How would I make one small change? I would like each link to refresh only once and I would like that to happen as soon as the TSCatcher objects catch a package. Thanks in advance. How about the attached src.zip? It will refresh each links only once. A package will be sent from JoopComet#localSetup and that method will be invoked only once during the life of JoopComet. This means that even if you leave test.html page and re-vist there, that method will not be invoked again. Sincerely, -- Atsuhiko Yamanaka JCraft,Inc. 1-14-20 HONCHO AOBA-KU, SENDAI, MIYAGI 980-0014 Japan. Tel +81-22-723-2150 +1-415-578-3454 Skype callto://jcraft --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: CometActor timeout problem
Thanks! On Thu, Oct 1, 2009 at 1:11 AM, Atsuhiko Yamanaka atsuhiko.yaman...@gmail.com wrote: Hi, On Thu, Oct 1, 2009 at 1:11 PM, Jack Widman jack.wid...@gmail.com wrote: David, I have attached a (non) working example. It compiles and runs and does a part of what I want it to do but not completely. It first displays a couple of links and the link body for both links is just 0. It then spawns a couple of threads each of which generates a random number and then puts two Page objects on a PageQueue. The comet page is supposed to reRender the screen whenever a new page object is added to the Queue. Before it does this it calls a method called insertRandomNumber which changes the zero to some random value. There is not much code and i think its pretty self-explanatory. The html page is test.html. I really do appreciate your help and understand if you can't go through the whole thing. Frankly to say, I could not understand the internal logic, and it seems it has be broken, but attached modified src.zip will work as the demonstration of CometActor at least. * JoopComet implements CometListenee * TSGetterLauncer has been rewritten, and will start TSGetters in every 3 seconds. The previous version has really short life. * TSCatcher implements ListenerManager. * url links on the web page will be updated in every 3 seconds. Sincerely, -- Atsuhiko Yamanaka JCraft,Inc. 1-14-20 HONCHO AOBA-KU, SENDAI, MIYAGI 980-0014 Japan. Tel +81-22-723-2150 +1-415-578-3454 Skype callto://jcraft/ -- 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 -~--~~~~--~~--~--~---
[Lift] Re: Help with using JSExp and JsCmd traits
David, Excellent. This is exactly what I was looking for. Thanks. Glenn On Sep 30, 4:54 pm, David Pollak feeder.of.the.be...@gmail.com wrote: JqHtml and JqEmptyAfter eagerly evaluate the NodeSeq on the server, so there's no way to get client-side JS execution in a NodeSeq. You can write something like: object MyJqText { def apply(content: JsExp) = new JsExp with JQueryRight with JQueryLeft { def toJsCmd = text(+content.toJsCmd+) } } So: JqId(item-save) MyJqText(JsVar(this, id) + has changed) On Wed, Sep 30, 2009 at 2:05 PM, glenn gl...@exmbly.com wrote: As I mentioned, I was looking for a way to translate this JavaScript $('#item-save').html(this.id + ' was toggled') into a JsCmd so I could coded it my snipped as AnonFunc(some jsCmd). I know I can just use JsRaw, but who in their right mind wants to write JavaScript if it can be avoided. Glenn On Sep 30, 1:20 pm, David Pollak feeder.of.the.be...@gmail.com wrote: On Wed, Sep 30, 2009 at 1:08 PM, glenn gl...@exmbly.com wrote: David, The problem with writting the NodeSeq as div{this.id} was toggled/ div) is that it generates the following JavaScript: function() {jQuery('#'+item-save).empty().after(div-1 was toggled/div); that is, Lift evaluates {this.id} in relation to the snippet, then outputs the value in the JavaScript - not the result I'm after. What are you after? What is this in the context? Glenn... On Sep 30, 11:41 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Wed, Sep 30, 2009 at 11:36 AM, glenn gl...@exmbly.com wrote: David, I can't do this, AnonFunc(JqId(item-save) JqEmptyAfter (divthis.id was toggled/div)) , if that's what you mean. That's not what I wrote. Please look again at the curly braces around the this.id: AnonFunc(JqId(item-save) JqEmptyAfter(div{this.id} was toggled/div)) This generates the following JavaScript: function() {jQuery('#'+item-save).empty().after(divthis.idwas toggled/div); and that won't do. What's needed is something more akin to: function() {jQuery('#'+item-save).empty().after(div + this.id + was toggled/div); So, I guess my question is how do I define a NodeSeq to accomplish this? Glenn On Sep 30, 10:40 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Tue, Sep 29, 2009 at 1:22 PM, glenn gl...@exmbly.com wrote: I'd like to converting the following JsRaw(function() $('#item-save').html(this.id + ' was toggled')) into something more object-oriented, using JQuery support functions in Lift. I've tried various combiniations, including this AnonFunc(JqId(item-save) JqEmptyAfter(div{JsRaw(this.id )} was toggled/div)) AnonFunc(JqId(item-save) JqEmptyAfter(div{this.id} was toggled/div)) No reason to promote this.id into some JavaScript thing. It's part of the XML literal. The XML literal is generated server-side as part of the JavaScript function. but nothing seems to work. It just treats this.id as ordinary text, not as a Javascript variable. Any ideas would be appreciated. Glenn -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://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 -~--~~~~--~~--~--~---
[Lift] Re: Help with using JSExp and JsCmd traits
On Thu, Oct 1, 2009 at 8:25 AM, glenn gl...@exmbly.com wrote: David, Excellent. This is exactly what I was looking for. Wow. I think this is the first time I've actually helped you. I'm sorry I'm bad at understanding what you ask for. More broadly, the JavaScript stuff in Lift is not magic. It's just a bunch of simple JavaScript that I and some of the other committers have used over time. I encourage the creation of your own JsCmd and JsExp components that suit your project... and maybe even share them with the community. Thanks. Glenn On Sep 30, 4:54 pm, David Pollak feeder.of.the.be...@gmail.com wrote: JqHtml and JqEmptyAfter eagerly evaluate the NodeSeq on the server, so there's no way to get client-side JS execution in a NodeSeq. You can write something like: object MyJqText { def apply(content: JsExp) = new JsExp with JQueryRight with JQueryLeft { def toJsCmd = text(+content.toJsCmd+) } } So: JqId(item-save) MyJqText(JsVar(this, id) + has changed) On Wed, Sep 30, 2009 at 2:05 PM, glenn gl...@exmbly.com wrote: As I mentioned, I was looking for a way to translate this JavaScript $('#item-save').html(this.id + ' was toggled') into a JsCmd so I could coded it my snipped as AnonFunc(some jsCmd). I know I can just use JsRaw, but who in their right mind wants to write JavaScript if it can be avoided. Glenn On Sep 30, 1:20 pm, David Pollak feeder.of.the.be...@gmail.com wrote: On Wed, Sep 30, 2009 at 1:08 PM, glenn gl...@exmbly.com wrote: David, The problem with writting the NodeSeq as div{this.id} was toggled/ div) is that it generates the following JavaScript: function() {jQuery('#'+item-save).empty().after(div-1 was toggled/div); that is, Lift evaluates {this.id} in relation to the snippet, then outputs the value in the JavaScript - not the result I'm after. What are you after? What is this in the context? Glenn... On Sep 30, 11:41 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Wed, Sep 30, 2009 at 11:36 AM, glenn gl...@exmbly.com wrote: David, I can't do this, AnonFunc(JqId(item-save) JqEmptyAfter (divthis.id was toggled/div)) , if that's what you mean. That's not what I wrote. Please look again at the curly braces around the this.id: AnonFunc(JqId(item-save) JqEmptyAfter(div{this.id} was toggled/div)) This generates the following JavaScript: function() {jQuery('#'+item-save).empty().after(divthis.idwas toggled/div); and that won't do. What's needed is something more akin to: function() {jQuery('#'+item-save).empty().after(div + this.id + was toggled/div); So, I guess my question is how do I define a NodeSeq to accomplish this? Glenn On Sep 30, 10:40 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Tue, Sep 29, 2009 at 1:22 PM, glenn gl...@exmbly.com wrote: I'd like to converting the following JsRaw(function() $('#item-save').html(this.id + ' was toggled')) into something more object-oriented, using JQuery support functions in Lift. I've tried various combiniations, including this AnonFunc(JqId(item-save) JqEmptyAfter(div{JsRaw( this.id )} was toggled/div)) AnonFunc(JqId(item-save) JqEmptyAfter(div{this.id} was toggled/div)) No reason to promote this.id into some JavaScript thing. It's part of the XML literal. The XML literal is generated server-side as part of the JavaScript function. but nothing seems to work. It just treats this.id as ordinary text, not as a Javascript variable. Any ideas would be appreciated. Glenn -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics -- 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
[Lift] Re: Started integrating lift in a scala+spring project. Feedback?
A quick look at the code... you use open_! That's considered very bad practice. Any time you use open_!, you are saying I know this thing contains a value. It's like not doing null testing when the method you are calling is expected to return a null under certain circumstance. Put another way, the ! is in the name for a reason. It's dangerous... think before using. On Thu, Oct 1, 2009 at 2:14 AM, rintcius rintc...@gmail.com wrote: Hi, I have started integrating Lift in a Scala + Spring example project (see http://code.google.com/p/scala-spring). This first integration just has a single template and snippet for now but should give an idea how Lift can be integrated. Before I go further with this I would like some Lift experts to review the code I have written so far. Anybody? The changeset that adds lift integration is in http://code.google.com/p/scala-spring/source/detail?r=18 Thanks, Rintcius -- 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 -~--~~~~--~~--~--~---
[Lift] Re: JE Abstractions
See my reply to your other post. If that's not clear, please let me know. Derek On Wed, Sep 30, 2009 at 7:57 PM, sunanda sunanda.pa...@gmail.com wrote: Hi, Can any one provide a simple example to explain how to use JE abstractions (Call,JsFunc) in lift code . I am new to Lift Framework Thanks. --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: Help with using JSExp and JsCmd traits
David, This is off topic, but you always are a help. Your thoughtful assistance on this discussion group either directly resolves issues I'm having with Lift, or leads me to rethink my strategy and explore new avenues I haven't thought of. At the very least, you force me to reframe many of my questions, so they can be answered. Many times, I've thought of abandoning Lift for safer harbors, but the help from you and all on this group brings me back to the fold. I've still got lots to learn. Glenn On Oct 1, 8:29 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Thu, Oct 1, 2009 at 8:25 AM, glenn gl...@exmbly.com wrote: David, Excellent. This is exactly what I was looking for. Wow. I think this is the first time I've actually helped you. I'm sorry I'm bad at understanding what you ask for. More broadly, the JavaScript stuff in Lift is not magic. It's just a bunch of simple JavaScript that I and some of the other committers have used over time. I encourage the creation of your own JsCmd and JsExp components that suit your project... and maybe even share them with the community. Thanks. Glenn On Sep 30, 4:54 pm, David Pollak feeder.of.the.be...@gmail.com wrote: JqHtml and JqEmptyAfter eagerly evaluate the NodeSeq on the server, so there's no way to get client-side JS execution in a NodeSeq. You can write something like: object MyJqText { def apply(content: JsExp) = new JsExp with JQueryRight with JQueryLeft { def toJsCmd = text(+content.toJsCmd+) } } So: JqId(item-save) MyJqText(JsVar(this, id) + has changed) On Wed, Sep 30, 2009 at 2:05 PM, glenn gl...@exmbly.com wrote: As I mentioned, I was looking for a way to translate this JavaScript $('#item-save').html(this.id + ' was toggled') into a JsCmd so I could coded it my snipped as AnonFunc(some jsCmd). I know I can just use JsRaw, but who in their right mind wants to write JavaScript if it can be avoided. Glenn On Sep 30, 1:20 pm, David Pollak feeder.of.the.be...@gmail.com wrote: On Wed, Sep 30, 2009 at 1:08 PM, glenn gl...@exmbly.com wrote: David, The problem with writting the NodeSeq as div{this.id} was toggled/ div) is that it generates the following JavaScript: function() {jQuery('#'+item-save).empty().after(div-1 was toggled/div); that is, Lift evaluates {this.id} in relation to the snippet, then outputs the value in the JavaScript - not the result I'm after. What are you after? What is this in the context? Glenn... On Sep 30, 11:41 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Wed, Sep 30, 2009 at 11:36 AM, glenn gl...@exmbly.com wrote: David, I can't do this, AnonFunc(JqId(item-save) JqEmptyAfter (divthis.id was toggled/div)) , if that's what you mean. That's not what I wrote. Please look again at the curly braces around the this.id: AnonFunc(JqId(item-save) JqEmptyAfter(div{this.id} was toggled/div)) This generates the following JavaScript: function() {jQuery('#'+item-save).empty().after(divthis.idwas toggled/div); and that won't do. What's needed is something more akin to: function() {jQuery('#'+item-save).empty().after(div + this.id + was toggled/div); So, I guess my question is how do I define a NodeSeq to accomplish this? Glenn On Sep 30, 10:40 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Tue, Sep 29, 2009 at 1:22 PM, glenn gl...@exmbly.com wrote: I'd like to converting the following JsRaw(function() $('#item-save').html(this.id + ' was toggled')) into something more object-oriented, using JQuery support functions in Lift. I've tried various combiniations, including this AnonFunc(JqId(item-save) JqEmptyAfter(div{JsRaw( this.id )} was toggled/div)) AnonFunc(JqId(item-save) JqEmptyAfter(div{this.id} was toggled/div)) No reason to promote this.id into some JavaScript thing. It's part of the XML literal. The XML literal is generated server-side as part of the JavaScript function. but nothing seems to work. It just treats this.id as ordinary text, not as a Javascript variable. Any ideas would be appreciated. Glenn -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning
[Lift] Re: Started integrating lift in a scala+spring project. Feedback?
Hi Tim, This project is meant as an example for people (like me) that maintain existing Spring architectures and are interested in using Scala and Lift. What I want to do now is port the existing jsp's and spring controllers to lift, so that people can compare jsp and lift-webkit with each other (and probably favor lift :) ). Currently I have just looked at the easiest way to integrate Lift and Spring (that is using the LiftFilter and access Spring's ApplicationContext), but I am also interested in other ways to integrate them (at a later stage). Rintcius --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Testing snippets that depend on a user logged in
I have a class called class Trainer { def showPeople(xhtml : Group) : NodeSeq = { val user : User = User.currentUser.open_! ... } } I then want to write a unit test to test that returns proper xml. The test is written as so def testValue() = { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) () } The User object inherits from MegaProtoUser. The problem is I am not sure how to create a mock user and sign them in. I have tried in my unit test override def setUp : Unit = { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) } The mock user log-in *seems* to work fine but when User.currentUser.open_! is called it throws an exception on trying to open an empty box. So either how do I do this or how do others do this type of testing. I am sure I am missing something simple. Thanks, ryan --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: Concurrent Web Service Requests?
Marius, I have a ton of respect for your opinion and I appreciate your analysis. I have been following this thread and thinking, what does the lift: prefix mean? In my mind, it means this thing will be changed based on evaluating some code. So, using the lift: prefix for something that also means this modifies the meaning of this snippet invocation presents something discordant to me. With that being said, I'm going to hand the decision to you. I trust your decisions and have concerns about my own instincts when it comes to naming. Please update the code to reflect what you think it should be and merge it into master. Thanks, David On Thu, Oct 1, 2009 at 5:58 AM, marius d. marius.dan...@gmail.com wrote: Well I said what I had to say. My problem is not really the prefix name but the existence of other prefixes then lift, that are interpreted by lift. It's just how I see things now and nothing on this thread provided sufficient arguments to convince me otherwise ... not much else for me to do if majority and especially DPP thinks otherwise. It is what it is I guess. Br's, Marius On Oct 1, 4:18 am, Naftoli Gugenheim naftoli...@gmail.com wrote: I think everyone agrees in concept, that an arbitrary prefix sets a bad precendent, which is why it is no longer do:par. But on the other hand, if the part after lift: is either a reserved word or a user word--a snippet name--then the more reserved words, the more you limit snippet names. (Should S.mapSnippet(parallel, ...) throw an exception?) So we have these two considerations on either end of the spectrum. Arguably, liftx as a prefix satisfies both--it is sufficiently generic to include almost any special attribute that may be added, it clearly spells out extended lift attribute, and on the other hand it keeps reserved lift attributes separate from the user's snippet namespace. Now let's bear in mind that this is all only relevant in the future, when lift: attributes indeed will be interpreted as lift:snippet=... is now. At that point it might make sense for the explicit :snippet format to be moved to the liftx prefix-- liftx:snippet=... --for the same reason, not to encroach on the snippet namespace. - marius d.marius.dan...@gmail.com wrote: It has been debated many times in slightly different contexts. To me it is more about clarity. We add a new prefix now, tomorrow add another one and so on. People would have to remember what goes where and mix things up. To me lift prefix is enough and quite clear. It is more than just s snippet thingy. It tells the user hey this thing is telling the framework something and the framework is doing something with it. It is separating framework xml markup from the actual xhtml markup. Having a single reserved prefix promotes clarity and keeps things simple and rather intuitive. I'm not in favor of using unprefixed attributes like par=something (btw I really don't like par naming :) ...) because unprefixed attributes should be only standard xhtml ones or the ones that user explicitly specifies it. So lift:parallel=true or lift:async=true should be just fine. Br's, Marius On Sep 30, 8:05 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: Could you elaborate on why adding a new prefix may not be a good idea? And is it better or worse than having it unprefixed? - marius d.marius.dan...@gmail.com wrote: On Sep 30, 8:23 am, Kevin Wright kev.lee.wri...@googlemail.com wrote: I thought there were issues here because anything starting lift: gets executed as a snippet. Correct BUT lift:par or lift:parallel attributes are also applicable to snippets context. They determine the snippet's execution semantics. So I'm still questioning the need for a new prefix. I'm still for an eval: prefix, as these proposals all relate to how a page is evaluated. On Wed, Sep 30, 2009 at 5:34 AM, marius d. marius.dan...@gmail.com wrote: lift is already a reserved prefix for snippets. So I'd stay with simply lift prefix for these attributes as well. Br's, Marius On Sep 29, 11:11 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: So what is your proposal? Am I interpreting you correctly that you are for a prefix of 'lift'? And it will be a reserved suffix? - marius d.marius.dan...@gmail.com wrote: I realize that I may be a little late here but I do have second thoughts about liftx prefix. Yeah, I'm not a big fan of it. I understand that these attributes are not really snippets or built is snippets but is this an enough reason to introduce a new prefix? Personally I don't think so. Historically lift reserved prefix names were heavily debated and argued and this is a little sensitive area. But the good news is that
[Lift] Re: Started integrating lift in a scala+spring project. Feedback?
Ok thanks David. What is the recommended way to get the ServletContext from a lift snippet (in 1.0.2)? Rintcius --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: Started integrating lift in a scala+spring project. Feedback?
On Thu, Oct 1, 2009 at 9:18 AM, rintcius rintc...@gmail.com wrote: Ok thanks David. What is the recommended way to get the ServletContext from a lift snippet (in 1.0.2)? Use the for comprehension to test if a Box is empty or not. See http://blog.lostlake.org/index.php?/archives/50-The-Scala-Option-class-and-how-lift-uses-it.html(for the current purpose, Option and Box have the same purpose) Rintcius -- 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 -~--~~~~--~~--~--~---
[Lift] Re: Testing snippets that depend on a user logged in
Using Specs 1.6: object HelloWorldTestSpecs extends Specification { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def executeExpectations(ex: Examples, t: =Any): Any = { S.initIfUninitted(session) { ... put your User init here. The User.logUserIn will be within the context of a session and thus session (and request) vars will be valid } } HelloWorld Snippet should { Put the time in the node in { ... do testing here } } } Hope this helps. On Thu, Oct 1, 2009 at 8:55 AM, rstradling ryanstradl...@gmail.com wrote: I have a class called class Trainer { def showPeople(xhtml : Group) : NodeSeq = { val user : User = User.currentUser.open_! ... } } I then want to write a unit test to test that returns proper xml. The test is written as so def testValue() = { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) () } The User object inherits from MegaProtoUser. The problem is I am not sure how to create a mock user and sign them in. I have tried in my unit test override def setUp : Unit = { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) } The mock user log-in *seems* to work fine but when User.currentUser.open_! is called it throws an exception on trying to open an empty box. So either how do I do this or how do others do this type of testing. I am sure I am missing something simple. Thanks, ryan -- 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 -~--~~~~--~~--~--~---
[Lift] Re: Unwarranted dependencies in lift-record
On Tue, Sep 29, 2009 at 2:42 AM, Timothy Perrett timo...@getintheloop.euwrote: Guys, I just noticed that lift-record depends on lift-webket because of some calls to S... IMHO, we need to remove this because thats simply too tight a coupling between the webkit and an abstract persistence interface like record. For instance, one record abstraction I wrote isn't even used in webapps... Thoughts? One of my criteria for a Record class is that it must be able to translate itself to/from HTML forms (as well as XML and JSON). If you can find a way for Record to play nicely with HTML form generation in with lift-webkit and without it, cool. I'm all for it. Cheers, Tim -- 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 -~--~~~~--~~--~--~---
[Lift] Re: Testing snippets that depend on a user logged in
Hi Ryan, It looks like you're currently using a JUnit TestCase. If you want an easier port to something that would work you could use a ScalaTest Suite like this: import org.scalatest.Suite class YourSuite extends Suite { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def withFixture(test: NoArgTest) { S.initIfUninitted(session) { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) test() } } def testValue() { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) // seems like you need an assertion here... } } A Suite considers methods that start with test as tests, like JUnit 3, except they don't need to result in Unit so you don't need an extra () at the end. The withFixture method is an alternative to beforeEach/afterEach, which are like JUnit 3's setUp/tearDown methods. Each test gets passed as a function to withFixture, which is responsible for executing the test by invoking the function. In this case, it is executed in the context created by S. initIfUninitted. This is ScalaTest 1.0, which is available as a SNAPSHOT right now but should be released proper a week from Monday. http://www.artima.com/scalatest Bill On Thu, Oct 1, 2009 at 9:50 AM, David Pollak feeder.of.the.be...@gmail.com wrote: Using Specs 1.6: object HelloWorldTestSpecs extends Specification { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def executeExpectations(ex: Examples, t: =Any): Any = { S.initIfUninitted(session) { ... put your User init here. The User.logUserIn will be within the context of a session and thus session (and request) vars will be valid } } HelloWorld Snippet should { Put the time in the node in { ... do testing here } } } Hope this helps. On Thu, Oct 1, 2009 at 8:55 AM, rstradling ryanstradl...@gmail.com wrote: I have a class called class Trainer { def showPeople(xhtml : Group) : NodeSeq = { val user : User = User.currentUser.open_! ... } } I then want to write a unit test to test that returns proper xml. The test is written as so def testValue() = { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) () } The User object inherits from MegaProtoUser. The problem is I am not sure how to create a mock user and sign them in. I have tried in my unit test override def setUp : Unit = { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) } The mock user log-in *seems* to work fine but when User.currentUser.open_! is called it throws an exception on trying to open an empty box. So either how do I do this or how do others do this type of testing. I am sure I am missing something simple. Thanks, ryan -- 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 -- Bill Venners Artima, Inc. http://www.artima.com --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: Testing snippets that depend on a user logged in
Bill, Thanks for posting this. I am, by experience (I started using it, I can use it enough to write basic tests, I know no more) using Specs. I would welcome and encourage some sample tests in Lift archetypes that use ScalaTest. I want to make sure that folks who pick up Lift get to experience ScalaTest as well as Specs... that way, folks who have a better understanding of tests can make better choices. Thanks, David On Thu, Oct 1, 2009 at 1:27 PM, Bill Venners b...@artima.com wrote: Hi Ryan, It looks like you're currently using a JUnit TestCase. If you want an easier port to something that would work you could use a ScalaTest Suite like this: import org.scalatest.Suite class YourSuite extends Suite { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def withFixture(test: NoArgTest) { S.initIfUninitted(session) { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) test() } } def testValue() { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) // seems like you need an assertion here... } } A Suite considers methods that start with test as tests, like JUnit 3, except they don't need to result in Unit so you don't need an extra () at the end. The withFixture method is an alternative to beforeEach/afterEach, which are like JUnit 3's setUp/tearDown methods. Each test gets passed as a function to withFixture, which is responsible for executing the test by invoking the function. In this case, it is executed in the context created by S. initIfUninitted. This is ScalaTest 1.0, which is available as a SNAPSHOT right now but should be released proper a week from Monday. http://www.artima.com/scalatest Bill On Thu, Oct 1, 2009 at 9:50 AM, David Pollak feeder.of.the.be...@gmail.com wrote: Using Specs 1.6: object HelloWorldTestSpecs extends Specification { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def executeExpectations(ex: Examples, t: =Any): Any = { S.initIfUninitted(session) { ... put your User init here. The User.logUserIn will be within the context of a session and thus session (and request) vars will be valid } } HelloWorld Snippet should { Put the time in the node in { ... do testing here } } } Hope this helps. On Thu, Oct 1, 2009 at 8:55 AM, rstradling ryanstradl...@gmail.com wrote: I have a class called class Trainer { def showPeople(xhtml : Group) : NodeSeq = { val user : User = User.currentUser.open_! ... } } I then want to write a unit test to test that returns proper xml. The test is written as so def testValue() = { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) () } The User object inherits from MegaProtoUser. The problem is I am not sure how to create a mock user and sign them in. I have tried in my unit test override def setUp : Unit = { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) } The mock user log-in *seems* to work fine but when User.currentUser.open_! is called it throws an exception on trying to open an empty box. So either how do I do this or how do others do this type of testing. I am sure I am missing something simple. Thanks, ryan -- 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 -- Bill Venners Artima, Inc. http://www.artima.com -- 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
[Lift] Re: Testing snippets that depend on a user logged in
Hi David, Thanks. I appreciate that. I was actually already planning to request getting some ScalaTest examples in the Lift archetypes right after ScalaTest 1.0 comes out (on Oct 12, if all goes as planned), and have already arranged with David Bernard to put ScalaTest examples into simple-archetype-simple. I think it is great that we have three decent Scala-specific testing tools already, specs, ScalaTest, and ScalaCheck, plus the trusty Java tools JUnit and TestNG. People have a lot of choice, so it is good that the archetypes would show some of the options. I would also suggest we include a ScalaCheck example in the archetypes as well. I can use ScalaCheck from one of the ScalaTest examples I submit if you like that idea. The downside is that it would add one more dependency, but really I think people should find out about ScalaCheck. Bill On Thu, Oct 1, 2009 at 1:53 PM, David Pollak feeder.of.the.be...@gmail.com wrote: Bill, Thanks for posting this. I am, by experience (I started using it, I can use it enough to write basic tests, I know no more) using Specs. I would welcome and encourage some sample tests in Lift archetypes that use ScalaTest. I want to make sure that folks who pick up Lift get to experience ScalaTest as well as Specs... that way, folks who have a better understanding of tests can make better choices. Thanks, David On Thu, Oct 1, 2009 at 1:27 PM, Bill Venners b...@artima.com wrote: Hi Ryan, It looks like you're currently using a JUnit TestCase. If you want an easier port to something that would work you could use a ScalaTest Suite like this: import org.scalatest.Suite class YourSuite extends Suite { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def withFixture(test: NoArgTest) { S.initIfUninitted(session) { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) test() } } def testValue() { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) // seems like you need an assertion here... } } A Suite considers methods that start with test as tests, like JUnit 3, except they don't need to result in Unit so you don't need an extra () at the end. The withFixture method is an alternative to beforeEach/afterEach, which are like JUnit 3's setUp/tearDown methods. Each test gets passed as a function to withFixture, which is responsible for executing the test by invoking the function. In this case, it is executed in the context created by S. initIfUninitted. This is ScalaTest 1.0, which is available as a SNAPSHOT right now but should be released proper a week from Monday. http://www.artima.com/scalatest Bill On Thu, Oct 1, 2009 at 9:50 AM, David Pollak feeder.of.the.be...@gmail.com wrote: Using Specs 1.6: object HelloWorldTestSpecs extends Specification { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def executeExpectations(ex: Examples, t: =Any): Any = { S.initIfUninitted(session) { ... put your User init here. The User.logUserIn will be within the context of a session and thus session (and request) vars will be valid } } HelloWorld Snippet should { Put the time in the node in { ... do testing here } } } Hope this helps. On Thu, Oct 1, 2009 at 8:55 AM, rstradling ryanstradl...@gmail.com wrote: I have a class called class Trainer { def showPeople(xhtml : Group) : NodeSeq = { val user : User = User.currentUser.open_! ... } } I then want to write a unit test to test that returns proper xml. The test is written as so def testValue() = { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) () } The User object inherits from MegaProtoUser. The problem is I am not sure how to create a mock user and sign them in. I have tried in my unit test override def setUp : Unit = { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) } The mock user log-in *seems* to work fine but when User.currentUser.open_! is called it throws an exception on trying to open an empty box. So either how do I do this or
[Lift] Re: Testing snippets that depend on a user logged in
Bill, Cool. If you're going to be at Silicon Valley Code Camp on Saturday, let's talk more about any mechanics. Thanks, David On Thu, Oct 1, 2009 at 2:26 PM, Bill Venners b...@artima.com wrote: Hi David, Thanks. I appreciate that. I was actually already planning to request getting some ScalaTest examples in the Lift archetypes right after ScalaTest 1.0 comes out (on Oct 12, if all goes as planned), and have already arranged with David Bernard to put ScalaTest examples into simple-archetype-simple. I think it is great that we have three decent Scala-specific testing tools already, specs, ScalaTest, and ScalaCheck, plus the trusty Java tools JUnit and TestNG. People have a lot of choice, so it is good that the archetypes would show some of the options. I would also suggest we include a ScalaCheck example in the archetypes as well. I can use ScalaCheck from one of the ScalaTest examples I submit if you like that idea. The downside is that it would add one more dependency, but really I think people should find out about ScalaCheck. Bill On Thu, Oct 1, 2009 at 1:53 PM, David Pollak feeder.of.the.be...@gmail.com wrote: Bill, Thanks for posting this. I am, by experience (I started using it, I can use it enough to write basic tests, I know no more) using Specs. I would welcome and encourage some sample tests in Lift archetypes that use ScalaTest. I want to make sure that folks who pick up Lift get to experience ScalaTest as well as Specs... that way, folks who have a better understanding of tests can make better choices. Thanks, David On Thu, Oct 1, 2009 at 1:27 PM, Bill Venners b...@artima.com wrote: Hi Ryan, It looks like you're currently using a JUnit TestCase. If you want an easier port to something that would work you could use a ScalaTest Suite like this: import org.scalatest.Suite class YourSuite extends Suite { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def withFixture(test: NoArgTest) { S.initIfUninitted(session) { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) test() } } def testValue() { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) // seems like you need an assertion here... } } A Suite considers methods that start with test as tests, like JUnit 3, except they don't need to result in Unit so you don't need an extra () at the end. The withFixture method is an alternative to beforeEach/afterEach, which are like JUnit 3's setUp/tearDown methods. Each test gets passed as a function to withFixture, which is responsible for executing the test by invoking the function. In this case, it is executed in the context created by S. initIfUninitted. This is ScalaTest 1.0, which is available as a SNAPSHOT right now but should be released proper a week from Monday. http://www.artima.com/scalatest Bill On Thu, Oct 1, 2009 at 9:50 AM, David Pollak feeder.of.the.be...@gmail.com wrote: Using Specs 1.6: object HelloWorldTestSpecs extends Specification { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def executeExpectations(ex: Examples, t: =Any): Any = { S.initIfUninitted(session) { ... put your User init here. The User.logUserIn will be within the context of a session and thus session (and request) vars will be valid } } HelloWorld Snippet should { Put the time in the node in { ... do testing here } } } Hope this helps. On Thu, Oct 1, 2009 at 8:55 AM, rstradling ryanstradl...@gmail.com wrote: I have a class called class Trainer { def showPeople(xhtml : Group) : NodeSeq = { val user : User = User.currentUser.open_! ... } } I then want to write a unit test to test that returns proper xml. The test is written as so def testValue() = { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) () } The User object inherits from MegaProtoUser. The problem is I am not sure how to create a mock user and sign them in. I have
[Lift] Re: Started integrating lift in a scala+spring project. Feedback?
Hmm, isn't there a direct way to get the ServletContext? I mean now that I think about it looks to me that it should be possible to obtain the ServletContext no matter if there's a session or not. --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: Testing snippets that depend on a user logged in
Awesome!!! Thanks guys for the help. It now works. I put a how-to wiki document up on github. For me this was one of those times where my google searches did not seem to turn up anything fruitful, so I thought this how-to would be helpful. If it is not helpful, then no hard feelings if the page is deleted. I just wanted to give back. Wiki page http://wiki.github.com/dpp/liftweb/how-to-unit-test-lift-snippets-with-a-logged-in-user On Oct 1, 4:53 pm, David Pollak feeder.of.the.be...@gmail.com wrote: Bill, Thanks for posting this. I am, by experience (I started using it, I can use it enough to write basic tests, I know no more) using Specs. I would welcome and encourage some sample tests in Lift archetypes that use ScalaTest. I want to make sure that folks who pick up Lift get to experience ScalaTest as well as Specs... that way, folks who have a better understanding of tests can make better choices. Thanks, David On Thu, Oct 1, 2009 at 1:27 PM, Bill Venners b...@artima.com wrote: Hi Ryan, It looks like you're currently using a JUnit TestCase. If you want an easier port to something that would work you could use a ScalaTest Suite like this: import org.scalatest.Suite class YourSuite extends Suite { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def withFixture(test: NoArgTest) { S.initIfUninitted(session) { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) test() } } def testValue() { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) // seems like you need an assertion here... } } A Suite considers methods that start with test as tests, like JUnit 3, except they don't need to result in Unit so you don't need an extra () at the end. The withFixture method is an alternative to beforeEach/afterEach, which are like JUnit 3's setUp/tearDown methods. Each test gets passed as a function to withFixture, which is responsible for executing the test by invoking the function. In this case, it is executed in the context created by S. initIfUninitted. This is ScalaTest 1.0, which is available as a SNAPSHOT right now but should be released proper a week from Monday. http://www.artima.com/scalatest Bill On Thu, Oct 1, 2009 at 9:50 AM, David Pollak feeder.of.the.be...@gmail.com wrote: Using Specs 1.6: object HelloWorldTestSpecs extends Specification { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def executeExpectations(ex: Examples, t: =Any): Any = { S.initIfUninitted(session) { ... put your User init here. The User.logUserIn will be within the context of a session and thus session (and request) vars will be valid } } HelloWorld Snippet should { Put the time in the node in { ... do testing here } } } Hope this helps. On Thu, Oct 1, 2009 at 8:55 AM, rstradling ryanstradl...@gmail.com wrote: I have a class called class Trainer { def showPeople(xhtml : Group) : NodeSeq = { val user : User = User.currentUser.open_! ... } } I then want to write a unit test to test that returns proper xml. The test is written as so def testValue() = { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) () } The User object inherits from MegaProtoUser. The problem is I am not sure how to create a mock user and sign them in. I have tried in my unit test override def setUp : Unit = { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) } The mock user log-in *seems* to work fine but when User.currentUser.open_! is called it throws an exception on trying to open an empty box. So either how do I do this or how do others do this type of testing. I am sure I am missing something simple. Thanks, ryan -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics -- Bill Venners
[Lift] Re: Testing snippets that depend on a user logged in
On Thu, Oct 1, 2009 at 3:03 PM, rstradling ryanstradl...@gmail.com wrote: Awesome!!! Thanks guys for the help. It now works. I put a how-to wiki document up on github. For me this was one of those times where my google searches did not seem to turn up anything fruitful, so I thought this how-to would be helpful. If it is not helpful, then no hard feelings if the page is deleted. I just wanted to give back. You did *the right thing*. I owe you a beer (or other food or beverage of your choice)! Wiki page http://wiki.github.com/dpp/liftweb/how-to-unit-test-lift-snippets-with-a-logged-in-user On Oct 1, 4:53 pm, David Pollak feeder.of.the.be...@gmail.com wrote: Bill, Thanks for posting this. I am, by experience (I started using it, I can use it enough to write basic tests, I know no more) using Specs. I would welcome and encourage some sample tests in Lift archetypes that use ScalaTest. I want to make sure that folks who pick up Lift get to experience ScalaTest as well as Specs... that way, folks who have a better understanding of tests can make better choices. Thanks, David On Thu, Oct 1, 2009 at 1:27 PM, Bill Venners b...@artima.com wrote: Hi Ryan, It looks like you're currently using a JUnit TestCase. If you want an easier port to something that would work you could use a ScalaTest Suite like this: import org.scalatest.Suite class YourSuite extends Suite { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def withFixture(test: NoArgTest) { S.initIfUninitted(session) { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) test() } } def testValue() { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) // seems like you need an assertion here... } } A Suite considers methods that start with test as tests, like JUnit 3, except they don't need to result in Unit so you don't need an extra () at the end. The withFixture method is an alternative to beforeEach/afterEach, which are like JUnit 3's setUp/tearDown methods. Each test gets passed as a function to withFixture, which is responsible for executing the test by invoking the function. In this case, it is executed in the context created by S. initIfUninitted. This is ScalaTest 1.0, which is available as a SNAPSHOT right now but should be released proper a week from Monday. http://www.artima.com/scalatest Bill On Thu, Oct 1, 2009 at 9:50 AM, David Pollak feeder.of.the.be...@gmail.com wrote: Using Specs 1.6: object HelloWorldTestSpecs extends Specification { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def executeExpectations(ex: Examples, t: =Any): Any = { S.initIfUninitted(session) { ... put your User init here. The User.logUserIn will be within the context of a session and thus session (and request) vars will be valid } } HelloWorld Snippet should { Put the time in the node in { ... do testing here } } } Hope this helps. On Thu, Oct 1, 2009 at 8:55 AM, rstradling ryanstradl...@gmail.com wrote: I have a class called class Trainer { def showPeople(xhtml : Group) : NodeSeq = { val user : User = User.currentUser.open_! ... } } I then want to write a unit test to test that returns proper xml. The test is written as so def testValue() = { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) () } The User object inherits from MegaProtoUser. The problem is I am not sure how to create a mock user and sign them in. I have tried in my unit test override def setUp : Unit = { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) } The mock user log-in *seems* to work fine but when User.currentUser.open_! is called it throws an exception on trying to open an empty box. So either how do
[Lift] JsonResponse and Constructing a JsArray
Hi all, I'm getting the following error and I think I'm missing something very simple: error: type mismatch; found : List[net.liftweb.http.js.JsExp] required: net.liftweb.http.js.JsExp JsonResponse(JsObj(results - JsArray(packets.map(_.asJs I'm trying to transform packets, a List[mymodels.Packet], into a simple object to be sent in a JsonResponse. As I understand it, JsArray has a contructor that takes a List[JsExp] but the compile error suggests that it doesn't. Is this constructor only in SNAPSHOT, not 1.1-M5? In case it's relevant, here are my relevant package imports: import _root_.net.liftweb.http.js._ import JsCmds._ import JE._ I'm using Lift 1.1-M5 and Scala 2.7.5. Any help is appreciated. Thanks! Peter Robinett --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: Javascript Commands
Thanks Derek. But I get the following errors: found : net.liftweb.http.js.JE.Call required: java.lang.String x= JE.Call(foo,2) ^ C:\J\BrandNET\eclipse_workspace\GridXml_Lift2.0\src\main\scala\net \irisinteractive\lift\grid\snippet\CreateGridConfigTable.scala:47: error: value CrVar is not a member of object net.liftweb.http.js.JsCmds JsCmds.CrVar(myVar, JE.Call(foo, 2)) On Oct 2, 12:07 am, Derek Chen-Becker dchenbec...@gmail.com wrote: If you have a javascript function foo(a, b) where a is a String and b is an integer then you can call that with JE.Call(foo, one, 2) for example. If you wanted to set some variable to the result of the function, you could do: JsCmds.CrVar(myVar, JE.Call(foo, one, 2)) Derek On Wed, Sep 30, 2009 at 6:17 PM, sunanda sunanda.pa...@gmail.com wrote: Hi David, Thanks for your prompt reply. As a beginner I have started reading the book Exploring Lift. It says If you need to write large portions of JavaScript code for your pages, we recommend writing that code in pure JavaScript in an external file and then including that file in your pages. In particular, if you write your code as JavaScript functions, you can use the JE.Call class to execute those functions from your Lift code. I just want to know how can I use JE.Call function fro my external javascript file and also how to use JE abstractions like (JsFunc, ValById etc..) Could you please provide a simple example so that my understanding will be clear. Thanks Sunanda On Oct 1, 9:56 am, David Pollak feeder.of.the.be...@gmail.com wrote: Seehttp://demo.liftweb.net/ajax Specifically: var cnt = 0 def doClicker(text: NodeSeq) = a(() = {cnt = cnt + 1; SetHtml(spanName, Text( cnt.toString))}, text) It increments a counter. On Wed, Sep 30, 2009 at 4:50 PM, sunanda sunanda.pa...@gmail.com wrote: Hi, I am totally new to lift framework. Can any one give me a simple example of how to call a function form a javascript file and store the results in scala variable. Thanks. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics- Hide quoted text - - Show quoted text - --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] JSONParse.parse and List[Any]
Hi all, Building off of a previous thread[1], I'm trying to parse a POST request that contains JSON data. Specifically, I expect a JSON array of JSON objects representing Packet model data and want to have a List [Packet] at the end. I am trying the following: val packets = for { JSONPackets - req.param(packets) packet - JSONParser.parse(JSONPackets) nodeId - packet.param(node) node - nodeId.toLong } yield { val packet = Packet.create.node(node) packet.save packet } The problem is that JSONParser.parse returns a List[Any], so packet is of type Any. I can try to convert packet to a Map with packet.asInstanceOf[Map[String, String]], but this seems to just push my type problems to the next line of code. I'm having a hard time getting to the point where I have the Map[String, String] from which I know I can extract values to create Packets, so I would appreciate suggestions on how to do this. This all seems quite complicated and I wonder if I'm missing an easier way to do this. Is JSONParse the way to go, or should I switch to Joni's lift-json stuff? I'm using 1.1-M5 but would be willing to switch to 1.1-SNAPSHOT... Thanks for your help. Peter Robinett [1] http://groups.google.com/group/liftweb/browse_thread/thread/5ffe64492b0c19f2/c65424467bc99bbb [2] http://groups.google.com/group/liftweb/msg/c0103375623f788f --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: Removing Scala Actors from Lift
Martin and Philipp, My immediate problem is: http://groups.google.com/group/liftweb/browse_thread/thread/b3783e24b8417521/f89548ba1fa70319?hl=enlnk=gstq=oome# This has been a persistent problem with Scala Actors and I identified it last year in November or December. Philipp did the 2.7.4 release which did not address the issue. The 2.7.5 release was supposed to address the issue, but the use of Lift Actors masked the issue until the above issue was raised. I left my 2.7.5 related discussions with Philipp with the impression that the java.util.concurrent library was being used for thread pooling rather than the FJ library. On this, I backed out the Lift Actor changes from powering Lift's CometActors (Lift Actors power the long polling part of Lift). On Wed, Sep 30, 2009 at 8:18 AM, martin oder...@gmail.com wrote: About actors in Scala 2.8: . they have been refactored substantially compared to what's in the 2.7.x branch . Philipp has sent mails about this to scala-internals (05/31) . Philipp has invited DPP to look at the refactorings in 2.8 (07/21) to which he responded positively. I responded politely. Granted this is not something I always do (note, I am not being facetious), but I simply said something like looks good to me. . The ForkJoinPool in 2.8 is completely different from FJTask in 2.7.5; it's the version that's going into JDK7. It has been battle-tested and should not suffer from any memory leaks. The reason why Scala actors use the FJ framework is performance, in particular on multi-core hardware. So we do not think it's a good idea to go back to java.util.concurrent, except maybe for applications with very specialized demands. Do you have specific benchmarks that justify the tradeoff of baking in an external library (that could be as buggy as the one that's currently baked into Scala) versus java.util.concurrent? We think the main problem was that lift depends on Scala 2.7.x, and that the actor refactorings have not gone into the 2.7.x branch. I did a code review of the 2.8 Actors. I am not convinced that Erik's meta-concerns were addressed. I will be happy to be more descriptive off-list. The result is that people have not noticed the changes. For example, most of the issues that Erik raises in his blog post no longer apply to Scala 2.8. Initially we wanted 2.8 to be out by now, but it's taken much longer than we have foreseen, because some of the problems were harder than initially thought. We are sorry to have left the 2.7 branch relatively unattended for so long. It's difficult for us, though, to provide the resources to support two diverging branches in parallel. More community support with backports etc could help. While this is a nice thought, given the choice between debating with EPFL as to whether my changes are good enough or doing a Lift Actor implementation, I will opt for continuing to develop and maintain the Lift Actor library. This gives Lift users the assurance that bugs will be fixed in a timely manner, that we can add features based on community need, and that we can work with other library authors to insure common interfaces. To fix the concrete issue at hand, we replaced FJTask with (a backport of) java.util.concurrent.ThreadPoolExecutor in the Scala 2.7.x branch, to be released as 2.7.7. That takes care of the memory leaks in FJTask. Now to the larger picture. We are not at all wedded to Scala actors here; after all it's just a library. If there are others which fulfill some needs better, great! But we have to be honest to avoid confusion. One of the main differences between Scala actors and lift actors and Akka seems to be that only Scala actors provide nested receives, so only Scala actors really let you avoid an inversion of control. Lift Actors allow for changing (and nesting) the message handler on a message-by-message basis and because the handler can be defined within a given partial function, it can close over the variables visible in that partial function. Granted the syntax for doing so in Scala Actors is much more pleasing, the functionality exists with Lift Actors. This is a feature which complicates the implementation considerably, and that's what all our main results are about. You might not care about this particular feature in your code, and consequently you might choose a different abstraction. But calling that abstraction simply `actors' causes unnecessary confusion, in our opinion. Quoting from Wikipedia http://en.wikipedia.org/wiki/Actor_model: An actor is a computational entity that, in response to a message it receives, can concurrently: - send a finite number of messages to other actors; - create a finite number of new actors; - designate the behavior to be used for the next message it receives. Lift Actors do all of these things. I think it's a great thing that Philipp and the EPFL team introduced Actors to the JVM and Scala
[Lift] Re: Testing snippets that depend on a user logged in
Hi, I am working at the moment on a small lift demo app and I've added some enhancements to specs in order to ease the testing inside a session. To use those functionalities, you need specs-1.6.1-SNAPSHOT (http:// www.scala-tools.org/repo-snapshots/org/scala-tools/testing/specs/1.6.1-SNAPSHOT). Here are the specification and traits that I use to test the JPA requests to save a User in the database: // First I create Mocks for the lift session import javax.servlet.http._ import net.liftweb.http.{ S, Req, LiftSession } import org.specs.mock.Mockito trait MockRequest extends Mockito { this: Specification = var request = mock[Req] var httpRequest = mock[HttpServletRequest] var session = mock[LiftSession] def createMocks: Unit = { request = mock[Req] httpRequest = mock[HttpServletRequest] session = mock[LiftSession] request.request returns httpRequest } // this method can be used to executed any action inside a mocked session def inSession(f: =Any) { S.init(request, session) { f } } def unsetParameter(name: String) { request.param(name) returns None } def setParameter(name: String, value: String) { request.param (name) returns Some(value) } } // Context creation for the specification // // This Specification context specifies the User table must be cleaned up before each example. // It also makes sure that the example expectations are executed in a mocked session // see http://code.google.com/p/specs/wiki/DeclareSpecifications#Specification_context_(_from_1.6.1_) for more information object DatabaseContext extends Specification with Contexts with MockRequest { val setup = new SpecContext { beforeExample(inSession(Users.createQuery(delete User).executeUpdate)) // delete the User table before each example aroundExpectations(inSession(_)) // execute each example inside a mocked session } } // and finally the specification itself import org.specs._ import org.specs.specification._ class UserSpec extends SpecificationWithJUnit with MockRequest with Contexts { DatabaseContext.setup(this) // set the specification context on this specification A Users repository can { create a user in { val eric = User(etorreborre, password, Eric) Users.mergeAndFlush(eric) // the Users object is a LocalEMF with RequestVarEM so it needs a session Users.find(classOf[User], etorreborre) must_== Some(eric) } } A Users repository should { throw an exception if the user name has a length 5 in { Users.merge(User(e, password, Eric)) must throwAn [Exception] } } } I hope this helps too, please ask if you have any questions. Eric. --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] a question about host based url rewriting
I want http://m.harryh.org to visit a mobile version of my site so I added the following rewrite rule: case RewriteRequest(path, _, req) if (req.serverName.toLowerCase.startsWith(m.)) = { RewriteResponse(ParsePath(mobile :: path.partPath, path.suffix, path.absolute, path.endSlash), emptyMap, true) } This also makes the mobile site appear at http://harryh.org/mobile/ which I don't really want. Is there any way I can accomplish this goal (other than putting the mobile site in a weird path like / someRandomGuid/ -harryh --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: Concurrent Web Service Requests?
David, Thank you very much for your kind words. Personally I don't see any reason why the lift prefix can not also have the semantic for enriching the context you described this thing will be changed based on evaluating some code.. These are after all attributes and attributes to me are about about meta-data on how lift will change markup. I will do what you suggested hopefully by next Monday ... and this time using the proper process ;) Br's, Marius On Oct 1, 7:03 pm, David Pollak feeder.of.the.be...@gmail.com wrote: Marius, I have a ton of respect for your opinion and I appreciate your analysis. I have been following this thread and thinking, what does the lift: prefix mean? In my mind, it means this thing will be changed based on evaluating some code. So, using the lift: prefix for something that also means this modifies the meaning of this snippet invocation presents something discordant to me. With that being said, I'm going to hand the decision to you. I trust your decisions and have concerns about my own instincts when it comes to naming. Please update the code to reflect what you think it should be and merge it into master. Thanks, David On Thu, Oct 1, 2009 at 5:58 AM, marius d. marius.dan...@gmail.com wrote: Well I said what I had to say. My problem is not really the prefix name but the existence of other prefixes then lift, that are interpreted by lift. It's just how I see things now and nothing on this thread provided sufficient arguments to convince me otherwise ... not much else for me to do if majority and especially DPP thinks otherwise. It is what it is I guess. Br's, Marius On Oct 1, 4:18 am, Naftoli Gugenheim naftoli...@gmail.com wrote: I think everyone agrees in concept, that an arbitrary prefix sets a bad precendent, which is why it is no longer do:par. But on the other hand, if the part after lift: is either a reserved word or a user word--a snippet name--then the more reserved words, the more you limit snippet names. (Should S.mapSnippet(parallel, ...) throw an exception?) So we have these two considerations on either end of the spectrum. Arguably, liftx as a prefix satisfies both--it is sufficiently generic to include almost any special attribute that may be added, it clearly spells out extended lift attribute, and on the other hand it keeps reserved lift attributes separate from the user's snippet namespace. Now let's bear in mind that this is all only relevant in the future, when lift: attributes indeed will be interpreted as lift:snippet=... is now. At that point it might make sense for the explicit :snippet format to be moved to the liftx prefix-- liftx:snippet=... --for the same reason, not to encroach on the snippet namespace. - marius d.marius.dan...@gmail.com wrote: It has been debated many times in slightly different contexts. To me it is more about clarity. We add a new prefix now, tomorrow add another one and so on. People would have to remember what goes where and mix things up. To me lift prefix is enough and quite clear. It is more than just s snippet thingy. It tells the user hey this thing is telling the framework something and the framework is doing something with it. It is separating framework xml markup from the actual xhtml markup. Having a single reserved prefix promotes clarity and keeps things simple and rather intuitive. I'm not in favor of using unprefixed attributes like par=something (btw I really don't like par naming :) ...) because unprefixed attributes should be only standard xhtml ones or the ones that user explicitly specifies it. So lift:parallel=true or lift:async=true should be just fine. Br's, Marius On Sep 30, 8:05 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: Could you elaborate on why adding a new prefix may not be a good idea? And is it better or worse than having it unprefixed? - marius d.marius.dan...@gmail.com wrote: On Sep 30, 8:23 am, Kevin Wright kev.lee.wri...@googlemail.com wrote: I thought there were issues here because anything starting lift: gets executed as a snippet. Correct BUT lift:par or lift:parallel attributes are also applicable to snippets context. They determine the snippet's execution semantics. So I'm still questioning the need for a new prefix. I'm still for an eval: prefix, as these proposals all relate to how a page is evaluated. On Wed, Sep 30, 2009 at 5:34 AM, marius d. marius.dan...@gmail.com wrote: lift is already a reserved prefix for snippets. So I'd stay with simply lift prefix for these attributes as well. Br's, Marius On Sep 29, 11:11 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: So what is your proposal? Am I interpreting you correctly that you are for a prefix of 'lift'?
[Lift] Using plain usernames for authentication
Looking through the book and source for MegaProtoUser, it looks like the email address is used as the primary identifier for users in the built-in user system. What if you want to use plain usernames instead of emails? What do other people do - do they write their own user system from scratch? --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: Concurrent Web Service Requests?
Have we been misunderstanding each other? The lift prefix can be a snippet invocation as an attribute too. Thus the fact that it's an attribute does not separate reserved names from user space snippet names. - marius d.marius.dan...@gmail.com wrote: David, Thank you very much for your kind words. Personally I don't see any reason why the lift prefix can not also have the semantic for enriching the context you described this thing will be changed based on evaluating some code.. These are after all attributes and attributes to me are about about meta-data on how lift will change markup. I will do what you suggested hopefully by next Monday ... and this time using the proper process ;) Br's, Marius On Oct 1, 7:03 pm, David Pollak feeder.of.the.be...@gmail.com wrote: Marius, I have a ton of respect for your opinion and I appreciate your analysis. I have been following this thread and thinking, what does the lift: prefix mean? In my mind, it means this thing will be changed based on evaluating some code. So, using the lift: prefix for something that also means this modifies the meaning of this snippet invocation presents something discordant to me. With that being said, I'm going to hand the decision to you. I trust your decisions and have concerns about my own instincts when it comes to naming. Please update the code to reflect what you think it should be and merge it into master. Thanks, David On Thu, Oct 1, 2009 at 5:58 AM, marius d. marius.dan...@gmail.com wrote: Well I said what I had to say. My problem is not really the prefix name but the existence of other prefixes then lift, that are interpreted by lift. It's just how I see things now and nothing on this thread provided sufficient arguments to convince me otherwise ... not much else for me to do if majority and especially DPP thinks otherwise. It is what it is I guess. Br's, Marius On Oct 1, 4:18 am, Naftoli Gugenheim naftoli...@gmail.com wrote: I think everyone agrees in concept, that an arbitrary prefix sets a bad precendent, which is why it is no longer do:par. But on the other hand, if the part after lift: is either a reserved word or a user word--a snippet name--then the more reserved words, the more you limit snippet names. (Should S.mapSnippet(parallel, ...) throw an exception?) So we have these two considerations on either end of the spectrum. Arguably, liftx as a prefix satisfies both--it is sufficiently generic to include almost any special attribute that may be added, it clearly spells out extended lift attribute, and on the other hand it keeps reserved lift attributes separate from the user's snippet namespace. Now let's bear in mind that this is all only relevant in the future, when lift: attributes indeed will be interpreted as lift:snippet=... is now. At that point it might make sense for the explicit :snippet format to be moved to the liftx prefix-- liftx:snippet=... --for the same reason, not to encroach on the snippet namespace. - marius d.marius.dan...@gmail.com wrote: It has been debated many times in slightly different contexts. To me it is more about clarity. We add a new prefix now, tomorrow add another one and so on. People would have to remember what goes where and mix things up. To me lift prefix is enough and quite clear. It is more than just s snippet thingy. It tells the user hey this thing is telling the framework something and the framework is doing something with it. It is separating framework xml markup from the actual xhtml markup. Having a single reserved prefix promotes clarity and keeps things simple and rather intuitive. I'm not in favor of using unprefixed attributes like par=something (btw I really don't like par naming :) ...) because unprefixed attributes should be only standard xhtml ones or the ones that user explicitly specifies it. So lift:parallel=true or lift:async=true should be just fine. Br's, Marius On Sep 30, 8:05 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: Could you elaborate on why adding a new prefix may not be a good idea? And is it better or worse than having it unprefixed? - marius d.marius.dan...@gmail.com wrote: On Sep 30, 8:23 am, Kevin Wright kev.lee.wri...@googlemail.com wrote: I thought there were issues here because anything starting lift: gets executed as a snippet. Correct BUT lift:par or lift:parallel attributes are also applicable to snippets context. They determine the snippet's execution semantics. So I'm still questioning the need for a new prefix. I'm still for an eval: prefix, as these proposals all relate to how a page is evaluated. On Wed, Sep 30, 2009 at 5:34 AM, marius d. marius.dan...@gmail.com wrote: lift is already a reserved prefix
[Lift] Re: Javascript Commands
That should read JsCmds.JsCrVar(...) Cheers, Indrajit On 02/10/09 4:39 AM, sunanda wrote: Thanks Derek. But I get the following errors: found : net.liftweb.http.js.JE.Call required: java.lang.String x= JE.Call(foo,2) ^ C:\J\BrandNET\eclipse_workspace\GridXml_Lift2.0\src\main\scala\net \irisinteractive\lift\grid\snippet\CreateGridConfigTable.scala:47: error: value CrVar is not a member of object net.liftweb.http.js.JsCmds JsCmds.CrVar(myVar, JE.Call(foo, 2)) On Oct 2, 12:07 am, Derek Chen-Beckerdchenbec...@gmail.com wrote: If you have a javascript function foo(a, b) where a is a String and b is an integer then you can call that with JE.Call(foo, one, 2) for example. If you wanted to set some variable to the result of the function, you could do: JsCmds.CrVar(myVar, JE.Call(foo, one, 2)) Derek On Wed, Sep 30, 2009 at 6:17 PM, sunandasunanda.pa...@gmail.com wrote: Hi David, Thanks for your prompt reply. As a beginner I have started reading the book Exploring Lift. It says If you need to write large portions of JavaScript code for your pages, we recommend writing that code in pure JavaScript in an external file and then including that file in your pages. In particular, if you write your code as JavaScript functions, you can use the JE.Call class to execute those functions from your Lift code. I just want to know how can I use JE.Call function fro my external javascript file and also how to use JE abstractions like (JsFunc, ValById etc..) Could you please provide a simple example so that my understanding will be clear. Thanks Sunanda On Oct 1, 9:56 am, David Pollakfeeder.of.the.be...@gmail.com wrote: Seehttp://demo.liftweb.net/ajax Specifically: var cnt = 0def doClicker(text: NodeSeq) = a(() = {cnt = cnt + 1; SetHtml(spanName, Text( cnt.toString))}, text) It increments a counter. On Wed, Sep 30, 2009 at 4:50 PM, sunandasunanda.pa...@gmail.com wrote: Hi, I am totally new to lift framework. Can any one give me a simple example of how to call a function form a javascript file and store the results in scala variable. Thanks. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics- Hide quoted text - - Show quoted text - --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: Javascript Commands
Oops, sorry about that. Also, can you show a little more of your code? I'm not sure what you're trying to do with the assignment to x. Derek On Thu, Oct 1, 2009 at 10:18 PM, Indrajit Raychaudhuri indraj...@gmail.comwrote: That should read JsCmds.JsCrVar(...) Cheers, Indrajit On 02/10/09 4:39 AM, sunanda wrote: Thanks Derek. But I get the following errors: found : net.liftweb.http.js.JE.Call required: java.lang.String x= JE.Call(foo,2) ^ C:\J\BrandNET\eclipse_workspace\GridXml_Lift2.0\src\main\scala\net \irisinteractive\lift\grid\snippet\CreateGridConfigTable.scala:47: error: value CrVar is not a member of object net.liftweb.http.js.JsCmds JsCmds.CrVar(myVar, JE.Call(foo, 2)) On Oct 2, 12:07 am, Derek Chen-Beckerdchenbec...@gmail.com wrote: If you have a javascript function foo(a, b) where a is a String and b is an integer then you can call that with JE.Call(foo, one, 2) for example. If you wanted to set some variable to the result of the function, you could do: JsCmds.CrVar(myVar, JE.Call(foo, one, 2)) Derek On Wed, Sep 30, 2009 at 6:17 PM, sunandasunanda.pa...@gmail.com wrote: Hi David, Thanks for your prompt reply. As a beginner I have started reading the book Exploring Lift. It says If you need to write large portions of JavaScript code for your pages, we recommend writing that code in pure JavaScript in an external file and then including that file in your pages. In particular, if you write your code as JavaScript functions, you can use the JE.Call class to execute those functions from your Lift code. I just want to know how can I use JE.Call function fro my external javascript file and also how to use JE abstractions like (JsFunc, ValById etc..) Could you please provide a simple example so that my understanding will be clear. Thanks Sunanda On Oct 1, 9:56 am, David Pollakfeeder.of.the.be...@gmail.com wrote: Seehttp://demo.liftweb.net/ajax Specifically: var cnt = 0def doClicker(text: NodeSeq) = a(() = {cnt = cnt + 1; SetHtml(spanName, Text( cnt.toString))}, text) It increments a counter. On Wed, Sep 30, 2009 at 4:50 PM, sunandasunanda.pa...@gmail.com wrote: Hi, I am totally new to lift framework. Can any one give me a simple example of how to call a function form a javascript file and store the results in scala variable. Thanks. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics- Hide quoted text - - Show quoted text - --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
[Lift] Re: Testing snippets that depend on a user logged in
Hi Ryan, David, Eric, I added a ScalaTest version to your wiki page: http://wiki.github.com/dpp/liftweb/how-to-unit-test-lift-snippets-with-a-logged-in-user Eric you may want to add a specs version. Bill On Thu, Oct 1, 2009 at 3:03 PM, rstradling ryanstradl...@gmail.com wrote: Awesome!!! Thanks guys for the help. It now works. I put a how-to wiki document up on github. For me this was one of those times where my google searches did not seem to turn up anything fruitful, so I thought this how-to would be helpful. If it is not helpful, then no hard feelings if the page is deleted. I just wanted to give back. Wiki page http://wiki.github.com/dpp/liftweb/how-to-unit-test-lift-snippets-with-a-logged-in-user On Oct 1, 4:53 pm, David Pollak feeder.of.the.be...@gmail.com wrote: Bill, Thanks for posting this. I am, by experience (I started using it, I can use it enough to write basic tests, I know no more) using Specs. I would welcome and encourage some sample tests in Lift archetypes that use ScalaTest. I want to make sure that folks who pick up Lift get to experience ScalaTest as well as Specs... that way, folks who have a better understanding of tests can make better choices. Thanks, David On Thu, Oct 1, 2009 at 1:27 PM, Bill Venners b...@artima.com wrote: Hi Ryan, It looks like you're currently using a JUnit TestCase. If you want an easier port to something that would work you could use a ScalaTest Suite like this: import org.scalatest.Suite class YourSuite extends Suite { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def withFixture(test: NoArgTest) { S.initIfUninitted(session) { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) test() } } def testValue() { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) // seems like you need an assertion here... } } A Suite considers methods that start with test as tests, like JUnit 3, except they don't need to result in Unit so you don't need an extra () at the end. The withFixture method is an alternative to beforeEach/afterEach, which are like JUnit 3's setUp/tearDown methods. Each test gets passed as a function to withFixture, which is responsible for executing the test by invoking the function. In this case, it is executed in the context created by S. initIfUninitted. This is ScalaTest 1.0, which is available as a SNAPSHOT right now but should be released proper a week from Monday. http://www.artima.com/scalatest Bill On Thu, Oct 1, 2009 at 9:50 AM, David Pollak feeder.of.the.be...@gmail.com wrote: Using Specs 1.6: object HelloWorldTestSpecs extends Specification { val session = new LiftSession(, randomString(20), Empty) val stableTime = now override def executeExpectations(ex: Examples, t: =Any): Any = { S.initIfUninitted(session) { ... put your User init here. The User.logUserIn will be within the context of a session and thus session (and request) vars will be valid } } HelloWorld Snippet should { Put the time in the node in { ... do testing here } } } Hope this helps. On Thu, Oct 1, 2009 at 8:55 AM, rstradling ryanstradl...@gmail.com wrote: I have a class called class Trainer { def showPeople(xhtml : Group) : NodeSeq = { val user : User = User.currentUser.open_! ... } } I then want to write a unit test to test that returns proper xml. The test is written as so def testValue() = { val xml = xml:group tr td p:fullNameMy Name/p:fullName /td td p:styleFighter Style/p:style /td td p:weightWeight/p:weight /td /tr /xml:group val trainer = new Trainer() val output = trainer.showPeople(xml) () } The User object inherits from MegaProtoUser. The problem is I am not sure how to create a mock user and sign them in. I have tried in my unit test override def setUp : Unit = { val user = User.create user.firstName(XXX) user.lastName(YYY) user.save User.logUserIn(user) } The mock user log-in *seems* to work fine but when User.currentUser.open_! is called it throws an exception on trying to open an empty box. So either how do I do this or how do others do this type