From cbf134229c50c0b453f985497bcaca646cb8b122 Mon Sep 17 00:00:00 2001 From: administrator Date: Thu, 17 Sep 2015 14:46:09 -0400 Subject: [PATCH] Add maximum wager capability --- app/models/table_rule_set.rb | 4 ++++ app/models/wager.rb | 16 ++++++++++++++++ app/resources/v1/table_rule_set_resource.rb | 1 + spec/acceptance/table_rule_sets_spec.rb | 1 + spec/models/table_rule_set_spec.rb | 6 ++++++ spec/models/wager_spec.rb | 7 +++++++ 6 files changed, 35 insertions(+) diff --git a/app/models/table_rule_set.rb b/app/models/table_rule_set.rb index 664d3e2..002333f 100644 --- a/app/models/table_rule_set.rb +++ b/app/models/table_rule_set.rb @@ -93,5 +93,9 @@ def _restrict_doubling_to_hard_totals_includes_integers_between_2_and_21 errors.add :restrict_doubling_to_hard_totals, "must not contain any values less than 2 or greater than 21" end end + + def maximum_wager_amount + self.minimum_wager_amount * 10 + end end diff --git a/app/models/wager.rb b/app/models/wager.rb index db1134e..bc81f1d 100644 --- a/app/models/wager.rb +++ b/app/models/wager.rb @@ -11,6 +11,21 @@ class Wager < ActiveRecord::Base validates :player, presence: true + validate :_wager_is_less_than_maximum_wager_amount + + def maximum_wager_amount + return Float::INFINITY unless hand && hand.round && hand.round.table && hand.round.table.table_rule_set + hand.round.table.table_rule_set.maximum_wager_amount + end + + def _wager_is_less_than_maximum_wager_amount + if self.amount > maximum_wager_amount + errors.add ("amount must be less than or equal to the maxium_wager_amount #{maximum_wager_amount}") + end + end + + + before_validation :build_matching_financial_transaction def minimum_amount @@ -41,4 +56,5 @@ def build_matching_financial_transaction build_financial_transaction(amount: (-1 * amount), player: player, kind: :wager, action: self) end + end diff --git a/app/resources/v1/table_rule_set_resource.rb b/app/resources/v1/table_rule_set_resource.rb index f91d479..7fb759f 100644 --- a/app/resources/v1/table_rule_set_resource.rb +++ b/app/resources/v1/table_rule_set_resource.rb @@ -31,6 +31,7 @@ class TableRuleSetResource < BaseResource :dealer_wins_ties, :round_initial_betting_window_seconds, :minimum_wager_amount, + :maximum_wager_amount, :minimum_players_per_round, ) diff --git a/spec/acceptance/table_rule_sets_spec.rb b/spec/acceptance/table_rule_sets_spec.rb index 283f9cd..1e53f8d 100644 --- a/spec/acceptance/table_rule_sets_spec.rb +++ b/spec/acceptance/table_rule_sets_spec.rb @@ -305,6 +305,7 @@ expect(parsed["data"]["attributes"]["may-hit-split-aces"]).to eq table_rule_set.may_hit_split_aces expect(parsed["data"]["attributes"]["player-must-stand-on-soft-21"]).to eq table_rule_set.player_must_stand_on_soft_21 expect(parsed["data"]["attributes"]["restrict-doubling-to-hard-totals"]).to eq table_rule_set.restrict_doubling_to_hard_totals + expect(parsed["data"]["attributes"]["maximum-wager-amount"]).to eq table_rule_set.maximum_wager_amount end end diff --git a/spec/models/table_rule_set_spec.rb b/spec/models/table_rule_set_spec.rb index 94415c7..f04e146 100644 --- a/spec/models/table_rule_set_spec.rb +++ b/spec/models/table_rule_set_spec.rb @@ -404,4 +404,10 @@ subject.minimum_players_per_round = 1 expect(subject.minimum_players_per_round).to eq 1 end + + it "has a maximum_wager_amount attribute" do + subject.minimum_wager_amount = 10 + expect(subject.maximum_wager_amount).to eq (10 * subject.minimum_wager_amount) + end + end diff --git a/spec/models/wager_spec.rb b/spec/models/wager_spec.rb index 666acdf..8387b37 100644 --- a/spec/models/wager_spec.rb +++ b/spec/models/wager_spec.rb @@ -75,4 +75,11 @@ expect(subject.minimum_amount).to eq Float::INFINITY end + it "validates that its amount is less than or equal to the maximum_wager_amount for the table" do + expect(subject).to receive(:minimum_amount).and_return(100) + subject.amount = 1001 + subject.valid? + expect(subject.errors[:amount]).to include "must be less than or equal to 1001" + end + end