tubesocks 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c1d8d58f1cc18308fea86d7b4bab45828b7ee8e4
4
- data.tar.gz: cd5f926872a29b6b1364fb7cabd5c7c457cde346
3
+ metadata.gz: 8ed9ad50120b0ed6993c4b2fa44b501e2e5af035
4
+ data.tar.gz: 713ab82e869a2adb3948a8a537e6ae33dd045480
5
5
  SHA512:
6
- metadata.gz: 8976c81f9e39fd0669e17c2420f9f889639391c3a97e7481e1dbb86772002cd7bb66b5d015549df2c785d47ea18efcce3e95e68774938b6860819759f2269081
7
- data.tar.gz: 98734e4745c28247de9de440e7b601a50c597363f514e08f1c0e218e432f81c6ec4fe85c7d4b8ee09b519194baa88f038a3a499d2e79e8ed444f7ea2cc83df7f
6
+ metadata.gz: d6fc021c7d54e53f550038139696488935cfa9cf85878097fa1d0f747b7b47b3fea5626b39bfd80a0bdec04245813d70710f56186ce407b7c8918f22a23cdbc6
7
+ data.tar.gz: 87e3b494bc6a5b319e73f7b8b5cc8df94c58c58b873fa33e0ee0e88ec59af4c3484c2f84851d8cc4ba13eef5dc4d2cf55bf2a41d304127b2facc24bbe50cb2aa
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2015 Jesse Saletan
1
+ Copyright (c) 2017 Jesse Saletan
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
4
 
data/README CHANGED
@@ -2,4 +2,4 @@ This is a simple game written while following the ruby programming course develo
2
2
 
3
3
  https://pragmaticstudio.com/ruby
4
4
 
5
- This code is copyright (c) 2015 Jesse Saletan. For license details see the accompanying LICENSE file.
5
+ This code is copyright (c) 2017 Jesse Saletan. For license details see the accompanying LICENSE file.
@@ -1,43 +1,32 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative '../lib/studio_game/player'
4
3
  require_relative '../lib/studio_game/game'
5
4
  require_relative '../lib/studio_game/clumsy_player'
6
5
  require_relative '../lib/studio_game/berserk_player'
7
6
 
8
- #player1 = Player.new("moe")
9
- #player2 = Player.new("larry", 60)
10
- #player3 = Player.new("curly", 125)
11
-
12
7
  knuckleheads = StudioGame::Game.new("Knuckleheads")
13
- #knuckleheads.add_player(player1)
14
- #knuckleheads.add_player(player2)
15
- #knuckleheads.add_player(player3)
16
-
17
8
  default_player_file = File.join(File.dirname(__FILE__), 'players.csv')
18
9
  knuckleheads.load_players(ARGV.shift || default_player_file)
19
10
 
20
- klutz = StudioGame::ClumsyPlayer.new("klutz", 105, 3)
11
+ klutz = StudioGame::ClumsyPlayer.new('klutz', 105)
21
12
  knuckleheads.add_player(klutz)
22
- berserker = StudioGame::BerserkPlayer.new("berserker", 50)
13
+
14
+ berserker = StudioGame::BerserkPlayer.new('berserker', 50)
23
15
  knuckleheads.add_player(berserker)
24
16
 
25
17
  loop do
26
- puts "\nHow many game rounds? ('quit' to exit)"
18
+ puts "How many game rounds? ('quit' to exit)"
27
19
  answer = gets.chomp.downcase
28
20
 
29
21
  case answer
30
22
  when /^\d+$/
31
23
  knuckleheads.play(answer.to_i)
32
24
  when 'quit', 'exit'
33
- knuckleheads.print_stats
34
- knuckleheads.save_high_scores
35
25
  break
36
26
  else
37
27
  puts "Please enter a number or 'quit'"
38
28
  end
39
29
  end
40
30
 
41
- #knuckleheads.play(10) do
42
- # knuckleheads.total_points >= 2000
43
- #end
31
+ knuckleheads.print_stats
32
+ knuckleheads.save_high_scores
@@ -2,29 +2,26 @@ require_relative 'player'
2
2
 
3
3
  module StudioGame
4
4
  class BerserkPlayer < Player
5
+
5
6
  def initialize(name, health=100)
6
7
  super(name, health)
7
- @woot_count = 0
8
+ @w00t_count = 0
8
9
  end
9
-
10
+
10
11
  def berserk?
11
- @woot_count > 5
12
+ @w00t_count > 5
12
13
  end
13
-
14
+
14
15
  def w00t
15
16
  super
16
- @woot_count += 1
17
+ @w00t_count += 1
17
18
  puts "#{@name} is berserk!" if berserk?
18
19
  end
19
-
20
+
20
21
  def blam
21
22
  berserk? ? w00t : super
22
- #if berserk?
23
- # w00t
24
- #else
25
- # super
26
- #end
27
23
  end
24
+
28
25
  end
29
26
  end
30
27
 
@@ -2,21 +2,12 @@ require_relative 'player'
2
2
 
3
3
  module StudioGame
4
4
  class ClumsyPlayer < Player
5
- attr_reader :boost_factor
6
-
7
- def initialize(name, health=100, boost_factor=1)
8
- super(name, health)
9
- @boost_factor = boost_factor
10
- end
11
-
5
+
12
6
  def found_treasure(treasure)
13
7
  damaged_treasure = Treasure.new(treasure.name, treasure.points / 2.0)
14
8
  super(damaged_treasure)
15
9
  end
16
-
17
- def w00t
18
- @boost_factor.times { super }
19
- end
10
+
20
11
  end
21
12
  end
22
13
 
@@ -3,13 +3,13 @@ require_relative 'auditable'
3
3
  module StudioGame
4
4
  class Die
5
5
  include Auditable
6
-
6
+
7
7
  attr_reader :number
8
-
9
- # def initialize
10
- # roll
11
- # end
12
-
8
+
9
+ def initialize
10
+ @number = rand(1..6)
11
+ end
12
+
13
13
  def roll
14
14
  @number = rand(1..6)
15
15
  audit
@@ -1,103 +1,90 @@
1
1
  require_relative 'player'
2
2
  require_relative 'die'
3
3
  require_relative 'game_turn'
4
- require_relative 'treasure_trove.rb'
4
+ require_relative 'treasure_trove'
5
+ require 'csv'
5
6
 
6
7
  module StudioGame
7
8
  class Game
8
9
  attr_reader :title
9
-
10
+
10
11
  def initialize(title)
11
12
  @title = title
12
13
  @players = []
13
14
  end
14
-
15
+
15
16
  def add_player(new_player)
16
- @players.push(new_player)
17
+ @players << new_player
17
18
  end
18
-
19
+
19
20
  def play(rounds)
20
21
  puts "There are #{@players.size} players in the game:"
21
22
  @players.each do |player|
22
- puts player
23
+ puts player
23
24
  end
24
-
25
+
25
26
  treasures = TreasureTrove::TREASURES
26
27
  puts "\nThere are #{treasures.size} treasures to be found:"
27
28
  treasures.each do |treasure|
28
- puts "A #{treasure.name} is worth #{treasure.points} points"
29
+ puts "A #{treasure.name} is worth #{treasure.points} points"
29
30
  end
30
-
31
+
31
32
  1.upto(rounds) do |round|
32
- if block_given?
33
- break if yield
34
- end
35
- puts "\nRound #{round}:"
36
- @players.each do |player|
37
- GameTurn.take_turn(player)
38
- puts player
39
- end
33
+ puts "\nRound #{round}:"
34
+ @players.each do |player|
35
+ GameTurn.take_turn(player)
36
+ puts player
37
+ end
40
38
  end
41
39
  end
42
-
40
+
43
41
  def print_stats
44
- strong_players, wimpy_players = @players.partition { |player| player.strong? }
42
+ strong, wimpy = @players.partition { |player| player.strong? }
45
43
  puts "\n#{@title} Statistics:"
46
-
47
- puts "\n#{strong_players.size} strong players:"
48
- strong_players.each do |player|
49
- player.print_name_and_health
44
+
45
+ puts "\n#{strong.size} strong players:"
46
+ strong.each do |player|
47
+ puts player.name_and_health
50
48
  end
51
-
52
- puts "\n#{wimpy_players.size} wimpy players:"
53
- wimpy_players.each do |player|
54
- player.print_name_and_health
49
+
50
+ puts "\n#{wimpy.size} wimpy players:"
51
+ wimpy.each do |player|
52
+ puts player.name_and_health
55
53
  end
56
-
57
- puts "\n#{title} High Scores:"
54
+
55
+ puts "\n#{@title} High Scores:"
58
56
  @players.sort.each do |player|
59
- puts high_score_entry(player)
57
+ puts high_score_entry(player)
60
58
  end
61
-
59
+
62
60
  @players.sort.each do |player|
63
- puts "\n#{player.name}'s point totals:"
64
- player.each_found_treasure do |treasure|
65
- puts "#{treasure.points} total #{treasure.name} points"
66
- end
67
- puts "#{player.points} grand total points"
61
+ puts "\n#{player.name}'s point totals:"
62
+
63
+ player.each_found_treasure do |treasure|
64
+ puts "#{treasure.points} total #{treasure.name} points"
65
+ end
66
+
67
+ puts "#{player.points} grand total points"
68
68
  end
69
69
  end
70
-
71
- def total_points
72
- @players.reduce(0) {|sum, player| sum + player.points}
73
- end
74
-
70
+
75
71
  def load_players(from_file)
76
- File.readlines(from_file).each do |line|
77
- add_player(Player.from_csv(line))
72
+ CSV.foreach(from_file) do |player_data|
73
+ add_player(Player.from_array(player_data))
78
74
  end
79
75
  end
80
-
76
+
77
+ def high_score_entry(player)
78
+ "#{player.name.ljust(20, '.')} #{player.score}"
79
+ end
80
+
81
81
  def save_high_scores(to_file="high_scores.txt")
82
82
  File.open(to_file, "w") do |file|
83
- file.puts "#{@title} High Scores:"
84
- @players.sort.each do |player|
85
- file.puts high_score_entry(player)
86
- end
83
+ file.puts "#{@title} High Scores:"
84
+ @players.sort.each do |player|
85
+ file.puts high_score_entry(player)
86
+ end
87
87
  end
88
88
  end
89
-
90
- def high_score_entry(player)
91
- "#{player.name.ljust(20, '.')} #{player.score}"
92
- end
93
-
94
89
  end
95
90
  end
96
-
97
- if __FILE__ == $0
98
- my_game = Game.new("Test Game")
99
- puts my_game.title
100
- player1 = Player.new("Joe")
101
- my_game.add_player(player1)
102
- my_game.play
103
- end
@@ -1,21 +1,20 @@
1
- require_relative 'loaded_die'
2
-
1
+ require_relative 'player'
2
+ require_relative 'die'
3
+ require_relative 'treasure_trove'
3
4
 
4
5
  module StudioGame
5
6
  module GameTurn
6
-
7
7
  def self.take_turn(player)
8
- die=Die.new
9
- number_rolled = die.roll
10
- case number_rolled
11
- when 1..2
12
- player.blam
13
- when 3..4
14
- puts "#{player.name} was skipped."
15
- else
16
- player.w00t
8
+ die = Die.new
9
+ case die.roll
10
+ when 1..2
11
+ player.blam
12
+ when 5..6
13
+ player.w00t
14
+ else
15
+ puts "#{player.name} was skipped."
17
16
  end
18
-
17
+
19
18
  treasure = TreasureTrove.random
20
19
  player.found_treasure(treasure)
21
20
  end
@@ -3,7 +3,7 @@ require_relative 'auditable'
3
3
  module StudioGame
4
4
  class LoadedDie
5
5
  include Auditable
6
-
6
+
7
7
  attr_reader :number
8
8
 
9
9
  def roll
@@ -1,15 +1,15 @@
1
1
  module StudioGame
2
2
  module Playable
3
- def w00t
4
- self.health += 15
5
- puts "#{name} got w00ted!"
6
- end
7
-
8
3
  def blam
9
4
  self.health -= 10
10
5
  puts "#{name} got blammed!"
11
6
  end
12
-
7
+
8
+ def w00t
9
+ self.health += 15
10
+ puts "#{name} got w00ted!"
11
+ end
12
+
13
13
  def strong?
14
14
  health > 100
15
15
  end
@@ -1,56 +1,54 @@
1
1
  require_relative 'treasure_trove'
2
2
  require_relative 'playable'
3
+ require 'csv'
3
4
 
4
5
  module StudioGame
5
6
  class Player
6
7
  include Playable
7
- attr_accessor :name
8
- attr_accessor :health
9
-
8
+
9
+ attr_accessor :name, :health
10
+
10
11
  def initialize(name, health=100)
11
12
  @name = name.capitalize
12
13
  @health = health
13
14
  @found_treasures = Hash.new(0)
14
15
  end
15
-
16
- def name=(new_name)
17
- @name = new_name.capitalize
18
- end
19
-
16
+
20
17
  def to_s
21
- "I'm #{@name} with health = #{@health}, points = #{points}, and score = #{score}."
18
+ "I'm #{@name} with health = #{@health}, points = #{points}, and score = #{score}."
22
19
  end
23
-
20
+
24
21
  def score
25
22
  @health + points
26
23
  end
27
-
28
- def <=>(other)
29
- other.score <=> score
24
+
25
+ def <=>(other_player)
26
+ other_player.score <=> score
30
27
  end
31
-
32
- def print_name_and_health
33
- puts "#{@name} (#{@health})"
28
+
29
+ def name_and_health
30
+ "#{@name} (#{@health})"
34
31
  end
35
-
32
+
36
33
  def found_treasure(treasure)
37
34
  @found_treasures[treasure.name] += treasure.points
38
- puts "#{@name} found a #{treasure.name} worth #{treasure.points} points"
39
- #puts "#{@name}'s treasures: #{@found_treasures}"
35
+ puts "#{@name} found a #{treasure.name} worth #{treasure.points} points."
36
+ puts "#{@name}'s treasures: #{@found_treasures}"
40
37
  end
41
-
38
+
42
39
  def points
43
- @found_treasures.values.reduce(0, :+)
40
+ @found_treasures.values.reduce(0) { |sum, x| sum + x }
44
41
  end
45
-
42
+
46
43
  def each_found_treasure
47
44
  @found_treasures.each do |name, points|
48
- yield Treasure.new(name, points)
45
+ treasure = Treasure.new(name, points)
46
+ yield treasure
49
47
  end
50
48
  end
51
-
52
- def self.from_csv(string)
53
- name, health = string.split(',')
49
+
50
+ def self.from_array(player_data)
51
+ name, health = player_data
54
52
  Player.new(name, Integer(health))
55
53
  end
56
54
  end
@@ -1,7 +1,8 @@
1
1
  module StudioGame
2
2
  Treasure = Struct.new(:name, :points)
3
-
3
+
4
4
  module TreasureTrove
5
+
5
6
  TREASURES = [
6
7
  Treasure.new(:pie, 5),
7
8
  Treasure.new(:bottle, 25),
@@ -10,9 +11,10 @@ module StudioGame
10
11
  Treasure.new(:broomstick, 200),
11
12
  Treasure.new(:crowbar, 400)
12
13
  ]
13
-
14
+
14
15
  def self.random
15
16
  TREASURES.sample
16
17
  end
18
+
17
19
  end
18
20
  end
@@ -1,9 +1,8 @@
1
- require_relative 'spec_helper'
2
1
  require 'studio_game/berserk_player'
3
2
 
4
3
  module StudioGame
5
4
  describe BerserkPlayer do
6
-
5
+
7
6
  before do
8
7
  $stdout = StringIO.new
9
8
  @initial_health = 50
@@ -14,18 +13,12 @@ module StudioGame
14
13
  1.upto(5) { @player.w00t }
15
14
 
16
15
  expect(@player.berserk?).to be_falsey
17
-
18
- # or if using Rspec 3.0:
19
- # @player.berserk?.should be_falsey
20
16
  end
21
17
 
22
18
  it "goes berserk when w00ted more than 5 times" do
23
19
  1.upto(6) { @player.w00t }
24
20
 
25
21
  expect(@player.berserk?).to be_truthy
26
-
27
- # or if using Rspec 3.0:
28
- # @player.berserk?.should be_truthy
29
22
  end
30
23
 
31
24
  it "gets w00ted instead of blammed when it's gone berserk" do
@@ -34,5 +27,6 @@ module StudioGame
34
27
 
35
28
  expect(@player.health).to eq(@initial_health + (8 * 15))
36
29
  end
30
+
37
31
  end
38
32
  end
@@ -1,4 +1,3 @@
1
- require_relative 'spec_helper'
2
1
  require 'studio_game/clumsy_player'
