-
Notifications
You must be signed in to change notification settings - Fork 11
03.05.モックカスタムタグ、ファンクション
モックカスタムタグ、ファンクションのドキュメントです。
project.yamlのfunctionとtag項目を設定すると、カスタムタグやファンクションのモックをGroovyスクリプトで実装することができます。
カスタムタグのルートディレクトリです。プロジェクトルートからの相対パスを指定します。
カスタムファンクションのルートディレクトリです。プロジェクトルートからの相対パスを指定します。
tag:
root: ./tag
function:
root: ./function
Freemarkerのカスタムディレクトリをカスタムタグとして、Shared Variableに登録するオブジェクトをカスタムファンクションとしてサポートします。
タグルートディレクトリに、呼び出したいタグ名.groovy
でスクリプトを作成します。Struts2のs.text
のような命名のタグにも対応しています。
スクリプト内では、ビルトイン変数に加え、Freemarkerの独自の変数が利用できます。
変数名 | 型 | 内容 |
---|---|---|
_env | freemarker.core.Environment | 環境設定オブジェクト |
_params | java.util.Map | タグの属性値Map |
_loopVars | freemarker.template.TemplateModel[] | ループ変数 |
_body | freemarker.template.TemplateDirectiveBody | タグのbody部分 |
_writer | java.io.Writer | タグ出力結果のWriter |
_data | java.util.Map | データファイルのデータ |
特殊なclassを持つspanタグを作ってみましょう。span.groovy
でスクリプトを作成します。
_writer
にタグの出力結果を追記していきます。タグに指定された属性も指定し、@span
タグの内部も評価するスクリプトは以下のようになります。
_writer.write("""<span""")
// add class attribute
_writer.write(""" class="special-span" """)
// write tag attributes
for (entry in _params) {
_writer.write(""" ${entry.key}=\\"${entry.value}\\"""")
}
_writer.write(""">""")
if (_body != null) {
// render inner body.
_body.render(_writer)
}
_writer.write("""</span>""")
作成したtagは以下のように呼び出すことができます。
<body>
<@span>aaaa</@span>
</body>
ファンクションルートディレクトリに、呼び出したいファンクション名.groovy
でスクリプトを作成します。
スクリプト内では、ビルトイン変数に加え、Freemarker独自の変数が利用できます。
staticUrl
という関数のモック実装です。与えられたURI文字列にAeromockのホスト名を付加して返すファンクションです。
if (arguments.isEmpty()) {
throw new RuntimeException("Argument required")
}
return "http://localhost:3183${arguments[0]}"
作成したfunctionは以下のように呼び出すことができます。
<body>
${staticUrl('/img/sample.jpg')}
</body>
変数名 | 型 | 内容 |
---|---|---|
arguments | java.util.List | ファンクションの引数 |
_data | java.util.Map | データファイルのデータ |
Handlebars.javaのHelpersをfunctionとしてサポートしています。tagは利用しません。
ファンクションルートディレクトリに、呼び出したいファンクション名.groovy
でスクリプトを作成します。
スクリプト内では、ビルトイン変数に加え、Handlebars.java独自の変数が利用できます。
変数名 | 型 | 内容 |
---|---|---|
argument | ファンクションの引数による | ファンクションの引数 |
options | com.github.jknack.handlebars.Options | @See Options.java |
_data | java.util.Map | データファイルのデータ |
staticUrl
という関数のモック実装です。与えられたURI文字列にAeromockのホスト名を付加して返すファンクションです。
if (argument == null || argument.length() == 0) {
throw new IllegalArgumentException("Argument required")
}
return "http://${HOST}${argument}"
作成したHelperは以下のように呼び出すことができます。
<li>staticUrl(original) = <img src="{{staticUrl "/img/sample.jpg"}}"/></li>
Jade4jのHelpersをfunctionとしてサポートしています。tagは利用しません。
ファンクションルートディレクトリに、呼び出したいファンクション名.groovy
でスクリプトを作成します。
Jade4jのモックファンクションスクリプトでは、現状スクリプト内でビルトイン変数やデータファイルのデータを参照することはできません。
Jade4jのHelpersは特定のインタフェースの縛りがありません。そのため、Helperクラスそのものをスクリプト内で定義する必要があります。
math.round(1.44)
という、任意の値を丸めることができるHelperを作成します。math.groovy
という名前で作成します。このスクリプトでは、Helperのクラスを定義し、そのインスタンスを作成して返します。FreemarkerやHandlebars.javaとはアプローチが違うので注意です。
class MathHelper {
long round(double number) {
return Math.round(number)
}
}
return new MathHelper()
作成したHelperは以下のように呼び出すことができます。
p= math.round(1.44)
Velocimacrosがあるので、Aeromockとしてはカスタムタグ・ファンクションとしてのサポートはしていません。
Groovy Templatesはテンプレートそのものがスクリプトであるため、Aeromockとしてはカスタムタグ・ファンクションとしてのサポートはしていません。
ThymeleafのUtility Objectをfunctionとしてサポートしています。tagは利用しません。
ファンクションルートディレクトリに、呼び出したいファンクション名.groovy
でスクリプトを作成します。
Thymeleafのモックファンクションスクリプトでは、現状スクリプト内でビルトイン変数やデータファイルのデータを参照することはできません。
ThymeleafのUtility Objectは特定のインタフェースの縛りがありません。そのため、Utility Objectクラスそのものをスクリプト内で定義する必要があります。
helper
という変数から呼び出すことができるUtility Objectを作成します。ファンクションルートにhelper.groovy
で作成します。このスクリプトでは、UtilityObjectのクラスを定義し、そのインスタンスを作成して返します。
class HelperUtilityObject {
long round(double number) {
return Math.round(number)
}
String hello(String message) {
return "Hello!! $message"
}
}
return new HelperUtilityObject()
作成したUtility Objectは以下のように呼び出すことができます。
<h4>function</h4>
<ul>
<li><span th:text="${#helper.hello('neko')}">hoge</span></li>
<li><span th:text="${#helper.round(1.1)}">hoge</span></li>
</ul>