ruby

ClassX::ValidateでHashをチェックする

http://d.hatena.ne.jp/rubikitch/20080710/1215641240メソッドの引数にHashをとるのはいっぱいあるときでもきれいに書けるので個人的にはあまり嫌いではない。classXを使うとHashのチェックが柔軟にできるよというおはなし。 require 'classx/validate' cla…

メソッドの渡すHashもきっちりチェックしたい

http://d.hatena.ne.jp/walf443/20080524/1211650071前の記事でコンストラクタに渡せるHashのキーと値を宣言的に書くことで見通しが良くなると書きましたが、コンストラクタに限らず、メソッドにオプションとして渡すHashもきっちりチェックしたいはず。とい…

デフォルトのオプションと:isおよび:requiredオプションの廃止

classXで、Mooseをなぞるのをやめてアクセサの宣言のデフォルトの設定を変更しました。 :writableオプションを指定しない限りは、アクセサはwriterをpublicにしないようになりました。これは、単にreaderを定義する時は、オプションを明示的に定義する必要は…

メソッドの渡すHashもきっちりチェックしたい

http://d.hatena.ne.jp/walf443/20080524/1211650071前の記事でコンストラクタに渡せるHashのキーと値を宣言的に書くことで見通しが良くなると書きましたが、コンストラクタに限らず、メソッドにオプションとして渡すHashもきっちりチェックしたいはず。とい…

Rack::Auth::IPをリリースしました

GitHubPostRecieverでGitHub以外からのpostは受け付けたくなかったのでRackでIPのアクセス制限ができるRack::Auth::IPというミドルウェアを作ってみました。rackupのファイルの中で、 require 'rack/auth/ip' # ローカルネットワークにアクセスを制限する us…

classXを使うと何がうれしいか

http://d.hatena.ne.jp/walf443/20080520/1211239672で触れた宣言的なアクセサをGitHubPostRecieverに試しに適用してみた + has :host, :is => :ro, :kind_of => String, :required => true + has :port, :is => :ro, :kind_of => Integer, :default => 6667…

Commit Bot for GitHub

GitHubでは、プロジェクトのコミットをfollowして興味のあるプロジェクトのコミットのみをまとめてみれるのですが、毎日それらを全部見るのはなかなか大変だったりします。興味のあるプロジェクトの場合、割とfreenodeにIRCのチャンネルがあって、そこにjoin…

Mooseっぽい柔軟なアクセサ

最近perl界隈で話題のMooseをちょくちょく弄ってみたりしているのですが、宣言的なアクセサは見通しも良くなるし、なかなか良いなと思ったんでRubyでもそれっぽく動作するやつを書いてみました。Mooseっぽくコンストラクタも勝手に用意するようにしてみたの…

ブロックの解釈の仕方をカスタマイズする

DSLみたいなものを作ろうとしてると、どうしてもブロックを俺俺文法で解釈させたくなって調べてみた。ParseTreeというライブラリを使うとRubyのコードをS式に変換することが出来る。 S式に変換できるのは、モジュール単位、モジュールのメソッド単位、文字列…

rspec-fixutre 0.0.1をリリースしました

先日言っていた機能はまだ足してはないのですが、一通り個人的に使いたい機能を動くようにして、テストも充実させたのでgemにしました。 gem install rspec-fixtureでインストールできます。http://coderepos.org/share/changeset/6563で、単純なテストがい…

RSpecをTest::Baseっぽく使う

RSpecでテストを書いていて単純なテストなんだけど、いろいろなデータで検証させたいといった場合に毎度毎度exampleを書くのがめんどくさいと思い、こんな感じでTest::Baseっぽく使えるやつを作ってみた。 describe Point, "detect_location" do with_fixtur…

時間の差から簡単に単位変換できるライブラリDateTime::Smartをリリースしました

この前、誕生日を迎えたのですが、自分が何歳になったのかいまいち思い出せなくて、rubyで計算させようとしたのですが、時刻の差から年を出すのはそれほど簡単ではなかったので、ライブラリにしました。なにやらruby-listでもちょうどその話題があがっていた…

sortの例

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/43494を見て。aとかbとかという変数名が例に載ってるのは初心者には優しくないと思った。 %w(foooo barr baz).sort {|one, anothor| one.size <=> anothor.size } #=> ["baz", "barr", "foooo"…

ActiveResourceを少し触ってみた

TwitterのAPIでRailsのActive Resouceを試してみる http://blog.tkmr.org/tatsuya/show/318-twitter-api-rails-active-resouceの影響を受けてActiveResourceを使ってみた。上の記事と合わせて思ったことをつらつらと書きます。多くの場合書くクラスの設定は…

