REXML DoS 脆弱性対策
REXML DoS 脆弱性対策をしようとして typo があったため落ちてましたorz
落ちてる間に見ようとした人達がもしいたら、ご迷惑をお掛けしました。
Posted in Ruby | no comments |
Hash#default_proc をあとでセットする方法
Hash#default_proc= がなかったのであるハッシュにあとで default_proc をセットする方法を考えてみました。
以下のようにするとうまく行きます。
hash = {} # default_proc が無い。
hash.default_proc # => nil
other_hash = Hash.new{|h, k| h[k] = [] }.merge(hash)
other_hash.default_proc # => #<Proc:0xb7c87474@-:3>Posted in Programming, Ruby | no comments |
Hiki on Rack 2
続き。
とりあえず、ページを編集できるところまで確認。 作業手順をまとめると以下のような感じ。
- hiki.ru を用意する。
- hiki.rb を用意する。
- Hiki::App クラスを作って call メソッドを定義する
- @cgi を使っている部分を全て @request に変更する
- params['hoge'][0] を全て params['hoge'] に変更する
- ENV を使用している部分を @request.env に変更する
- クッキーを使用している部分を修正する
- セッションキーだけなので簡単
- print している部分を Rack::Response 的なものを返すように変更
- [ヘッダー,ステータス,ボディ] な配列で OK
- 面倒なのでヘッダーとボディだけ返してステータスは常に 200 にしといた
- Rack::Lint によるとヘッダーに Status を入れてはいけないらしいのでそれを入れてる部分を削除
- その他こまごまとした修正が必要。
- CGI に依存している部分とか、ロードパスとか。
まとめ
頑張ればできる。
いや、でも Hiki のソースも意外とひどいというのがわかった。統一感がないというかカオス一歩手前というか。
Posted in Ruby | no comments |
Hiki on Rack
Hiki - Hiki -Front Page- を Rack: a Ruby Webserver Interface に載せる実験中。
概ねうまく行きそうな感じだけど、セッションまわりに苦戦中。あと、たぶんプラグインを全部修正しないといけないのが辛いかもしれない。
ちゃんと出来たら公開する予定。
Posted in Ruby | no comments |
第29回 Ruby/Rails勉強会@関西
行ってきました。
ちょっと睡眠不足気味だったので各セッションの記憶はあまりなかったりします。
なので今回は行ったという記録のみ残しておきます。
Posted in Ruby | no comments |
RSpec で transaction のテスト
Yuya さんのヒントをもとにしてこんな風にしてみました。
sqlite3? は spec_helper に定義した。ヘルパーメソッド。 SQLite3 だとトランザクションの入れ子が出来なかった(例外が発生する)のでこうしてます。
一応 shouldnotreceive で特定の処理から先には進んでないことは確認しているし、 エラーメッセージも確認しているのでこれでテストとしては良さそう。
あとは、実装コードの最初の方で呼んでる処理をモック化すればいいと思う。
これをモック化すると、通しのテストはどうすればいいのだろう、というのが今の疑問。
describe BatchController do
describe "POST create" do
describe "by login user" do
describe "when posted data was invalid (subject)" do
before do
Question.should_not_receive(:create!)
Choice.should_not_receive(:create!)
unless sqlite3?
ActiveRecord::Base.connection.should_receive(:rollback_db_transaction)
end
end
before do
login_as :quentin
post :create, :batch => { :body => INVALID_DATA_WITHOUT_TITLE }
end
it "should have error message" do
flash[:error].should == 'invalid data.'
end
it "should redirect to 'subject/index'" do
response.should redirect_to(subjects_path)
end
end
end
end
end
Posted in Programming, Ruby | no comments |
アンケートのデータ修正しました
http://q.okkez.net/ の第 28 回 Ruby/Rails 勉強会のアンケートで選択肢が英語になっていたデータを修正しました。
簡単なスクリプトを書いて script/console にコピペして実行した。 ちょっと複雑な修正なら SQL 書くより早いしわかりやすいね。
一部のデータがおかしくなってしまったのは SQL 書いて修正しましたけど。。。
多分、原因は私が使ってる Iceweasel に日本語言語パックをインストールしていなかったためだと思います。 次に同じようなミスがあった場合はすぐに修正できそうです。 r
Posted in Programming, Ruby | no comments |
Rack 使ってみた
諸事情で web アプリを Rails を不使用で書く必要があったので cgi.rb の代わりに Rack を使ってみた。
主に上記を参考にして書いた。
ソースコードは整理して色々名前とか変えたら公開できるかもしれない。
感想
意外と短い行数で書けてびっくりした。 Rails の劣化版くらいなら一日くらいででっちあげられそうな感じ。
Posted in Programming, Ruby | no comments |
第 28 回 Ruby/Rails 勉強会
日本Rubyの会 公式Wiki - 第28回 Ruby/Rails勉強会@関西
行ってきました。
エラトステネスの嵐—Rubyの集合演算を活用する by こなみさん
いろいろやってたらあまり聞けなかった。残念。
git - 分散バージョン管理システム by 舘野祐一さん a.k. id:secondlife
かわいいよ git かわいいよ。
今、作ってる某課題の管理はこれでやってみようかなぁ。
git-svn の使い方とか調べたい。
Ruby 初級者向けレッスン 第 22 回 by okkez さん
今回は irb について。
演習の後半は irb 関係ない感じでいきました。
演習の解答例は wiki にアップしたのでそちらを参照してください。
とりあえず、うちの ~/.irbrc です。refe2 のところはあまりうまく動かない。 まともに実装しようとすると bitclust を require してごにょごにょする必要があったりなかったりする。
#!/usr/bin/ruby
# ri を使えるようにする
# 例.
# irb> String.ri
# irb> ri String # same as above
# irb> String.ri 'reverse'
# irb> ri 'File.new'
def ri(*args)
puts `ri #{args.join(' ')}`
end
class Module
def ri(meth=nil)
if meth
if instance_methods(false).include? meth.to_s
puts `ri #{self}##{meth}`
else
super
end
else
puts `ri #{self}`
end
end
end
# refe2 も使えるように
module Kernel
def r(*args)
puts `refe2 #{args.join(' ')}`
end
private :r
end
class Module
def r(meth = nil)
if meth
if instance_methods(false).include? meth.to_s
puts `refe2 #{self}##{meth}`
else
super
end
else
puts `refe2 #{self}`
end
end
end
IRB.conf[:EVAL_HISTORY] = 1000
# タブ補完を有効にする
require 'irb/completion'
# simple prompt
IRB.conf[:PROMPT_MODE] = :SIMPLE
# ヒストリーを有効にする
require 'irb/ext/save-history'
IRB.conf[:SAVE_HISTORY] = 1000
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-save-history"
# サブ irb の設定
IRB.conf[:IRB_RC] = lambda{|_|
IRB.conf[:IRB_RC] = lambda{|conf| conf.prompt_mode = :DEFAULT }
}
require 'pp'
require 'yaml'
Posted in Ruby | no comments |
RubyKaigi2008 extra
http://i.loveruby.net/d/20080629.html
青木さんが大変な中、発表してくれたのにそんな裏側があったなんて。 外野の戯れ言には負けてられないので、頑張る。
来年はもっとよいリファレンスマニュアルにしてやるぞ。
Posted in Ruby | no comments |