関西Ruby会議04を無事開催できました。

2011 年 11 月 14 日 Aki コメントはありません

とっても楽しい地域Ruby会議だった。やはりこれです。

楽しくて、だけど難しい事もあって、かけがえのない体験をもたらす地域Ruby会議。
それぞれが望んで頑張った分だけ、何かの気付きを与えてくれる。
それが 地域Ruby会議なんでしょうか。

会議のテーマなど

今回の関西Ruby会議04 で
お話いただくスピーカーを考えている時には
「自分たちが聞きたいと思うスピーカーを呼ぼう」
でした。これは間違いありません。
なので会議自体のテーマも
「自分たちが楽しいと思える事をする」
がテーマのようなものでした。

当たり前の事ですが、やはりこれを原点にしなければ
なにもまとまる気がしなかったので、
これを一つの指標にしました。

開催してみて

すべてのお話が楽しいものでしたし、演奏会(!?)も楽しいものでした
最後まで笑いが絶えない会議になったのは本当に嬉しい事です。
会場で笑いが起こる度に感じる一体感。
ここに居る事が気持ちがいいと思える事にはとても貴重な体験でした。

# 実際に聞きたい話はまだまだたくさんあったのですが、
# それはまた今後の機会を作らせていただきます。
@kakutani さん

個人的な感想

そして個人的な感想を言わしてもらえれば、
懇親会で島田さんとお話しをさせていただいた時に
シンパシーのようなものを感じました。
お話をしたわずかに10分くらいなかで
得られたこのなんとも形容しがたい感覚はすごく心強い”何か”で。
例えば同志感みたいなものなのかなぁ
この気持ちは今後も自分の中に根付いていくんだという気がしました。
Big4?

それから同じく懇親会でじゅーんさんとお話させていただいたのもすごく印象的でした。
特に自分の気持ちにすごく正直でいるんだなぁと。
これって簡単なように聞こえますけど、すごく難しい事です。
気持ちに正直でいる事は見えない部分ですごく頑張らないといけないはず。
それも人に見せずに。です。誰かはきっと自分の事をわかってくれているという
信頼感とかがないと貫き通すのは難しいんじゃないかなと思うくらいに。
たとえば
自分の気持ちにまっすぐ向き合ってないと、
自分の尊敬する人に顔向けできなくなるって信じてる。
そんな自分はイヤだから、大好きな人達にあえなくなるのはイヤだから
だから頑張るって事です。
@june29さん
こういう静かな。だけど強い気持ちを持っている人と
お話ができた事は嬉しい事です。気持ちの株分けをしてもらったような
そんな感覚です。これからの自分の行動が試されるようなそんな怖さも
ありますが、私もじゅーんさんとあえなくなるのはイヤだし、
頑張りたい!!

それから jugyoさん。
発表でもコンプレックス的な話がありましたが、私の今までの経験からくる
共感した部分や、それに対する jugyoさんの話も面白かったです。
誰だって最初からスゴイわけじゃないからそれでいいんだよ。
的な話を聞けて少し焦りみたいなものは解消された気がしました。
だけど怠けずにコツコツとやっていきたいなぁと思いました。
もちろん楽しむ事を第一にね !
@jugyoさん
@jugyo

それ以外では色々とバタバタしちゃってたっぷりとお話するまでには
ならなかったかなぁ。まずは初めましての人が多かったので、次にまた
突っ込んだ話をしていきたいです。
懇親会で共通項発覚!
スピーカーの皆様や、演奏者について感じた事やまとめたい事は
また今後のblogやるびまに掲載される予定の地域Ruby会議リポートに
譲る事にしておきます。

実行委員として

開催に向けた作業は
すべてがうまくいっていたわけではなかったかもしれません。
揉めた部分やうまく進まなかった部分もありました。
でもやり方がよくなかった部分はKPTを出して話合って
よりよい方向を模索すればよいだけの事なのかなと思います。

この地域Ruby会議を開催するにあたって、
実行・運営に関われる役割をまかせてもらえた事は
すごく光栄でしたし、貴重な体験をさせてもらったと思います。
また協力していただいたRubyistや遠方からお越しいただいた皆様には
感謝してもしきれないくらい。とても感謝しています。
本当にありがとうございました。