3
2
 
4
3
  module StudioGame
@@ -10,43 +9,26 @@ module StudioGame
10
9
 
11
10
  it "only gets half the point value for each treasure" do
12
11
  expect(@player.points).to eq(0)
13
-
12
+
14
13
  hammer = Treasure.new(:hammer, 50)
15
14
  @player.found_treasure(hammer)
16
15
  @player.found_treasure(hammer)
17
16
  @player.found_treasure(hammer)
18
-
17
+
19
18
  expect(@player.points).to eq(75)
20
-
19
+
21
20
  crowbar = Treasure.new(:crowbar, 400)
22
21
  @player.found_treasure(crowbar)
23
22
 
24
- expect(@player.points).to eq(275)
23
+ expect(@player.points).to eq(275)
25
24
 
26
25
  yielded = []
27
26
  @player.each_found_treasure do |treasure|
28
- yielded << treasure
27
+ yielded << treasure
29
28
  end
30
-
29
+
31
30
  expect(yielded).to eq([Treasure.new(:hammer, 75), Treasure.new(:crowbar, 200)])
32
31
  end
33
-
34
- context "with a boost factor" do
35
- before do
36
- @initial_health = 100
37
- @boost_factor = 5
38
- @player = ClumsyPlayer.new("klutz", @initial_health, @boost_factor)
39
- end
40
-
41
- it "has a boost factor" do
42
- expect(@player.boost_factor).to eq(5)
43
- end
44
-
45
- it "gets boost factor number of w00ts when w00ted" do
46
- @player.w00t
47
-
48
- expect(@player.health).to eq(@initial_health + (15 * @boost_factor))
49
- end
50
- end
32
+
51
33
  end
52
34
  end
@@ -1,57 +1,48 @@
1
- require_relative 'spec_helper'
2
1
  require 'studio_game/game'
2
+ require 'studio_game/game_turn'
3
3
 
4
4
  module StudioGame
5
5
  describe Game do
6
-
6
+
7
7
  before do
8
8
  $stdout = StringIO.new
9
9
  @game = Game.new("Knuckleheads")
10
+ @rounds = 2
11
+
10
12
  @initial_health = 100
11
13
  @player = Player.new("moe", @initial_health)
14
+
12
15
  @game.add_player(@player)
13
16
  end
14
-
15
- it "w00ts the player when a high number is rolled" do
17
+
18
+ it "w00ts the player if a high number is rolled" do
16
19
  allow_any_instance_of(Die).to receive(:roll).and_return(5)
17
-
18
- @game.play(2)
19
- expect(@player.health).to eq(@initial_health + (15 * 2))
20
- end
21
-
22
- it "skips the player when a medium number is rolled" do
20
+
21
+ @game.play(@rounds)
22
+ expect(@player.health).to eq(@initial_health + (15 * @rounds))
23
+ end
24
+
25
+ it "skips the player if a medium number is rolled" do
23
26
  allow_any_instance_of(Die).to receive(:roll).and_return(3)
24
-
25
- @game.play(2)
26
- expect(@player.health).to eq(@initial_health)
27
- end
28
-
29
- it "blams the player when a low number is rolled" do
27
+
28
+ @game.play(@rounds)
29
+ expect(@player.health).to eq(@initial_health)
30
+ end
31
+
32
+ it "blams the player if a low number is rolled" do
30
33
  allow_any_instance_of(Die).to receive(:roll).and_return(1)
31
-
32
- @game.play(2)
33
- expect(@player.health).to eq(@initial_health - (10 * 2))
34
- end
35
-
36
- it "assigns a treasure for points during a player's turn" do
37
- @game.play(1)
38
- expect(@player.points).not_to be_zero
39
- end
40
-
41
- it "computes total points as the sum of all player points" do
34
+
35
+ @game.play(@rounds)
36
+ expect(@player.health).to eq(@initial_health - (10 * @rounds))
37
+ end
38
+
39
+ it "assigns a treasure for points during a player's turn" do
42
40
  game = Game.new("Knuckleheads")
