Ruby

Rake::GemPackageTask

を、定義するときは、ブロックを与えないとタスクが定義されない。 Rake::TestTaskなんかにはブロックを与えなくてもデフォルト設定で良きに計らってくれるんだけど。なんでこんな仕様なんだろう。

Method#source_location

なるものをRuby1.9.1を触っていて見つけた。 名前からして素敵そうな気がする。これはMethodにしかないのだろうか。 探してみた。 ObjectSpace.each_object(Module) do |c| p c if c.instance_methods.include?(:source_location) end # >> UnboundMethod Me…

Rake on Ruby 1.9.1

http://d.hatena.ne.jp/arikui1911/20090128 で触れたRakeのバグはリリース版では直ってました。# もうちょい待てば良かったのか…

expectations for Ruby1.9.1

ただこの変更でexpectationsが落ちる。 前もドライブレターの扱いでケチをつけた箇所が問題だった(ドライブレター自体には対処がなされてたけど)。 鬼門だなぁ。一応動くようになったパッチ。 --- suite.rb.bak Wed Jan 28 23:47:45 2009 +++ suite.rb Fri J…

前置き - caller()

検証スクリプト。 def hoge yield end def piyo puts caller end puts "RUBY_VERSION: #{RUBY_VERSION}" hoge{ piyo } そして実行結果。 RUBY_VERSION: 1.8.7 hoge.rb:10 hoge.rb:2:in `hoge' hoge.rb:10RUBY_VERSION: 1.9.1 hoge.rb:10:in `block in <main>' hoge</main>…

Rake::Win32.rake_system

これは/lib/rake/win32.rbにあるsystem()のWindows用ラッパーである。 内容は以下の通り。 # Run a command line on windows. def rake_system(*cmd) if cmd.size == 1 system("call #{cmd}") else system(*cmd) end end cmd.size != 1 ならばそもそもラップ…

TinyTest

で、minitestを参考に(というより叩き台?)(というよりパクリ?) ユニットテストライブラリを書いてみたのを上げてみる。 TinyTest http://github.com/arikui1911/tinytest/tree/master

1.9系での標準添付ライブラリ

RakeとかRubyGemsとか入っちゃうってのは小耳に挟んだりしてたけど、きちんとは調べていない。 たぶん1.9系とそれまでとの違いとかを纏めてるとこは探せばそれなりにあるんだろうけど、めんどいので自分で調べた。 るりまのスナップショット http://doc.okke…

minitest - TestCase's instance's condition