photo by @iR3

この体験を踏まえて、今後自分がどう進んで行くか
なにを成していくのかはまだまだわからない所ではありますが、
ここで感じた事をしっかりと芯に刻み込んで進んで行きたいと思います。

カテゴリー: 未分類 タグ:

最初で最後で最高のRuby会議

2011 年 7 月 24 日 Aki コメントはありません

Ruby会議2011 オワタ。

2006年から続いた 7回目の Ruby会議
私にとって最初で最後の Ruby会議
最高の Ruby会議

行くまでは、自分が発表するわけでもないのに、なぜか緊張していたんですが、
言ってみたら楽しくて楽しくてあっと言う間。

今の私にとってはまだまだ難しくて分からない話も多かったのですが、
参加していないと分からない何かを感じました。(リアル参加、エア参加問わず)
# この何かを整理する為にブログに書く。つもりだったのですが、
# どう整理したらいいのかやっぱりまだよくわかりません。
# Rubyの楽しさを説明しようとして失敗する系なんでしょうか…

3日間のアウトラインはこんな感じ
・開幕

・スーツ姿のAaron さんによる基調講演とやけに凝った作りの爆笑Movie
( この方がうわさのたこ焼き仮面作者かぁと妙に感心 )

Aaron Patterson氏の力作PV

Aaron Patterson氏の力作PV

・プロポーズの儀

プロポーズの儀

最初で最後のプロポーズRuby会議

・闇ルビヰ會議2011 (この写真だけでも機関に狙われてしまうかもしれない…)

闇ルビヰ會議2011

闇ルビヰ會議2011 (LTの際は借り出されて横でボケッと突っ立ってました。オモシロイ事できなくてごめんなさい…)

・懇親会 数百人すべての人がRubyist という特殊な状態
# ぱーりぃと呼ぶにふさわしい雰囲気
普段はなかなか会えない人と会えたのがすごく嬉しかったです。
まつもとさんやかずひこさんと少しお話できたのは特に印象的でした。
大した内容の事はお話してないんだけれど、それでも。

2日目懇親会会場

懇親会会場 ( 広い !! 人数多い !! これで半分くらい)

・サイン会を通じての著者との交流
実は無謀にもアジャイルサムライの翻訳レビューに応募してたのですが、見事に落選したのです。
落選しても泣かない。「見逃しよりも三振」の精神でしたが、N個の理由はちょっとしょぼすぎて申し訳ありませんでした。

・まつもとゆきひろ氏による基調講演と30分超えの質疑応答

・閉幕

閉会の辞

閉会の辞 (感極まって…)

スタッフご挨拶

スタッフご挨拶 (会場はスタンディングオーベーション !!)

などなど。私にとっては初めての事づくし。
また、メインセッションとLTの方々からは色んな学びと感動を得たのですが
正直まだ消化しきれてないです。ひとつひとつのセッションをスライドで振り替って
調べながら復習しないとですね。

あと各所で色んな方がコミュニティのあり方について言及していますが、
その事についても考えさせられました。
以前、高橋会長もコミュニティについての考えをblogかるびまかで触れていたように思います。

いままでのコミュニティ活動で学んだ経験からも踏まえて思った事は
・一部の人間に負荷がかかるとコミュニティとして好ましくない
(当事者が負担と思うかどうかはみた別の問題のような気もします。)
・「所属しているだけの人」がいる状態はコミュニティとは言い難い
みんなが集まって参加している状態がコミュニティなのかと。

# そういえばアートオブコミュニティも早く読まなければ…

なにより、今回強く思ったのは、
「みんな楽しそう」
「みんな楽しい人」
って事ですね。この”楽しい事”、”楽しむ事”からすごいパワーが
生まれてるんだなぁって感じました。
こんな事が毎年行われてたのかという感嘆と、
これがスタッフの惜しみないボランティアで支えられているのか!! と思うと
本当にコミュニティが生み出すパワーってすごいなと思います。

今後のコミュニティ活動に活かしていきたいです !!
ありがとうみんな !!

詳細は下記が詳しいです。一日ごとにしっかりとしたリポートがその日のうちに更新されてました。
kaigifreaks すごい !!

