From a835102a64b85a4109d7b5247e20a3b16a9d50ce Mon Sep 17 00:00:00 2001 From: Leigh Rose Date: Fri, 25 Mar 2022 16:23:38 +0000 Subject: [PATCH 1/2] first update --- app.rb | 26 ++++++++++++++++++++++++-- lib/game.rb | 24 ++++++++++++++++++++++++ lib/player.rb | 8 ++++++++ spec/features/display_winner_spec.rb | 7 +++++++ spec/features/enter_names_spec.rb | 6 ++++++ spec/features/take_turn_spec.rb | 6 ++++++ spec/features/test_page_spec.rb | 6 ------ spec/features/web_helpers.rb | 5 +++++ spec/game_spec.rb | 15 +++++++++++++++ spec/spec_helper.rb | 3 ++- views/index.erb | 9 +++++++++ views/play.erb | 5 +++++ views/result.erb | 1 + 13 files changed, 112 insertions(+), 9 deletions(-) create mode 100644 lib/game.rb create mode 100644 lib/player.rb create mode 100644 spec/features/display_winner_spec.rb create mode 100644 spec/features/enter_names_spec.rb create mode 100644 spec/features/take_turn_spec.rb delete mode 100644 spec/features/test_page_spec.rb create mode 100644 spec/features/web_helpers.rb create mode 100644 spec/game_spec.rb create mode 100644 views/index.erb create mode 100644 views/play.erb create mode 100644 views/result.erb diff --git a/app.rb b/app.rb index 4abb71ec..c50c46bc 100644 --- a/app.rb +++ b/app.rb @@ -1,7 +1,29 @@ require 'sinatra/base' +require './lib/player' +require './lib/game' + class RockPaperScissors < Sinatra::Base - get '/test' do - 'test page' + enable :sessions + + get '/' do + erb :index + end + + post '/names' do + $player_1 = Player.new(params[:player_1_name]) + redirect '/play' + end + + get '/play' do + @player_1 = $player_1 + erb :play + end + + post '/result' do + @player_1 = $player_1 + @game = Game.new(@player_1) + @result = @game.determine_winner(params[:choice]) + erb :result end run! if app_file == $0 diff --git a/lib/game.rb b/lib/game.rb new file mode 100644 index 00000000..ec0dccb5 --- /dev/null +++ b/lib/game.rb @@ -0,0 +1,24 @@ +class Game + attr_reader :player + + def initialize(player) + end + + def determine_winner(player_choice) + if (computer_choice == "rock" && player_choice == "scissors") || + (computer_choice == "scissors" && player_choice == "paper") || + (computer_choice == "paper" && player_choice == "rock") + return "You lose" + elsif (computer_choice == player_choice) + return "It's a draw" + else + return "You WIN!" + end + end + +private + + def computer_choice + ["rock", "paper", "scissors"].sample + end +end diff --git a/lib/player.rb b/lib/player.rb new file mode 100644 index 00000000..f4ddfba1 --- /dev/null +++ b/lib/player.rb @@ -0,0 +1,8 @@ +class Player + attr_reader :name + + def initialize(name) + @name = name + end + +end diff --git a/spec/features/display_winner_spec.rb b/spec/features/display_winner_spec.rb new file mode 100644 index 00000000..9125fe85 --- /dev/null +++ b/spec/features/display_winner_spec.rb @@ -0,0 +1,7 @@ +xfeature 'Enter names' do + scenario 'display winner' do + sign_in_and_play + click_button 'choice' + expect(page).to have_content 'win' + end +end diff --git a/spec/features/enter_names_spec.rb b/spec/features/enter_names_spec.rb new file mode 100644 index 00000000..9076110b --- /dev/null +++ b/spec/features/enter_names_spec.rb @@ -0,0 +1,6 @@ +feature 'Enter names' do + scenario 'submitting names' do + sign_in_and_play + expect(page).to have_content 'Leigh' + end +end diff --git a/spec/features/take_turn_spec.rb b/spec/features/take_turn_spec.rb new file mode 100644 index 00000000..38be8409 --- /dev/null +++ b/spec/features/take_turn_spec.rb @@ -0,0 +1,6 @@ +feature 'option to pick' do + scenario 'pick option' do + sign_in_and_play + expect(page).to have_content 'Please type Rock, Paper or Scissors' + end +end diff --git a/spec/features/test_page_spec.rb b/spec/features/test_page_spec.rb deleted file mode 100644 index 5d6e8919..00000000 --- a/spec/features/test_page_spec.rb +++ /dev/null @@ -1,6 +0,0 @@ -feature 'test page' do - scenario 'visit test page' do - visit '/test' - expect(page).to have_content('test page') - end -end diff --git a/spec/features/web_helpers.rb b/spec/features/web_helpers.rb new file mode 100644 index 00000000..b5bc4547 --- /dev/null +++ b/spec/features/web_helpers.rb @@ -0,0 +1,5 @@ +def sign_in_and_play + visit('/') + fill_in :player_1_name, with: 'Leigh' + click_button 'Submit' +end diff --git a/spec/game_spec.rb b/spec/game_spec.rb new file mode 100644 index 00000000..9d5b4c1f --- /dev/null +++ b/spec/game_spec.rb @@ -0,0 +1,15 @@ +require 'game' + +describe Game do + xit "returns a random rock, paper or scissors for computer choice" do +game_1 = Game.new("Leigh") +expect(game_1.computer_choice).to eq ("rock" || "paper" || "scissors") + end + + describe Game do + xit "gives a winner" do + game_1 = Game.new("Leigh") + expect(game_1.computer_choice).to eq ("rock" || "paper" || "scissors") + end +end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2177ec6a..048a551d 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,11 +1,12 @@ require 'capybara/rspec' require 'simplecov' require 'simplecov-console' +require 'features/web_helpers' SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([ SimpleCov::Formatter::Console, # Want a nice code coverage website? Uncomment this next line! - # SimpleCov::Formatter::HTMLFormatter + SimpleCov::Formatter::HTMLFormatter ]) SimpleCov.start diff --git a/views/index.erb b/views/index.erb new file mode 100644 index 00000000..31daefa8 --- /dev/null +++ b/views/index.erb @@ -0,0 +1,9 @@ +

Rock Paper Scissors!

+

Please sign in to start:

+
+ + +
diff --git a/views/play.erb b/views/play.erb new file mode 100644 index 00000000..761c5ab0 --- /dev/null +++ b/views/play.erb @@ -0,0 +1,5 @@ +Hello <%= @player_1.name %>!
+Please type rock, paper or scissors
+ + +
diff --git a/views/result.erb b/views/result.erb new file mode 100644 index 00000000..0fb3d0b1 --- /dev/null +++ b/views/result.erb @@ -0,0 +1 @@ +<%= @result %> From e9412500afe33263818ad6d89b4df28e43c46736 Mon Sep 17 00:00:00 2001 From: Leigh Rose Date: Fri, 25 Mar 2022 16:43:12 +0000 Subject: [PATCH 2/2] 2nd update post redirect --- app.rb | 7 +++++-- views/play.erb | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app.rb b/app.rb index c50c46bc..82f5c456 100644 --- a/app.rb +++ b/app.rb @@ -19,12 +19,15 @@ class RockPaperScissors < Sinatra::Base erb :play end - post '/result' do + post '/choice' do + redirect '/result' + end + + get '/result' do @player_1 = $player_1 @game = Game.new(@player_1) @result = @game.determine_winner(params[:choice]) erb :result end - run! if app_file == $0 end diff --git a/views/play.erb b/views/play.erb index 761c5ab0..b8b63314 100644 --- a/views/play.erb +++ b/views/play.erb @@ -1,5 +1,5 @@ Hello <%= @player_1.name %>!
-Please type rock, paper or scissors
+Please type rock, paper or scissors