minesweeper-curses 0.1.1 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2039f5bcd5de35121f6f1d4018769ab714ddb044
4
- data.tar.gz: 3e225649c8b9be84ea534de481f4acd24fea5843
3
+ metadata.gz: 64be9ef9dc42505ad9ad3ffb3fcfd36b96764b33
4
+ data.tar.gz: 543fecb9214ee82fe7322f912c00bd0a38649dc6
5
5
  SHA512:
6
- metadata.gz: d564d8a4a4ce20bfc6f9896e7b64aad95cf39d379c2798808febb4c41b94644a13b330c40e51a0659cd4d03fed5928dcb36aed077052d66f0b0da2a3bcba9179
7
- data.tar.gz: df398eded885b498bd6f0c2c80ea2815aa14b11a2a8ce4f03dde0d3350455d1bf4531d12985abeb14a6aa44036027be6cc9db7e150291074e5acc5166ee050e7
6
+ metadata.gz: 78a7c34b9471a412186efb69ca487ad817b597208cec909d9cd20bec4cfa4d59649e15f1680d46d432fd1229930bcfdf7cfaa276348591698705353807b89280
7
+ data.tar.gz: 4f84c02f4a405d629f0b6e3aeec7b7cafac85a99a249b804e3e2d84ac1268ac0eee7cd9435c6696e245ed8eecbff640dced226af69eeda14ce556e4d43c03743
data/.rubocop.yml ADDED
@@ -0,0 +1,24 @@
1
+ Metrics/LineLength:
2
+ Max: 120
3
+ # To make it possible to copy or click on URIs in the code, we allow lines
4
+ # containing a URI to be longer than Max.
5
+ AllowHeredoc: true
6
+ AllowURI: true
7
+ URISchemes:
8
+ - http
9
+ - https
10
+ # The IgnoreCopDirectives option causes the LineLength rule to ignore cop
11
+ # directives like '# rubocop: enable ...' when calculating a line's length.
12
+ IgnoreCopDirectives: false
13
+ # The IgnoredPatterns option is a list of !ruby/regexp and/or string
14
+ # elements. Strings will be converted to Regexp objects. A line that matches
15
+ # any regular expression listed in this option will be ignored by LineLength.
16
+ IgnoredPatterns: []
17
+
18
+ Metrics/BlockLength:
19
+ CountComments: false
20
+ Max: 25
21
+ ExcludedMethods: []
22
+ Exclude:
23
+ - Rakefile
24
+ - spec/**/*.rb
data/Gemfile CHANGED
@@ -4,5 +4,6 @@ source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
6
 
7
+ gem 'coveralls', require: false
7
8
  gem 'pry'
8
9
  gem 'simplecov', '~> 0.11.2'
