From 6c58cea777109fddbd4405a60091eee8a69203f2 Mon Sep 17 00:00:00 2001 From: Noel Date: Thu, 17 Sep 2015 18:35:40 +0000 Subject: [PATCH] Wins losses on player --- app/models/player.rb | 8 +++++ app/resources/v1/player_resource.rb | 6 +++- ...17173215_add_wins_and_losses_to_players.rb | 6 ++++ db/schema.rb | 4 ++- spec/models/player_spec.rb | 30 +++++++++++++++++++ spec/policies/player_policy_spec.rb | 9 ++++++ spec/resources/v1/player_resource_spec.rb | 4 ++- 7 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20150917173215_add_wins_and_losses_to_players.rb diff --git a/app/models/player.rb b/app/models/player.rb index 53ef633..dc1d4c2 100644 --- a/app/models/player.rb +++ b/app/models/player.rb @@ -19,5 +19,13 @@ def balance def _credit_account transactions.create(kind: "credit", amount: 1000) end + + def win_percentage + if (wins + losses) == 0 + 0 + else + 100*wins/(wins+losses) + end + end end diff --git a/app/resources/v1/player_resource.rb b/app/resources/v1/player_resource.rb index bd8d85f..da3a80b 100644 --- a/app/resources/v1/player_resource.rb +++ b/app/resources/v1/player_resource.rb @@ -2,6 +2,8 @@ module V1 class PlayerResource < BaseResource attribute :name + attribute :wins + attribute :losses has_one :user @@ -11,7 +13,9 @@ class << self def creatable_fields(context) [ :user, - :name + :name, + :wins, + :losses ] end diff --git a/db/migrate/20150917173215_add_wins_and_losses_to_players.rb b/db/migrate/20150917173215_add_wins_and_losses_to_players.rb new file mode 100644 index 0000000..ce3cae8 --- /dev/null +++ b/db/migrate/20150917173215_add_wins_and_losses_to_players.rb @@ -0,0 +1,6 @@ +class AddWinsAndLossesToPlayers < ActiveRecord::Migration + def change + add_column :players, :wins, :integer, default: 0 + add_column :players, :losses, :integer, default: 0 + end +end diff --git a/db/schema.rb b/db/schema.rb index cec8897..84b50a1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150917151639) do +ActiveRecord::Schema.define(version: 20150917173215) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -82,6 +82,8 @@ t.datetime "updated_at", null: false t.integer "user_id", null: false t.string "name", default: "Unnamed", null: false + t.integer "wins", default: 0 + t.integer "losses", default: 0 end add_index "players", ["user_id"], name: "index_players_on_user_id", using: :btree diff --git a/spec/models/player_spec.rb b/spec/models/player_spec.rb index 9e9ca03..cad0428 100644 --- a/spec/models/player_spec.rb +++ b/spec/models/player_spec.rb @@ -53,4 +53,34 @@ expect(subject.name).not_to be_blank end + it "has a wins attribute" do + subject.wins = 3 + expect(subject.wins).to eq 3 + end + + it "initializes with wins" do + expect(subject.wins).not_to be_blank + end + + it "has a losses attribute" do + subject.losses = 3 + expect(subject.losses).to eq 3 + end + + it "initializes with losses" do + expect(subject.losses).not_to be_blank + end + + it "calculates win percent" do + subject.wins = 8 + subject.losses = 8 + expect(subject.win_percentage).to eq 50 + subject.wins = 4 + subject.losses = 0 + expect(subject.win_percentage).to eq 100 + subject.wins = 0 + subject.losses = 8 + expect(subject.win_percentage).to eq 0 + end + end diff --git a/spec/policies/player_policy_spec.rb b/spec/policies/player_policy_spec.rb index a94a9b1..fb0f213 100644 --- a/spec/policies/player_policy_spec.rb +++ b/spec/policies/player_policy_spec.rb @@ -24,6 +24,15 @@ it "can destroy the player" do expect(subject.destroy?).to eq true end + # TODO: How would we implement this? + #it "cannot update wins" do + #subject.wins = 1 + #expect(subject.update?).to eq false + #end + #it "cannot update losses" do + #subject.losses = 1 + #expect(subject.update?).to eq false + #end it "has the player in scope" do expect(subject.scope).to include record end diff --git a/spec/resources/v1/player_resource_spec.rb b/spec/resources/v1/player_resource_spec.rb index f23d047..6a915e5 100644 --- a/spec/resources/v1/player_resource_spec.rb +++ b/spec/resources/v1/player_resource_spec.rb @@ -4,7 +4,9 @@ module V1 let :creatable_and_updatable_fields do [ :user, - :name + :name, + :wins, + :losses ].sort end