アーカイブ

‘Ruby’ タグのついている投稿

西脇.rb & 東灘.rb 合同もくもく会 1st を開催しました ! #nshgrb

2013 年 3 月 9 日 件のコメント

西脇.rb & 東灘.rb 合同もくもく会 1st を開催しました。

西脇.rbの伊藤さん(@jnchito)となんだかんだと準備をしていたらあっという間に開催日。

コードレビューは結構盛り上がって楽しかったです。やっぱりコード見ながら人と話をすると不安感が解消されるし、暗黙知が共有できるからいいですね。知らないサービスの話とかこういう時は自分はこうするみたいな話が言い合えると嬉しいです。あとわざわざメールとかtwitterで聞くほどじゃないんだけど、横に居たら聞きたいなぁっていう距離感がいいですね。

コードレビューの時間をしっかり取りたいので募集人数は6名にしてたんですが、やっぱりコードレビューの時間はもう少し欲しかったかも。1人10分では全然足りないですね。「続きはyouRoom & GitHubで ! 」って感じでしたねー。

会場を貸していただいたカフーツさんにも感謝感謝です。 コーヒーを淹れていただいたり音楽かけてもらったり色々お世話にしていただきました。設備的にも立地的にもお値段的にも良い感じです。10人くらいまでなら今後もお世話になりたい感じです。

帰りの電車の中でひとりの方に「”東灘”って文字が入ってたから来ました。東灘なら行けるな〜って思ったんです」って言ってもらえたのは嬉しかったです。その方もひとりでコード書いてるコトに対する不安があったみたいで、そういう雰囲気を共有できたのは嬉しかったです。 また来て欲しいし、一緒に続けていけたらいいなぁと思います。

次回の合同もくもく会は西脇方面 (会場の都合で小野市あたりの予定?) です。是非お越しください。Coupé Baguette (クープ バゲット) のパン食べたいね !! ってみんなと盛り上がってたのも良いモチベーションになりそうです♪

「まずは始めてみてよかったなぁ」といった感じ。無理のないように楽しくやって行きたいと思います。 これからも”西脇.rb”ともども”東灘.rb”をよろしくお願いします !

西脇.rb & 東灘.rb 1st

cucumber-rails の tableishは廃止されました

2013 年 1 月 18 日 件のコメント

約一年前の事ですが、cucumber-rails で tableish が削除されています。

History.md ## [v1.2.0](https://github.com/cucumber/cucumber-rails/compare/v1.1.1…v1.2.0) ### Removed features * The (deprecated) tableish method has been removed. See https://gist.github.com/1299371 for an alternative. (Aslak Hellesøy)

table要素をarrayに変換してくれる便利なメソッドがなぜ削除されたのか… コミッタの方曰く、Capybaraに強力なAPIがあるんだからいらないでしょ。って方針らしい。

なので v1.2.0 以降では以下のようにするのがよさそう。


https://gist.github.com/4563036

https://gist.github.com/1299371

http://dennisreimann.de/blog/capybara-finder-for-cucumber-rails-deprecated-tableish/

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

RailsGirlsKyoto 1st ふりかえり

2012 年 12 月 31 日 件のコメント

http://www.flickr.com/photos/hsbt/8275763891/

 

大盛況だったRailsGirlsKyoto 1st. あれから2週間経ち今年も終わろうとしています。

RailsGirlsKyotoでは事前事後でわりとバタバタして大変でしたが、自分にとってかけがえのない経験になった事は間違いありません。 なにより参加者の皆様からは想像以上の反響を頂きました。イベント自体が楽しかった事や Ruby, Railsに出会えて良かった事などもアフターパーティーで熱く語っていただいたのが特に印象的で「more イベントに是非参加したい。第2回の開催をしたい。お手伝いしたい。」など具体的な内容も耳にしました。Girlsだからなのか京都だからなのかはわからないのですが、皆さんからはすごくパワーを感じました。 (当日の様子は公式blogで !)

続きを読む…

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

cucumber で javascript テスト

2011 年 5 月 11 日 件のコメント

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)</p>

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

test.features (サンプル)

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