[参考]
レポート:RubyKaigi2011 スペシャルレポート|gihyo.jp … 技術評論社

[写真]

喫茶自由で話し込むRubyパパと会長

喫茶自由で話し込むRubyパパと会長

The Gate / 角谷 信太郎

The Gate / 角谷 信太郎

Thank you Ruby Kaigi !

Thank you Ruby Kaigi !

カテゴリー: 未分類 タグ:

fixtures yaml をDBにロードする方法

2011 年 5 月 12 日 Aki コメントはありません

# 毎回検索したりしてるのでメモ 
rake db:fixtures:load
test/fixtures に配置した テーブル名.yml(yaml形式で記述されたデータ定義) ファイルをDBに登録する。

 
テーブル名指定

FIXTURES=x,y
 
ex. rake db:fixtures:load FIXTURES=x,y

 
サブディレクトリ指定 (test/fixtures 以下でサブディレクトリを切ってデータを分ける場合など)

FIXTURES_DIR=z
 
ex. rake db:fixtures:load FIXTURES=x,y FIXTURES_DIR=z

 
ディレクトリ指定 (test/fixtures 以外でパス指定する場合)

FIXTURES_PATH=spec/fixtures
 
ex. rake db:fixtures:load FIXTURES=x,y FIXTURES_PATH=spec/fixtures

   

Load fixtures into the current environment’s database. Load specific fixtures using FIXTURES=x,y. Load from subdirectory in test/fixtures using FIXTURES_DIR=z. Specify an alternative path (eg. spec/fixtures) using FIXTURES_PATH=spec/fixtures.

カテゴリー: Development タグ: ,

cucumber で javascript テスト

2011 年 5 月 11 日 Aki コメントはありません

cucumber で javascriptテストなどをする場合はシナリオごとに @javascript タグを付ける。
テストを実行するとなんらかのWebDriver (デフォルトはselenium) がブラウザを起動して
テストを実行するわけだが、alert や confirm が邪魔になる場合がある。
これらの確認をする必要がない場合は単純に alert や confirm を上書きして
なんの挙動もしないようにしてしまえば良い。

さらに web_steps_ja.rb に利用部品として書いて好きな時にユーザが呼び出せるようにしてしまえば良いかな。

web_steps_ja.rb

module NotificationHelpers
  def ignore_notification(page)
    page.evaluate_script("window.alert = function(msg) { return true; }")
    page.evaluate_script("window.confirm = function(msg) { return true; }")
  end
end
World(NotificationHelpers)

前提 /^通知を無視する$/ do
    ignore_notification(page)
end

test.features (サンプル)

     @javascript
     シナリオ: 〜〜〜を登録する
     前提     ログイン名が"xxxxx"、パスワードが"yyyy"のユーザでログインしている
     前提     "〜〜〜登録"ページを表示している
     前提     通知を無視する

     〜以下任意のテスト〜

     もし         〜をクリックする
     ならば     〜が表示されていること

#上記テストを実行するとブラウザが勝手に起動してテスト動いていくので selenium に免疫のない人はびっくりしないように :-)

カテゴリー: Development, Ruby タグ: , , ,

kanasan.coffee に参加しました

2011 年 5 月 10 日 Aki コメントはありません

kanasan.coffee に参加しました。

ハッシュタグは #kanasancoffe
最後に決まったので、実況はあまり上がってないかもしれません。
まとめは見つかるハズ。

私的には実は最後のサンプルコードレビューが一番参考になったと云う感じ。
まだまだ理解できてないと云う事です。でもほんとに RubyとかPythonっぽく書けるってのは嬉しい。
書こうと思うまでの敷居を下げる(拒絶反応を少なくする)って事だけでも、この功績はすでに大きいと思う。
まだどうなっていくのかわかりませんが、楽しみです。

CoffeeScriptの文法について by ujihisa

  • 文法は Ruby や Python ライク
  • CoffeeScriptの文法は実際難しい事はなくて、javascript理解してる人だったら数時間で使えるようになるよ
  • CoffeeScriptとjavascript は 1:1
  • http://jashkenas.github.com/coffee-script/ の TRY COFFEESCRIPT で実際に動かしての紹介

