Code Monkey home page Code Monkey logo

circumflex's People

Contributors

actsasflinn avatar azolotko avatar chirino avatar eiennohito avatar enerdgumen avatar inca avatar ryuugan avatar stanislavlakhtin avatar vast avatar vjpr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

circumflex's Issues

NullPointerException during DDLUnit.<init> when a table references itself

import ru.circumflex.orm._
object NPEBug extends Application {
 class ExampleRecord extends Record[Int, ExampleRecord] {
     val Id = "Id".INTEGER.NOT_NULL
     val Other = "Other".INTEGER.REFERENCES(ExampleRecord)

     def PRIMARY_KEY = Id
     def relation = ExampleRecord
 }
 object ExampleRecord extends ExampleRecord with Table[Int, ExampleRecord]

 new DDLUnit(ExampleRecord)
}

Maybe I'm just being stupid and there's some reason this shouldn't be allowed, but it's something I wish I could do!

At very least a better exception would be nice.

MySQL dialect handles AUTO_INCREMENT fields incorrectly

class MySQLDialect extends Dialect {
 override def initializeField[R <: Record[_, R]](field: Field[_, R]): Unit = {
  // do nothing -- for MySQL you don't need to create manually a sequence for auto-incrementable fields
 }
 override def defaultExpression[R <: Record[_, R]](field: Field[_, R]): String =
  field match {
    case a: AutoIncrementable[_, _] if (a.autoIncrement_?) =>
      " AUTO_INCREMENT"
    case _ =>
      field.defaultExpression.map(" DEFAULT " + _).getOrElse("")
  }
}

INSERTing a text field containing $$ throws an exception

Here's a stack trace:

Caused by: java.lang.IllegalArgumentException: Illegal group reference
at java.util.regex.Matcher.appendReplacement(Matcher.java:713)
at java.util.regex.Matcher.replaceFirst(Matcher.java:861)
at java.lang.String.replaceFirst(String.java:2146)
at ru.circumflex.orm.ParameterizedExpression$$anonfun$toInlineSql$1.apply(common.scala:30)
at ru.circumflex.orm.ParameterizedExpression$$anonfun$toInlineSql$1.apply(common.scala:29)
at scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:123)
at scala.collection.immutable.List.foldLeft(List.scala:45)
at ru.circumflex.orm.ParameterizedExpression$class.toInlineSql(common.scala:29)
at ru.circumflex.orm.Insert.toInlineSql(query.scala:356)
at ru.circumflex.orm.Statistics$.executeDml(statistics.scala:69)
at ru.circumflex.orm.DMLQuery$class.execute(query.scala:346)
at ru.circumflex.orm.Insert.execute(query.scala:356)
at ru.circumflex.orm.Record.persist(record.scala:101)
at ru.circumflex.orm.Record.INSERT
$bang(record.scala:88)
at ru.circumflex.orm.Record.INSERT(record.scala:96)

