tic_tac_toes 0.1.6 → 0.1.7

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: 973d4205866381b247cee7397ef538d46d26dbd3
4
- data.tar.gz: 8383fa3bd6d89f0e1dc082bf15d58e22315c4d16
3
+ metadata.gz: a6648939399c69e21afbe0a74301745f40b98e31
4
+ data.tar.gz: dd3b0fd1992b99d8371ec706eef9d8e2d1941873
5
5
  SHA512:
6
- metadata.gz: 38e1a5192560eb071120b41079ae56a77e442b5fefe60659537868e45eb76277f05ffd74b4510c1d707009c3a5a9bb22582bd30cd66a9fdc67ec6524d471a92f
7
- data.tar.gz: 81602fbe1f20241e27b4400815bc4ee3fdbbb1bdaa9622de099134e4b043db4dd640bb6880258b072f7d8e16b0827dc9717904749ff8ae94ca5d4518cbfa0177
6
+ metadata.gz: f68f75de8e357f772673a96bd0cca5f9c92ed4caf5d1659d9c824008c25bc017aed2675e2ea27eff51ec7c4011e695246d138c95c1a7f4c3f84ecd9b1ac3fa67
7
+ data.tar.gz: c0aa21b6e2d0c232f55bc79db3cf4b893d76ac1ae3438922235ef4570e8dc6c665988637044d9b39e8d3f6507bdf0e1a1e2d2292a7f7f5739ce8c86ef4ea6350
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tic_tac_toes (0.1.6)
4
+ tic_tac_toes (0.1.7)
5
5
  pg
6
6
 
7
7
  GEM
data/bin/tic_tac_toes CHANGED
@@ -13,7 +13,11 @@ require 'tic_tac_toes/core/history'
13
13
 
14
14
  require 'tic_tac_toes/command_line/runner'
15
15
 
16
- database = 'tic_tac_toes'
16
+ connection = PG.connect(dbname: ENV['TTT_DATABASE'],
17
+ host: ENV['TTT_HOST'],
18
+ port: ENV['TTT_PORT'],
19
+ user: ENV['TTT_USER'],
20
+ password: ENV['TTT_PASSWORD'])
17
21
 
18
22
  prompt = TicTacToes::CommandLine::Prompt
19
23
  io = TicTacToes::Core::IO.new(prompt)
@@ -21,7 +25,7 @@ io = TicTacToes::Core::IO.new(prompt)
21
25
  player_factory = TicTacToes::Core::PlayerFactory.new(io)
22
26
  menu = TicTacToes::CommandLine::Menu.new(io, player_factory)
23
27
 
24
- database_wrapper = TicTacToes::Database::PGWrapper.new(database)
25
- history = TicTacToes::Core::History.new(database_wrapper)
28
+ storage_wrapper = TicTacToes::Database::PGWrapper.new(connection)
29
+ history = TicTacToes::Core::History.new(storage_wrapper)
26
30
 
27
31
  TicTacToes::CommandLine::Runner.new(io, menu, history).run
@@ -4,6 +4,7 @@ require 'tic_tac_toes/core/move_strategies/types'
4
4
  module TicTacToes
5
5
  module Core
6
6
  class GameState
7
+ attr_writer :history
7
8
  attr_reader :board, :players
8
9
 
9
10
  def initialize(board, players, history)
@@ -34,7 +35,7 @@ module TicTacToes
34
35
  end
35
36
 
36
37
  def turn_over(move)
37
- @history.record_move(move)
38
+ @history.record_move(move) unless move.nil?
38
39
  @players.rotate!
39
40
  end
40
41
 
@@ -55,6 +56,14 @@ module TicTacToes
55
56
  Rules.determine_winner(@board, @players)
56
57
  end
57
58
 
59
+ def marshal_dump
60
+ [@board, @players]
61
+ end
62
+
63
+ def marshal_load(array)
64
+ @board, @players = array
65
+ end
66
+
58
67
  private
59
68
 
60
69
  def record_board_size
@@ -59,7 +59,7 @@ module TicTacToes
59
59
  def self.generate_game_state(space, game_state)
60
60
  new_game_state = Marshal.load(Marshal.dump(game_state))
61
61
  new_game_state.place_move(space)
62
- new_game_state.turn_over([])
62
+ new_game_state.turn_over(nil)
63
63
  new_game_state
64
64
  end
65
65
 
@@ -4,19 +4,17 @@ require 'tic_tac_toes/core/history'
4
4
  module TicTacToes
5
5
  module Database
6
6
  class PGWrapper
7
- def initialize(database)
8
- @database = database
7
+ def initialize(connection)
8
+ @connection = connection
9
9
  end
10
10
 
11
11
  def record_game_history(history)
12
- connection = establish_connection
13
- record_game_info(history, connection)
14
- record_moves(history, connection)
12
+ record_game_info(history, @connection)
13
+ record_moves(history, @connection)
15
14
  end
16
15
 
17
16
  def read_game_histories
18
- connection = establish_connection
19
- games_result = connection.exec("SELECT * FROM games")
17
+ games_result = @connection.exec("SELECT * FROM games")
20
18
  games = []
21
19
 
22
20
  games_result.each_row do |row|
@@ -24,7 +22,7 @@ module TicTacToes
24
22
  board_size = row[1].to_i
25
23
  difficulty = row[2]
26
24
  winner = row[3]
27
- moves_result = connection.exec("SELECT * FROM moves WHERE game = #{game_id}")
25
+ moves_result = @connection.exec("SELECT * FROM moves WHERE game = #{game_id}")
28
26
 
29
27
  history = Core::History.new(self)
30
28
 
@@ -44,10 +42,6 @@ module TicTacToes
44
42
 
45
43
  private
46
44
 
47
- def establish_connection
48
- PG.connect(dbname: @database)
49
- end
50
-
51
45
  def record_game_info(history, connection)
