[Ruby] Backlog の課題を擬似的にインポートする

先人のコードを参考に目的はすぐに達成できたのですが、いろいろいじくりまわしながら ruby の勉強をしてました。
忘れないうちにひとまずまとめておきます。

きっかけ

  • 他のプロジェクトの課題を、別のプロジェクトにインポートできないか。
  • 課題の検索画面でダウンロードできる .csv ファイルを登録できればよい。

2014-06-03_2.png_01

どうやらインポート機能は無いよう。

API と CSV を確認

無料版をほぼ一人で使ったことしかないので、そういう用途を満たせるか確認してみる。

API

こんな手順で API を使えば、疑似インポートできるのではないか。

  1. backlog.createIssue … 課題を作成
  2. backlog.updateIssue … 完了理由とコメントを追加
  3. backlog.addComment … さらにコメントがあれば追加
  4. backlog.switchStatus … 状態(完了ステータス)を変更

CSV

API Method と CSV の項目を照らし合わせるとカバーできそう。

  • 必須項目でないものを () で記載。
  • 対応しない項目は取り消し線を書き加えた。
API MethodcreateIssueupdateIssueaddCommentswitchStatus
1ID
2プロジェクトIDprojectId
3プロジェクト名
4キーID
5キーkeykeykey
6種別ID
7種別(issueType)
8カテゴリーID
9カテゴリー名(component)
10バージョンID
11バージョン(version)
12件名summary
13詳細(description)
14状態IDstatusId
15状態
16優先度ID
17優先度(priority)
18マイルストーンID
19マイルストーン(milestone)
20完了理由ID(resolutionId)
21完了理由
22担当者ID(assignerId)
23担当者
24作成者ID
25作成者
26作成日
27期限日(due_date)
28更新者ID
29更新者
30更新日
31添付
32共有
33コメント1(comment)
34コメント2content ※

※ 以降、コメントがあれば行が増える。

補足

一工夫いりそうなところ。

2014-06-03_2.png_02

  • projectId が、管理画面からすぐに把握できないのでキーから取得する。
  • due_date は、取り得る値 "" を API を通しては受け付けなかったので処理を分ける。
  • 課題種別、バージョン、カテゴリー名、マイルストーンは、インポート先に存在しないものを事前に作成しておく。
  • assignerId は、存在しない担当者の作成まで含めると複雑になりすぎるのでやめる。

コード

というわけでまとめました。

課題

他にいろいろやらなければならない・力尽きた・まとめないと光の速さで忘れてしまうので、今後やる(かもしれない)ことをとりあえず書いておく。

  • テストがないので勉強してつける。
  • config ファイルの持たせ方と読み込み方がよく分からないので他を参考に勉強する。
  • assignerId が存在すれば、登録する機能があった方が便利かな。
  • NKF.guess では、Shift_JIS の亜種、CP932 が判別できないのか。
  • 件名が全角空白だけのデータがありえて、UTF-8内部変換で空になってエラー。
  • バージョン、カテゴリー名、マイルストーンの複数選択時の登録に対応していない。