ruby

RBC勉強会で組み込みRuby

25日土曜日に福岡Rubyコンテンツセンターで久しぶりのRBCの勉強会が開かれました。福岡CSKさんのご協力で開発中の製品を使わせて頂きました。 http://enzi.cc/この製品の説明は上のサイトにお任せするとして、僕個人的にはハードウェアを触るのは20年ぶりで…

linecache19 を headに入れるのは大変

rails_adminのテストを動かそうと思ってbundle installしたらエラーになった。 Installing linecache19 (0.5.12) with native extensions Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. (中略) Requesting http://ftp…

rubyでEXCEL

もちろんWin32 OLEとかを使う方法もあるけど、それ以外にもいろいろライブラリはある。 https://rubygems.org/search?utf8=%E2%9C%93&query=excel先頭のparseexcelは今はspreadsheetになっている。 gem xlsx? 書き込み? 備考 spreadsheet NG OK 読み書きで…

check_dependencies

古い作り方のまんまになっているgem(rubeus)をbundlerを使う形にしようとして、まずGemfileを作ってrakeしたらこんなエラーが。 $ rake rake aborted! Don't know how to build task 'check_dependencies'ぐぐってもよく分からないのでjewelerのソースコード…

developmentを実現したいのでコードを読んでみる#5

昨日ログを出力するように変更したrailsを使って、ほとんど素のrails3のアプリでサーバの起動、GETリクエストx3、サーバの停止までにActionDispatch::Reloaderの各メソッドがどのように呼びだされるのか、developmentとproductionの場合それぞれについて出力…

developmentを実現したいのでコードを読んでみる#4

だんだん、ソースコードを読むだけではしんどくなってきたので、ちょっとずるをします。先日rails new --devの使い方を書きましたが、 http://d.hatena.ne.jp/akm/20120110#1326216516railsの調査用のコードを入れまくって、ブログに書こうとおもって、fork…

developmentを実現したいのでコードを読んでみる#3

昨日は、ActionDispatch::Reloader で使われている ActiveSupport::Callbacks のドキュメントを読みました。今日はそれが ActionDispatch::Reloader でどう使われているのかを追いかけたいと思います。 https://github.com/rails/rails/blob/3-1-stable/acti…

developmentを実現したいのでコードを読んでみる#2

昨日はRails::Applicationの継承関係をはっきりさせて、初期化のあたりをどうなっているのかRails Guideのドキュメントをみつけてわーいってところまで行きました。 Rails::Railtie <|---- Rails::Engine <|---- Rails::Applicationhttp://guides.rubyonrail…

developmentを実現したいのでコードを読んでみる#1

Railsのdevelopmentモードのように特定のディレクトリ以下のソースコードを適切なタイミングで読み直す機能を作りたいのですが、実際Railsって何やっているのか分からんので調べます。 cache_classes railsアプリの config/environments/development.rb には…

Travis CIをちゃんと使ってみた

以下の2つのgemにちょっとした変更を加えました。 https://github.com/akm/selectable_attr https://github.com/akm/selectable_attr_railsそれに伴って、どんな環境で動くのかはっきりさせようと思い、昔ちらっと記事 http://mochizblog.heroku.com/21 を…

I18n.translateのデフォルトの処理を変更したい

I18nモジュールのtranslateメソッドは、訳が見つからない場合 I18n.t(:foo) #=> "translation missing: en.foo" こんな感じの文字列を返します。でもそんなん欲しくない場合とかに、i18n-0.6.0では、それぞれのメソッド呼び出しごとに:exception_handlerオプ…

Rubyは否定も演算子オーバーロードできる

RUBY_DESCRIPTION #=> "ruby 1.9.2p274 (2011-06-06 revision 31932) [x86_64-darwin10.7.0]" ! :foo #=> false :foo.! #=> false Symbol.class_eval{ def !; :"!#{self}"; end; } #=> nil :foo.! #=> :"!foo" ! :foo #=> :"!foo"

cucumberでモデル名として日本語も使えるようにpickleを拡張してみた

Railscasts #186 で紹介されているpickleが素晴らしい http://railscasts.com/episodes/186-pickle-with-cucumberこんな風にモデルのデータを定義できたりする https://github.com/akm/pickle_sandbox/blob/master/features/display_products.feature Featur…

CentOS 5.5 に ruby 1.9.2-p180 とか

VMware Fusion2で RedHat Enterprise Linux 5(64bit) を選んでisoからインストール。 ユーザー作ってsudoで権限を与えて以下のコマンド実行。 3 sudo yum groupinstall 'Development Tools' 4 yum search openssl 5 sudo yum install readline-devel openssl…

Sinatraでファイルのアップロード

今日のメモ httpclientでアップロード http://q.hatena.ne.jp/1214807688アップロードを受け付ける書き方 http://yusukezzz.net/blog/archives/1388アップロードのテストの書き方 https://github.com/brynary/rack-test/blob/master/spec/rack/test/multipar…

HTTPステータスの変換

Rack::Utils.status_code(:unprocessable_entity) # => 422 Rack::Utils::HTTP_STATUS_CODES[403] # => "Forbidden"

yard_ast_editable ってのを作ってみた

Rubyのシンタックスをパースして、構文木をいじってソースコードを編集するために作ってみました。 https://github.com/akm/yard_ast_editableYARD::Parser::Ruby::RubyParserが良さげだったので、YARD::Parser::Ruby::AstNodeを拡張して、find_by_ident と …

Ripper

http://ujihisa.blogspot.com/2009/07/parsers-around-ruby.html の記事の最後にあったので、あんまり期待してないで調べはじめたら、これgemとかじゃなくて、1.9系からの標準添付ライブラリなのね。ちょっとテンション高めで使ってみたらいけました!コメン…

parse_tree

ruby-1.9.2では動かなかったので、1.8.7で。やっぱりコメント取れなかった。 require 'parse_tree' #=> true sexp_array = ParseTree.translate("1+1") #=> [:call, [:lit, 1], :+, [:array, [:lit, 1]]] lines = <<EOS # AAAAAA def foo(*args) puts args.inspect end EOS #=> " # AAAAAA\n def foo(*args)\n puts args</eos>…

ruby_parser

rubynodeは古かった。探してみたら、まとめサイト発見。 http://ujihisa.blogspot.com/2009/07/parsers-around-ruby.htmlruby_parserというまんまな名前のものが見つかった。 http://parsetree.rubyforge.org/ruby_parser/ruby-1.9.2で試してみた。 require …

rubynode

rubyの構文、特にコメントを解析したくなってrubynodeというgemを見つけました。最後のメンテが2年前だけど。 http://rubynode.rubyforge.org/ruby-1.8.6-p399で確認しました。 require "rubynode" #=> false code = <<EOS #aaaaaaaaaa # bbbbbb def foo puts "AAA" end def bar(*args) puts args.inspect end EOS #=> " #aaaaaaaaaa\n # bbbbbb\n def foo\</eos>…

from jeweler to bundler

2009/01くらいから自作のgemの管理にはjewelerを使ってきたのですが、この度selectable_attrのruby-1.9.2対応をするのを景気にbundlerを使うようにしてみました。結果、とてもいい感じなので今後はbundlerへどんどん乗り換えたいと思います。 動機 gemの開発…

1.9系今日のハマりポイント

RUBY_VERSION #=> "1.8.7" {:a => 1, :b => nil, :c => "a"}.delete_if{|k,v| v.nil?} #=> {:a=>1, :c=>"a"} {:a => 1, :b => nil, :c => "a"}.delete_if{|(k,v)| v.nil?} #=> {:a=>1, :c=>"a"} RUBY_VERSION #=> "1.9.2" {:a => 1, :b => nil, :c => "a"}.d…

selectable_attr_rails-0.3.12リリース

http://github.com/akm/selectable_attr_railsselectable_attr( http://github.com/akm/selectable_attr )をrailsで使うためのgemであるselectable_attr_railsがじつはruby-1.9系で動いていなかったので、動くようにしました。最近、ちゃんとメンテできてい…

RSpecのhash_including

で、 with(hash_including(:key => an_instance_of(String))) って書けることに気付いた。嬉しい。

range_dsl

RubyのRangeだけではちょっと面倒な部分を簡単に書けるようなDSLを作ってみました。 http://github.com/akm/range_dsl/ 作った動機 数値の範囲を示すRangeオブジェクトを幾つか作ったり、どこからか取得できるような仕組みを作っておいて、合致した条件オブ…

HashKeyOrderable

っていうものを作りました。http://gist.github.com/358709 作った動機 Hashをeachで繰り返すときにキーで順序を指定したい、というのはたまにありますが、出力したい順序が決まっている場合もある。例えば、赤、青、黄色という順番で出力したいとか。 color…

warekky-0.1.1 リリース

先週0.1.0をリリースしてたんですが、時間がなくて書けなかったので、改めてご紹介。warekkyは和暦と西暦を相互変換するライブラリです。 インストールと使い方 gemでインストールして、requireするだけっす。 $ (sudo) gem install warekky $ irb require '…

jewelerでgemのひな形生成

jewelerを使うと、specを使うテストまでを含めたひな形を作って、git initからコミットまでしてくれて、githubへのpushまでやってくれる。 $ jeweler warekky --directory ./warekky --rspec --github-username akm --create-repo create .gitignore create …

CassandraObject::Base.connectionの構造をしらべる

タイムアウトするまでの時間を指定したくなった。でもどこで設定していいのかわからない。Rubyのクラスの構造を逆ツリーで出力するスクリプトを以前書いたので、それを使って調べてみる。 http://gist.github.com/11849 $ irb -rubygems # クラス構造を調べ…