1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
小川 明彦, 阪井 誠 : チケット駆動開発 日本のソフトウェア開発の現場で生み出された「チケット駆動開発」という概念を、数多くの実例を元にモデル化・体系化を試みた最初の本。 小川 明彦, 阪井 誠 : Redmineによるタスクマネジメント実践技法 Redmineによるチケット駆動開発の実践技法に関する最初の本。アジャイルなソフトウェア開発への適用方法、TestLinkによるテスト管理手法についても言及。 清水 吉男: 「派生開発」を成功させるプロセス改善の技術と極意 組込システム開発をベースとして、ソフトウェア開発特有のスタイルである派生開発、特にXDDPについて解説した世界でも稀な本。既存製品を保守するのではなく継続的に機能追加していく昨今の開発では、派生開発特有の問題を意識しなければならない。XDDPはプロセス論だけでなく、要件定義などの上流工程の品質改善にも役立つので注意。 Le
Gist はちょっとしたコードの切れ端を貼付けておくのに便利です。 先日紹介したEndless RubyのコードもGist上でのみ公開されていました。 Gemを作るまでもないコードをGistに貼付けて、そのままrequireして使えると便利そうだと思ったので、試してみました。 1 module Gist 2 module_function 3 def require(id, sha1 = "HEAD") 4 Kernel.require "open-uri" 5 gist = "http://gist.github.com" 6 eval(if sha1 == "HEAD" 7 open("#{gist}/#{id}.txt").read 8 else 9 Kernel.require "tmpdir" 10 cache = File.join(Dir.tmpdir,
SinatraはErubisじゃなくERBを使ってるので<%== @var %>とかの構文が使えない。 githubのソースを参考に作ったのに引数の数がおかしいとか言われたので*argsで逃げた。 # start.rb require "rubygems" require "sinatra" require "erubis" module Sinatra::Templates def erubis(*args) render :erubis,*args end def render_erubis(*args) erubis=Erubis::Eruby.new(File.read("views/#{args.first}.erubis")) erubis.result(binding()) end end get "/" do @test="a<h1>h1</h1>a" erubis :in
例えばJavaScriptだと"\u3000"と書けば良かったのですが、少なくともRuby-1.8系ではこれに相当する記法が無さそうだったので、いつも困ってました。 色々調べてみた結果、以下のようにすれば良さそうです。
のように書くのが、DSL的にちょっとかっこうわるいです。 そこで、以下のようなものがあればちょっと奇麗に書けます。 1 class Symbol 2 def method_missing(method, *args, &block) 3 if args.empty? && block.nil? 4 [self, method].join(':').intern 5 else 6 super 7 end 8 end 9 end 10 11 >> :foo #=> :foo 12 >> :foo.bar #=> :"foo:bar" 13 >> :foo.bar.baz #=> :"foo:bar:baz"
GAE/Jにはファイル数制限(1000まで)があるので、なるべく不要なファイルは減らしたいのが人情というものです。 ということで、unpackしたgemsから不要なファイルを掃除するために、以下のようなスクリプトを使用しています。 script/strip_gems 1 #!/usr/bin/env ruby 2 3 Dir['gems/gems/*'].each do |dir| 4 %w( 5 Generaters TODO README.* README 6 spec/**/* test/**/* examples/**/* tasks/**/* 7 tutorial/**/* demo/**/* 8 CHANGES CHANGES.txt CHANGELOG 9 LICENSE MIT-LICENSE Rakefile CONTRIBUTORS 10 Manife
Merbでファイルアップロードのspecを書く場合には、 multipart_*系のAPIを利用出来ます。 以下は一例です。 1 tmp = Tempfile.new('spec') 2 path = tmp.path + ".txt" 3 begin 4 file = open(path, "w+") 5 file.write "test" 6 multipart_post(resource(:materials), 7 :material => {:id => nil, :label => 'test', :file => file}) 8 tmp.close 9 ensure 10 file.close 11 File.unlink path 12 end
MerbアプリケーションでAtomフィードを配信する方法のメモです。 まずは、config/dependencies.rbに、利用するGemを登録します。
merb-auth-slice-passwordは、merb-gen appがデフォルトで生成する認証機能ですが、これを使ってログインが必要なアクションを作ると、デフォルトのrequest specでエラーが出るようになります。 そのような場合には、spec_helper.rbの中で、 以下のようなヘルパーを用意すると良いようです。 1 Merb::Test.add_helpers do 2 def create_default_user 3 unless User.first(:login => "krusty") 4 User.create( :login => "krusty", 5 :password => "klown", 6 :password_confirmation => "klown") or raise "can't create user" 7 end
MerbのGeneratorは、merb-genというコマンドに集約されています。 Railsではscript/{generate|destroy}を使いますが、独立したコマンドになっているので、 MERB_ROOT以外の場所でも利用可能です。 さて、Merbでも、RailsのようにGeneratorを独自に作る事が出来るのですが、 そのためにはGEM_ROOTにGeneratorsというファイルを作り、 以下のように自分をGeneratorとして登録するコードを書きます。 1 scope 'merb-gen' do 2 dir = File.join(File.dirname(__FILE__), 'lib', 'generators/') 3 Merb.add_generators dir + 'mailer_generator' 4 end MerbのGeneratorは、よ
Merbをコンソールから操作する時には、merb -iコマンドを実行するのですが、 アプリケーションコードの変更を検出すると、自動的にirbがリロードされてしまい、ヒストリーが消えてしまうので、若干不便さを感じていました。 そんな時は、 irb-history があなたのMerbライフを強力にサポートしてくれます(Thanks maiha!) まずはおもむろに
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く