以前、RedMineのwikiをコマンドラインから更新する記事を書いた。
前回までの記事はコマンドラインからの更新だった。
今回はRubyからの更新を試してみた。
前回はRESTのバグ?仕様?に悩まされたので、環境をメモっておく。
Redmine : 3.0.0.stable
Ruby : 2.2.1-p85 (2015-02-26) [x86_64-linux-gnu]
前回までの記事はコマンドラインからの更新だった。
今回はRubyからの更新を試してみた。
前回はRESTのバグ?仕様?に悩まされたので、環境をメモっておく。
Redmine : 3.0.0.stable
Ruby : 2.2.1-p85 (2015-02-26) [x86_64-linux-gnu]
これまでの記事にあった、コマンドからの更新ではXMLを書かなくてはいけないのが苦痛だった。
今回はRubyを使うので、XMLの整形周りについてはライブラリを使用できるので楽ちんだ。
やることはコマンドラインと対して変わらない。
コードは以下の通り。
XML作成にxmlmarkupというライブラリを使用した。
読み込ませたtest_page.textileにはpreタグなどもありどうなるかと思ったが、ちゃんとエスケープしてくれた。
test_page.textile サンプル:
生成したxml_objをputsしてみると、以下のようになっていた。
RedmineのWikiは便利だが更新するのが面倒。だが、Jenkinsと連携すればファイルリストやUsage、ちょっとしたコードの解析結果などを任せることができそうだ。
今回はRubyを使うので、XMLの整形周りについてはライブラリを使用できるので楽ちんだ。
やることはコマンドラインと対して変わらない。
コードは以下の通り。
#!/usr/bin/ruby require 'net/http' require 'uri' require 'builder/xmlmarkup' # 個人設定 api_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' project = 'test_project' page = 'test_page' textile = File.open("test_page.textile","rb").read # 共通設定 url = 'http://localhost/redmine/projects/'+project+'/wiki/'+page+'.xml' # XML作成 xml_obj = '' xml = Builder::XmlMarkup.new(:target=>xml_obj, :indent=>0) xml.instruct! xml.wiki_page{ xml.text("\n"+textile) } # REST uri = URI.parse(url) Net::HTTP.start(uri.host ,uri.port) do |http| request = Net::HTTP::Put.new(uri.path) request.set_content_type('application/xml') request['X-Redmine-API-Key'] = api_key request.body = xml_obj response = http.request(request) end
XML作成にxmlmarkupというライブラリを使用した。
読み込ませたtest_page.textileにはpreタグなどもありどうなるかと思ったが、ちゃんとエスケープしてくれた。
test_page.textile サンプル:
<pre> Usage: hoge_create [options] ほげほげ </pre>
生成したxml_objをputsしてみると、以下のようになっていた。
<!--?xml version="1.0" encoding="UTF-8"?--><wiki_page><text> <pre> Usage: hoge_create [options] ほげほげ </pre> </text></wiki_page>これでtextileをRuby内で生成し、一気にWikiへ反映させることができそうだ。
RedmineのWikiは便利だが更新するのが面倒。だが、Jenkinsと連携すればファイルリストやUsage、ちょっとしたコードの解析結果などを任せることができそうだ。