See the javadocs for [String.replaceFirst](http://download.oracle.com/javase/6/docs/api/java/lang/String.html#replaceFirst(java.lang.String, java.lang.String%29) for an explanation and fix.

Any ideas for a work around in the meantime?

save() doesn't work in RC2 with application-assigned identifiers

Unless I'm missing something obvious, RC2 screws up application-assigned identifiers.

My code:

class Thing extends Record[String,Billet] {
  def PRIMARY_KEY = code
  def relation = Thing

  def this(code: String) {
    this()
    this.code := code
  }

  val code = "code".VARCHAR(36).NOT_NULL(UUID.randomUUID.toString)
}

val thing = new Thing()
thing.save()

The save() method fails every time.

There is this:

def transient_?(): Boolean = PRIMARY_KEY.null_?

If I'm assigning my own PK, when is the PRIMARY_KEY null? As far as I can see, never. That means the record is never transient. Am I missing something?

Then there's this:

def save_!(): Int = if (transient_?) INSERT_!() else UPDATE_!()

So if it's not transient, it's going to do an update -- but this is a new record.

I am guessing this is why I can't add anything to the database.

But if I use INSERT_!() instead, it works. Hopefully, this is a bug, not a "feature."

Views

Can anyone provide an example (actual code) for creating a View that joins several Tables together (and do Views in Cx create actual Views in the DB, or just mimic them)?

Thanks!

Building circumflex on windows

Hi there.

I tried to build circumflex on a windows system.

The line s.replaceAll("/", File.separator) causes a StringIndexOutOfBoundsException

I replaced this line at 4 places (2xcontext.scala, filter.scala, standalone.scala) with
s.replaceAll("/", "\")

Well. This fix works obviously just for my windows case...

circumflex2.0-md "mvn compile" failed,caused by StackOverflowError

[INFO] java.lang.reflect.InvocationTargetException
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[INFO] at java.lang.reflect.Method.invoke(Method.java:597)
[INFO] at org_scala_tools_maven_executions.MainHelper.runMain(MainHelper.java:161)
[INFO] at org_scala_tools_maven_executions.MainWithArgsInFile.main(MainWithArgsInFile.java:26)
[ERROR] Caused by: java.lang.StackOverflowError
[INFO] at scala.tools.nsc.symtab.Symbols$ClassSymbol.name(Symbols.scala:1966)
[INFO] at scala.tools.nsc.symtab.Symbols$ClassSymbol.name(Symbols.scala:1927)
[INFO] at scala.reflect.generic.Symbols$AbsSymbol.isRefinementClass(Symbols.scala:147)
[INFO] at scala.tools.nsc.transform.Erasure$$anon$1.apply(Erasure.scala:156)
[INFO] at scala.tools.nsc.transform.Erasure$$anon$1.apply(Erasure.scala:157)
[INFO] at scala.tools.nsc.transform.Erasure$$anon$1.apply(Erasure.scala:157)
[INFO] at scala.tools.nsc.transform.Erasure$$anon$1.apply(Erasure.scala:157)

Nullable associations

I have some associations that are optional, but when I generate the schema, the fields are automatically marked NOT NULL. I've tried NULLABLE, but of course it doesn't work. What is the trick to making an association optional?

Thanks.

Provide more documentation on how to configure ORM

I can't find anywhere on your website information on how to configure ORM. For example:

How do i set db connection parameters ?
Are there any other configuration properties i can use ?
What databases are supported ?

Without this information i can't even start using your orm.
Thanks.

directed acyclic graphs

I have a set of organizations arranged in a directed acyclic graph, i.e., there are various levels of organizations (state, region, county, town, etc.) and they are not neatly nested -- a child might have multiple parents.

I'm using a tree UI to show the graph (children with multiple parents simply appear multiple times in the tree). I want to be able to pick an organization in the DAG and query the Cx ORM to get back all descendants of that node.

I have a nodes table called organization and an edges table called relationship. The relationship class has parentId and childId, both pointing to the organization class. Essentially, it's a bridge table.

I'm using PostgreSQL, so I can do a recursive query natively to grab an object and all its descendants:

with recursive suborg as (
  select child_id
  from relationship
  where parent_id = 1
union
  select relationship.child
  from suborg
  join relationship on (
    relationship.parent_id = suborg.child_id
  )
)
select *
from organization
where id in (select * from suborg)
order by name;

I assume a native query would be the thing to use. Unfortunately, the documentation on native queries is missing.

Essentially, I want to have a method in my Organization object:

def withKids(o: Organization) = { ??? }

which returns the root object with its relationship objects, which have their child objects, which have their relationship objects, etc. so I can simply traverse the tree in code.

Suggestions? Code examples? Any and all help greatly appreciated.

parsing uris with regexs

I'm building a small CMS based on the Cx 2.0 Web Framework (but with a BaseX XML DB behind it). I want to create a virtual URI system, so I want one method that will parse the URI and will call the appropriate method based on what it finds. This would be easy to do if I were only going one level deep:

/:id

But what I want to do is to be able to handle a variety of URIs at various depths:

/about
/events/repeal_day
/calendar/week_of/2010/11/01

and I don't know in advance what these will be (they're dynamically generated). Essentially, these paths will be represented in the XML DB.

At the same time, I may want to have some permanent URIs:

/privacy_policy
/terms_of_use
/site_map

So I want the Cx router to match these first, then default to a regex that will parse a path of any depth into its constituent "directories" and call the appropriate methods to generate output.

Most of this I can do, but what I'm not sure about is:

  1. How do I create a "default" route? I want my default to start at root, so having a base "directory" (e.g., /cms/... ) is not an option.
  2. How do I create a regex that matches multiple "directories"? Is it as simple as just creating a regex that finds one or more /... segments? (e.g. ^(/[^/]*)+)?

Thanks for any suggestions... happy to post the final code once I figure it out. And I plan to open source the CMS once it's up and running.

2.0 fails test

I wanted to play with 2.0 so I checkout out the latest, but when I compile it I get:

Running ru.circumflex.core.SpecsTest
Tests run: 12, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.624 sec <<< FAILURE!

Results :

Failed tests:
Circumflex Context should provide untyped container functionality

Tests run: 12, Failures: 1, Errors: 0, Skipped: 0

[INFO] --------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] --------------------------------------------------------------
[INFO] There are test failures.

The possibility of an RC-1 build of 2.0 being available on the Maven Repo was also mentioned, IIRC, but no sign of it yet. No pressure, just a reminder.

One last thing: I'm getting a warning:

[WARNING] Using platform encoding (MacRoman actually) to copy filtered resources, i.e. build is platform dependent!

I believe you can avoid this and ensure that UTF-8 is used by inserting this into the pom.xml file:

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

Thanks! Looking forward to 2.0.

Multiple prefetches behave strangely when two fields reference the same table.

Here's a simple schema in which each Foo points to two different Bars, via fields turkle and qux.

import ru.circumflex.orm._
object MultiplePrefetch extends Application {   
 class FooRecord extends Record[Int, FooRecord] {
     val Id = "Id".INTEGER.NOT_NULL
     val turkle = "turkle".INTEGER.REFERENCES(BarRecord)
     val qux = "qux".INTEGER.REFERENCES(BarRecord)
     def PRIMARY_KEY = Id
     def relation = FooRecord
 }
 object FooRecord extends FooRecord with Table[Int, FooRecord]
 class BarRecord extends Record[Int, BarRecord] {
     val Id = "Id".INTEGER.NOT_NULL
     def PRIMARY_KEY = Id
     def relation = BarRecord
 }
 object BarRecord extends BarRecord with Table[Int, BarRecord]

 println(FooRecord.criteria.prefetch(FooRecord.turkle).prefetch(FooRecord.qux).toSql) 
}

The last line prepares a prefetch criteria, prefetching both the referenced Bars. However, it seems to behave very strangely (I'm not absolutely sure this is a bug, but more complicated instances of this seem to be resulting in my criteria's falsely returning empty results). The SQL statement this criteria produces is

 SELECT this_1.Id AS p_4, this_1.turkle AS p_5, this_1.qux AS p_6, pf_1.Id AS p_7, pf_2.Id AS p_8, pf_3.Id AS p_9, pf_3.turkle AS p_10, pf_3.qux AS p_11 FROM .foo_record AS this_1 LEFT JOIN .bar_record AS pf_2 ON (this_1.qux = pf_2.Id) LEFT JOIN .bar_record AS pf_1 ON (this_1.turkle = pf_1.Id) LEFT JOIN .foo_record AS pf_3 ON (pf_3.qux = pf_1.Id)

