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 + has :nick, :is => :ro, :kind_of => String, :required => true + has :user, :is => :ro, :kind_of => String, :lazy => true, :default => proc {|mine| mine.nick } + has :real, :is => :ro, :kind_of => String, :lazy => true, :default => proc {|mine| mine.nick } + has :template, :is => :ro, :kind_of => String, :required => true + def run method, json - json['commits'].each do |sha, commit| - CommitPingBot.new(@config['host'], @config['port'], { - 'nick', @config['nick'], - 'user', @config['user'], - 'real', @config['real'], - }).run("##{method}", View.new(@config['template'], commit).result) + json['commits'].reverse.each do |sha, commit| + CommitPingBot.new(@host, @port, { + 'nick' => @nick, + 'user' => @user, + 'real' => @real, + }).run("##{method}", View.new(@template, commit).result) end end end
元々のクラスだと、@configの中にどんな設定ができるのかということがわかりづらかったのですが、アクセサにしてしまえば、どの設定が必須なのかとかどんな値を指定すれば良いかが一目瞭然ですね。
Rack::Auth::IPをリリースしました
GitHubPostRecieverでGitHub以外からのpostは受け付けたくなかったのでRackでIPのアクセス制限ができるRack::Auth::IPというミドルウェアを作ってみました。
rackupのファイルの中で、
require 'rack/auth/ip' # ローカルネットワークにアクセスを制限する use Rack::Auth::IP, %w( 192.168.0.0/24 ) # ブロックでも使える # ipにはIPAddrのインスタンスが与えられる use Rack::Auth::IP do |ip| Your::Model::IP.count({ :ip => ip.to_s }) != 0 end
のように使えます。
$ gem install rack-auth-ip
でインストールできます。
機能的に増やすということはあまりないと思いますが、
http://github.com/walf443/rack-auth-ip/tree/master
でソースコードを公開してますので、何かバグなリがあれば一報ください。
Rackのミドルウェアとして作ることで他の様々なアプリでも同じように設定できるようになるので、Rackは素晴らしいなと思います。