肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

node.js で Redmine の REST API を扱う node-redmine つくりました

RedmineAPI をごにょごにょしたいことが多いんだけど、毎回 PHP ってのも芸が無いので年始の休みのときに遊びはじめてみた node.js / JavaScript のモジュールにしてみた。


何でもある npm になかったので、node.js の練習がてら作ってみました感じです。この記事ではバージョン0.2.0 です。
まだ作ってみたばっかで全然使ってないから API とかは変わるかもしれません。すいません。

インストール

npm だと、

$ npm install redmine

です。それ以外の方法はよく知りません。

使い方

example においてあるけど、

var Redmine = require('redmine');

var redmine = new Redmine({
  host: 'vivid-winter-3808.heroku.com',
  apiKey: 'xxxxxxxxxxxxxxxxx',
});

redmine.getIssues({project_id: 1}, function(err, data) {
  if (err) {
    // error
    console.log("Error: " + err.message);
    return;
  }

  console.log(data);

  // { offset: 0,
  //   total_count: 3,
  //   issues:
  //    [ { updated_on: '2012/01/13 03:18:30 +0900',
  //        priority: [Object],
  //        status: [Object],
  //        tracker: [Object],
  //        project: [Object],
  //        description: 'Test issue description',
  //        subject: 'This is test issue on 1326392307929',
  //        done_ratio: 0,
  //        created_on: '2012/01/13 03:18:30 +0900',
  //        start_date: '2012/01/13',
  //        author: [Object],
  //        id: 3 },
  // ...
});

的な感じ。
久々に Redmine の REST API 調べてたら Issues 以外にも API 増えてたから必要に応じて対応しようかな。
とりあえず Issues しか対応してないです。

APIとか

Redmine.getIssues(criteria, callback)
Redmine.postIssue(issue, callback)
Redmine.updateIssue(id, issue, callback)
Redmine.deleteIssue(id, callback)

いやこれやすいか微妙だからすぐかえるかも。なんたって 0.2.0 だから...。

なんとなく、

Redmine.issue.get(criteria, callback)
...
Redmine.issue.delete(id, callback)

とかのほうが使いやすいのでは(というか他のAPIに対応するため)、という気がしている。

まぁ適当にアップデートします。

その他

  • RedmineAPI テスト用に初めて heroku 使ってみたけど、すごいですね。やっぱりよくできてますね。
    • テスト用サイトはこちらですが、添付ファイルの永続化とかしてないし本番用に使う気はないのけど、とりあえずうごいている
  • node.js のパッケージもはじめて作ったけど簡単ですね。
    • npm publish で公開できるのはすごい。PHP でもこういう感じに簡単にしたいなあ。
  • test は見よう見まねで書き始めたけどちゃんと書きます書きます
  • node.js 楽しいです


参考にしたものたち:

Redmine で Wiki 内に画像っぽいリンクが含まれていたら画像に展開する

世間ではアドベントカレンダーが大流行の昨今ですがちまちまRedmineネタとかなんですけど皆様いかがおすごしでしょうか。

なんでこれてブログ書こうと思ったのかわからないほどの小ネタだけど、こういうネタを適当にブログに書いていくということは大切だと思いました。
最近適当にTwitterとかでつぶやいて満足してしまっていますね。

Redmine の Wiki に画像っぽいリンク

Wiki、というか、チケットの説明文本文とかなんですけど。
チケットに画像の添付とかって、もはや面倒じゃないですか。

スクリーンショットとって、それをローカルに保存して、チケット作成画面から、アップロードとか...

そんなものは最近でいうと、Gyazoとか、社内用Gyazo とかで URL で投げ合っているので、ぱっと撮ってぱっと張る、が一番楽だとおもうのです。
というわけで、 ****.png とかがチケットの説明文にあったら、img タグにしてほしいなーとおもいました。

theme の JavaScript を読みこませる

このへんのことよしなにやってくれるプラグインがあると良いのかもしれないけど、いやプラグインとか面倒だしそんなもの JavaScript でいいよねってことで、theme の JS に仕込んでしまうことにします。
久々に Prototype.js 使いました。相変わらず Prototype 拡張しまくってますね!

theme 用の JavaScript は、バージョン 1.?? から、 theme のディレクトリの javascripts/theme.js に置けば読み込んでくれるようになったらしいので、そのファイルを作ります。
で、その中に↓みたいなかんじのことを書いておきます。自分で適当に枠とか CSS をあてたかったので、class も指定しておきました。

document.observe("dom:loaded", function(){
    $$('#main div.wiki a').each(function(name, index){
        var link = name.readAttribute('href');
        if (link.match(/\.(gif|jpg|jpeg|png)$/i)) {
            var imgElm = new Element('img', {src: link, 'class': 'wiki-image'});
            name.insert({
                after: imgElm
            });
        }
    });
});

中身がないので以上

すごく小さなことですが、これだけで相当便利になりました!めでたし