but I'm pretty sure that that last LEFT JOIN .foo_record AS pf_3 ON (pf_3.qux = pf_1.Id) should not be there!

no scalatest in archetype

Kind of surprised there is no scalatest or specs as part of the circumflex-archetype. Should probably be there.

BeanInfo

I'm working with Vaadin and Circumflex ORM. In Vaadin, the UI components are bound directly to Java Beans (or POJOs) using reflection. I'd like to do the same with Circumflex, maybe using the @BeanProperty annotations, but it doesn't seem to work. For example, if I have a name variable:

@BeanProperty var name = "name".TEXT

I get a getter and a setter, but as you can see here, they return and take a TextField rather than a String:

public ru.circumflex.orm.TextField model.Expectation.getName()
public void model.Expectation.setName(ru.circumflex.orm.TextField)

Do I have to write the getters and setters myself? Or is there a trick to this?

Thanks!

ciridiri fails with ClassNotFoundException

There's no separate issue tracker for ciridiri so it looks appropriate to post this issue here.
pom.xml uses nonexistent 2.0 version for circumflex and using 2.0.RC3 fails with
java.lang.ClassNotFoundException: ru.circumflex.core.CircumflexFilter

And I don't see any filters in circumflex-core

cx.request key not found

I accidentally created this originally as closed. Please delete that one.

I get the following error when I try to use headers (e.g. headers("Host")):

java.util.NoSuchElementException: key not found: cx.request
at scala.collection.MapLike$class.default(MapLike.scala:223)
at scala.collection.mutable.HashMap.default(HashMap.scala:39)
at scala.collection.MapLike$class.apply(MapLike.scala:134)
at scala.collection.mutable.HashMap.apply(HashMap.scala:39)
at ru.circumflex.web.package$.request(package.scala:55)
at ru.circumflex.web.package$headers$.get(package.scala:46)
at ru.circumflex.web.package$headers$.get(package.scala:36)
at scala.collection.MapLike$class.apply(MapLike.scala:133)
at ru.circumflex.web.package$headers$.apply(package.scala:36)

What could be wrong?

Retrieving params from multi-selects

If I have a multiple select element thus:

<select name="test" multiple="multiple">
  <option>One</option>
  <option>Two</option>
  <option>Red</option>
  <option>Blue</option>
</select>

When I submit it I get something like this:

test=One&test=Two&test=Blue

When I attempt to retrieve this array of params, I get only the first one.

println(param("test").get)      // Prints "One"

So how do I work with multiple select elements or with multiple checkboxes having the same name?

How do I upload files?

I have a form that uploads a file via enctype="multipart/form-data". I know that the site is responding. The input looks like this:

<input type="file" name="photo[upload]" id="photo-upload" size="36" />

On the other end I am looking for the file like this:

param("photo[upload]").get

But I'm not getting anything as far as I can tell. Where is the file? Do I need to add something to web.xml? There is nothing on the site about this that I can find.

Also, I'm looking at using a jQuery plugin for swfupload, which uses Flash to queue files and upload them without reloading the page. I have this working on the browser side, but can't find the files on the server again. Do you have any ideas as to how to handle this? It should be simple, but it is definitely not obvious.

Thanks.

P.S. Where is your mailing list or Google group? You need one.

higher depth prefetches?

The documentation for prefetching via the Criteria API suggests that "There is no limitation on quantity or depth of prefetches."

I understand from this that if A.x references B, and B.y references C, I should be able to do a "depth 2" prefetch. Does Circumflex support this? Can someone suggest a syntax example?

UUIDs

Is there any interest (besides me) in allowing UUIDs to be used as primary keys in Circumflex ORM? Ideally, I'd love to have it set up so I could pass a UUID, or, if I didn't, one would be randomly generated. Ability to swap out UUID libraries would be ecstatically wonderful. Don't really care how it's stored -- string is fine. I haven't seen much advantage to e.g., PostgreSQL's UUID datatype.

Currently, I'm working around this with a "code" attribute:

class Expectation extends Record[Expectation] {
  def this(code: String) = {
    this()
    this.code := code
  }

  val code = "code".TEXT.UNIQUE.DEFAULT(UUID.randomUUID.toString)
}

Then I just ignore the automatically generated id.

Feature Request: scopes for inverse associations

There may be some way of doing this already that I'm unaware of but I'd like to be able to chain together a scope (ala ActiveRecord/Rails) to an inverse (Has Many) association.

For example:

class State extends Record[State] {
  def users = inverse(User.state)
}

class User extends Record[User] {
  val state = "state_id" REFERENCES(State) ON_DELETE CASCADE ON_UPDATE NO_ACTION
}

object User extends Table[User] {
  val admin = criteria.add(this.admin EQ true)
}

val state = State.get(1)
// get all admin users in State 1
val stateAdminUsers = state.users.admins.list

Polymorphism?

I've been playing around with the Circumflex ORM and it's very nice, but I don't see anything to permit any type of inheritance -- single table or otherwise. Is there a provision for this? I use a lot of traits, often for the purposes of inclusion polymorphism. Not possible? Possible? Planned? Forget it?

Thanks!

failed test: ru.circumflex.core.SpecsTest

This test is not platform independent.
you are expecting "Fri Jan 29 00:00:00 MSK 1988" but it produce "Fri Jan 29 00:00:00 ICT 1988" on my PC. Perhaps you should switch to use timestamp (long number) instead of string?

regex in url in 2.0 problem

