ruby

putsの動作をテストする...

今日、人に説明する用にコンソールベースのコードを書いていた。 で、手動でテストするのが面倒なのでテストを書いたのですが、putsのテストが必要なことに気がついてテスト作りました。何か、putsのテストって意味あるの?という感じですが、晒しておきます…

privateメソッドをレシーバを指定して呼ぶ方法

今までprivateメソッドは、定義元のクラスのコンテキストでしか実行できないと思っていました。なので、テストの時とかにはprivateメソッドをテストせずに、そのメソッドを使っているメソッドのテストで済ませていました。また、irbとか、script/console使う…

railsやりたい!って思った時に最初にやる設定 for Win

研修用に作成です。Windowsにrailsの開発環境を設定するまでを書きます。家にはMacしかないので、必要な部分は引用してあります。 構築する環境 構築する環境は以下の通りです。全てフリーです。 ruby 1.8.6(mswin) rails 1.2.3 mysql 4.1 EmEditor rubyのイ…

Windows環境でRubyでファイルを操作する際の注意

Mac版では起きないのになー filename = "hoge.txt" File.open(filename, 'w') do |file| File.unlink(filename) end 結果は次の通り。 file_unlink.rb:3:in `unlink': Permission denied - hoge.txt (Errno::EACCES) from file_unlink.rb:3 from file_unlink…

Stringクラスの勉強メモ

Ruby始めてそろそろ1年になる(汗)にも関わらず、標準ライブラリについてあまり知らないなって思ったので、改めて勉強しなおすことにしました。 標準ライブラリのメソッドを使いこなせれば、コードはもっと綺麗になる。ってことでまずはStringから! 普段…

superの挙動を勘違いしていた

恥ずかしいことに、今までsuperの意味を、「親のクラスの同じメソッドを、親のクラスのコンテキストで実行する」かと思っていました。 なので、次の例で結果が「"fuga"」にならないのを見て少しはまりました。 class Hoge def hoge fuga end def fuga "fuga"…

Enumerable#zip を使う

zipメソッドって何に使うんですか。 - まさにっき(使えないプログラマーの記録) んー。例えば、以下の代わりとか。 injectの例 a = [1,2,3,4,5] a.inject({}){|h,k| h.merge(k => k*2)} #=> {5=>10, 1=>2, 2=>4, 3=>6, 4=>8} zip使う a = [1,2,3,4,5] Hash…

ファイルの内容を書き換えるワンライナー

今日使ったのでメモ。カレントディレクトリ下のファイルで、「hoge」を含むファイル内の「hoge」を「fuga」に変更。 尚、svnでバージョン管理しているので、grepでは、svnファイルを除くように指定しています。 grep -rl account_separator . | grep -v svn …

プラットフォームを調べる定数

定数を使う。あくまで、OSではなく、Rubyのプラットフォームを調べる。 irb(main):001:0> RUBY_PLATFORM => "i386-mswin32" irb(main):002:0> 例えば、Linux系では不要だが、Windowsではrequireする必要がある場合などに使える。 以下の例は、Windowsのコマ…

Duck Typing

最近コードと書く上で使っていきたいなと思ったので勉強。 Duck Typing (ダックタイピング)とは 定義 結論から書くと、「あるオブジェクトがアヒルのように歩き、アヒルのように話すなら、Rubyインタプリタはそのオブジェクトをアヒル」とみなす。この考え方…

Array#fuzzy_equal?

テストの時 assert [1,2,3].fuzzy_equal?(User.find_by_school("hoge").map(&:id)) とかやりたい。eachで比較するのが面倒だし、==メソッドは順序まであってないとfalseになるから。 実装 バグあります def fuzzy_equal?(other) original_size = self.size s…

Timeオブジェクトの等価でちょいはまった

Railsのテストでこんなメッセージが出た expected but was . あれ?なんでテスト落ちるんだろう。 irbで確認 irb(main):002:0> a = b = Time.now => Sat Mar 29 20:07:31 +0900 2008 irb(main):003:0> a == b => true これは当たり前だ。同じオブジェクト指…

ファイルテキストコンバーター

ファイル中のある文字列を別の文字列に変えたい 例えばこんなの。 source.txt ■ファイル中のある文字列 ・source.txt これを下に変えたい。 converted.txt **ファイル中のある文字列 -source.txt それ、ワンライナーでできるお(・∀・)! はぁ?置換すりゃいい…

nilを含むソートと、Enumerable#partitionメソッド

sortやsort_byの対象にnilが含まれていると扱いにくい 例えば、以下のような例。 ユーザーを最終ログイン時刻でソートする class User attr_accessor :name,:last_login def initialize(name,last_login) @name = name @last_login = last_login end def to_…

method_missingとfind_by_xxx

Refactormycodeを見てたら、method_missingを使った例があったので、試しに使ってみた。 method_missingとfind_by_xxx Railsには、このmethod_missingを使ったハックがある。find_by_name、find_all_by_nameとかのfind_xxxメソッドだ。 method_missingは通常…

関数型呼び出しを排除せよ

せっかくオブジェクト指向言語使っているなら、オブジェクト指向で書こうよという話。 Refactor :my => 'code'「last_number_of_months」 I try to always do in Ruby is avoid the functional style calls (i.e. time_month(month)), but since Ruby is so …

Hash引数便利よね

Railsの引数としてのHashの使い方上手いよな Ruby on Railsのメソッド引数って、Hashが多いですよね。しかも、HashのキーとしてSymbolが使えて凄く直感的に書ける。 Hashを使った引数 redirect_to :controller => "user", :action => "home" なんでもかんで…

簡易メールテンプレーター

OutlookExpressにメールテンプレート機能がない 会社ではメーラーとしてOutlookExpressを使用しているのですが、Outlookと違って、標準でテンプレート機能が付いてません。 よって、今までは「OETemplator」というソフトを使っていました。 OETemplator壊れ…

メソッドを動的に定義する

ふと、メソッドを動的に定義したいなと思った。 find_record_by_id :diary とかくと、以下のようなメソッドが定義されるイメージ。 def find_diary_by_id(id) if result = Diary.find_by_id(id) result else render :text => "無効な操作です。" false end e…

ヒアドキュメントの結果に対しメッセージを送る

ちょっとしたメモ。 <<-TEXT.length test TEXT #=> 5 これは結構使うかもな。文字コード変換する際にはとか書けるし、 でもNKF::nkf("-W -s",とかになるか。

Ruby勉強の記事

はてぶにあった。まとめられててなかなか良いのではと思ってメモ。 http://dev.ariel-networks.com/articles/workshop/ruby/

shebangについて

今日からrubyの基礎を復習し始めました。OSもWinからOSXに変え、新鮮な気分です。 その中で、今まで何となく使っていたshebang(シェバング)について知りました。 shebang shebangとは、ファイル中にUNIXコマンドを記述する方法らしい。すると、その文を記述…

javaのようなインターフェースがない理由

良く考えればいみない。 interfaceが無いのは、rubyがsmalltalkのように型を動的に設定する言語だから。 interface定義できても、rubyでは何ら恩恵なしじゃん。型宣言しないし。実際にインターフェース を実装する側のメソッドだけを作って、それを引数に渡…

requireをまとめる

require 'random_tactics' require 'stone_only_tactics' require 'sequense_tactics' としたファイルをrequireすると、その中でrequireしたものを全てrequireできる。 requireの仕組みからすれば当たり前だけど、rails使うことが多いからか、あまり require…

[]メソッドを作って見る

■rubyでは演算子を定義できるのが面白いね あまり知られていないかもしれませんが Ruby では [] メソッドに対して、 複数の引数を指定できます。という文言があったのでやってみた。 class Test def [](x,y) x + y end end t = Test.new puts t[1,3] #=> 4

Win32OLE

最近やりはじめた。 ちょっと作ってみた。Excelで1人チャットの履歴をためる。 #! usr/local/bin/ruby -Ku require 'win32ole' require 'kconv' class XlsChat @@instance = nil #Singltonもっと綺麗にできるだろう def initialize unless @@instance @@ins…

Google検索スクリプト

#!/usr/bin/env ruby require 'Win32API' require 'kconv' CONSOLE_BROWSER=ENV['CONSOLEBROWSER']||'w3m' X11_BROWSER=ENV['X11BROWSER']||'konqueror' browser=CONSOLE_BROWSER feeling_lucky=false LOCAL_CODE=Kconv::EUC GOOGLE_CODE=Kconv::SJIS def us…

メモ:メソッド名には動詞の原型を使う

Ruby のメソッド名は「動詞は原形を使う」というルールを採用しているので, has_sid? は have_sid? または sid? .... http://internet.watch.impress.co.jp/www/article/2003/0715/vodafone.htm だと,

日本語と正規表現

■日本語の判定をしたい場合の参考 ・日本語の扱い on RUby http://www.ruby-lang.org/ja/man/?cmd=view;name=FAQ%3A%3A%C6%FC%CB%DC%B8%EC%A4%CE%BC%E8%A4%EA%B0%B7%A4%A4日本語と正規表現http://d.hatena.ne.jp/toton/20051102/1130971334 http://homepage2…

モジュールで定数継承

self::SHOW_FUUL_VERSION_LIMIT = 20