2012年2月22日水曜日

giter8でprivate repositoryにアクセス

Readme腐ってる

Linux,Macなら、
http://help.github.com/set-your-user-name-email-and-github-token/
の通りに設定すればOK

Windows環境はgit.exeにパス通していれば、同じ設定を行えば良いが、
そうでない場合は
GITHUB_USERとGITHUB_TOKENの環境変数を定義してあげればOK

2012年2月14日火曜日

scalaで簡単Proxyクラス実装。

ProxyデザインパターンやDecoratorデザインパターンを使いたいことがよくあると思いますが、いちいちすべてのメソッドを実装するのはめんどくさいですよね?
そんな時に便利なscalaの実装を紹介


class User(var id : Long,var name : String,var gender : Int)

class ProxyUser(private val user : User){
def name : String = if(gender == 1) "Mr. " + user.name else "Ms. " + user.name
}

object ProxyUser{
implicit def toUser(proxyUser : ProxyUser) = proxyUser.user
}



Companion objectにimplicit conversionを指定しておくだけで完了。
あとは、ProxyしたりDecorateしたりしたいメソッドを定義してやるだけでOK。

使い方はこんな感じ

val pu = new ProxyUser(new User(1,"Taro",1))

println("ID:" + pu.id)
println("name:" + pu.name)
pu.name = "Joro"
println("name:" + pu.name)

> ID:1
> name:Mr. Taro
> name:Mr. Jiro

2012年2月13日月曜日

Squerylでunion

scalaのO/R mapperのSquerylでunionを行う方法

複合Keyとかでin句が使えない場合のunion構文の実装方法のメモ

Queryクラスのunionメソッドを使います。



val table = Table[CompositeKey2Object]

val ids = List( (1,2),(1,3),(2,5) )

inTransaction{
def toQuery( id : (Int,Int) ) = {
from(table)(t => where( (t.pk1 === id._1) and (t.pk2 === id._2)))
}
ids match{
case id :: tails => {
ids.foldLeft(toQuery(id))( (query,id) => query.union(toQuery(id))).toList
}
case _ => Nil
}
}