<pre><code> 〜以下任意のテスト〜

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

<p>

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

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

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

2011 年 4 月 26 日 件のコメント

そもそも 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 タグ: , ,

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

2011 年 2 月 3 日 件のコメント

第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</p>

<p>def initialize(year, month, base_cwday = "Sun")
    @first_day = Date.new(year, month, 1)</p>

<h1>@last_day = (Date.new(year, month, 1) >> 1) - 1</h1>

<pre><code>@last_day = (Date.new(year, month, -1))
@base_cwday = Date::ABBR_DAYNAMES.index(base_cwday)
</code></pre>

<p>end</p>

<p># カレンダー表示上の最初の日を返す
  def display_first_day
    return @first_day - @first_day.cwday + @base_cwday
  end</p>

<p># カレンダー表示上の最後の日を返す
  def display_last_day
    return @last_day + (6 - @last_day.cwday + @base_cwday)
  end</p>

<p># 当月すべての日を週ごとに配列にして返す
  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 &lt; &lt; d if first_day.month == d.month
      }
      weeks &lt;&lt; week
    }
    return weeks
  end</p>

<p># 当月すべての日を配列にして返す
  def each_day
    days = Array.new()
    @first_day.step(@last_day, 1) {|date|
      days &lt;&lt; date
    }
    return days
  end
end

CalendarTest

require 'test/unit'
require 'date'
require './calendar'</p>

<p>class CalendarTest  &lt; Test::Unit::TestCase</p>

<p># 基本パターン
  def test_first_day_201101
    actual = Calendar.new(2011, 1)
    assert_equal Date.new(2011, 1, 1), actual.first_day
  end</p>

<p># 固定値で返してないか別の月で確認
  def test_first_day_201102
    actual = Calendar.new(2011, 2)
    assert_equal Date.new(2011, 2, 1), actual.first_day
  end</p>

<p># 日数 31日
  def test_last_day_201101
    actual = Calendar.new(2011, 1)
    assert_equal Date.new(2011, 1, 31), actual.last_day<br />
  end</p>

<p># 日数 28日
  def test_last_day_201102
    actual = Calendar.new(2011, 2)
    assert_equal Date.new(2011, 2, 28), actual.last_day<br />
  end</p>

<p># 日数 29日
  def test_last_day_201002
    actual = Calendar.new(2012, 2)
    assert_equal Date.new(2012, 2, 29), actual.last_day<br />
  end</p>

<p># 日数 30日
  def test_last_day_201004
    actual = Calendar.new(2010, 4)
    assert_equal Date.new(2010, 4, 30), actual.last_day
  end</p>

<p>## 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</p>

<p># カレンダー上の最初日曜が前月にあるパターン(月曜始まり)
  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</p>

<p># カレンダー上の最初日曜が前年前月にあるパターン
  def test_display_first_day_jan
    feb = Calendar.new(2011, 1)
    assert_equal Date.new(2010, 12, 26), feb.display_first_day
  end</p>

<p>## 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</p>

<p># カレンダー上の最終土曜が翌年翌月にあるパターン
  def test_display_last_day_201012
    actual = Calendar.new(2010, 12)
    assert_equal Date.new(2011, 1, 1), actual.display_last_day
  end</p>

<p># カレンダー上の最終土曜が翌年翌月にあるパターン(月曜始まり)
  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</p>

<p># カレンダー上の最終日が当月にあるパターン
  def test_display_last_day_201104
    actual = Calendar.new(2011, 4)
    assert_equal Date.new(2011, 4, 30), actual.display_last_day
  end</p>

<p># カレンダー上の最終日が当月にあるパターン(月曜始まり)
  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</p>

<p>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 &lt;&lt; Date.new(2011,1,d)
      }
      weeks &lt;&lt; week
    }
    assert actual.each_week == weeks
  end</p>

<p>def test_each_day
    actual = Calendar.new(2011, 1)</p>

<pre><code>array = Array.new([])
(1..31).each { |day|
  array &lt;&lt; Date.new(2011,1,day)
}
assert actual.each_day == array
</code></pre>

<p>end</p>

<p>end

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