I had worked up a nice helper in 1.0 that allowed me to do this:

def pr(path: String) = {
  path.replaceAll(
    ":code",
    "(?i:[a-f0-9]{8}\\-[a-f0-9]{4}\\-[a-f0-9]{4}\\-[a-f0-9]{4}\\-[a-f0-9]{12})"
  ).r
}

And then in my router:

class MyRouter extends RequestRouter("/things") {
  get(pr("/:code")) = {
    println("CODE: '" + uri(1) + "'")
  }
}

When I do this:

/things/049549ee-b0eb-49ed-8f78-a7437b94c147

I get this:

CODE: ''

But:

scala> "(?i:[a-f0-9]{8}\\-[a-f0-9]{4}\\-[a-f0-9]{4}\\-[a-f0-9]{4}\\-[a-f0-9]{12})".r.findFirstIn("049549ee-b0eb-49ed-8f78-a7437b94c147")
res0: Option[String] = Some(049549ee-b0eb-49ed-8f78-a7437b94c147)

I swear I had this working. Then I changed to 2.0 and now uri(1) returns null every time. The Regex works just fine (see above). What am I doing wrong here?

Thanks

Scaladocs?

Where are the online scaladocs and/or how can I generate them locally? I've tried all the normal routes with no success.

Thanks!

routing problems inside tomcat

Hi, I have my first Circumflex application running in tomcat. Howeve the path is not from root. i.e. the base URL entry point is http:////. I find the router is not relative to my application? for example I have to do this for root:
get("/myapp") = ={

}

rather then:
get("/") = ={

}

This causes a problem for all the static resource also...

Any suggestion for me to run this as a web app in tomcat?

2.0RC1 won't install

I get the following error when I do mvn clean install on the 2.0 branch:

[INFO] /private/var/www/circumflex/20RC1/circumflex-core/src/test/scala:-1: info: compiling
[INFO] Compiling 1 source files to /private/var/www/circumflex/20RC1/circumflex-core/target/test-classes at 1288472457765
[INFO] prepare-compile in 0 s
[INFO] compile in 8 s
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: /private/var/www/circumflex/20RC1/circumflex-core/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running ru.circumflex.core.SpecsTest
Tests run: 12, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.613 sec <<< FAILURE!

Results :

Failed tests: 
  Circumflex Context should provide untyped container functionality

Tests run: 12, Failures: 1, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] There are test failures.

Please refer to /private/var/www/circumflex/20RC1/circumflex-core/target/surefire-reports for the individual test results.
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 24 seconds
[INFO] Finished at: Sat Oct 30 18:01:07 GMT-03:00 2010
[INFO] Final Memory: 48M/528M
[INFO] ------------------------------------------------------------------------

Apparently, I can't attach files, so here is the content of the surefire reports:

-------------------------------------------------------------------------------
Test set: ru.circumflex.core.SpecsTest
-------------------------------------------------------------------------------
Tests run: 12, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.612 sec <<< FAILURE!
Circumflex Context should provide untyped container functionality  Time elapsed: 0.003 sec  <<< FAILURE!
org.specs.runner.UserError: '570423600000' is not equal to '570402000000'
    at ru.circumflex.core.CircumflexCoreSpec$$anonfun$3$$anonfun$apply$37.apply(specs.scala:89)
    at ru.circumflex.core.CircumflexCoreSpec$$anonfun$3$$anonfun$apply$37.apply(specs.scala:81)
    at org.specs.specification.LifeCycle$class.withCurrent(ExampleLifeCycle.scala:60)
    at org.specs.specification.Examples.withCurrent(Examples.scala:52)
    at org.specs.specification.Examples$$anonfun$specifyExample$1.apply(Examples.scala:108)
    at org.specs.specification.Examples$$anonfun$specifyExample$1.apply(Examples.scala:108)
    at org.specs.specification.ExampleExecution$$anonfun$3$$anonfun$apply$5.apply(ExampleLifeCycle.scala:203)
    at scala.Option.getOrElse(Option.scala:104)
    at org.specs.specification.LifeCycle$class.executeExpectations(ExampleLifeCycle.scala:82)
    at org.specs.specification.BaseSpecification.executeExpectations(BaseSpecification.scala:56)
    at org.specs.specification.LifeCycle$$anonfun$executeExpectations$1.apply(ExampleLifeCycle.scala:82)
    at org.specs.specification.LifeCycle$$anonfun$executeExpectations$1.apply(ExampleLifeCycle.scala:82)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.LifeCycle$class.executeExpectations(ExampleLifeCycle.scala:82)
    at org.specs.specification.BaseSpecification.executeExpectations(BaseSpecification.scala:56)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1$$anonfun$apply$2.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1$$anonfun$apply$2.apply(ExampleContext.scala:58)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$class.id$1(ExampleContext.scala:31)
    at org.specs.specification.ExampleContext$$anonfun$1.apply(ExampleContext.scala:32)
    at org.specs.specification.ExampleContext$$anonfun$1.apply(ExampleContext.scala:32)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2.apply(ExampleContext.scala:57)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.ExampleContext$class.executeExpectations(ExampleContext.scala:57)
    at org.specs.specification.Examples.executeExpectations(Examples.scala:52)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1$$anonfun$apply$2.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1$$anonfun$apply$2.apply(ExampleContext.scala:58)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$class.id$1(ExampleContext.scala:31)
    at org.specs.specification.ExampleContext$$anonfun$1.apply(ExampleContext.scala:32)
    at org.specs.specification.ExampleContext$$anonfun$1.apply(ExampleContext.scala:32)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2.apply(ExampleContext.scala:57)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.ExampleContext$class.executeExpectations(ExampleContext.scala:57)
    at org.specs.specification.Examples.executeExpectations(Examples.scala:52)
    at org.specs.specification.ExampleExecution$$anonfun$3.apply(ExampleLifeCycle.scala:203)
    at org.specs.specification.ExampleExecution$$anonfun$3.apply(ExampleLifeCycle.scala:190)
    at org.specs.specification.ExampleExecution$$anonfun$2.apply(ExampleLifeCycle.scala:173)
    at org.specs.specification.ExampleExecution.execute(ExampleLifeCycle.scala:223)
    at org.specs.specification.SpecificationExecutor$$anonfun$executeExample$1.apply(SpecificationExecutor.scala:52)
    at org.specs.specification.SpecificationExecutor$$anonfun$executeExample$1.apply(SpecificationExecutor.scala:52)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.SpecificationExecutor$class.executeExample(SpecificationExecutor.scala:52)
    at org.specs.specification.BaseSpecification.executeExample(BaseSpecification.scala:56)
    at org.specs.specification.BaseSpecification.executeExample(BaseSpecification.scala:56)
    at org.specs.specification.ExampleLifeCycle$$anonfun$executeExample$1.apply(ExampleLifeCycle.scala:120)
    at org.specs.specification.ExampleLifeCycle$$anonfun$executeExample$1.apply(ExampleLifeCycle.scala:120)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.ExampleLifeCycle$class.executeExample(ExampleLifeCycle.scala:120)
    at org.specs.specification.Examples.executeExample(Examples.scala:52)
    at org.specs.specification.Examples.executeExample(Examples.scala:52)
    at org.specs.specification.Examples$$anonfun$executeExamples$1.apply(Examples.scala:80)
    at org.specs.specification.Examples$$anonfun$executeExamples$1.apply(Examples.scala:80)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.Examples.executeExamples(Examples.scala:80)
    at org.specs.specification.ExampleStructure$class.examples(ExampleStructure.scala:77)
    at org.specs.specification.Examples.examples(Examples.scala:52)
    at org.specs.runner.ExamplesTestSuite$$anonfun$initialize$4.apply(JUnit.scala:158)
    at org.specs.runner.ExamplesTestSuite$$anonfun$initialize$4.apply(JUnit.scala:154)
    at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:61)
    at scala.collection.immutable.List.foreach(List.scala:45)
    at org.specs.runner.ExamplesTestSuite.initialize(JUnit.scala:154)
    at org.specs.runner.JUnitSuite$class.init(JUnit.scala:54)
    at org.specs.runner.ExamplesTestSuite.init(JUnit.scala:144)
    at org.specs.runner.JUnitSuite$class.run(JUnit.scala:61)
    at org.specs.runner.ExamplesTestSuite.run(JUnit.scala:173)
    at junit.framework.TestSuite.runTest(TestSuite.java:232)
    at junit.framework.TestSuite.run(TestSuite.java:227)
    at org.specs.runner.JUnitSuite$class.run(JUnit.scala:62)
    at org.specs.runner.JUnit4.run(JUnit.scala:133)
    at org.specs.runner.JUnitSuiteRunner.run(JUnitSuiteRunner.scala:45)
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
    at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
    at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)

<?xml version="1.0" encoding="UTF-8" ?>
<testsuite failures="1" time="0.606" errors="0" skipped="0" tests="12" name="ru.circumflex.core.SpecsTest">
  <properties>
    <property name="java.runtime.name" value="Java(TM) SE Runtime Environment"/>
    <property name="sun.boot.library.path" value="/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Libraries"/>
    <property name="java.vm.version" value="17.1-b03-307"/>
    <property name="awt.nativeDoubleBuffering" value="true"/>
    <property name="gopherProxySet" value="false"/>
    <property name="mrj.build" value="10M3261"/>
    <property name="java.vm.vendor" value="Apple Inc."/>
    <property name="java.vendor.url" value="http://www.apple.com/"/>
    <property name="path.separator" value=":"/>
    <property name="java.vm.name" value="Java HotSpot(TM) 64-Bit Server VM"/>
    <property name="file.encoding.pkg" value="sun.io"/>
    <property name="user.country" value="US"/>
    <property name="sun.java.launcher" value="SUN_STANDARD"/>
    <property name="sun.os.patch.level" value="unknown"/>
    <property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
    <property name="user.dir" value="/private/var/www/circumflex/20RC1/circumflex-core"/>
    <property name="java.runtime.version" value="1.6.0_22-b04-307-10M3261"/>
    <property name="java.awt.graphicsenv" value="apple.awt.CGraphicsEnvironment"/>
    <property name="basedir" value="/private/var/www/circumflex/20RC1/circumflex-core"/>
    <property name="java.endorsed.dirs" value="/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/endorsed"/>
    <property name="os.arch" value="x86_64"/>
    <property name="surefire.real.class.path" value="/var/folders/E0/E0Gl+45kH7mx6VjlkNXmyE+++TI/-Tmp-/surefirebooter1374155270014733739.jar"/>
    <property name="java.io.tmpdir" value="/var/folders/E0/E0Gl+45kH7mx6VjlkNXmyE+++TI/-Tmp-/"/>
    <property name="line.separator" value="
