1. miminashi

    No comment

    miminashi
Changes in body
Source | HTML | Preview
@@ -1,20 +1,32 @@
このへんをいじればいけそう。
```lib/redmine/views/api_template_handler.rb
module Redmine
module Views
class ApiTemplateHandler
def self.call(template)
"Redmine::Views::Builders.for(params[:format], request, response) do |api|; #{template.source}; self.output_buffer = api.output; end"
end
end
end
end
```
**template.source** はテンプレート(app/views/issues/index.api.rsb など)のソースコードを返しているので、pluginからself.callを横取りすれば任意の別のテンプレートを差し込めるっぽい。
どのコントローラ/アクションのテンプレートを呼び出しているかは **template.virtual_path** を見ればいいっぽい。
まだ試したわけじゃないんでそのうち試す。
+
+## template.sourceを直接いじるには?
+
+Redmineのプラグインテンプレートである.rsbをコピーして改変したものをプラグイン側にもたせておくのはあまりスマートでない気がする(コードを流用するとなるとRedmineのライセンスに従わないといけないとか; まあMITライセンスなのであんま問題にならないけど)んで、文字列で渡されるテンプレートのソースコードをコードから変更する案。
+
+[Ripper](http://i.loveruby.net/w/RipperTutorial.html)でAST(抽象構文木)が取得できるので、template.sourceをASTに変換して、ASTをいじってソースコードに変換すればよさそう。
+ASTからソースコードへの再変換は[sorcerer](https://github.com/jimweirich/sorcerer)が使えるっぽい。
+
+* http://www.todesking.com/blog/2014-04-29-highlight-ruby-local-variables-in-vim/
+* http://stackoverflow.com/questions/4878032/how-would-i-recompile-rippers-ast-back-to-ruby-code
+
+こちらに関してもまだ一切何も試してない。