Kernel#dp

Rubyレシピブックのレシピ8.1をみて--debugオプションをRubyインタプリタの起動時につけると$DEBUGがtrueになるというのを知って、Kernel#dpとかKernle#dppとかKernel#dyとかが標準であれば良いのにと思った。こんな感じ。 module Kernel def dp *args p(*ar…

Rubyクックブック

タイトル的にはレシピ本と同じようにもっとライトな感じの本かと思ったら案外そうではなくて非常に内容の濃い本だった。特に内容が今までに出版されている本とはほとんど被ってなくてこれは買いの本だと思った。内容的にはRHGを除いては現在出ている日本語の…

Java2Ruby本

読んだ。なかなか熱い本だった。Rubyより、というよりはJavaをほとんど知らない自分にとっては自分のRubyに対して感じているRubyの良さが率直に書いてあって読んでいて気持ちよかった。例えば、Javaの現在の開発ではオープンソースの様々なツールやフレーム…

OptionParserまとめ

あまりコマンドラインを処理するプログラムを書かない…というよりはオプションが色々あるような立派なコマンドラインアプリを今まであまり書いてなかったのでOptionParserの使い方に苦労したのでまとめておく。柔軟で慣れると楽だけど,暗黙的なところを理解…

Ruby会議

Webが重かったので店頭に逝ったらすんなりチケットとれた。家の近くにローソンがあってよかった…。

Regexp.compileはエスケープまではしてくれないのね…

久々にRubyを書いていてハマった。 date = "2007/04/13 12:00:00 +9:00" #=> "2007/04/13 12:00:00 +9:00" %r{#{date}}.match date #=> nil %r{#{Regexp.escape(date)}}.match date #=> #<MatchData:0x10844bc> %r{#{date}} #=> /2007\/04\/13 12:00:00 +9:00/ どうやらスラッシュ</matchdata:0x10844bc>…

RSpecのソースコードの手がかり

本格的にRSpecを使う場合,Test::Unitのssert_~みたいなメソッドを追加したくなることもあるでしょう。そういった際にどういったところを読めばよいかの手がかりのようなものを示したいと思います。*1まず,テスト自体の実行の流れの追い方。lib/context/run…

第16回Rails勉強会

http://wiki.fdiary.net/rails/?RailsMeetingTokyo-0016時間をおくと先月のように書かなくなってしまいそうなのでとりあえず書く。今回はやや人が少なめだった。 RSpecについて RSpecを使うとTest/Unitを使うことよりどんなことがうれしいかということの再確…

Kernel#autoload

Rackのソースを漁っていて見つけた。最初に定数を参照した際にロードするようにできるらしい。ファイル名とクラス名は一致させるのであればGem名.rbですべてのクラスをロードするようにすればいらないような気もしますが。*1autoloadをConvensionでラップす…

Ruby版WSGI: Rack

http://rack.rubyforge.org/まだ触ってないですが,これは良さそう。

PathObserverをGemった。

Webサーバーはサブドメインを勝手に割り当ててあるだけでサイトを自由におけるわけじゃないし、今レンタルしてるサーバーもないのでここに書いた。rubyforgeコマンドの使い方が分からない。

PathObserver 0.0.1 released

PathObserver helps you writing program observing for some files or directories easily. SYNOPSYS # observing '*.txt' files require 'rubygems' require 'path_observer' observe_manager = PathObserver::ObserveManager.new('*.txt') do |path, resu…

Kernel#[]

定義はできるけど,Object#__send__使わないと配列のリテラルと判断されて実行できないようです。 def [](val) "hello world" end #=> nil [1] #=> [1] [](1) SyntaxError: compile error (irb):11: parse error, unexpected '(', expecting $ [](1) ^ from …

ファイルの監視3

http://d.hatena.ne.jp/walf443/20070302/1172849934 の続き分かった。Pathnameを使えばもっと幅の広い監視ができそう。おまけに名前も困らない。(とおもったら一文字足りない。pathname-observer) Pathname#entriesを使って新しいファイルが追加されたらと…

ファイルを監視するやつ ー 続き

http://d.hatena.ne.jp/walf443/20070301/1172762706 の続き。ファイルを監視するスクリプトを手軽に書きたいときに良いかなと思ってGem化しようと思ってRubyForgeに登録しようと思ったけど,既にほとんど同じようなやつがあった。Gem化されてないのが残念。…

ファイルを監視するやつ

http://subtech.g.hatena.ne.jp/secondlife/20070228/1172625779もう素晴らしい回答が出てきてるような気もしますがとりあえず勉強がてらやってみました。Observable初めて使った。 # lib/file/stat/observable.rb require 'observer' require 'thread' $LOA…