VimとCoffeeScriptの連携について by ujihisa

  • vim で shadow.vim 使うと便利だよと云うお話。
  • shadow.vim では たとえば a.js.sha ファイルがテンプレみたいな位置づけで頭の一行を実行して a.jsファイルとして保存できる仕組み(かな?) 。ユーザは .shaファイルを意識する必要なし。コミットする時は a.js をコミットすればいいと。
  • hootsuite でも絶賛広め中らしいw

Node.JS on Windows by cuzic

  • node.js を windows で使うための方法
  • node.js オススメパッケージ紹介 (coffee-script, underscore, zombie, meryl, connect)
  • no.de の紹介 node.js の開発元が提供するクラウドサービス (heroku みたいなもの)
  • 発表資料 Nodejs on windows http://slidesha.re/iH9Laf

CoffeeScriptを使ってTitaniumでiPhoneアプリを作る by deguchi

  • CoffeeScript を利用してつくったサービス http://www.caffein.tv/ の紹介
  • Caffein というサービス名なら CoffeeScript 使うしかないとw
    CoffeeScript 使うための確信犯的な根回しw
  • http://a-h.parfe.jp/einfach/archives/2011/0106235955.html

Node.JSのモジュールシステムについて by nanki

  • タイトル改め、「Node.jsは怖くない! 」
  • さっそく、 jasmine で BDD しよう!
  • prototype.js trancate関数のテストをjasmineで書いて、実装をCoffeeScript でやってみよう !! (hands on)

飛び入りでCaffeeScriptのサンプルコードをレビューしてみよう by yhara

  • http://jashkenas.github.com/coffee-script/ の overview をすべてレビュー
  • みんなで試しながら話し合いながら
  • これ最初にやるべきだった?w
  • 3項演算子がないのは残念。なんでだろう?
カテゴリー: 未分類 タグ:

Vim勉強会#7

2011 年 5 月 8 日 Aki コメントはありません

Vim勉強会#7 に行ってきました。

「vimはスポーツ!」と云う意味なのか cotocoto のキーワードに スポーツ系のキーワードが入っていた vim勉強会#7
みなさんユニークで楽しいですね。vim使いになってわずか数日の私にとって、どれも貴重なお話でした。

「おすすめVimプラギンをいくつか紹介」 by ujihisa

帰国中の @ujmによるプラギン紹介。
# 参加者のほとんどが Macユーザだったのですが、誰一人旧MBAir VGAケーブルを持っていないという事態に。@ujm がvimを操ってる姿見たかったなぁ。また次回が楽しみです !!

  • quickrun
  • 表示中のコードを実行して出力結果をバッファに表示できます。
    thincaさん ujihisaさん作のプラギン。

  • vimshell
  • Vimからシェルを起動するVimScript
    :! コマンドとは違って非同期実行可能

  • unite.vim
  • 候補一覧からアイテムを選択しアクションを実行するプラギン
    unite-outline, unite-grep と併用するとさらにgood!
    対応するファイルの見出し行を抽出して一覧化、選択してJump ができる。(ruby なら def定義一覧になるよね)
    –auto-preview オプションも紹介されたのですが、これは便利 !! 一覧カーソル移動中にプレビューが見られる。

  • smartchr
  • 
    inoremap  = smartchr#one_of(' = ', ' == ', ' === ', '=')
    
    

    と.vimrcに書くと、=を1回押すと、’ = ‘ 、さらに続けて =をタイプすると ‘ == ‘ 、さらに続けて =をタイプすると ‘ === ‘、さらに続けて =をタイプすると ‘=’になると言うもの。

  • neocomplcache
  • オムニ補完する為のプラギンかな。
    ファイル名補完とかバッファ名補完ができるらしい。

  • neco-look
  • look コマンドが使える環境で使えるプラギン
    英単語など補完できるのでスペルミスが激減しそう !!

    「lingr.vimとその中身」 by tsukkee

    lingr をしている時であれなんであれ、片時もvimから離れたくないという @tsukkeeさんの思いから生まれたプラギン。
    これを使えば 10room以上同時閲覧可能だとか。ほかにもlingr.vim を使うべきいくつかの理由の紹介や、lingr.vim の仕組みが紹介されました。スレッドセーフな仕組みを作るのが難しかったようです。こういうの作れちゃうのスゴイと思います。ホントに。

    「Vundleでゔんどる」 by kozo-ni

    プラギンマネージャー vundle の紹介。@kozo-ni さんによると、色々なプラギンマネージャーを試した中ではこれがオススメだとか。

    実はvim初級者の私も使ってます。:BundleInstall , :BundleSearch などとても便利ですヨ。
    lingr や 後々 ujihisaさんとも話した内容ですが、.vimrc での記述やコマンドも vundle という記法であって欲しかったなぁと。

    「僕がいかにして unite を使わなくなったのか」 by Sixeight

    uniteは便利だけれど、実際に開発してると列挙して選択ってのは煩わしいと。そんな時 rails.vim を使えば簡単に model や controller に移動できたりするそうです。model の追加とかrails の機能はほとんどvimから実行できるみたいです。

    rails開発者のデモが見れて良かったです。
    unite の否定という事だったんですが、ujihisaさんによる補完でuniteの紹介にもなっていたような場面もありライブ感ある発表でした

    「気鋭の新機構vitalの全て」 by ujihisa

    プラギン作者にとっては嬉しい新機構vital の紹介。vital作者による発表名前の vital もタイプが気持ちいいものを選んだらしいです。確かにタイプが気持ちいい。
    プラギン作者には関係ない話しなので、はやくLv4以上になろうねと云う話なのかw
    Vim-users.jp – Vim使いのレベル10

    プラギン作成時に似たような処理をライブラリ化するものらしいです。
    プラギンを横断的にサポートするような仕組みなので普通のプラギンよりも
    コアな仕組み提供という事になるのかな?

    初心者として初参加だったのですが、和気あいあいとして楽しい会でした。
    また戦闘力を上げて参加したいです。
    参加者の皆様、お疲れさまでした。

    カテゴリー: 未分類 タグ:

    RVM導入方法

    2011 年 4 月 28 日 Aki コメントはありません

    環境:Mac OSX 10.6.7
    (RVMの導入方法は他にもありますが、今回の方法では git が必須です。)

    RVMは Ruby Version Managerで Rubyの複数バージョンを混在させる事ができるます。またgemsetと仕組みで プロジェクト毎に使用するgemやそのバージョンを切り替えると云う事が可能です。

    Macバイナリでの導入の方が楽かなと思っていたのだけれど、なんだかよくわからないので結局 git でインストールする事に。
    といっても全然難しくない。簡単。

    # 適当なディレクトリで git clone

    
    $ git clone git://github.com/wayneeseguin/rvm.git
    $ cd rvm
    $ ./install
    

    以上で インストール環境。

    .bashrc に以下を追加。(できれば最後の方に)

    [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"  # This loads RVM into a shell session.
    

    .bash_profile に下記の設定がない人はこれも追加。

    if [ -f $HOME/.bashrc ]; then
      source $HOME/.bashrc
    fi
    

    ターミナル再起動

    
    $ rvm -v
    
    rvm 1.2.6 by Wayne E. Seguin (wayneeseguin@gmail.com) [http://rvm.beginrescueend.com/]
    

    # 2010年に書いた記事が下書きのままだったので改めて公開しました。

    一部、下記サイトを参考にしています。

    Ruby Freaks Lounge:第39回 RVM(Ruby Version Manager)による環境構築|gihyo.jp … 技術評論社

    Ruby Freaks Lounge:第40回 RVM(Ruby Version Manager)による環境構築(2)|gihyo.jp … 技術評論社

    カテゴリー: 未分類 タグ:

    cucumber の paths.rb で DBの値を利用する

    2011 年 4 月 26 日 Aki コメントはありません

    そもそも paths.rb の中で Model使えるのかとか思ったのですが、なんの事はない。普通に User.find(123) とかできるのですね。ちゃんと理解していないからこんな疑問が発生するのでしょう。

    それはさておき。

    when /フォロワーが([0-9]+)人いるユーザのプロフィール画面/
        user = Users.find(:first, :conditions => { :follower => $1.to_i} )
        edit_user_info_path(user.id)
    

    ([0-9]+) など、正規表現でマッチングさせておきと $1 で値渡してあげれば OK
    正規表現のマッチングで () 内にヒットしたものが $1, $2…となるのを知らない人は意外にいるようだ。

    paths.rb っていうか、結局 routes.rb の話なんだよね。

    カテゴリー: Development, Ruby タグ: , ,

    Titanium & Android SDK セットアップエラー

    2011 年 3 月 28 日 Aki コメントはありません

    Titanium Developer (1.2.2) で Android SDK を指定する際に

    Couldn't find adb or android in your SDK's "tools"
    というエラーが発生する場合

    platform-tools/adb を toolsに移動するとエラーは発生しなくなる。
    sdk のバージョンアップで adb の配置先が変わったようだ。

    WEB+DB PRESS Vol.61

    カテゴリー: Development タグ:

    TDD テスト駆動開発 in 第4回勉強会@minami.rb

    2011 年 2 月 3 日 Aki コメントはありません

    第4回勉強会@minami.rb に参加してきた。
    http://qwik.jp/minamirb/57.html

    その中での1セッション 『TDD テスト駆動開発入門』(by yalabさん)での課題が時間内に終わらなかったので復習をかねて最後までやり遂げる事に。ruby はそんなに書きなれていない事もあり、なかなか手間取ったがやっと課題の要件はみたす事ができたので、ここに晒しておく。
    ruby ではそうじゃないよとか、普通はこうだよね。的なツッコミを入れていただけると有難いです。

    時間がかかったポイントとしては ruby の実装不足。慣れてないのが大きいのかなと。
    ただコーディングするだけならすぐかもしれないが、いかにrubyっぽく綺麗に書けるのだろうかと考えながらだったからのような気がします。実際このコードが rubyの暗黙の美的センスに乗っ取っているかどうかはわからないのですが、極力そうしたつもり。
    for とか while とかでぐるぐるまわして if で条件分岐してどうたらとかいうのは、なるべくしたくないですし。

    こういう積み重ねが大切ですね。
    まぁ、とりあえずこんな感じで一旦アップしておきます。
    ちょっと思うところがあるので、これに手を入れてすぐに第2版をアップしたいと思います。

    課題
    http://www.slideshare.net/yalab/ss-6749458
    ・月末を返す last_day メソッドを作ってください。
    ・第一週の日曜日 (先月の最後の日曜日かもしれない)を返すメソッドを作ってください。
    ・最終週の土曜日(次月の最初の土曜日かもしれない)を返すメソッドを作ってください。
    ・各週と各日を操作するeach_weekとeach_dayを作ってください。
    ・月曜始まりと日曜始まりの両方を使えるようにしてください。

    calendar.rb
    カレンダー

    calendarTest.rb
    カレンダーのテストクラス
    これが重要。これのおかげで一旦完成した後も躊躇なくリファクタリングを進める事ができる。
    常々思っている事なのだが、テストコードは人の為と云うよりも自分の安心の為に書くものだと思う。

    実行結果

    
    $ ruby calendarTest.rb
    Loaded suite calendarTest
    Started
    ................
    Finished in 0.02391 seconds.
    
    16 tests, 16 assertions, 0 failures, 0 errors
    

    Calendar.rb

    class Calendar
      attr_reader :first_day
      attr_reader :last_day
      attr_reader :base_cwday
    
      def initialize(year, month, base_cwday = "Sun")
        @first_day = Date.new(year, month, 1)
    #    @last_day = (Date.new(year, month, 1) >> 1) - 1
        @last_day = (Date.new(year, month, -1))
        @base_cwday = Date::ABBR_DAYNAMES.index(base_cwday)
      end
    
      # カレンダー表示上の最初の日を返す
      def display_first_day
        return @first_day - @first_day.cwday + @base_cwday
      end
    
      # カレンダー表示上の最後の日を返す
      def display_last_day
        return @last_day + (6 - @last_day.cwday + @base_cwday)
      end
    
      # 当月すべての日を週ごとに配列にして返す
      def each_week
        weeks = Array.new()
        display_first_day.step(display_last_day, 7) {|wd|
          week = Array.new()
          wd.step(wd + 6, 1) {|d|
            week < < d if first_day.month == d.month
          }
          weeks << week
        }
        return weeks
      end
    
      # 当月すべての日を配列にして返す
      def each_day
        days = Array.new()
        @first_day.step(@last_day, 1) {|date|
          days << date
        }
        return days
      end
    end
    

    CalendarTest

    require 'test/unit'
    require 'date'
    require './calendar'
    
    class CalendarTest  < Test::Unit::TestCase
    
      # 基本パターン
      def test_first_day_201101
        actual = Calendar.new(2011, 1)
        assert_equal Date.new(2011, 1, 1), actual.first_day
      end
    
      # 固定値で返してないか別の月で確認
      def test_first_day_201102
        actual = Calendar.new(2011, 2)
        assert_equal Date.new(2011, 2, 1), actual.first_day
      end
    
      # 日数 31日
      def test_last_day_201101
        actual = Calendar.new(2011, 1)
        assert_equal Date.new(2011, 1, 31), actual.last_day
      end
    
      # 日数 28日
      def test_last_day_201102
        actual = Calendar.new(2011, 2)
        assert_equal Date.new(2011, 2, 28), actual.last_day
      end
    
      # 日数 29日
      def test_last_day_201002
        actual = Calendar.new(2012, 2)
        assert_equal Date.new(2012, 2, 29), actual.last_day
      end
    
      # 日数 30日
      def test_last_day_201004
        actual = Calendar.new(2010, 4)
        assert_equal Date.new(2010, 4, 30), actual.last_day
      end
    
      ## display_first_sunday
      # カレンダー上の最初日曜が前月にあるパターン
      def test_display_first_day_feb
        feb = Calendar.new(2011, 2)
        assert_equal Date.new(2011, 1, 30), feb.display_first_day
      end
    
      # カレンダー上の最初日曜が前月にあるパターン(月曜始まり)
      def test_display_first_day_feb_Mon
        feb = Calendar.new(2011, 2, "Mon")
        assert_equal Date.new(2011, 1, 31), feb.display_first_day
        puts feb.base_cwday
      end
    
      # カレンダー上の最初日曜が前年前月にあるパターン
      def test_display_first_day_jan
        feb = Calendar.new(2011, 1)
        assert_equal Date.new(2010, 12, 26), feb.display_first_day
      end
    
      ## display_last_saturday
      # カレンダー上の最終土曜が翌月にあるパターン2
      def test_display_last_day_201101
        actual = Calendar.new(2011, 1)
        assert_equal Date.new(2011, 2, 5), actual.display_last_day
      end
    
      # カレンダー上の最終土曜が翌年翌月にあるパターン
      def test_display_last_day_201012
        actual = Calendar.new(2010, 12)
        assert_equal Date.new(2011, 1, 1), actual.display_last_day
      end
    
      # カレンダー上の最終土曜が翌年翌月にあるパターン(月曜始まり)
      def test_display_last_day_201012_mon
        actual = Calendar.new(2010, 12, "Mon")
        assert_equal Date.new(2011, 1, 2), actual.display_last_day
      end
    
      # カレンダー上の最終日が当月にあるパターン
      def test_display_last_day_201104
        actual = Calendar.new(2011, 4)
        assert_equal Date.new(2011, 4, 30), actual.display_last_day
      end
    
      # カレンダー上の最終日が当月にあるパターン(月曜始まり)
      def test_display_last_day_201107_mon
        actual = Calendar.new(2011, 7, "Mon")
        assert_equal Date.new(2011, 7, 31), actual.display_last_day
      end
    
      def test_each_week
        actual = Calendar.new(2011, 1)
        expect = [
        	Array.new(1) { |i| i+1 },
        	Array.new(7) { |i| i+2 },
        	Array.new(7) { |i| i+9 },
        	Array.new(7) { |i| i+16 },
        	Array.new(7) { |i| i+23 },
        	Array.new(2) { |i| i+30 },
        	]
        weeks = Array.new()
        expect.each { |e|
          week = Array.new()
          e.each { |d|
            week << Date.new(2011,1,d)
          }
          weeks << week
        }
        assert actual.each_week == weeks
      end
    
      def test_each_day
        actual = Calendar.new(2011, 1)
    
        array = Array.new([])
        (1..31).each { |day|
          array << Date.new(2011,1,day)
        }
        assert actual.each_day == array
      end
    
    end
    
    カテゴリー: 未分類 タグ: , ,