Skip to content
This repository has been archived by the owner on Aug 2, 2022. It is now read-only.

Commit

Permalink
Initial dojo working
Browse files Browse the repository at this point in the history
  • Loading branch information
chiquitinxx committed Nov 19, 2014
1 parent 4798797 commit c75bba9
Show file tree
Hide file tree
Showing 8 changed files with 147 additions and 35 deletions.
33 changes: 24 additions & 9 deletions src/main/groovy/org/grooscript/convert/ConversionFactory.groovy
Expand Up @@ -4,6 +4,7 @@ import org.codehaus.groovy.ast.ASTNode
import org.codehaus.groovy.ast.expr.*
import org.codehaus.groovy.ast.stmt.*
import org.grooscript.convert.handlers.*
import org.grooscript.convert.packages.DojoHandler
import org.grooscript.util.GrooScriptException

import static org.grooscript.JsNames.*
Expand Down Expand Up @@ -67,8 +68,8 @@ class ConversionFactory {

void visitNode(node, otherParam = null) {
String className = node.class.simpleName
if (captureConversion(node)) {
processCapturedConversion(node, otherParam)
if (capturePackageConversion(node)) {
processPackageConversion(node, otherParam)
} else if (!converters[className]) {
if (otherParam != null) {
converter."process${className}"(node, otherParam)
Expand Down Expand Up @@ -165,10 +166,20 @@ class ConversionFactory {
}

//Each package could have own conversion handlers, just here for demo
private packages = []
private handler

private getPackageHandler() {
if (!handler && converter.conversionOptions[ConversionOptions.USE_JS_LIB.text] == 'dojo') {
handler = new DojoHandler(factory: this)
}
handler
}

private boolean capturePackageConversion(node) {
packageHandler?.handle(node)
/*if (converter.conversionOptions[ConversionOptions.USE_JS_LIB.text] == 'google') {
private boolean captureConversion(node) {
if (converter.conversionOptions[ConversionOptions.USE_JS_LIB.text] == 'google') {
if (node instanceof DeclarationExpression &&
node.rightExpression instanceof StaticMethodCallExpression &&
node.rightExpression.method == 'useJsLib' &&
Expand All @@ -182,12 +193,16 @@ class ConversionFactory {
return true
}
}
false
false*/
}

private processCapturedConversion(node, otherParam) {
private processPackageConversion(node, otherParam) {
println 'Captured processing...'
if (converter.conversionOptions[ConversionOptions.USE_JS_LIB.text] == 'google') {
packageHandler?.process(node)

/*if (converter.conversionOptions[ConversionOptions.USE_JS_LIB.text] == 'google') {
if (node instanceof DeclarationExpression &&
node.rightExpression instanceof StaticMethodCallExpression &&
node.rightExpression.method == 'useJsLib' &&
Expand All @@ -201,6 +216,6 @@ class ConversionFactory {
convert(node.arguments, false)
out.addScript(")")
}
}
}*/
}
}
2 changes: 0 additions & 2 deletions src/main/groovy/org/grooscript/convert/Out.groovy
Expand Up @@ -32,8 +32,6 @@ class Out {
* @return
*/
private addScript(text, addNewLineChar = false) {
//println 'adding ->'+text
//indent.times { resultScript += TAB }
resultScript += text
if (addNewLineChar) {
addLine()
Expand Down
53 changes: 53 additions & 0 deletions src/main/groovy/org/grooscript/convert/packages/DojoHandler.groovy
@@ -0,0 +1,53 @@
package org.grooscript.convert.packages

import org.codehaus.groovy.ast.expr.MethodCallExpression
import org.codehaus.groovy.ast.expr.PropertyExpression
import org.codehaus.groovy.ast.expr.StaticMethodCallExpression
import org.grooscript.convert.ConversionFactory

/**
* Created by jorgefrancoleza on 19/11/14.
*/
class DojoHandler {

def packages = []
def variableName
ConversionFactory factory

boolean handle(node) {
if (node instanceof StaticMethodCallExpression &&
node.method == 'require' &&
node.ownerType.name == 'org.grooscript.packages.DojoPackage') {
packages << node.arguments[0].value.replaceAll('/','.')
return true
}
if (node instanceof MethodCallExpression &&
node.objectExpression instanceof PropertyExpression &&
node.objectExpression.text in packages) {
return true
}
return false
}

boolean process(node) {
if (node instanceof StaticMethodCallExpression &&
node.method == 'require' &&
node.ownerType.name == 'org.grooscript.packages.DojoPackage') {
def pack = node.arguments[0].value
variableName = pack.split('/').last()
factory.out.indent++
factory.out.addScript("require([\"${pack}\"], function(${variableName}) {", true)
factory.visitNode(node.arguments[1].code, false)
factory.out.indent--
factory.out.removeTabScript()
factory.out.addScript("})")
}
if (node instanceof MethodCallExpression &&
node.objectExpression instanceof PropertyExpression &&
node.objectExpression.text in packages) {
factory.out.addScript("${variableName}.${node.methodAsString}(")
factory.convert(node.arguments, false)
factory.out.addScript(")")
}
}
}
28 changes: 28 additions & 0 deletions src/main/groovy/org/grooscript/packages/DojoPackage.groovy
@@ -0,0 +1,28 @@
package org.grooscript.packages

/**
* Created by jorgefrancoleza on 19/11/14.
*/
class DojoPackage {
Dojo dojo = new Dojo()

static require(String pack, @DelegatesTo(DojoPackage) Closure cl) {
def dojoPackage = new DojoPackage()
cl.delegate = dojoPackage
cl()
}
}

class Dojo {
Cldr cldr = new Cldr()
}

class Cldr {
Monetary monetary = new Monetary()
}

class Monetary {
def getData(String currency) {
[ places: currency + new Random().nextInt(50), round: currency + new Random().nextInt(50) ]
}
}
Expand Up @@ -3,6 +3,7 @@ package org.grooscript.convert
import org.grooscript.GrooScript
import org.grooscript.JsGenerator
import org.grooscript.util.Util
import spock.lang.Ignore
import spock.lang.IgnoreIf
import spock.lang.Specification
import spock.lang.Unroll
Expand Down Expand Up @@ -240,6 +241,7 @@ class TestConversionOptions extends Specification {
result.contains('function GQueryImpl')
}

@Ignore
def 'test use google closure tools library'() {
when:
GrooScript.setConversionProperty(ConversionOptions.USE_JS_LIB.text, 'google')
Expand All @@ -262,6 +264,32 @@ gs.println("Encoded base64 string: " + (output) + "");
'''
}

def 'test require dojo'() {
when:
GrooScript.setConversionProperty(ConversionOptions.USE_JS_LIB.text, 'dojo')
def result = GrooScript.convert '''
import static org.grooscript.packages.DojoPackage.require
require("dojo/cldr/monetary") {
["EUR", "USD", "GBP", "JPY"].each {
def cldrMonetaryData = dojo.cldr.monetary.getData(it)
println "Places: $cldrMonetaryData.places"
println "Round: $cldrMonetaryData.round"
}
}
'''
then:
//TODO continue here
result == '''require(["dojo/cldr/monetary"], function(monetary) {
gs.mc(gs.list(["EUR" , "USD" , "GBP" , "JPY"]),"each",[function(it) {
var cldrMonetaryData = monetary.getData(it);
gs.println("Places: " + (gs.gp(cldrMonetaryData,"places")) + "");
return gs.println("Round: " + (gs.gp(cldrMonetaryData,"round")) + "");
}]);
});
'''
}

private void expectedInitialValues() {
assert GrooScript.debug == false
assert GrooScript.options == null
Expand Down
11 changes: 0 additions & 11 deletions src/test/resources/goog/crypt/base64.groovy

This file was deleted.

14 changes: 14 additions & 0 deletions src/test/resources/packages/dojoDemo.groovy
@@ -0,0 +1,14 @@
package packages

/**
* Created by jorgefrancoleza on 18/11/14.
*/
import static org.grooscript.packages.DojoPackage.require

require("dojo/cldr/monetary") {
["EUR", "USD", "GBP", "JPY"].each {
def cldrMonetaryData = dojo.cldr.monetary.getData(it)
println "Places: $cldrMonetaryData.places"
println "Round: $cldrMonetaryData.round"
}
}
13 changes: 0 additions & 13 deletions src/test/resources/packages/google2.groovy

This file was deleted.

0 comments on commit c75bba9

Please sign in to comment.