XMLをCSVに変換するツール xml2csvを作りました。

XMLをCSVに変換するツールxml2csvを作りました。
JUnitのXMLをCSVに変換する処理書いていて、これは汎用的にできるなーってことで、Goの勉強も兼ねて書きました。

マッピング情報を元に、XMLからCSVに変換します。

$ xml2csv -i input.xml -m mapping.json -o output.csv
Usage of xml2csv:
  -b    CSV with BOM
  -h    Help
  -i string
        XML input file path or directory or url
  -m string
        XML to CSV mapping file path or url
  -o string
        CSV output file path

マッピング情報は下記のような感じです。
XPathを使って行の一覧と各カラムを指定するようなイメージです。

{
    "rowsPath": "//item",
    "columns": [
        {
            "header": "title",
            "valuePath": "/title"
        },
        {
            "header": "link",
            "valuePath": "/link"
        },
        {
            "header": "description",
            "valuePath": "/description"
        }
    ]
}

マッピング情報の各項目の説明は、下記をご参照ください。

実行ファイルは下記からダウンロードできます。

特定ユーザに対して一部管理者メニューを非表示にする(Redmine View Customize Plugin)

特定ユーザに対して一部管理者メニューを非表示にしたいといった要望です。(2つあって、2つ目の方)

一律非表示ならば、CSSで出来るのですが、特定ユーザに対してのみ適用したいのでJavaScriptで書く必要があります。

以下のサンプルでは、ユーザID:10のユーザに対して、ワークフロー、選択肢の値、設定の3つを非表示にしています。

設定内容

  • Insertion position: Head of all pages
$(function() {

  // user_id = 10 に対して非表示に
  if (ViewCustomize.context.user.id == 10) {

    $('li:has(a[href="/workflows/edit"])').hide();  // Workflow
    $('li:has(a[href="/enumerations"])').hide();    // Enumerations
    $('li:has(a[href="/settings"])').hide();        // Settings
  }
});

動作

左がユーザID:10で、右がその他のユーザです。

f:id:onozaty:20200921224717p:plain

特定ユーザを削除、ロックできないようにする(Redmine View Customize Plugin)

初期ユーザ(user_id=1)を、削除やロックできないようにしたいという要望です。(2つあって1つ目の方)

ボタンを非表示にするだけなので、CSSで対応します。

設定内容

  • Insertion position: Head of all pages
a[data-method="put"][href="/users/1?user%5Bstatus%5D=3"],
a[data-method="delete"][href^="/users/1"] {
  display: none;
}

動作

ユーザ一覧で表示されていたロック、削除ボタンが、

f:id:onozaty:20200920233656p:plain

下記のように非表示になります。

f:id:onozaty:20200920233515p:plain

また、ユーザの詳細画面でもボタンが消えます。

f:id:onozaty:20200920233623p:plain

Redmine Japan 2020 で「Redmineの画面をあなた好みにカスタマイズ – View customize pluginの紹介 –」というタイトルで発表しました

Redmine Japan 2020というイベントでView customize pluginについて発表しました。

資料はこちら。

まつもとさんの基調講演、前田さんの招待講演と続いて、いろいろな方々の経験にもとづく話が聞けて良かったです。
仕事があったので、自分の発表が終わったら抜けたのですが、ほんと最後まで聞けなくて残念でした。

自分の発表は、時間がギリギリになってしまったため、最後かなり巻きになってしまいました。時間配分考えて臨んだつもりが、、今回の失敗は次に生かそうと思います。
今回の発表でView customize pluginに興味持っていただいた方が一人でもいらっしゃったらうれしいです。

ありがとうございました。

JUnitの結果をCSVファイルに変換するツール(junit-xml2csv)を作りました

JUnitの結果を一覧で見たいなーってことで、CSVファイルに変換するツールを作りました。遅いテストを探すのに、EXCELでソートしたかったからです。

JUnitの結果XMLファイルが配置されているディレクトリ(Gradleだとbuild/test-results/testとか)と、出力ファイル名を指定すると、XMLファイル読み込んでCSVに変換します。

こんな感じのCSVになります。

TestSuite: Name,TestSuite: Timestamp,TestCase: ClassName,TestCase: Name,TestCase: Time,TestCase: Result
com.github.onozaty.junit.xml2csv.TestCase1,2020-08-28T04:39:49,com.github.onozaty.junit.xml2csv.TestCase1,test1,0.0,PASSED
com.github.onozaty.junit.xml2csv.TestCase1,2020-08-28T04:39:49,com.github.onozaty.junit.xml2csv.TestCase1,test2,0.0,FAILURE
com.github.onozaty.junit.xml2csv.TestCase1,2020-08-28T04:39:49,com.github.onozaty.junit.xml2csv.TestCase1,test3,0.001,ERROR
com.github.onozaty.junit.xml2csv.TestCase1,2020-08-28T04:39:49,com.github.onozaty.junit.xml2csv.TestCase1,test4,0.0,SKIPED
com.github.onozaty.junit.xml2csv.TestCase1,2020-08-28T04:39:49,com.github.onozaty.junit.xml2csv.TestCase1,test5,0.002,PASSED
com.github.onozaty.junit.xml2csv.TestCase2,2020-08-28T04:39:50,com.github.onozaty.junit.xml2csv.TestCase2,test1,0.0,PASSED
com.github.onozaty.junit.xml2csv.TestCase2,2020-08-28T04:39:50,com.github.onozaty.junit.xml2csv.TestCase2,test2,0.002,FAILURE

View customize の redmine.org でのURLが変わりました

redmine.org には、プラグインの情報を登録できる仕組みがあります。 登録したものは、下記で公開されます。

プラグインには、Identiferというプラグインを一意に表す識別子があり、上記サイトでもIdentiferを入力し、それがURLになるようになっています。

また、このIdentiferの情報を使って、インストール済みのプラグインの更新をチェックする仕組みがあります。

f:id:onozaty:20200825224858g:plain

で、本日下記のようなIssueをいただきました。

View customizeは既に登録済みなのに、なんでこんなIssueがあがるんだろう、、って思って確認したところ、redmine.orgに登録していたIdentiferが間違えていることに気が付きました。 view_customizeとすべきだったのがredmine_view_customizeになっていました。。

プラグイン側を変えるわけにはいかないので、redmine.orgに登録していたIdentiferを修正しました。これによってredmine.orgでのURLも変わることになりました。

redmine.org側にリンク張っていた方がいたら申し訳ありません。。

チェックボックスがチェックされたらテキストボックスを無効にする(Redmine View Customize Plugin)

上記の問い合わせに対応したサンプルコードを書いてみました。

チェックボックスをチェックしたら、テキストボックスを無効化します。

設定内容

  • Insertion position: Bottom of issue form
$(function() {

  const checkbox = $('#issue_custom_field_values_1');
  const text = $('#issue_custom_field_values_2');

  function changeEnableText() {
    text.prop('disabled', checkbox.prop('checked'));
  }

  checkbox.on('change', changeEnableText);

  changeEnableText();
});

動作

f:id:onozaty:20200823231739g:plain