52
46
  connection.exec("INSERT INTO games (board_size, difficulty, winner) VALUES (
53
47
  #{history.board_size},
@@ -4,6 +4,6 @@ desc 'Drop Tic_tac_toes production and test databases'
4
4
  task :destroy_databases do
5
5
  connection = PG.connect(dbname: "postgres")
6
6
 
7
- connection.exec("DROP DATABASE tic_tac_toes")
8
- connection.exec("DROP DATABASE tic_tac_toes_test")
7
+ connection.exec("DROP DATABASE #{ENV['TTT_DATABASE']}")
8
+ connection.exec("DROP DATABASE #{ENV['TTT_TEST_DATABASE']}")
9
9
  end
@@ -1,23 +1,29 @@
1
1
  require 'pg'
2
2
 
3
- PRODUCTION_DATABASE = 'tic_tac_toes'
4
- TEST_DATABASE = 'tic_tac_toes_test'
5
-
6
- desc 'Set up tic_tac_toes production and test databases'
3
+ desc 'Set up Tic_tac_toes production and test databases'
7
4
  task :set_up_databases do
8
5
  create_databases
9
6
  create_production_tables
10
7
  end
11
8
 
9
+ desc 'Set up just Tic_tac_toes production tables'
10
+ task :set_up_tables do
11
+ create_production_tables
12
+ end
13
+
12
14
  def create_databases
13
15
  connection = PG.connect(dbname: "postgres")
14
16
 
15
- connection.exec("CREATE DATABASE #{PRODUCTION_DATABASE}")
16
- connection.exec("CREATE DATABASE #{TEST_DATABASE}")
17
+ connection.exec("CREATE DATABASE #{ENV['TTT_DATABASE']}")
18
+ connection.exec("CREATE DATABASE #{ENV['TTT_TEST_DATABASE']}")
17
19
  end
18
20
 
19
21
  def create_production_tables
20
- connection = PG.connect(dbname: "#{PRODUCTION_DATABASE}")
22
+ connection = PG.connect(dbname: ENV['TTT_DATABASE'],
23
+ host: ENV['TTT_HOST'],
24
+ port: ENV['TTT_PORT'],
25
+ user: ENV['TTT_USER'],
26
+ password: ENV['TTT_PASSWORD'])
21
27
 
22
28
  connection.exec("CREATE TABLE games (
23
29
  id serial primary key,
@@ -1,3 +1,3 @@
1
1
  module TicTacToes
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
@@ -2,28 +2,30 @@ require 'tic_tac_toes/database/pg_wrapper'
2
2
  require 'pg'
3
3
 
4
4
  describe TicTacToes::Database::PGWrapper do
5
- database = "tic_tac_toes_test"
6
-
7
- let(:pg_wrapper) { TicTacToes::Database::PGWrapper.new(database) }
8
- let(:history1) { double("history 1",
9
- :board_size => 9,
10
- :difficulty => 'Medium AI',
11
- :moves => [["X", 1], ["O", 4]],
12
- :winner => "X") }
13
- let(:history2) { double("history 2",
14
- :board_size => 16,
15
- :difficulty => 'Easy AI',
16
- :moves => [["&", 14]],
17
- :winner => "*") }
18
-
19
5
  before do
20
- connection = PG.connect(dbname: database)
21
- connection.exec("CREATE TABLE games (
6
+ @connection = PG.connect(dbname: ENV['TTT_TEST_DATABASE'],
7
+ host: ENV['TTT_HOST'],
8
+ port: ENV['TTT_PORT'],
9
+ user: ENV['TTT_USER'],
10
+ password: ENV['TTT_PASSWORD'])
11
+ @pg_wrapper = TicTacToes::Database::PGWrapper.new(@connection)
12
+ @history1 = double('history1',
13
+ board_size: 9,
14
+ difficulty: 'Medium AI',
15
+ moves: [['X', 1], ['O', 4]],
16
+ winner: 'X')
17
+ @history2 = double('history2',
18
+ board_size: 16,
19
+ difficulty: 'Easy AI',
20
+ moves: [['&', 14]],
21
+ winner: '*')
22
+
23
+ @connection.exec("CREATE TABLE games (
22
24
  id serial primary key,
23
25
  board_size integer,
24
26
  difficulty varchar,
25
27
  winner varchar)")
26
- connection.exec("CREATE TABLE moves (
28
+ @connection.exec("CREATE TABLE moves (
27
29
  game integer REFERENCES games (id),
28
30
  number integer,
29
31
  token varchar,
@@ -31,10 +33,10 @@ describe TicTacToes::Database::PGWrapper do
31
33
  end
32
34
 
33
35
  describe '#record_game_history and #read_games' do
34
- it "records and reads a history object to and from the database" do
35
- pg_wrapper.record_game_history(history1)
36
+ it 'records and reads a history object to and from the database' do
37
+ @pg_wrapper.record_game_history(@history1)
36
38
 
37
- history_from_database = pg_wrapper.read_game_histories.first
39
+ history_from_database = @pg_wrapper.read_game_histories.first
38
40
 
39
41
  expect(history_from_database.board_size).to eq(9)
40
42
  expect(history_from_database.difficulty).to eq('Medium AI')
@@ -43,17 +45,16 @@ describe TicTacToes::Database::PGWrapper do
43
45
  expect(history_from_database.winner).to eq("X")
44
46
  end
45
47
 
46
- it "records and reads multiple history objects to and from the database" do
47
- pg_wrapper.record_game_history(history1)
48
- pg_wrapper.record_game_history(history2)
49
- histories_from_database = pg_wrapper.read_game_histories
48
+ it 'records and reads multiple history objects to and from the database' do
49
+ @pg_wrapper.record_game_history(@history1)
50
+ @pg_wrapper.record_game_history(@history2)
51
+ histories_from_database = @pg_wrapper.read_game_histories
50
52
  expect(histories_from_database.size).to eq(2)
51
53
  end
52
54
  end
53
55
 
54
56
  after do
55
- connection = PG.connect(dbname: database)
56
- connection.exec("DROP TABLE moves")
57
- connection.exec("DROP TABLE games")
57
+ @connection.exec("DROP TABLE moves")
58
+ @connection.exec("DROP TABLE games")
58
59
  end
59
60
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tic_tac_toes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Spatafora
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-27 00:00:00.000000000 Z
11
+ date: 2014-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler