Created
November 12, 2010 12:14
-
-
Save toby55kij/674033 to your computer and use it in GitHub Desktop.
HtmlBuilderをmethodMissingで書き換えてみる。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import groovy.xml.MarkupBuilder | |
class HtmlBuilder{ | |
BuilderSupport builder | |
HtmlBuilder(BuilderSupport builder = new MarkupBuilder()){ | |
this.builder = builder | |
} | |
def fromString(String expr, var = [:]){ | |
def script = new GroovyShell(var as Binding).parse(expr) | |
script.metaClass.methodMissing = { String name, args -> this.builder.invokeMethod(name, args) } | |
script.run() | |
} | |
def fromFile(File file, var = [:]){ | |
fromString(file.text, var) | |
} | |
//********** getProperty() / setProperty() ********** | |
@Override | |
def getProperty(String name){ | |
name == 'builder' ? this.builder : this.builder.getProperty(name) | |
} | |
@Override | |
void setProperty(String name, value){ | |
name == 'builder' ? this.builder = value : this.builder.setProperty(name, value) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment