テーブルの項目(アンダーバー区切りの文字)をキャメルケースに変換
テーブルの項目が多くてJavaのフィールドを書くのが面倒なので、項目の定義からJavaのエンティティクラスを生成するRubyのスクリプトを作ってたんだけど。。アンダーバー区切りの項目名をキャメルケースにするのをどうするのか分からなかったので、適当に作ってみた。
まず、テーブル項目の論理名と物理名がかかれたCSVを用意する。ファイル名はテーブル名をキャメルケースにしたものでこの場合「UserEntity.csv」としておく。
"ユーザ名","user_name" "メール","mail_address"
このCSVからJavaクラス(というか.javaファイル)を生成するスクリプトは「gen_entity.rb」とする。
require 'csv' CLASS_NAME = 'UserEntity' open("#{CLASS_NAME}.java", "w") {|dest| dest.write("package sample.entity;\n\n") dest.write("import sample.entity.Entity;\n\n") dest.write("public class #{CLASS_NAME} extends Entity{\n\n") CSV.open("#{CLASS_NAME}.csv", 'r') do |row| logical_name = row[0] # アンダーバー区切りで単語を分割 name_array = row[1].split('_') # 配列の2つ目の要素以降の先頭文字を大文字にする name_array[1,name_array.size].each {|v| v[0..0] = v[0..0].upcase } if name_array.size > 1 # 配列の単語を結合 phys_name = name_array.join dest.write("\t/** #{logical_name} */\n") dest.write("\tprivate String #{phys_name};\n") end dest.write("}") }
これを実行すると「UserEntity.java」が以下のような内容で出来上がる。
package sample.entity; import sample.entity.Entity; public class UserEntity extends Entity{ /** ユーザ名 */ private String userName; /** メール */ private String mailAddress; }
正規表現とか使ってキャメルケースにしようかとたくらんでたんだけど、ダメだった。(_ _)zzかっこわるい。