"/>
    <property name="java.vm.specification.vendor" value="Sun Microsystems Inc."/>
    <property name="os.name" value="Mac OS X"/>
    <property name="sun.jnu.encoding" value="MacRoman"/>
    <property name="java.library.path" value=".:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java"/>
    <property name="surefire.test.class.path" value="/private/var/www/circumflex/20RC1/circumflex-core/target/test-classes:/private/var/www/circumflex/20RC1/circumflex-core/target/classes:/Users/gemini/.m2/repository/org/scala-lang/scala-library/2.8.1.RC3/scala-library-2.8.1.RC3.jar:/Users/gemini/.m2/repository/org/scala-lang/scala-compiler/2.8.1.RC3/scala-compiler-2.8.1.RC3.jar:/Users/gemini/.m2/repository/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.jar:/Users/gemini/.m2/repository/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar:/Users/gemini/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar:/Users/gemini/.m2/repository/commons-beanutils/commons-beanutils/1.8.0/commons-beanutils-1.8.0.jar:/Users/gemini/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar:/Users/gemini/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar:/Users/gemini/.m2/repository/junit/junit/4.5/junit-4.5.jar:/Users/gemini/.m2/repository/org/scala-tools/testing/specs_2.8.0.Beta1-RC8/1.6.2/specs_2.8.0.Beta1-RC8-1.6.2.jar:/Users/gemini/.m2/repository/commons-lang/commons-lang/2.5/commons-lang-2.5.jar:"/>
    <property name="java.specification.name" value="Java Platform API Specification"/>
    <property name="java.class.version" value="50.0"/>
    <property name="sun.management.compiler" value="HotSpot 64-Bit Server Compiler"/>
    <property name="os.version" value="10.6.4"/>
    <property name="http.nonProxyHosts" value="local|*.local|169.254/16|*.169.254/16"/>
    <property name="user.home" value="/Users/gemini"/>
    <property name="user.timezone" value="GMT-03:00"/>
    <property name="java.awt.printerjob" value="apple.awt.CPrinterJob"/>
    <property name="java.specification.version" value="1.6"/>
    <property name="file.encoding" value="MacRoman"/>
    <property name="user.name" value="gemini"/>
    <property name="java.class.path" value="/private/var/www/circumflex/20RC1/circumflex-core/target/test-classes:/private/var/www/circumflex/20RC1/circumflex-core/target/classes:/Users/gemini/.m2/repository/org/scala-lang/scala-library/2.8.1.RC3/scala-library-2.8.1.RC3.jar:/Users/gemini/.m2/repository/org/scala-lang/scala-compiler/2.8.1.RC3/scala-compiler-2.8.1.RC3.jar:/Users/gemini/.m2/repository/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.jar:/Users/gemini/.m2/repository/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar:/Users/gemini/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar:/Users/gemini/.m2/repository/commons-beanutils/commons-beanutils/1.8.0/commons-beanutils-1.8.0.jar:/Users/gemini/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar:/Users/gemini/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar:/Users/gemini/.m2/repository/junit/junit/4.5/junit-4.5.jar:/Users/gemini/.m2/repository/org/scala-tools/testing/specs_2.8.0.Beta1-RC8/1.6.2/specs_2.8.0.Beta1-RC8-1.6.2.jar:/Users/gemini/.m2/repository/commons-lang/commons-lang/2.5/commons-lang-2.5.jar:"/>
    <property name="java.vm.specification.version" value="1.0"/>
    <property name="sun.arch.data.model" value="64"/>
    <property name="java.home" value="/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home"/>
    <property name="java.specification.vendor" value="Sun Microsystems Inc."/>
    <property name="user.language" value="en"/>
    <property name="awt.toolkit" value="apple.awt.CToolkit"/>
    <property name="java.vm.info" value="mixed mode"/>
    <property name="java.version" value="1.6.0_22"/>
    <property name="java.ext.dirs" value="/Library/Java/Extensions:/System/Library/Java/Extensions:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext"/>
    <property name="sun.boot.class.path" value="/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsfd.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar:/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Resources/Java/JavaRuntimeSupport.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/ui.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/laf.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/sunrsasign.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsse.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jce.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/charsets.jar"/>
    <property name="java.vendor" value="Apple Inc."/>
    <property name="localRepository" value="/Users/gemini/.m2/repository"/>
    <property name="file.separator" value="/"/>
    <property name="java.vendor.url.bug" value="http://bugreport.apple.com/"/>
    <property name="sun.cpu.endian" value="little"/>
    <property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
    <property name="mrj.version" value="1060.1.6.0_22-307"/>
    <property name="socksNonProxyHosts" value="local|*.local|169.254/16|*.169.254/16"/>
    <property name="ftp.nonProxyHosts" value="local|*.local|169.254/16|*.169.254/16"/>
    <property name="sun.cpu.isalist" value=""/>
  </properties>
  <testcase time="0.003" classname="Circumflex Configuration should take params from `cx.properties`" name="Circumflex Configuration should take params from `cx.properties`"/>
  <testcase time="0" classname="Circumflex Configuration should provide object insantiation facility" name="Circumflex Configuration should provide object insantiation facility"/>
  <testcase time="0" classname="Circumflex Configuration should instantiate singletons" name="Circumflex Configuration should instantiate singletons"/>
  <testcase time="0" classname="Circumflex Context should be initialized and destroyed properly" name="Circumflex Context should be initialized and destroyed properly"/>
  <testcase time="0" classname="Circumflex Context should initialize on demand" name="Circumflex Context should initialize on demand"/>
  <testcase time="0" classname="Circumflex Context should process events" name="Circumflex Context should process events"/>
  <testcase time="0" classname="Circumflex Context should be configurable" name="Circumflex Context should be configurable"/>
  <testcase time="0" classname="Circumflex Context should provide DSL for setting and getting context variables" name="Circumflex Context should provide DSL for setting and getting context variables"/>
  <testcase time="0.002" classname="Circumflex Context should provide untyped container functionality" name="Circumflex Context should provide untyped container functionality">
    <failure message="&apos;570423600000&apos; is not equal to &apos;570402000000&apos;" type="org.specs.runner.UserError">org.specs.runner.UserError: &apos;570423600000&apos; is not equal to &apos;570402000000&apos;
    at ru.circumflex.core.CircumflexCoreSpec$$anonfun$3$$anonfun$apply$37.apply(specs.scala:89)
    at ru.circumflex.core.CircumflexCoreSpec$$anonfun$3$$anonfun$apply$37.apply(specs.scala:81)
    at org.specs.specification.LifeCycle$class.withCurrent(ExampleLifeCycle.scala:60)
    at org.specs.specification.Examples.withCurrent(Examples.scala:52)
    at org.specs.specification.Examples$$anonfun$specifyExample$1.apply(Examples.scala:108)
    at org.specs.specification.Examples$$anonfun$specifyExample$1.apply(Examples.scala:108)
    at org.specs.specification.ExampleExecution$$anonfun$3$$anonfun$apply$5.apply(ExampleLifeCycle.scala:203)
    at scala.Option.getOrElse(Option.scala:104)
    at org.specs.specification.LifeCycle$class.executeExpectations(ExampleLifeCycle.scala:82)
    at org.specs.specification.BaseSpecification.executeExpectations(BaseSpecification.scala:56)
    at org.specs.specification.LifeCycle$$anonfun$executeExpectations$1.apply(ExampleLifeCycle.scala:82)
    at org.specs.specification.LifeCycle$$anonfun$executeExpectations$1.apply(ExampleLifeCycle.scala:82)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.LifeCycle$class.executeExpectations(ExampleLifeCycle.scala:82)
    at org.specs.specification.BaseSpecification.executeExpectations(BaseSpecification.scala:56)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1$$anonfun$apply$2.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1$$anonfun$apply$2.apply(ExampleContext.scala:58)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$class.id$1(ExampleContext.scala:31)
    at org.specs.specification.ExampleContext$$anonfun$1.apply(ExampleContext.scala:32)
    at org.specs.specification.ExampleContext$$anonfun$1.apply(ExampleContext.scala:32)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2.apply(ExampleContext.scala:57)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.ExampleContext$class.executeExpectations(ExampleContext.scala:57)
    at org.specs.specification.Examples.executeExpectations(Examples.scala:52)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1$$anonfun$apply$2.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1$$anonfun$apply$2.apply(ExampleContext.scala:58)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2$$anonfun$apply$1.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$class.id$1(ExampleContext.scala:31)
    at org.specs.specification.ExampleContext$$anonfun$1.apply(ExampleContext.scala:32)
    at org.specs.specification.ExampleContext$$anonfun$1.apply(ExampleContext.scala:32)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2.apply(ExampleContext.scala:58)
    at org.specs.specification.ExampleContext$$anonfun$executeExpectations$2.apply(ExampleContext.scala:57)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.ExampleContext$class.executeExpectations(ExampleContext.scala:57)
    at org.specs.specification.Examples.executeExpectations(Examples.scala:52)
    at org.specs.specification.ExampleExecution$$anonfun$3.apply(ExampleLifeCycle.scala:203)
    at org.specs.specification.ExampleExecution$$anonfun$3.apply(ExampleLifeCycle.scala:190)
    at org.specs.specification.ExampleExecution$$anonfun$2.apply(ExampleLifeCycle.scala:173)
    at org.specs.specification.ExampleExecution.execute(ExampleLifeCycle.scala:223)
    at org.specs.specification.SpecificationExecutor$$anonfun$executeExample$1.apply(SpecificationExecutor.scala:52)
    at org.specs.specification.SpecificationExecutor$$anonfun$executeExample$1.apply(SpecificationExecutor.scala:52)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.SpecificationExecutor$class.executeExample(SpecificationExecutor.scala:52)
    at org.specs.specification.BaseSpecification.executeExample(BaseSpecification.scala:56)
    at org.specs.specification.BaseSpecification.executeExample(BaseSpecification.scala:56)
    at org.specs.specification.ExampleLifeCycle$$anonfun$executeExample$1.apply(ExampleLifeCycle.scala:120)
    at org.specs.specification.ExampleLifeCycle$$anonfun$executeExample$1.apply(ExampleLifeCycle.scala:120)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.ExampleLifeCycle$class.executeExample(ExampleLifeCycle.scala:120)
    at org.specs.specification.Examples.executeExample(Examples.scala:52)
    at org.specs.specification.Examples.executeExample(Examples.scala:52)
    at org.specs.specification.Examples$$anonfun$executeExamples$1.apply(Examples.scala:80)
    at org.specs.specification.Examples$$anonfun$executeExamples$1.apply(Examples.scala:80)
    at scala.Option.map(Option.scala:129)
    at org.specs.specification.Examples.executeExamples(Examples.scala:80)
    at org.specs.specification.ExampleStructure$class.examples(ExampleStructure.scala:77)
    at org.specs.specification.Examples.examples(Examples.scala:52)
    at org.specs.runner.ExamplesTestSuite$$anonfun$initialize$4.apply(JUnit.scala:158)
    at org.specs.runner.ExamplesTestSuite$$anonfun$initialize$4.apply(JUnit.scala:154)
    at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:61)
    at scala.collection.immutable.List.foreach(List.scala:45)
    at org.specs.runner.ExamplesTestSuite.initialize(JUnit.scala:154)
    at org.specs.runner.JUnitSuite$class.init(JUnit.scala:54)
    at org.specs.runner.ExamplesTestSuite.init(JUnit.scala:144)
    at org.specs.runner.JUnitSuite$class.run(JUnit.scala:61)
    at org.specs.runner.ExamplesTestSuite.run(JUnit.scala:173)
    at junit.framework.TestSuite.runTest(TestSuite.java:232)
    at junit.framework.TestSuite.run(TestSuite.java:227)
    at org.specs.runner.JUnitSuite$class.run(JUnit.scala:62)
    at org.specs.runner.JUnit4.run(JUnit.scala:133)
    at org.specs.runner.JUnitSuiteRunner.run(JUnitSuiteRunner.scala:45)
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
    at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
    at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
