2013-09-01から1ヶ月間の記事一覧

Apache のリバースプロキシとして Nginx を導入する

参考 NginxとApache - Qiita [キータ] 環境 Debian 7.1 Apache 2.2.22 Nginx 1.2.1 Nginx Rails 関連の情報を漁っていて、前々から「Nginx + Unicorn が良いらしい」と聞いていたので興味はあったのだが、Nginx については「Apache より軽量な HTTP サーバー…

MOE3: 支援付きスタンドオフの解決

spec/models/main_phase_spec.rb さくさく行こう。 マニュアルの Diagram10、French F Gol-Tyn、French F Wes S F Gol-Tyn、Italian F Nap-Tyn、Italian F Rom S F Nap-Tyn の支援付きスタンドオフを実装する。 ちなみに MOE3 の地名は jDip 準拠なので、"Gu…

MOE3: 支援適用処理

spec/models/main_phase_spec.rb 再掲。 describe MainPhase do describe "#resolve_orders" do let(:phase) { MainPhase.create } let(:resolved_orders) { phase.resolve_orders } #(略) shared_context "Diagram8 移動支援", diagram: 8 do let(:army_m…

MOE3: 支援付き攻撃の解決

spec/models/main_phase_spec.rb いよいよ本番といった感じ。 マニュアルの Diagram8、French A Mar–Bur、French A Gas S A Mar-Bur、German A Bur-Holds の支援、攻撃、敗退処理を実装する。 describe MainPhase do describe "#resolve_orders" do let(:pha…

MOE3: 循環移動の解決

spec/models/main_phase_spec.rb テスト。 マニュアルの Diagram6、English F Nth–Hol、French A Hol–Bel、French F Bel-Nth の循環移動処理を実装する。 ここまでの実装だと、それぞれ移動先に未解決の移動命令があるため成否が確定しない。 describe MainP…

MOE3: 玉突き衝突処理のリファクタリング

MoveOrder#resolve_pileup メソッド修正 やっぱり無限ループは怖いのでやっつけ修正。 失敗が確定した MoveOrder は @orders.select{|o| o.move?} から外れるので、全ての MoveOrder の処理が完了するか、処理しきれない分が確定するまでループで回す。 clas…

MOE3: 交換移動の解決

spec/models/main_phase_spec.rb テスト。 マニュアルの Diagram6、German F Ber–Pru と German A Pru–Ber の交換移動禁止処理を実装する。 describe MainPhase do describe "#resolve_orders" do let(:phase) { MainPhase.create } let(:resolved_orders) {…

MOE3: 玉突き衝突の解決

spec/models/main_phase_spec.rb テストを書く。 マニュアルの Diagram5、German A Ber–Pru と German A Kie–Ber の移動失敗の連鎖処理を実装する。 describe MainPhase do describe "#resolve_orders" do let(:phase) { MainPhase.create } let(:resolved_o…

gem: Spring

Rails Application Preloader そもそもプリローダとは何ぞやと問えば、Rails アプリを事前にロードしておくことで rails rake コマンドを高速化するためのものだ。Spring の他には Zeus や Spork がある。 Spork は少しだけ使っていたことがあるが、事前の設…

MOE3: スタンドオフの解決

spec/models/main_phase_spec.rb まずテストを書く。 マニュアルの Diagram4、German A Ber–Sil と Russian A War–Sil のスタンドオフ処理を実装する。 ちなみに Diagram2 は 1 と同じ単純移動(ただし海軍)なので省略。 Diagram3 は海軍にとっての非隣接地…

MOE3: 単純移動命令の解決

MainPhase#resolve_move メソッド 先にテストを書く。 resolve_move 自体は private メソッドの位置付けで*1、実装が進むと名前や扱いが変わる可能性がある、というかその余地を縛りたくないので、テストはあくまで MainPhase#resolve_orders を対象としたも…

MOE3: 行軍解決処理の基本デザイン

MainPhase#resolve_orders の基本形 setup、resolve_move、cleanup の順に処理し、最後の orders(true) では引数の true 指定でキャッシュを破棄したクエリを返す。 class MainPhase < Phase def resolve_orders setup resolve_move cleanup orders(true) en…

MOE3: 行軍解決処理

MainPhase#resolve_orders メソッド いよいよ、肝心要の行軍解決処理、MainPhase#resolve_orders に着手する。 撤退フェイズの RetreatPhase#resolve_orders、調整フェイズの AdjustPhase#resolve_orders は当分後回しで。 行軍解決処理の仕様 フェイズに登…

MOE3: Phase モデル検討

Phase と派生モデル 例によって単一テーブル継承。 派生クラスまで見ても属性は Turn への参照だけのはず。当面は。 Phase モデルの属性 turn_id: 「どの卓の何ターン目か」を特定するための参照。 type: 単一テーブル継承用の属性。 Phase(フェイズ)モデ…

MOE3: Rails4 の find_by

find_by メソッド 小ネタ。 今さら知ったが、Rails4 では find_by_xxx 系のメソッドが非推奨となり、代わりにfind_by メソッドが導入されていた。 元々 method_missing で泥臭いことをやっていたっぽい find_by_xxx が好きになれず、専ら where と first の…

MOE3: 定数定義の罠

OrderStatus の定数 テスト環境でちょっと嵌まった。 OrderStatus のクラス定義はこんな感じ。 class OrderStatus < ActiveRecord::Base UNEXECUTED = OrderStatus.where(code: 0).first INVALID = OrderStatus.where(code:100).first SUCCESS = OrderStatus…

MOE3: OrderStatus モデル検討

OrderStatus(命令状態)モデル またまた忘れてた。 行軍解決に伴う、成功したのか失敗したのか、支援や輸送が成立したのか、撃退されたか等々の状態を表す属性が抜けていた。 OrderStatus への参照として Order に追加しなければ。 Order モデルの属性 play…

MOE3: SupportOrder のテスト

Order#target と Order#target= 理想は TDD なんだけど、実際に処理を書いてみないと挙動のイメージがつかめないことが多いので、どうしてもある程度コードが形になってからテストを用意するスタイルになってしまう。 安定してきたらテスト先行に移れると思…

MOE3: Order モデル実装

スキーマ viaconvoy と sample のデフォルト値は false。 create_table "orders", force: true do |t| t.integer "player_id" t.integer "unit_id" t.integer "destination_id" t.boolean "viaconvoy", default: false t.integer "target_id" t.boolean "sam…