git-flowのfeature finishで--no-ffなmargeにならないときがある
git-flowをいじっていて、A successful Git branching modelみたいなリビジョングラフにならなくて悩んでいたのですが、やっと解決しました。
問題は、featureブランチで開発してdevelopブランチにマージ(feature finish)したときに起こります。なぜか、リビジョングラフが真っ直ぐになってしまうときがあります。つまり、featureブランチなんてなかった!という感じになります。
調べたらどうやら、1回しかコミットしてないfeatureブランチをfeature finishすると、ffなmargeになってしまうようです。git-flowプラグインの仕様といったとこでしょうか。
Tornadoを使ってみる
新しい技術を知っておきたいので、なんとなく興味があったTornadoをいじっています。TornadoはPythonで書かれたノンブロッキングなWebサーバとツールのことです。立ち位置は最近流行りのNode.jsと似たような感じですね。Webサーバーやフレームワークを含んだWebアプリケーションの環境といったとこでしょうか。
お決まりのHello, world(+α)からはじめました。ソースコードはgithubにあって、demos以下にいろいろサンプルがあるので親切だと思います。
以下は、Hello, worldとGETメソッドとPOSTメソッドのサンプルです。適切なとこに置いて実行すればサーバーが立ち上がるかと。
test.py
#!/usr/bin/env python import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from tornado.options import define, options define("port", default=8888, help="run on the given port", type=int) class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") class TestHandler(tornado.web.RequestHandler): def get(self): self.write('<html><body><form action="/test" method="post">' '<input type="text" name="message">' '<input type="submit" value="Submit">' '</form></body></html>') def post(self): self.set_header("Content-Type", "text/plain") self.write("You wrote " + self.get_argument("message")) def main(): tornado.options.parse_command_line() application = tornado.web.Application([ (r"/", MainHandler), (r"/test", TestHandler), ]) http_server = tornado.httpserver.HTTPServer(application) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start() if __name__ == "__main__": main()
tornado.web.RequestHandlerを継承したリクエストハンドラ(上ではMainHandler、TestHandler)を作って、tornado.web.Applicationでマッピング(main関数のとこ)していく感じみたいです。
http://localhost:8888でHello, worldが表示されればオッケーです。http://localhost:8888/testにアクセスすればフォームが出てくるはずです。get()とpost()はそれぞれHTTPのGETとPOSTに対応しています。他のHTTPメソッド(PUT、DELETE、HEAD、OPTION)も使うことができて、何かしら実装しないとHTTPメソッドを処理できません。
ノンブロッキングのとこはあとで勉強する。
FuelPHPのコントローラのテストは割と簡単?
このリンクにもあるように、たびたび社内でもコントローラのテストは話題にあがります。
僕もどうやってテストすればいいかわかっていないのですが、とりあえずステータスコードとビューに渡してるデータだけでもチェックしてみようと思いました。
以下は適当に書いたサンプル
welcomコントローラのテスト
fuel/app/tests/controller/welcome.php
<?php /** * Tests for Controller_Welcome * * @group App */ class Test_Controller_Welcome extends TestCase { /** * ステータスコードのテスト */ public function test_index_status() { // リクエストオブジェクトを作成、HTTPメソッドも指定可能 $request = Request::forge('welcome/index')->set_method('GET'); // リクエストを実行してレスポンスオブジェクトを取得 $response = $request->execute()->response(); // ステータスコードを取得 $test = $response->status; // ステータスコードを取得 $expected = 200; $this->assertEquals($expected, $test); } /** * ビューに送るデータのテスト * データ送ってないので失敗する */ public function test_index_data() { $response = Request::forge('welcome/index')->execute()->response(); // data['test'] = 'hoge'みたいにして送ったデータを取得 $test = $response->body->test; $expected = 'hoge'; $this->assertEquals($expected, $test); } }
リクエストオブジェクトとレスポンスオブジェクトがあるので、これだけなら簡単です。
あとはリクエストオブジェクトにGETとかPOSTのパラメータをセットできたらいいんだけど、それはよくわからなかった。
なんかいい方法ないかなー?