embed clojure into groovy
Groovy
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
.gitignore
build.gradle
license.md
readme.md

readme.md

#Glow ##What does it do? Allows you to write groovy class methods in clojure.

##How does it work? It uses groovy AST transformations to rewrite the class so that it will compile the clojure code during class initialization and then changes the method to call to the clojure RT class to invoke the clojure code at runtime when the method is called.

##Why? I like clojure but work professionally in groovy. This allows me to write some lisp without having to convert entire projects over. Additionally, I wanted to play with AST transformations.

##How do I use it?

  1. Add my maven repo to your project
  2. Add glow as a compile dependency
compile 'trashhalo:glow:0.1-SNAPSHOT'

Annotate groovy methods on a class with @Clojure to compile it as clojure.

@Clojure
def sayHello(){"""
   (let [x "Hello"]
     (println x))
"""}

You can access method params and class methods.

def getUser(){
    springSecurityService.principal.id
}

@Clojure
def greetUser(greeting){"""
    (println (str greeting ", " (.getUser this)))
"""}

You can also fiddle with the namespace definition for the class by naming a clojure method 'namespace'. Be sure make this the first class method.

@Clojure
def namespace(){"""
    (:require [clojure.string :as string])
"""}
  
@Clojure
def makeItBig(x){"""
    (string/capitalize x)
"""}