Skip to content

Commit

Permalink
add bracket syntax support and unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
edadma committed Apr 27, 2018
1 parent 3cf0e7b commit 6b927a2
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 9 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Liquescent
[![Build Status](https://www.travis-ci.org/edadma/liquescent.svg?branch=master)](https://www.travis-ci.org/edadma/liquescent)
[![Coverage Status](https://coveralls.io/repos/github/edadma/liquescent/badge.svg?branch=master)](https://coveralls.io/github/edadma/liquescent?branch=master)
[![License](https://img.shields.io/badge/license-ISC-blue.svg)](https://github.com/edadma/liquescent/blob/master/LICENSE)
[![Version](https://img.shields.io/badge/latest_release-v0.1.7-orange.svg)](https://github.com/edadma/liquescent/releases/tag/v0.1.7)
[![Version](https://img.shields.io/badge/latest_release-v0.1.8-orange.svg)](https://github.com/edadma/liquescent/releases/tag/v0.1.8)

*Liquescent* is an implementation of the [Liquid](https://shopify.github.io/liquid/) templating language for the [Scala](http://scala-lang.org) programming language.

Expand Down Expand Up @@ -52,7 +52,7 @@ This program prints
This next example shows how to use *Liquescent* as an executable on the command line.

```bash
echo "{{ v | join: \", \" }}" | java -jar liquescent-0.1.7.jar -j "{v: [\"one\", \"two\", \"three\"]}" --
echo "{{ v | join: \", \" }}" | java -jar liquescent-0.1.8.jar -j "{v: [\"one\", \"two\", \"three\"]}" --
```

The above command prints
Expand All @@ -74,7 +74,7 @@ Use the following definition to use Liquescent in your Maven project:
<dependency>
<groupId>xyz.hyperreal</groupId>
<artifactId>liquescent</artifactId>
<version>0.1.7</version>
<version>0.1.8</version>
</dependency>
```

Expand All @@ -83,7 +83,7 @@ Add the following to your `build.sbt` file to use Liquescent in your SBT project
```sbt
resolvers += "Hyperreal Repository" at "https://dl.bintray.com/edadma/maven"

libraryDependencies += "xyz.hyperreal" %% "liquescent" % "0.1.7"
libraryDependencies += "xyz.hyperreal" %% "liquescent" % "0.1.8"
```

Building
Expand Down
2 changes: 1 addition & 1 deletion build.sbt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name := "liquescent"

version := "0.1.7"
version := "0.1.8"

scalaVersion := "2.12.5"

Expand Down
10 changes: 8 additions & 2 deletions src/main/scala/Interpreter.scala
Original file line number Diff line number Diff line change
Expand Up @@ -205,8 +205,14 @@ class Interpreter( filters: Map[String, Filter], tags: Map[String, Tag], assigns
case (a: BigInt, b: BigInt) => a to b by 1
case (a, b) => sys.error( s"invalid range limits: $a, $b" )
}) toList
case DotExpressionAST( expr, name ) =>
eval( expr ) match {
case ArrayExpressionAST( exp, index ) =>
(eval( exp ), eval( index )) match {
case (m: collection.Map[_, _], i: String) => m.asInstanceOf[collection.Map[String, Any]](i)
case (s: Seq[_], i: Number) => s.asInstanceOf[Seq[Any]]( i.intValue )
case (a, b) => sys.error( s"bracket syntax not applicable: $a, $b" )
}
case DotExpressionAST( exp, name ) =>
eval( exp ) match {
case `nil` => nil
case m: collection.Map[_, _] =>
m.asInstanceOf[collection.Map[String, Any]] get name match {
Expand Down
4 changes: 2 additions & 2 deletions src/main/scala/Main.scala
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ object Main extends App {

def usage {
"""
|liquescent v0.1.7
|liquescent v0.1.8
|
|Usage: java -jar liquescent-0.1.7.jar <options> <liquid template>
|Usage: java -jar liquescent-0.1.8.jar <options> <liquid template>
|
|Options: --help display this help and exit
| -s <name> <string> assign <string> to variable <name>
Expand Down
15 changes: 15 additions & 0 deletions src/test/scala/TypesTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,19 @@ class TypesTests extends FreeSpec with PropertyChecks with Matchers with Testing
test( "The current user is {{ user.name }}", false ) shouldBe "The current user is "
}

"bracket" in {
test(
"""
|{{ site.users[0] }}
|{{ site.users[1] }}
|{{ site.users[3] }}
""".stripMargin, true, "site" -> Map("users" -> List("Tobi", "Laura", "Tetsuro", "Adam"))
) shouldBe "Tobi Laura Adam"
test(
"""
|{{ site['users'] | join: ", " }}
""".stripMargin, true, "site" -> Map("users" -> List("Tobi", "Laura", "Tetsuro", "Adam"))
) shouldBe "Tobi, Laura, Tetsuro, Adam"
}

}

0 comments on commit 6b927a2

Please sign in to comment.