</failure>
  </testcase>
  <testcase time="0" classname="Circumflex Messages should resolve messages in different locales" name="Circumflex Messages should resolve messages in different locales"/>
  <testcase time="0" classname="Circumflex Messages should format messages using `MessageFormat`" name="Circumflex Messages should format messages using `MessageFormat`"/>
  <testcase time="0" classname="Circumflex Messages should format messages using simple interpolations" name="Circumflex Messages should format messages using simple interpolations"/>
</testsuite>

Joda Time

Is it possible to use Joda Time with the Circumflex ORM? If not (i.e. roll your own), is this something that might be added in the future? It would be nice to be able to use Joda Time (or Scala Time, if Jorge ever gets back to it) and store it transparently. Or have people given up on Joda Time?

documentation typo #2

In the "Relation Nodes" section of the ORM docs, the example explaining map says

// fetch all countries
SELECT (co.*) FROM (co) list

but should say

// fetch all countries
(Country as "co") map { co => SELECT (co.*) FROM (co) list }

How to export schema?

OK, I give up. I can't for the life of me remember the Maven code to export my schema to PostgreSQL and an hour of searching everyone has revealed nothing. I've tried every combination I can think of and searched the source code but nothing seems to work.

Can you post the magic incantation that makes Maven push the schema to PostgreSQL? Thanks!