43
-
44
- player1 = Player.new("moe")
45
- player2 = Player.new("larry")
46
-
47
- game.add_player(player1)
48
- game.add_player(player2)
49
-
50
- player1.found_treasure(Treasure.new(:hammer, 50))
51
- player1.found_treasure(Treasure.new(:hammer, 50))
52
- player2.found_treasure(Treasure.new(:crowbar, 400))
53
-
54
- expect(game.total_points).to eq(500)
41
+ player = Player.new("moe")
42
+ game.add_player(player)
43
+ game.play(1)
44
+ expect(player.points).not_to be_zero
55
45
  end
46
+
56
47
  end
57
48
  end
@@ -1,91 +1,92 @@
1
- require_relative 'spec_helper'
2
1
  require 'studio_game/player'
3
- require 'studio_game/treasure_trove'
4
2
 
5
3
  module StudioGame
6
4
  describe Player do
7
-
5
+
8
6
  before do
9
7
  $stdout = StringIO.new
10
- @initial_health = 150
11
- @player = Player.new("larry", @initial_health)
8
+ @name="larry"
9
+ @health = 125
10
+ @player = Player.new(@name, @health)
12
11
  end
13
-
12
+
14
13
  it "has a capitalized name" do
15
- expect(@player.name).to eq("Larry")
14
+ expect(@player.name).to eq(@name.capitalize)
16
15
  end
17
-
16
+
18
17
  it "has an initial health" do
19
- expect(@player.health).to eq(150)
18
+ expect(@player.health).to eq(@health)
20
19
  end
21
-
22
- it "has a string representation" do
23
- @player.found_treasure(Treasure.new(:hammer, 50))
24
- @player.found_treasure(Treasure.new(:hammer, 50))
25
-
26
- @player.to_s.should == "I'm Larry with health = 150, points = 100, and score = 250."
20
+
21
+ it "has a string representation" do
22
+ score = @health + @player.points
23
+ expect(@player.to_s).to eq("I'm #{@name.capitalize} with health = #{@health}, points = #{@player.points}, and score = #{score}.")
27
24
  end
28
-
25
+
29
26
  it "computes a score as the sum of its health and points" do
30
27
  @player.found_treasure(Treasure.new(:hammer, 50))
31
28
  @player.found_treasure(Treasure.new(:hammer, 50))
32
-
33
- expect(@player.score).to eq(250)
29
+
30
+ expect(@player.score).to eq(@health + 100)
34
31
  end
35
-
32
+
36
33
  it "increases health by 15 when w00ted" do
37
34
  @player.w00t
38
- expect(@player.health).to eq(150 + 15)
35
+ expect(@player.health).to eq(@health + 15)
39
36
  end
40
-
37
+
41
38
  it "decreases health by 10 when blammed" do
42
39
  @player.blam
43
- expect(@player.health).to eq(150 - 10)
40
+ expect(@player.health).to eq(@health - 10)
44
41
  end
45
-
46
- it "computes points as the sum of all treasure points" do
47
- @player.points.should == 0
48
-
49
- @player.found_treasure(Treasure.new(:hammer, 50))
50
-
51
- @player.points.should == 50
52
-
53
- @player.found_treasure(Treasure.new(:crowbar, 400))
54
-
55
- @player.points.should == 450
56
-
57
- @player.found_treasure(Treasure.new(:hammer, 50))
58
-
59
- @player.points.should == 500
60
- end
61
-
62
- it "can be created from a CSV string" do
63
- player = Player.from_csv("larry,150")
64
-
65
- player.name.should == "Larry"
66
- player.health.should == 150
67
- end
68
-
42
+
69
43
  context "with a health greater than 100" do
70
44
  before do
71
- @player = Player.new("larry", 150)
45
+ @player = Player.new("larry", 150)
72
46
  end
73
-
47
+
74
48
  it "is strong" do
75
- expect(@player).to be_strong
49
+ expect(@player).to be_strong
76
50
  end
77
51
  end
78
-
79
- context "with a health equal to 100" do
52
+
53
+ context "with a health <= 100" do
80
54
  before do
81
- @player = Player.new("larry", 100)
55
+ @player = Player.new("larry", 100)
82
56
  end
83
-
57
+
84
58
  it "is not strong" do
85
- expect(@player).not_to be_strong
59
+ expect(@player).not_to be_strong
86
60
  end
87
61
  end
