前回の記事
http://press.nekoget.com/report/detail/1008/jp
の続編です。
CI_Profiler Classを拡張しました。
本番環境では、Profilerの結果は表示させないようにします。
file path : application/libraries/MY_Profiler.php
拡張したメソッドは、function run()
....(省略)....
public function run()
{
if($this->CI->config->item("genuine_url")
&& $this->CI->config->item("genuine_url") == $this->CI->config->item("base_url")
)
{
return FALSE;
}
....(省略)....
}
config.phpで$config["genuine_url"]の指定が入ってない場合は、元と同じ挙動になるべきなので、$config["genuine_url"]の設定がある事、本番の設置URLと開発用の設置URLが同じである事→本番で運用中と判断し、Profilerの実行をさせず、falseで返す処理になっています。
前回の記事では、Controllerファイルでprofilerの設定をする際にif文にしていましたが、上記拡張の結果、通常のCodeIgniterの書き方で、本番環境では表示されなくなりました。
$this->output->enable_profiler();
USTREAM上の動画
実際に、ボタンをクリックしてprofilerが閉じたり開いたりしている部分を録画してみました。
profilerで表示される内容はけっこう長いので、表示されている部分をクリックしても表示が閉じるようにしています。
一応これで動くことの確認はできていますが、
unit testをする方法を思案中です。
ライブラリの拡張は、テストを書くまでが拡張なので、テストが書け次第この記事に追記します。
追記です。
unit testを書きました。
勉強会はブログを書くまでが勉強会!
ライブラリ拡張は、テストを書くまでがライブラリ拡張!
では、テストです。
テスト用コントローラにメソッドを用意して、次のようなコードで対応しました。
※私は、'Modular Extensions - HMVC'を使ってテストだけ別のモジュールとして本体コードからフォルダごと切り離しています。なので、configファイルの設置場所はそのモジュール用のフォルダの中なので本体のapplication/config/フォルダではありません。
テストの為のconfigファイルを用意する場合、ファイル名の頭に'test_'と付ける等の工夫は必要だと思います。
.....(省略)....
//本番環境の状態
//テスト用のconfigファイルの呼び出し
$this->load->config("profiler_config1");
//profilerのロード
$this->load->library('profiler');
//実行
$ck = $this->profiler->run();
$title["内容"] = "本番環境の状態のテスト";
$title["site_url"] = $this->config->item("base_url");
$title["genuine_url"] = $this->config->item("genuine_url");
//テストの実行
unit->run($ck, 'is_false', $title["内容"] ,$this->_title($title));
echo br();
//開発環境の状態
//テスト用のconfigファイルの呼び出し
$this->load->config("profiler_config2");
//profilerのロード
$this->load->library('profiler');
//実行
$ck = $this->profiler->run();
$title["内容"] = "開発環境の状態のテスト";
$title["site_url"] = $this->config->item("base_url");
$title["genuine_url"] = $this->config->item("genuine_url");
//テストの実行
echo $this->unit->run($ck, 'is_string', $title["内容"] ,$this->_title($title));
echo $ck;
.....(省略)....
下図は上記テストを動かした結果です。
※テスト用モジュール上の表示ですが....