ScalikeJDBCでDDD的な
大したことではないのだけど、便利そうだったのでメモ。
Long値である従業員IDを明示的に型として保持したいニーズがあるとして、こんな case class
があったとする。
case class EmployeeId(value: Long)
SQLのWHERE句を組み立てる際、下記の様になる
val where = sqls.eq(Employees.e.employeeId, employeeId.value)
この .value
がちょっと煩わしいなと思っていたのだけど、下記のような implicit conversion
を定義しておくと
implicit val intParameterBinderFactory: ParameterBinderFactory[EmployeeId] = ParameterBinderFactory{ id => (stmt, idx) => stmt.setLong(idx, id.value) }
こんな風に書けた。
val where = sqls.eq(Employees.e.employeeId, employeeId)
あくまでも自分へのメモw
knotfestおしまい
主催のslipknotは、僕の中で好きなバンドランキングで現在2位のバンドで、人生2回目のライブ参戦。
バンドが大きくなりすぎて、ライブ1つやるのも壮大な調整が必要だそうで、次に日本でライブしてくれるのは何時になるかわからず(メンバー一人亡くなっちゃったし)。
なので、嫁ちゃんにお願いして参戦してきました。
最前列まで行き、メンバー一人一人を間近で見れて、本当に楽しかった。
メールアドレスをあらわす正規表現について
今日、個人的に信じていたメールアドレスの正規表現に穴があった。
どういうものかというと、
input type=email – e-mail address input control (NEW) - HTML5 で仕様とされている
\b[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\b
が、RFCが策定しているメールアドレスの形式に違反した形である foo.baa.@domain.co.tokyo
という形式(※アットマークの前にドットが存在する)に合致してしまう問題。
なので、少し手入れしてこんな感じに...
[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(?!\.).@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*
ちなみに、
^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(?!\.).@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*
とすると、foo..baa.@domain.co.tokyo
も弾いてくれる。
ただ、コレが絶対的に正しいのかというと自身なし。
メールアドレスを表す正規表現は、多分、永遠の課題なのかもしれない...。