2008年12月17日水曜日

RSpec+autotest+Snarl その2

せっかく作った環境を壊してしまった。(ボーっとして全削除した^^;)
よって再度作り直したところ、autotestが反応しなくなった。
んで、調査した結果、
どうも最新のrspec-railsではTest::UnitとRSpecのautotestを
任意に使い分けができる模様。

Test::Unit

普通に autotest で実行

RSpec

script/autospec で実行


これがわからなかった。
autotestで動かしてたから、いくらspecテスト書いても動かないわけだ。

2008年12月16日火曜日

ソフトウェア開発技術者試験

最後のソフトウェア開発技術者試験。(来年から制度が変わるため)
無事、合格できた。
午前、午後Ⅰが不安だったけど、

  • 午前:685

  • 午後Ⅰ:635

  • 午後Ⅱ:700


と、結構安全圏だった。
やっと高度情報処理受けれる。

RSpec+autotest+Snarl その1

今話題の rails テスト環境。
Growl for Windows で本当はやりたかったけど、WebKit 系ポップアップが正しく表示されない(エラーが出る)ので、snarl に変更した際の備忘録。
参考) gan2 の Ruby 勉強日記

  • snarl

  • rspec

  • rspec-rails

  • autotest

  • win32console

  • ZenTest

  • diff-lcs

  • ruby-snarl

  • redgreen


は事前にインストールしておくこと。snarl以外はすべて gems でインストール可能。
.autotestのコードを以下のように。※ ファイルの作成方法は参考サイトを見てね。

# ruby -w
require 'rubygems'
require 'autotest/redgreen'
require 'autotest/snarl'
require 'win32/console/ansi'

Autotest::HOOKS.delete(:interrupt)
module Autotest::Snarl
def self.icon
{
:green => 'rails_ok.png',
:red => 'rails_fail.png',
:pending => 'rails_pending.png'
}
end

def self.snarl title, msg, img=nil
Snarl.show_message(title, msg, icon[img])
end

Autotest.add_hook :ran_command do |at|
results = [at.results].flatten.join("\n")
output = results.slice(/(\d+)\s+examples?,\s*(\d+)\s+failures?(,\s*(\d+)\s+pending)?/)
if output =~ /[1-9]\sfailures?/
snarl "FAIL:", "#{output}", :red
elsif output =~ /[1-9]\spending?/
snarl "PENDING:", "#{output}", :pending
else
snarl "PASS:", "#{output}", :green
end
end
end

class Autotest
def self.clear_hook
HOOKS[:red].clear
HOOKS[:green].clear
HOOKS[:pending].clear
HOOKS[:all_good].clear
end
end
#Autotest.clear_hook

参考サイトと違う点(と、いうか色んなサイトを合わせた)を列挙すると、

require 'rubygems'
require 'win32/console/ansi'
Autotest::HOOKS.delete(:interrupt)
snarl "PENDING:", "#{output}", :pending
#Autotest.clear_hook

1.rubygemsでインストールしたので、gems宣言を追加。
2.win32consoleを追加しないと、Snarlに通知されなかった。
3.autotestがCTRL+C*2で停止しないため追加
4.pendingも表示(まだ試してないけど。。。)したかったので追加
5.CTRL+C*2で停止しないためコメント化

で、コマンドプロンプトで autotest を実行すれば
Snarl に通知が無事いきました。

後は、

  • rspec-rails と rspec プラグインの違い

  • ZenTest の設定


が分かり次第、エントリ登録しようと思う。

2008年12月9日火曜日

Ruby でハマッタこと

プライベートでイロイロあって投稿がご無沙汰してきた。
今日、Rubyやっててハマッタことを記録。

irb -Ks にて、

a=%w(1 2 3 4 5)
a.sort {|a, b| b<=>a }
puts a

実行すると、なんと
=>[5, 4, 3, 2, 1]
a=>1

a=1?
配列なのに、なぜ?
a.classするとFixnumになってるし。。。

答えは単純。
配列名とブロック引数名が重複しているためでした。
変数名を変えてやれば正しく動きました。
マイッタ。

2008年11月13日木曜日

10の練習問題 その02

新しくプログラミング言語を覚えたいときに行うべき10の練習問題 | IDEA*IDEAの次の問題をやってみた。
次は

  • 現在時刻にあわせてやる気のでるメッセージを出力(例:もうすぐランチ!がんばれ!)。


だな。

case Time.now.hour
when 7..11
puts "朝ですよ"
when 12..15
puts "昼だよ"
when 16..18
puts "もう夕方だよ"
when 19..21
puts "晩御飯の時間だよ"
when 22..24
puts "ふぁ~おやすみなさい"
else
puts "こんな時間になにしてるの?!"
end


こんなんで、いいのか?!
なんか前回より簡単な気が。。。

2008年11月9日日曜日

10の練習問題 その01

最近は Rails を学習する前に Ruby を学習しようと考えていて、
新しくプログラミング言語を覚えたいときに行うべき10の練習問題 | IDEA*IDEA
の問題を Ruby でやっていこうかと。
  1. 「なんらかのカウントアップメッセージを1から100まで出すけど、3のときだけアホになる!(例:1万円!2万円!しゃ~ん万円!とか)」に変更。


ten=["",
"じゅ~",
"にじゅ~",
"さんじゅ~",
"よんじゅ~",
"ごじゅ~",
"ろくじゅ~",
"ななじゅ~",
"はちじゅ~",
"きゅ~じゅ~"]
one=["",
"いちっ",
"にっ",
"さんっ",
"よんっ",
"ごっ",
"ろくっ",
"ななっ",
"はちっ",
"きゅっ"]
(1..100).each do |i|
if (i % 3)==0||i.to_s=~/3/
num=i.to_s.rjust(2,"0")
print sprintf("%s%s",ten[num[0,1].to_i],one[num[1,1].to_i])
else
print i
end
puts "万円"
end

第1回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた!
のルールにのっとっています。

  • 3の倍数のとき

  • 3がつくとき


最初は単純に3がつくときだけでやってた&3→"さんっ"に変えることしかやってなかったけど、"じゅ~さんっ"とか十の位の呼び方まで変える芸の細かさだったので右にならってみました。

2008年11月8日土曜日

ちょっと実験

「Code Prettify」を導入していたが、見栄えがパッとしない理由から「Blogger Syntax Highlighter」を導入してみた。共同させた場合の表示を確認してみる。

def test
p sprintf("Hello %s World",  "Ruby")
end

def test
p sprintf("Hello %s World", "Ruby")
end

いい感じ。


参考にさせて頂きましたサイト
クリボウの Blogger Tips

2008年6月12日木曜日

Rails 2.1

更新がおろそかになってしまった  orz

ショックなことに気づいてしまった。
俺がやってた rails は あくまで 1.2.x だった。。。

2.0 になって RESTful が前面に押し出されて
全然やり方がかわってしまっていた。(アイヤー)

ちゃんと変更内容見てりゃよかったよ。
また、一から勉強しなおしだー!!!
(勉強はしておりました)

2008年5月21日水曜日

text_field


テキストボックスを作成する。

$lt;%= text_field 'text','field' %>

以下イメージ。
<input id="text_field" name="text[field]" size="30" type="text" />

options として、INPUT の属性を指定可能。


:autocomplete=>on|off      # オートコンプリートの設定

:style=>"color:red;" # style の指定

:maxlength=>n # 最大文字数

など。

2008年5月20日火曜日

check_box

チェックボックスには2種類ある。



  • 未選択状態も送信可能

  • 選択状態のみ送信



未選択状態も送信可能タイプの場合、

<%= check_box 'check','box' %>

を利用する。

出力結果。
<input id="search_kind_id" name="check_box" type="checkbox" value="1" />

<input name="check_box" type="hidden" value="0" />

送信結果。
params[:check][:box]
>> "1" # 選択時

params[:check][:box]
>> "0" # 未選択時

注目すべきは hidden 項目の存在。name が同一の hidden 項目が勝手に作成される。

こやつが未選択時に送信されるのかぁ。なるほど~



選択状態のみ送信タイプの場合、

<%= check_box_tag 'check','box' %>

出力結果。
<input id="check_box" name="check_box" type="checkbox" value="1" />

送信結果。
params[:check][:box]
>> "1" # 選択時

params[:check][:box]
>> nil # 未選択時

普通の HTML の動き。





checkbox を複数選択するシチュエーションは少なくない。

checkbox を配列化する場合は、check_box_tag を利用する。(check_box タグも配列化できないわけではないが、しても意味がないため)

<%= check_box_tag 'check','box[]',@model.id %>

出力結果。
<-- value=1,2 を出力した例 -->
<input id="check_box" name="check_box[]" type="checkbox" value="1" />
<input id="search_kind_id" name="check_box[]" type="checkbox" value="2" />

送信結果。
params[:check][:box]
>> ["1","2"] # 複数選択時

params[:check][:box]
>> ["1"] # 1のみ選択時

params[:check][:box]
>> [] # 未選択時



ちなみに、check_box を配列化するには、

<%= check_box 'check','box',{:name=>"check[box][]"},@model.id %>

と、出力する name を無理やり指定してやれば可能。

ただし、出力結果は、
<input id="check_box" name="check[box][]" type="checkbox" value="1" />

<input name="check[box][]" type="hidden" value="0" />

となり、
params[:check][:box]
>> ["1","0"] # 選択時

params[:check][:box]
>> ["0"] # 未選択時

と、常に未選択状態が送信される状況になってしまう。

2008年5月16日金曜日

fixture の設定


デフォルトでは、利用しない形式になっているので
設定をする必要がある。


/test/test_helper.rb
self.use_instantiated_fixtures  = true   # ここを true にする



これで units and functionals ともに利用可能になる。


rake db:migrate で development 環境へ作成したテーブル類から
test 環境へ clone を作成する。
$ rake db:test:clone_structure



2.0 からなのか、YAML の変数名が数値のみの場合、エラーとなる。
(1.2 のときは確実に作成できてたけどなぁ)


YAML の定義
001:
title: title001.
text: text001.

テストコード
fixtures :contents
def test_001
assert_equal "title001.",contents('001').title
end

結果
NameError: `@1' is not allowed as an instance variable name



変数名を文字列として扱えば、ちゃんと動作する。(n001: など)
なんでだろ???

2008年5月15日木曜日

google-code-prettify の導入

いろんなソースコードを記載していくつもりなので、
シンタックスハイライトしたくて
google-code-prettify
を入れてみた。

def index
render_to 'index'
end



1,400×1,200 だと、色がついているのかわからん。。。orz

2008年5月13日火曜日

ブログ開始

今日からまた、ブログを始めます。

ブログを立ち上げた回数は数回、

ブログを書き込んだ回数も TOTAL して数回。

今度は続くかなぁ