diff --git a/app.rb b/app.rb index 4abb71ec..82f5c456 100644 --- a/app.rb +++ b/app.rb @@ -1,8 +1,33 @@ 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 '/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/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 @@ +