Feature Request: convenience associationId attribute

Not a big issue but for convenience I'd like to be able to access at stateId attribute in a case like this:

class User extends Record[User] {
  val state = "state_id" REFERENCES(State) ON_DELETE CASCADE ON_UPDATE NO_ACTION
}

I've had mixed results being able to specify the following. Sometimes stateId() is 0 or null even when state().id() is actually set.

class User extends Record[User] {
  val stateId = "state_id" BIGINT
  val state = "state_id" REFERENCES(State) ON_DELETE CASCADE ON_UPDATE NO_ACTION
}

I'm going to try to implement this when I get a chance unless you solve it first.

beforeDelete

I need to test an object to make sure it is not linked to other objects and if it is, to prevent deletion. My intent is to use beforeDelete, but I'm not at all clear on how it works or how to stop the deletion. From what I can see, the only method that appears possible is to throw an exception. But then I also need to get a reference to the object to be deleted, and I'm having a hell of a time figuring out the callback signature. Can anyone give a simple example of using beforeDelete to check to see if an association Seq is nonEmpty, and, if so, prevent deletion?

Usergroup/maillist for people interested in Circumflex

I could not find any resource which will help knowledge sharing for Circumflex.
Using issue tracker for something like newbie questions seems not to be a good idea and it is the only option I see.
I think Google group will be OK for that purpose.

Atmosphere with Cx?

Has anyone tried to use Atmosphere with Circumflex? I see it has modules for Jersey and Guice and several other frameworks. Unfortunately, I just converted an app over to Cx from Jersey/Guice and I'm not going back, but I need to do some kind of push. Any suggestions?

Please provide howto for SBT (simple build tool)

SBT is a superb replacement for maven - for Scala especially.

Typically what I do is:

  1. mkdir new
  2. cd new
  3. mkdir -p project/build
  4. vim project/build/config.scala

import sbt._

class HelloLiftProject(info: ProjectInfo) extends DefaultWebProject(info)
{

override def repositories = Set(
"Apache Camel" at "https://repository.apache.org/content/repositories/releases/",
"Akka Maven Repository" at "http://scalablesolutions.se/akka/repository",
ScalaToolsSnapshots)
val jetty6 = "org.mortbay.jetty" % "jetty" % "6.1.14" % "test"
val servlet = "javax.servlet" % "servlet-api" % "2.5" % "provided"
val junit = "junit" % "junit" % "3.8.1" % "test"
// other dependencies

// required because Ivy doesn't pull repositories from poms
val smackRepo = "m2-repository-smack" at "http://maven.reucon.com/public"

override def managedDependencyPath = ".sbt1"
}

  1. java -Xmx512M -jar sbt-launch-0.7.4.jar
  2. java -Xmx512M -jar sbt-launch-0.7.4.jar update
  3. sbt shell starts up - start jetty
  4. start coding

If you could come up with a workflow like this, it would be great and help a lot in setting up scala with circumflex

Fall through route matching

I've been working with circumflex up until about a week ago, when I hit a show stopper. Circumflex matches routes, and then uses the particular handler associated with the matcher. There is no ability to pass the request to be matched any further.

Scalatra on the other hand allows for this ability, so each route matcher and handler combo is actually a filter in it's own right. This allows for easier middleware like capabilities, such as Ruby's Rack. Now, I could use servlets, but frankly the API sucks, and I'd rather not bother with mutating requests and such.

On the other hand I could abstract out the handler such that it does all the things I want, but then it's almost like implementing a new route->response map, or repeating a bunch of code.

Can the code be changed such that rather than throwing a matching route exception a route is instead matched, executed, and if a 'fall-through flag' is set it continues trying to match, or breaks and let's the filter finish serving that request.

Further to this, there might be some common ground with the Scalatra folks working on SSGI (https://github.com/scalatra/ssgi).

Composite primary key support

Are there any plans for this? From a cursory reading of the source code it looks like it would require some pretty major overhauling but I think it's essential to a proper ORM.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.