data/Gemfile.lock CHANGED
@@ -1,12 +1,18 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- minesweeper-curses (0.1.1)
4
+ minesweeper-curses (0.1.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  coderay (1.1.1)
10
+ coveralls (0.8.13)
11
+ json (~> 1.8)
12
+ simplecov (~> 0.11.0)
13
+ term-ansicolor (~> 1.3)
14
+ thor (~> 0.19.1)
15
+ tins (~> 1.6.0)
10
16
  curses (1.0.2)
11
17
  diff-lcs (1.3)
12
18
  docile (1.1.5)
@@ -39,21 +45,26 @@ GEM
39
45
  simplecov-html (0.10.0)
40
46
  slop (3.6.0)
41
47
  sqlite3 (1.3.13)
48
+ term-ansicolor (1.6.0)
49
+ tins (~> 1.0)
50
+ thor (0.19.4)
51
+ tins (1.6.0)
42
52
 
43
53
  PLATFORMS
44
54
  ruby
45
55
 
46
56
  DEPENDENCIES
47
57
  bundler (~> 1.14)
58
+ coveralls
48
59
  curses (~> 1.0.2)
49
60
  minesweeper-curses!
50
61
  minitest (~> 5.0)
51
62
  pry
52
63
  rake (~> 10.0)
53
64
  rspec (~> 3.6.0)
54
- sequel
65
+ sequel (~> 4.46.0)
55
66
  simplecov (~> 0.11.2)
56
- sqlite3
67
+ sqlite3 (~> 1.3.13)
57
68
 
58
69
  BUNDLED WITH
59
70
  1.14.6
@@ -53,7 +53,7 @@ module Minesweeper
53
53
  open_cell(cury, curx)
54
54
  play(cury, curx)
55
55
  when SPACE
56
- trigger_bomb_flag(cury, curx)
56
+ toggle_bomb_flag(cury, curx)
57
57
  play(cury, curx)
58
58
  end
59
59
  end
@@ -79,20 +79,12 @@ module Minesweeper
79
79
  window.setpos(0, 1)
80
80
  end
81
81
 
82
- def debug(args = {})
83
- window.setpos(20, 20)
84
- str = ''
85
- args.each { |k, a| str << "| #{k} #{a} |" }
86
- window.addstr(str)
87
- window.setpos(cury, curx)
88
- end
89
-
90
82
  def open_cell(y, x)
91
83
  cell_x = x / 3 # / 3 because rendered cell 3 chars
92
84
  open_original(y, cell_x)
93
85
  end
94
86
 
95
- def trigger_bomb_flag(y, x)
87
+ def toggle_bomb_flag(y, x)
96
88
  cell_x = x / 3 # / 3 because rendered cell 3 chars
97
89
  cell = cells[y][cell_x]
98
90
  cell.toggle_bomb_flag!
@@ -168,7 +160,7 @@ Game Stats: you have found #{found_bombs_count} out of #{bombs.count} bombs
168
160
  echo
169
161
  Minesweeper::GameInitializer.new.start
170
162
  when 'r', 'R'
171
- Minesweeper::BoardBuilder.from_board(self).build.play
163
+ Minesweeper::BoardBuilder.new(window, flush_params: false).build.play
172
164
  end
173
165
  end
174
166
 
@@ -2,10 +2,6 @@ module Minesweeper
2
2
  class BoardBuilder
3
3
  extend Forwardable
4
4
 
5
- def self.from_board(board)
6
- new(board.window, flush_params: false)
7
- end
8
-
9
5
  def initialize(window, flush_params:)
10
6
  @window = window
11
7
  @params_builder = Minesweeper::BoardParams.new(window, flush_params)
@@ -1,16 +1,5 @@
1
1
  module Minesweeper
2
2
  class BoardParams
3
-
4
- # how about more sophisticated solution
5
- DB = Sequel.sqlite
6
- DB.execute <<-SQL
7
- CREATE TABLE IF NOT EXISTS board_params (
8
- height integer,
9
- width integer,
10
- level varchar(255)
11
- );
12
- SQL
13
-
14
3
  DEFAULTS = { height: 10, width: 10, level: 'advanced' }.freeze
15
4
 
16
5
  attr_reader :window, :flush_params
@@ -22,34 +11,26 @@ module Minesweeper
22
11
  end
23
12
 
24
13
  def height
25
- read[:height]
14
+ storage.read[:height]
26
15
  end
27
16
 
28
17
  def width
29
- read[:width]
18
+ storage.read[:width]
30
19
  end
31
20
 
32
21
  def level
33
- read[:level]
34
- end
35
-
36
- def prepare
37
- flush_storage if flush_params
38
- read || build
22
+ storage.read[:level]
39
23
  end
40
24
 
41
25
  private
42
26
 
43
- def table
44
- DB[:board_params]
45
- end
46
-
47
- def read
48
- table.first
27
+ def prepare
28
+ storage.flush if flush_params
29
+ storage.read || build
49
30
  end
50
31
 
51
- def flush_storage
52
- DB[:board_params].delete
32
+ def storage
33
+ ::Minesweeper::Storage.instance
53
34
  end
54
35
 
55
36
  def build
@@ -57,11 +38,11 @@ module Minesweeper
57
38
  window.setpos(4, 42)
58
39
  str = window.getstr
59
40
  if str.casecmp('y').zero?
60
- table.insert(DEFAULTS)
41
+ storage.insert(DEFAULTS)
61
42
  else
62
- table.insert(height: ask_y, width: ask_x, level: ask_level)
43
+ storage.insert(height: ask_y, width: ask_x, level: ask_level)
63
44
  end
64
- read
45
+ storage.read
65
46
  end
66
47
 
67
48
  def ask_x
@@ -16,8 +16,11 @@ module Minesweeper
16
16
  window.addstr("Welcome to Minesweeper \n")
17
17
  window.addstr("screen size: rows: #{window.maxy}; columns: #{window.maxx} \n")
18
18
  window.addstr("controls: `space` to mark/unmark cell as bomb, `arrow keys` to navigate \n")
19
- board = Minesweeper::BoardBuilder.new(window, flush_params: true).build
20
- board.play
19
+ Minesweeper::BoardBuilder
20
+ .new(window, flush_params: true)
21
+ .build
22
+ .play
23
+ rescue SystemExit, Interrupt
21
24
  ensure
22
25
  close_screen
23
26
  at_exit { puts 'good bye' }
@@ -0,0 +1,34 @@
1
+ require 'singleton'
2
+
3
+ module Minesweeper
4
+ class Storage
5
+ include Singleton
6
+
7
+ DB = Sequel.sqlite
8
+ DB.execute <<-SQL
9
+ CREATE TABLE IF NOT EXISTS board_params (
10
+ height integer,
11
+ width integer,
12
+ level varchar(255)
13
+ );
14
+ SQL
15
+
16
+ def read
17
+ table.first
18
+ end
19
+
20
+ def flush
21
+ table.delete
22
+ end
23
+
24
+ def insert(**args)
25
+ table.insert(args)
26
+ end
27
+
28
+ private
29
+
30
+ def table
31
+ DB[:board_params]
32
+ end
33
+ end
34
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minesweeper
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.2"
5
5
  end
data/lib/minesweeper.rb CHANGED
@@ -6,6 +6,7 @@ include Curses
6
6
  require 'pry'
7
7
  require 'forwardable'
8
8
  require 'sequel'
9
+ require_relative 'minesweeper/storage'
9
10
  require_relative 'minesweeper/board'
10
11
  require_relative 'minesweeper/board_builder'
11
12
  require_relative 'minesweeper/board_params'
data/minesweeper.gemspec CHANGED
@@ -35,7 +35,7 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency 'rake', '~> 10.0'
36
36
  spec.add_development_dependency 'minitest', '~> 5.0'
37
37
  spec.add_development_dependency 'curses', '~> 1.0.2'
38
- spec.add_development_dependency 'sequel'
39
- spec.add_development_dependency 'sqlite3'
38
+ spec.add_development_dependency 'sequel', '~> 4.46.0'
39
+ spec.add_development_dependency 'sqlite3', '~> 1.3.13'
40
40
  spec.add_development_dependency 'rspec', '~> 3.6.0'
41
41
  end
data/readme.md CHANGED
@@ -1,4 +1,5 @@
1
1
  [![Build Status](https://travis-ci.org/ruba-ruba/minesweeper.svg?branch=master)](https://travis-ci.org/ruba-ruba/minesweeper)
2
+ [![Coverage Status](https://coveralls.io/repos/github/ruba-ruba/minesweeper/badge.svg?branch=master)](https://coveralls.io/github/ruba-ruba/minesweeper?branch=master)
2
3
 
3
4
  ### Minesweeper Terminal
4
5
  > Console version of [minesweeper game](https://en.wikipedia.org/wiki/Microsoft_Minesweeper) written in [ruby](https://www.ruby-lang.org/en/) & [curses gem](https://github.com/ruby/curses)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minesweeper-curses
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mykhailo Rybak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-08 00:00:00.000000000 Z
11
+ date: 2017-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -70,30 +70,30 @@ dependencies:
70
70
  name: sequel
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 4.46.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 4.46.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: sqlite3
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: 1.3.13
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: 1.3.13
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -118,6 +118,7 @@ extra_rdoc_files: []
118
118
  files:
119
119
  - ".gitignore"
120
120
  - ".rspec"
121
+ - ".rubocop.yml"
121
122
  - ".ruby-version"
122
123
  - ".travis.yml"
123
124
  - CODE_OF_CONDUCT.md
@@ -136,6 +137,7 @@ files:
136
137
  - lib/minesweeper/bomb_injector.rb
137
138
  - lib/minesweeper/cell.rb
138
139
  - lib/minesweeper/game_initializer.rb
140
+ - lib/minesweeper/storage.rb
139
141
  - lib/minesweeper/version.rb
140
142
  - minesweeper.gemspec
141
143
  - readme.md