rspec

MOE3: 移動失敗後の維持への移動支援の無効

spec/models/main_phase_spec.rb マニュアルの Diagram12、同等戦力のスタンドオフで移動に失敗した German A Mun-Sil が支援付きの Austrian A Boh-Mun に撃退される処理を実装する*1。 これは、移動支援は移動に失敗したユニットの維持には効果がないこと…

MOE3: 同等戦力の維持ユニットへの攻撃

spec/models/main_phase_spec.rb マニュアルの Diagram11、French F Gol-Tyn、French F Wes S F Gol-Tyn、Italian F Tyn-Holds、Italian F Rom S F Tyn-Holds を実装する。 繰り返しになるが、MOE3 の地名は jDip 準拠なので "Gol" は "Lyo" となる。 それと…

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: 交換移動の解決

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: 定数定義の罠

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

MOE3: SupportOrder のテスト

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