88
-
62
+
63
+ context "in a collection of players" do
64
+ before do
65
+ @player1 = Player.new("moe", 100)
66
+ @player2 = Player.new("larry", 200)
67
+ @player3 = Player.new("curly", 300)
68
+
69
+ @players = [@player1, @player2, @player3]
70
+ end
71
+
72
+ it "is sorted by decreasing score" do
73
+ expect(@players.sort).to eq([@player3, @player2, @player1])
74
+ end
75
+ end
76
+
77
+ it "computes points as the sum of all treasure points" do
78
+ expect(@player.points).to eq(0)
79
+
80
+ @player.found_treasure(Treasure.new(:hammer, 50))
81
+ expect(@player.points).to eq(50)
82
+
83
+ @player.found_treasure(Treasure.new(:crowbar, 400))
84
+ expect(@player.points).to eq(450)
85
+
86
+ @player.found_treasure(Treasure.new(:hammer, 50))
87
+ expect(@player.points).to eq(500)
88
+ end
89
+
89
90
  it "yields each found treasure and its total points" do
90
91
  @player.found_treasure(Treasure.new(:skillet, 100))
91
92
  @player.found_treasure(Treasure.new(:skillet, 100))
@@ -95,31 +96,25 @@ module StudioGame
95
96
  @player.found_treasure(Treasure.new(:bottle, 5))
96
97
  @player.found_treasure(Treasure.new(:bottle, 5))
97
98
  @player.found_treasure(Treasure.new(:bottle, 5))
98
-
99
+
99
100
  yielded = []
100
101
  @player.each_found_treasure do |treasure|
101
- yielded << treasure
102
+ yielded << treasure
102
103
  end
103
-
104
- yielded.should == [
105
- Treasure.new(:skillet, 200),
106
- Treasure.new(:hammer, 50),
107
- Treasure.new(:bottle, 25)
108
- ]
104
+
105
+ expect(yielded).to eq([
106
+ Treasure.new(:skillet, 200),
107
+ Treasure.new(:hammer, 50),
108
+ Treasure.new(:bottle, 25)
109
+ ])
109
110
  end
110
-
111
- context "in a collection of players" do
112
- before do
113
- @player1 = Player.new("moe", 100)
114
- @player2 = Player.new("larry", 200)
115
- @player3 = Player.new("curly", 300)
116
-
117
- @players = [@player1, @player2, @player3]
118
- end
119
-
120
- it "is sorted by decreasing score" do
121
- expect(@players.sort).to eq([@player3, @player2, @player1])
122
- end
111
+
112
+ it "can be created from an array of player data" do
113
+ player = Player.from_array(['Mozart', 125])
114
+
115
+ expect(player.name).to eq('Mozart')
116
+ expect(player.health).to eq(125)
123
117
  end
118
+
124
119
  end
125
120
  end
@@ -1,4 +1,3 @@
1
- require_relative 'spec_helper'
2
1
  require 'studio_game/treasure_trove'
3
2
 
4
3
  module StudioGame
@@ -17,7 +16,7 @@ module StudioGame
17
16
  end
18
17
 
19
18
  end
20
-
19
+
21
20
  describe TreasureTrove do
22
21
 
23
22
  it "has six treasures" do
@@ -25,33 +24,40 @@ module StudioGame
25
24
  end
26
25
 
27
26
  it "has a pie worth 5 points" do
28
- expect(TreasureTrove::TREASURES[0]).to eq(Treasure.new(:pie, 5))
27
+ pie = Treasure.new(:pie, 5)
28
+ expect(TreasureTrove::TREASURES).to include(pie)
29
29
  end
30
30
 
31
31
  it "has a bottle worth 25 points" do
32
- expect(TreasureTrove::TREASURES[1]).to eq(Treasure.new(:bottle, 25))
32
+ bottle = Treasure.new(:bottle, 25)
33
+ expect(TreasureTrove::TREASURES).to include(bottle)
33
34
  end
34
35
 
35
36
  it "has a hammer worth 50 points" do
36
- expect(TreasureTrove::TREASURES[2]).to eq(Treasure.new(:hammer, 50))
37
+ hammer = Treasure.new(:hammer, 50)
38
+ expect(TreasureTrove::TREASURES).to include(hammer)
37
39
  end
38
40
 
39
41
  it "has a skillet worth 100 points" do
