pragmatic_ruby_lesson 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 14a09badd62e071e7e3afb74a998602dcc7c84a3
4
+ data.tar.gz: 77cf1bfc6a24a7f9e45650080350114ae76ead88
5
+ SHA512:
6
+ metadata.gz: a0afd593ec4ca48c2b30a449c1206c887d6dfa988c753df902134683a0022c12074057209f624312f6f92f877b1ea6ffdf54e78e4247071bcf79811a7b339090
7
+ data.tar.gz: 204a9b28bde19a5540b71c46dbd81d6bb1b45822b56a01804c6ef5da01388b592ef974277aeca4d2e143fd30bc5b1157a782821e3d8cbacd333babd5f594e2b8
data/LICENSE ADDED
@@ -0,0 +1,10 @@
1
+
2
+
3
+ Copyright (c) 2015 ET
4
+
5
+
6
+ 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:
7
+
8
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9
+
10
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1 @@
1
+ This is the final lesson of the Pragmatic Ruby Sessions - Deployment and creating a Ruby Gem
data/bin/players.csv ADDED
@@ -0,0 +1,3 @@
1
+ Punisher,100
2
+ Batman,150
3
+ Daredevil,125
data/bin/studio_game ADDED
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/studio_game/game'
4
+
5
+ # player1 = Player.new("moe")
6
+ # player2 = Player.new("larry", 60)
7
+ # player3 = Player.new("curly", 125)
8
+
9
+ new_game = StudioGame::Game.new("Knuckleheads")
10
+
11
+ default_player_file = File.join(File.dirname(__FILE__), 'players.csv')
12
+ new_game.load_players(ARGV.shift || default_player_file)
13
+ # new_game.add_player(player1)
14
+ # new_game.add_player(player2)
15
+ # new_game.add_player(player3)
16
+ klutz = StudioGame::ClumsyPlayer.new("klutz", 105)
17
+ new_game.add_player(klutz)
18
+ berserker = StudioGame::BerserkPlayer.new("berserker", 50)
19
+ new_game.add_player(berserker)
20
+
21
+ loop do
22
+ puts "\nHow many game rounds? ('quit' to exit)"
23
+ answer = gets.chomp.downcase
24
+
25
+ case answer
26
+ when /^\d+$/
27
+ new_game.play(answer.to_i) do
28
+ new_game.total_points >= 2000
29
+ end
30
+ when 'quit', 'exit'
31
+ new_game.print_stats
32
+ new_game.save_high_scores
33
+ break
34
+ else
35
+ puts "Please enter a number or 'quit'"
36
+ end
37
+ end
38
+
39
+ # players = [player1, player2, player3]
40
+
41
+ # puts "There are #{players.size} players in the game"
42
+
43
+ # # players.each do |plyr|
44
+ # # puts plyr.blam
45
+ # # puts plyr
46
+ # # end
47
+
48
+ # players.pop
49
+ # players.push(player4 = Player.new("shemp", 90))
50
+ # puts players
@@ -0,0 +1,7 @@
1
+ module StudioGame
2
+ module Auditable
3
+ def audit
4
+ puts "Rolled a #{self.number} (#{self.class})"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,31 @@
1
+ require_relative 'player'
2
+
3
+ module StudioGame
4
+ class BerserkPlayer < Player
5
+ def initialize(name, health = 100)
6
+ super(name, health)
7
+ @w00t_count = 0
8
+ end
9
+
10
+ def berserk?
11
+ @w00t_count > 5
12
+ end
13
+
14
+ def w00t
15
+ super
16
+ @w00t_count += 1
17
+ puts "#{self.name} is berserk!" if berserk?
18
+ end
19
+
20
+ def blam
21
+ berserk? ? w00t : super
22
+ end
23
+ end
24
+
25
+ if __FILE__ == $0
26
+ berserker = BerserkPlayer.new("berserker", 50)
27
+ 6.times { berserker.w00t }
28
+ 2.times { berserker.blam }
29
+ puts berserker.health
30
+ end
31
+ end
@@ -0,0 +1,39 @@
1
+ require_relative 'player'
2
+
3
+ module StudioGame
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
+
12
+ def found_treasure(treasure)
13
+ broken_treasure = Treasure.new(treasure.name, treasure.points / 2.0)
14
+ super(broken_treasure)
15
+ # puts "#{self.name}'s treasures: #{@found_treasures}."
16
+ end
17
+
18
+ def w00t
19
+ @boost_factor.times {super}
20
+ end
21
+ end
22
+
23
+ if __FILE__ == $0
24
+ clumsy = ClumsyPlayer.new("klutz")
25
+
26
+ hammer = Treasure.new(:hammer, 50)
27
+ clumsy.found_treasure(hammer)
28
+ clumsy.found_treasure(hammer)
29
+ clumsy.found_treasure(hammer)
30
+
31
+ crowbar = Trasure.new(:crowbar, 400)
32
+ clumsy.found_trasure(crowbar)
33
+
34
+ clumsy.each_found_treasure do |treasure|
35
+ puts "#{treasure.points} total #{treasure.name} points"
36
+ end
37
+ puts "#{clumsy.points} grant total points"
38
+ end
39
+ end
@@ -0,0 +1,19 @@
1
+ require_relative 'auditable'
2
+
3
+ module StudioGame
4
+ class Die
5
+ include Auditable
6
+
7
+ attr_reader :number
8
+
9
+ def initialize
10
+ self.roll
11
+ end
12
+
13
+ def roll
14
+ @number = rand(1..6)
15
+ audit
16
+ return @number
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,114 @@
1
+ require_relative 'player'
2
+ require_relative 'die'
3
+ require_relative 'game_turn'
4
+ require_relative 'treasure_trove'
5
+ require_relative 'clumsy_player'
6
+ require_relative 'berserk_player'
7
+ require 'csv'
8
+
9
+ module StudioGame
10
+ class Game
11
+ attr_reader :title
12
+
13
+ def initialize(title)
14
+ @title = title
15
+ @players = []
16
+ end
17
+
18
+ def high_score_entry(player)
19
+ "#{player.name}".ljust(20, '.') + "#{player.score}"
20
+ end
21
+
22
+ # def load_players(filename)
23
+ # File.readlines(filename).each do |line|
24
+ # self.add_player(Player.from_csv(line))
25
+ # end
26
+ # end
27
+
28
+ def load_players(filename)
29
+ CSV.foreach(filename) do |row|
30
+ player = Player.new(row[0], row[1].to_i)
31
+ self.add_player(player)
32
+ end
33
+ end
34
+
35
+ def save_high_scores(filename="high_scores.txt")
36
+ File.open(filename, "w") do |file|
37
+ file.puts "#{@title} High Scores:"
38
+ @players.sort.each do |player|
39
+ file.puts high_score_entry(player)
40
+ end
41
+ end
42
+ end
43
+
44
+ def add_player(player)
45
+ @players << player
46
+ end
47
+
48
+ def play(rounds)
49
+ 1.upto(rounds) do |round|
50
+
51
+ if block_given?
52
+ break if yield
53
+ end
54
+
55
+ puts "There are #{@players.size} players in #{@title}:"
56
+
57
+ @players.each do |player|
58
+ puts player
59
+ end
60
+
61
+ treasures = TreasureTrove::TREASURES
62
+ puts "\nThere are #{treasures.size} treasures to be found:"
63
+ treasures.each do |treasure|
64
+ puts "A #{treasure.name} is worth #{treasure.points} points."
65
+ end
66
+
67
+ 1.upto(rounds) do |round|
68
+ puts "\nRound #{round}:"
69
+ @players.each do |player|
70
+ GameTurn.take_turn(player)
71
+ # puts player
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ def print_name_and_health(players)
78
+ players.each do |player|
79
+ "#{player.name} (#{player.health})"
80
+ end
81
+ end
82
+
83
+ def print_stats
84
+ strong_players, wimpy_players = @players.partition { |player| player.strong? }
85
+
86
+ puts "\n#{@title} Statistics:"
87
+
88
+ puts "\n#{strong_players.size} strong players:"
89
+ puts print_name_and_health(strong_players)
90
+
91
+ puts "\n#{wimpy_players.size} wimpy players:"
92
+ puts print_name_and_health(wimpy_players)
93
+
94
+ @players.each do |player|
95
+ puts "\n#{player.name}'s point totals:"
96
+ player.each_found_treasure do |treasure|
97
+ puts "#{treasure.points} total #{treasure.name} points"
98
+ end
99
+ puts "#{player.score} grand total points"
100
+ end
101
+
102
+ puts "\n#{@title} High Scores:"
103
+ @players.sort.each do |player|
104
+ puts high_score_entry(player)
105
+ end
106
+
107
+ puts "#{total_points} total points from treasures found."
108
+ end
109
+
110
+ def total_points
111
+ @players.reduce(0) {|sum, player| sum + player.points}
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,26 @@
1
+ require_relative 'player'
2
+ require_relative 'die'
3
+ require_relative 'treasure_trove'
4
+ require_relative 'loaded_die'
5
+
6
+ module StudioGame
7
+ module GameTurn
8
+ def self.take_turn(player)
9
+ die = Die.new
10
+ # die = LoadedDie.new
11
+ number_rolled = die.roll
12
+
13
+ case number_rolled
14
+ when 1..2
15
+ player.blam
16
+ when 3..4
17
+ puts "#{player.name} was skipped."
18
+ else
19
+ player.w00t
20
+ end
21
+
22
+ treasure = TreasureTrove.random
23
+ player.found_treasure(treasure)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'auditable'
2
+
3
+ module StudioGame
4
+ class LoadedDie
5
+ include Auditable
6
+
7
+ attr_reader :number
8
+
9
+ def roll
10
+ numbers = [1, 1, 2, 5, 6, 6]
11
+ @number = numbers.sample
12
+ audit
13
+ return @number
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ module StudioGame
2
+ module Playable
3
+ def blam
4
+ self.health -= 10
5
+ "#{name} got blammed!"
6
+ end
7
+
8
+ def w00t
9
+ self.health += 15
10
+ puts "#{name} got w00ted!"
11
+ end
12
+
13
+ def strong?
14
+ self.health > 100
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,64 @@
1
+ require_relative 'treasure_trove'
2
+ require_relative 'playable'
3
+
4
+ module StudioGame
5
+ class Player
6
+ include Playable
7
+
8
+ attr_accessor :name
9
+ attr_accessor :health
10
+
11
+ def initialize(name, health = 100)
12
+ @name = name.capitalize
13
+ @health = health
14
+ @found_treasures = Hash.new(0)
15
+ end
16
+
17
+ def self.from_csv(string)
18
+ name, health = string.split(',')
19
+ Player.new(name, Integer(health))
20
+ end
21
+
22
+ def each_found_treasure
23
+ @found_treasures.each do |name, points|
24
+ yield Treasure.new(name, points)
25
+ end
26
+ end
27
+
28
+ def found_treasure(treasure)
29
+ @found_treasures[treasure.name] += treasure.points
30
+ puts "#{self.name} found a #{treasure.name} worth #{treasure.points} points."
31
+ # puts "#{self.name}'s treasures: #{@found_treasures}."
32
+ end
33
+
34
+ def points
35
+ @found_treasures.values.reduce(0, :+)
36
+ end
37
+
38
+ def to_s
39
+ "I'm #{@name} with a health = #{@health}, points = #{points}, and a score = #{score}."
40
+ end
41
+
42
+ def score
43
+ @health + self.points
44
+ end
45
+
46
+ def name=(new_name)
47
+ @name = new_name.capitalize
48
+ end
49
+
50
+ def <=>(other)
51
+ other.score <=> self.score
52
+ end
53
+ end
54
+
55
+ if __FILE__ == $0
56
+ player = Player.new("moe")
57
+ puts player.name
58
+ puts player.health
59
+ player.w00t
60
+ puts player.health
61
+ player.blam
62
+ puts player.health
63
+ end
64
+ end
@@ -0,0 +1,22 @@
1
+ module StudioGame
2
+ Treasure = Struct.new(:name, :points)
3
+
4
+ module TreasureTrove
5
+ TREASURES = [
6
+ Treasure.new(:pie, 5),
7
+ Treasure.new(:bottle, 25),
8
+ Treasure.new(:hammer, 50),
9
+ Treasure.new(:skillet, 100),
10
+ Treasure.new(:broomstick, 200),
11
+ Treasure.new(:crowbar, 400)
12
+ ]
13
+
14
+ def self.random
15
+ TREASURES.sample
16
+ end
17
+ end
18
+
19
+ if __FILE__ == $0
20
+ TreasureTrove::TREASURES.each {|treasure| puts "\n#{treasure}"}
21
+ end
22
+ end
@@ -0,0 +1,30 @@
1
+ require 'studio_game/player'
2
+ require 'studio_game/berserk_player'
3
+
4
+ module StudioGame
5
+ describe BerserkPlayer do
6
+ before do
7
+ @initial_health = 50
8
+ @player = BerserkPlayer.new("berserker", @initial_health)
9
+ end
10
+
11
+ it "does not go berserk when w00ted up to 5 times" do
12
+ 1.upto(5) { @player.w00t }
13
+
14
+ expect(@player.berserk?).to be_falsey
15
+ end
16
+
17
+ it "goes berserk when w00ted more than 5 times" do
18
+ 1.upto(6) { @player.w00t }
19
+
20
+ expect(@player.berserk?).to be_truthy
21
+ end
22
+
23
+ it "gets w00ted instead of blammed when it's gone berserk" do
24
+ 1.upto(6) { @player.w00t }
25
+ 1.upto(2) { @player.blam }
26
+
27
+ expect(@player.health).to eq(@initial_health + (8 * 15))
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,43 @@
1
+ require 'studio_game/clumsy_player'
2
+
3
+ module StudioGame
4
+ describe ClumsyPlayer do
5
+ before do
6
+ @boost_factor = 10
7
+ @initial_health = 100
8
+ @player = ClumsyPlayer.new("klutz", @initial_health, @boost_factor)
9
+ end
10
+
11
+ it "only gets half the point value for each treasure" do
12
+ expect(@player.points).to eq(0)
13
+
14
+ hammer = Treasure.new(:hammer, 50)
15
+ @player.found_treasure(hammer)
16
+ @player.found_treasure(hammer)
17
+ @player.found_treasure(hammer)
18
+
19
+ expect(@player.points).to eq(75)
20
+
21
+ crowbar = Treasure.new(:crowbar, 400)
22
+ @player.found_treasure(crowbar)
23
+
24
+ expect(@player.points).to eq(275)
25
+
26
+ yielded = []
27
+ @player.each_found_treasure do |treasure|
28
+ yielded << treasure
29
+ end
30
+
31
+ expect(yielded).to eq([Treasure.new(:hammer, 75), Treasure.new(:crowbar, 200)])
32
+ end
33
+
34
+ it "has a boost factor" do
35
+ expect(@player.boost_factor).to eq(@boost_factor)
36
+ end
37
+
38
+ it "gets an extra boost in health everytime he's w00ted" do
39
+ @player.w00t
40
+ expect(@player.health).to eq(@initial_health + (@boost_factor * 15))
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,76 @@
1
+ require 'studio_game/game'
2
+
3
+ module StudioGame
4
+ describe Game do
5
+ before do
6
+ @game = Game.new("Knuckleheads")
7
+
8
+ @initial_health = 100
9
+ @player = Player.new("moe", @initial_health)
10
+
11
+ @game.add_player(@player)
12
+ end
13
+
14
+ it "when a high number is rolled" do
15
+ allow_any_instance_of(Die).to receive(:roll).and_return(5)
16
+
17
+ @game.play(2)
18
+ expect(@player.health).to eq(@initial_health + 15 * 4)
19
+ end
20
+
21
+ it "when a medium number is rolled" do
22
+ allow_any_instance_of(Die).to receive(:roll).and_return(3)
23
+
24
+ @game.play(2)
25
+ expect(@player.health).to eq(@initial_health)
26
+ end
27
+
28
+ it "when a low number is rolled" do
29
+ allow_any_instance_of(Die).to receive(:roll).and_return(1)
30
+
31
+ @game.play(2)
32
+ expect(@player.health).to eq(@initial_health - 10 * 4)
33
+ end
34
+
35
+ it "assigns a treasure for points during a player's turn" do
36
+ game = Game.new("Knuckleheads")
37
+ player = Player.new("moe")
38
+
39
+ game.add_player(player)
40
+ game.play(1)
41
+
42
+ expect(player.points).not_to be_zero
43
+ end
44
+
45
+ it "computes total points as the sum of all player points" do
46
+ game = Game.new("Knuckleheads")
47
+
48
+ player1 = Player.new("moe")
49
+ player2 = Player.new("larry")
50
+
51
+ game.add_player(player1)
52
+ game.add_player(player2)
53
+
54
+ player1.found_treasure(Treasure.new(:hammer, 50))
55
+ player1.found_treasure(Treasure.new(:hammer, 50))
56
+ player2.found_treasure(Treasure.new(:crowbar, 400))
57
+
58
+ expect(game.total_points).to eq(500)
59
+ end
60
+
61
+ # context "in a collection of players" do
62
+ # before do
63
+ # @player1 = Player.new("moe", 100)
64
+ # @player2 = Player.new("larry", 200)
65
+ # @player3 = Player.new("curly", 300)
66
+ #
67
+ # @players = %w(@player1 @player2 @player3)
68
+ # end
69
+ #
70
+ # it "is sorted by decreasing score" do
71
+ # expect(@players.sort).to eq([@player3, @player2, @player1])
72
+ # end
73
+ #
74
+ # end
75
+ end
76
+ end
@@ -0,0 +1,116 @@
1
+ require 'studio_game/player'
2
+ require 'studio_game/treasure_trove'
3
+
4
+ module StudioGame
5
+ describe Player do
6
+
7
+ before do
8
+ @initial_health = 150
9
+ @player = Player.new("larry", @initial_health)
10
+ end
11
+
12
+ it "has a capitalized name" do
13
+
14
+ expect(@player.name).to eq("Larry")
15
+ end
16
+
17
+ it "has an initial health" do
18
+
19
+ expect(@player.health).to eq(@initial_health)
20
+ 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
+ expect(@player.to_s).to eq("I'm Larry with a health = 150, points = 100, and a score = 250.")
27
+ end
28
+
29
+ it "increases health by 15 when w00ted" do
30
+ @player.w00t
31
+
32
+ expect(@player.health).to eq(@initial_health + 15)
33
+ end
34
+
35
+ it "decreases health by 10 when blammed" do
36
+ @player.blam
37
+
38
+ expect(@player.health).to eq(@initial_health - 10)
39
+ end
40
+
41
+ it "computes points as the sum of all treasure points" do
42
+ expect(@player.points).to eq(0)
43
+
44
+ @player.found_treasure(Treasure.new(:hammer, 50))
45
+
46
+ expect(@player.points).to eq(50)
47
+
48
+ @player.found_treasure(Treasure.new(:crowbar, 400))
49
+
50
+ expect(@player.points).to eq(450)
51
+
52
+ @player.found_treasure(Treasure.new(:hammer, 50))
53
+
54
+ expect(@player.points).to eq(500)
55
+ end
56
+
57
+ it "computes a score as the sum of its health and points" do
58
+ @player.found_treasure(Treasure.new(:hammer, 50))
59
+ @player.found_treasure(Treasure.new(:hammer, 50))
60
+
61
+ expect(@player.score).to eq(250)
62
+ end
63
+
64
+ it "yields each found treasure and its total points" do
65
+ @player.found_treasure(Treasure.new(:skillet, 100))
66
+ @player.found_treasure(Treasure.new(:skillet, 100))
67
+ @player.found_treasure(Treasure.new(:hammer, 50))
68
+ @player.found_treasure(Treasure.new(:bottle, 5))
69
+ @player.found_treasure(Treasure.new(:bottle, 5))
70
+ @player.found_treasure(Treasure.new(:bottle, 5))
71
+ @player.found_treasure(Treasure.new(:bottle, 5))
72
+ @player.found_treasure(Treasure.new(:bottle, 5))
73
+
74
+ yielded = []
75
+ @player.each_found_treasure do |treasure|
76
+ yielded << treasure
77
+ end
78
+
79
+ expect(yielded).to eq([
80
+ Treasure.new(:skillet, 200),
81
+ Treasure.new(:hammer, 50),
82
+ Treasure.new(:bottle, 25)
83
+ ])
84
+ end
85
+
86
+ it "can be created from a CSV string" do
87
+ string = "Daredevil,100"
88
+ player = Player.from_csv(string)
89
+
90
+ expect(player.name).to eq("Daredevil")
91
+ expect(player.health).to eq(100)
92
+ end
93
+
94
+ context "with health greater than 100" do
95
+ before do
96
+ @initial_health = 150
97
+ @player = Player.new("larry", @initial_health)
98
+ end
99
+
100
+ it "is a strong player" do
101
+ expect(@player).to be_strong
102
+ end
103
+ end
104
+
105
+ context "with health less than equal to 100" do
106
+ before do
107
+ @initial_health = 100
108
+ @player = Player.new("larry", @initial_health)
109
+ end
110
+
111
+ it "is a wimpy player" do
112
+ expect(@player).not_to be_strong
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,53 @@
1
+ require 'studio_game/treasure_trove'
2
+
3
+ module StudioGame
4
+ describe Treasure do
5
+ before do
6
+ @treasure = Treasure.new(:hammer, 50)
7
+ end
8
+
9
+ it "has a name attribute" do
10
+ expect(@treasure.name).to eq(:hammer)
11
+ end
12
+
13
+ it "has a points attribute" do
14
+ expect(@treasure.points).to eq(50)
15
+ end
16
+ end
17
+
18
+ describe TreasureTrove do
19
+ it "has six treasures" do
20
+ expect(TreasureTrove::TREASURES.size).to eq(6)
21
+ end
22
+
23
+ it "has a pie worth 5 points" do
24
+ expect(TreasureTrove::TREASURES[0]).to eq(Treasure.new(:pie, 5))
25
+ end
26
+
27
+ it "has a bottle worth 25 points" do
28
+ expect(TreasureTrove::TREASURES[1]).to eq(Treasure.new(:bottle, 25))
29
+ end
30
+
31
+ it "has a hammer worth 50 points" do
32
+ expect(TreasureTrove::TREASURES[2]).to eq(Treasure.new(:hammer, 50))
33
+ end
34
+
35
+ it "has a skillet worth 100 points" do
36
+ expect(TreasureTrove::TREASURES[3]).to eq(Treasure.new(:skillet, 100))
37
+ end
38
+
39
+ it "has a broomstick worth 200 points" do
40
+ expect(TreasureTrove::TREASURES[4]).to eq(Treasure.new(:broomstick, 200))
41
+ end
42
+
43
+ it "has a crowbar worth 400 points" do
44
+ expect(TreasureTrove::TREASURES[5]).to eq(Treasure.new(:crowbar, 400))
45
+ end
46
+
47
+ it "returns a random treasure" do
48
+ treasure = TreasureTrove.random
49
+
50
+ expect(TreasureTrove::TREASURES).to include(treasure)
51
+ end
52
+ end
53
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pragmatic_ruby_lesson
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Ellery Temple Jr.
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: |
28
+ This is the final lesson of the Pragmatic Ruby Sessions - Deployment and creating a Ruby Gem
29
+ email: elreyatee@gmail.com
30
+ executables:
31
+ - studio_game
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - LICENSE
36
+ - README
37
+ - bin/players.csv
38
+ - bin/studio_game
39
+ - lib/studio_game/auditable.rb
40
+ - lib/studio_game/berserk_player.rb
41
+ - lib/studio_game/clumsy_player.rb
42
+ - lib/studio_game/die.rb
43
+ - lib/studio_game/game.rb
44
+ - lib/studio_game/game_turn.rb
45
+ - lib/studio_game/loaded_die.rb
46
+ - lib/studio_game/playable.rb
47
+ - lib/studio_game/player.rb
48
+ - lib/studio_game/treasure_trove.rb
49
+ - spec/studio_game/berserk_player_spec.rb
50
+ - spec/studio_game/clumsy_player_spec.rb
51
+ - spec/studio_game/game_spec.rb
52
+ - spec/studio_game/player_spec.rb
53
+ - spec/studio_game/treasure_trove_spec.rb
54
+ homepage: http://online.promaticstudio.com
55
+ licenses:
56
+ - MIT
57
+ metadata: {}
58
+ post_install_message:
59
+ rdoc_options: []
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '1.9'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ requirements: []
73
+ rubyforge_project:
74
+ rubygems_version: 2.2.2
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: Pragmatic Online Ruby Lessons
78
+ test_files:
79
+ - spec/studio_game/berserk_player_spec.rb
80
+ - spec/studio_game/clumsy_player_spec.rb
81
+ - spec/studio_game/game_spec.rb
82
+ - spec/studio_game/player_spec.rb
83
+ - spec/studio_game/treasure_trove_spec.rb