[#22944] TestCase uses common @name ivar http://rubyforge.org/tracker/index.php?func=detail&aid=22944&group_id=1040&atid=4097 最もな意見だ。ただ、@nameのみならず@passedもアレだなぁ。 @passedはテスト結果がおかしくなる(十分うっとおしい問題だ…

minitest - assert_instance_of と assert_kind_of について(2)

もう指摘がありましたね。 [ruby-core:20605] [Bug #895] MiniTest::Assertions#refute_instance_of should use Object#instance_of? http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/20605

minitest - assert_instance_of と assert_kind_of について

def assert_instance_of cls, obj, msg = nil msg = message(msg) { "Expected #{mu_pp(obj)} to be an instance of #{cls}, not #{obj.class}" } flip = (Module === obj) && ! (Module === cls) # HACK for specs obj, cls = cls, obj if flip assert cls …

CSVライブラリを久々に使う

というのは、自分がCSVを扱うときはcsvscanを使ってたからです。 http://raa.ruby-lang.org/project/csvscan/ Rubyで配列から特定の添字だけ削除する - rubyneko http://ujihisa.nowa.jp/entry/91c50b5a16 より。やってみる。 require 'csv' src = './flag.d…

Rubinius インストール

andLinux上で。メモ。 必要なもの git(ソースコード管理 / apt-get install git-core) Rake(ビルドツール) ってことになるんですが、Rakefileがさらに Ruby1.8.x(あたりまえ) ParseTreeライブラリ に依存しているので、 zlib (apt-get install zlib1g-dev / …

WWW::Mechanize on Nokogiri (2)

/lib/nokogiri/hpricot.rbというそのものズバリなライブラリを見逃してました。orz # prevent to load real hpricot library $LOADED_FEATURES.push 'hpricot.rb' module WWW class Mechanize Hpricot = nil end end require 'nokogiri/hpricot' require 'ww…

クロノ・トリガー(1)

原始探訪いっかいめ。 物々交換で武具を手に入れるので、その際に必要な素材アイテムの個数を計算する。 chrono-primeval-exchange.rb #!ruby -Ks def main p exchange_contents( "ルビーガン" => 1, #ルッカ "ひじりのゆみ" => 1, #マール "ストーンアーム"…

hatena/diary/client.rb

待望の投稿API! これはありダラ(仮)をいじくるしかない!!とりあえずRuby用のサンプルもあったので、見よう見まねでやってみる。 投稿成功。 この例では日本語書いてないんですけど、はてなダイアリーAtomPubの 文字コードはUTF-8だそうです。 #!ruby -Ku req…

WWW::Mechanize on Nokogiri

Hpricot互換ということで思いつく。 が、やってみたらテストが結構な結果に。 242 tests, 1239 assertions, 20 failures, 4 errorsひょっとしてMechanizeってインタフェース越しだけじゃなく Hpricotの中身にも手を出してる?ちなみにwww/mechanize/nokogiri.…

Nokogiri - Hpricot互換HTMLパーサ

だそうです。他にもXMLとかSAXとかXSLTとか?

TinyCSS

http://d.hatena.ne.jp/milk1000cc/20080703を読んで、自分なりに いじってみた。 class TinyCSS class ParseError < ::RuntimeError ; end def self.read(filename) new().parse(File.read(filename)) end def self.parse(str) new().parse(str) end def in…

急にFizzBuzz

モジュールによるMonkey Patch。 module FizzBuzz Divisor = [ 3, 5 ] Strings = [ 'Fizz', 'Buzz' ] def fizzbuzz (rests = Divisor.map{|d| self % d == 0}).inject{|r, i| r || i } ? rests.zip(Strings).map{|r, s| r && s }.select{|x| x }.join : self…

インタプリタのスタックトレースの真似

例外が補足されずに終わったときのやつのこと。 def print_stack_trace(ex) $stderr.puts "#{ex.backtrace.shift}: #{ex.message} (#{ex.class.name})" $stderr.puts ex.backtrace.map{|b| "\tfrom #{b}" } end

RDocのささやかなカスタマイズ

自分でhtml_generatorみたいなのを書くのは大変なので、 if __FILE__ == $0 # RDocを走らせるアプリケーション else # テンプレートの定義 end こんなん書いて'-T'オプションで指定することにした。 アプリ部分は具体的に言うとこんなの。 full_path = File.…

rdv.rb

自作のYARF + VisualuRubyで。 RDをパースしてHTMLに変換した結果をIEコンポーネントで見ます。 立ち上がるのはHTMLをレンダリングして自らに表示するだけの窓です。プルダウンメニューもなにもあったもんじゃありません。見終わったら閉じてください。 requ…

wc.rb

情けないことにいっつもいっつもwcの出力の見方を忘れてhelpを見てるので(つまりそんなに頻繁に使わない)、 require 'optparse' require 'shellwords' echo = true targets = [] add_target = lambda{|ident| lambda{ targets << ident } } no_echo = lambda…

expectrb

標準添付のtestrbみたいなののexpectations用をでっち上げる。 Test::Unit::AutoRunnerに相当するものはないのでそのへんを書いて、自分用に合せる。 pwdがhoge/のときに expectrb -dtest でhoge/test/test_*.rbを実行してくれる辺りは気に入ったかも。ちょ…

Float#ceil vs Integer#divmod

とあるアプリを書いているときに、 「ある個数の要素の集まりを、一定の数単位で分ける。 その単位に足りない余りも、分けられた一つとして数える。 するといくつに分けられるか」という処理を書くことになりました。 我ながら日本語が実にヘタだ。つまり例…

alist to hash

何かそれっぽいことはHash.[]で出来るらしいっす。 h = Hash[*alist.flatten] ちゃんとしたalistならこれで十分。 引数の数が合わないと例外になってくれるからいいのかね。いちおう、[...[key, value]...]でないalistでも変換できるようにするには、 h = Ha…

Swiby もどき

まるごとRuby! vol.1(isbn:9784844325796) の JRuby の紹介を呼んでいて、Swiby という Swing を扱うためのライブラリを知る。その DSL になんかちょっとくすぐられたので、VisualuRuby をラップしてそれっぽいものをでっちあげて見た。

expectations on Windows

これはバクに入るのかな?expectations は expect のファイル名と行番号を得るのに caller を呼んで split(':') で取り出している。 だもんで、Winでドライブレター含むフルパスを渡すと(C:/test_hoge.rb とか)、Failure のときとかに表示される行番号が変に…

mailread.rb

1.9ではなくなるらしい。 そんな使ってるわけでもないけど、ちっこいライブラリなのは知ってたので書き直してみた。