40
- expect(TreasureTrove::TREASURES[3]).to eq(Treasure.new(:skillet, 100))
42
+ skillet = Treasure.new(:skillet, 100)
43
+ expect(TreasureTrove::TREASURES).to include(skillet)
41
44
  end
42
-
45
+
43
46
  it "has a broomstick worth 200 points" do
44
- expect(TreasureTrove::TREASURES[4]).to eq(Treasure.new(:broomstick, 200))
47
+ broomstick = Treasure.new(:broomstick, 200)
48
+ expect(TreasureTrove::TREASURES).to include(broomstick)
45
49
  end
46
50
 
47
51
  it "has a crowbar worth 400 points" do
48
- expect(TreasureTrove::TREASURES[5]).to eq(Treasure.new(:crowbar, 400))
52
+ crowbar = Treasure.new(:crowbar, 400)
53
+ expect(TreasureTrove::TREASURES).to include(crowbar)
49
54
  end
50
-
55
+
51
56
  it "returns a random treasure" do
52
57
  treasure = TreasureTrove.random
53
-
58
+
54
59
  expect(TreasureTrove::TREASURES).to include(treasure)
55
60
  end
61
+
56
62
  end
57
63
  end
metadata CHANGED
@@ -1,41 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tubesocks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jesse Saletan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-18 00:00:00.000000000 Z
11
+ date: 2017-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '3.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '3.0'
27
27
  description: |
28
28
  This is a simple game written while following the ruby programming course developed by Pragmatic Studio. For course details visit:
29
29
 
30
30
  https://pragmaticstudio.com/ruby
31
31
 
32
- This code is copyright (c) 2015 Jesse Saletan. For license details see the accompanying LICENSE file.
32
+ This code is copyright (c) 2017 Jesse Saletan. For license details see the accompanying LICENSE file.
33
33
  email: rubygems@saletan.com
34
34
  executables:
35
35
  - studio_game
36
36
  extensions: []
37
37
  extra_rdoc_files: []
38
38
  files:
39
+ - LICENSE
40
+ - README
39
41
  - bin/players.csv
40
42
  - bin/studio_game
41
43
  - lib/studio_game/auditable.rb
@@ -52,10 +54,7 @@ files:
52
54
  - spec/studio_game/clumsy_player_spec.rb
53
55
  - spec/studio_game/game_spec.rb
54
56
  - spec/studio_game/player_spec.rb
55
- - spec/studio_game/spec_helper.rb
56
57
  - spec/studio_game/treasure_trove_spec.rb
57
- - LICENSE
58
- - README
59
58
  homepage: https://pragmaticstudio.com/ruby
60
59
  licenses:
61
60
  - MIT
@@ -66,24 +65,23 @@ require_paths:
66
65
  - lib
67
66
  required_ruby_version: !ruby/object:Gem::Requirement
68
67
  requirements:
69
- - - '>='
68
+ - - ">="
70
69
  - !ruby/object:Gem::Version
71
70
  version: '1.9'
72
71
  required_rubygems_version: !ruby/object:Gem::Requirement
73
72
  requirements:
74
- - - '>='
73
+ - - ">="
75
74
  - !ruby/object:Gem::Version
76
75
  version: '0'
77
76
  requirements: []
78
77
  rubyforge_project:
79
- rubygems_version: 2.0.14
78
+ rubygems_version: 2.5.1
80
79
  signing_key:
81
80
  specification_version: 4
82
81
  summary: A simple game created while learning ruby
83
82
  test_files:
84
- - spec/studio_game/berserk_player_spec.rb
85
- - spec/studio_game/clumsy_player_spec.rb
86
- - spec/studio_game/game_spec.rb
87
83
  - spec/studio_game/player_spec.rb
88
- - spec/studio_game/spec_helper.rb
89
84
  - spec/studio_game/treasure_trove_spec.rb
85
+ - spec/studio_game/clumsy_player_spec.rb
86
+ - spec/studio_game/game_spec.rb
87
+ - spec/studio_game/berserk_player_spec.rb
@@ -1,8 +0,0 @@
1
- RSpec.configure do |config|
2
- config.expect_with :rspec do |c|
3
- c.syntax = [:should, :expect]
4
- end
5
- config.mock_with :rspec do |c|
6
- c.syntax = [:should, :expect]
7
- end
8
- end