new_super_codebreaker_2021 0.3.4 → 0.4.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
  SHA256:
3
- metadata.gz: 157dbae0333bd8d36649060482f89ea9f7327d475f948e8fef0aeac1eb0dd64d
4
- data.tar.gz: d1819c81e8c1c84eafafeb1d0cce41bf8a714d1e3bfa36e7d2bdebe931b61f73
3
+ metadata.gz: dd7869a4d751d84d0a042d1cd3952bab0d885810a52108988056d7e060064fca
4
+ data.tar.gz: f352eda0a33895d65c847f80f4f393382a48eebfac47a218dfb713b9f763248b
5
5
  SHA512:
6
- metadata.gz: 94d7ff189e12b46cee85e11ffc6a2c3cde3346d922e4525d864be652d426851aec4580d9bb2dec84cb34dcb9fd2d3119a4c7f8e2f38f89494357c4ca2c894dab
7
- data.tar.gz: b0e22fee9f1104399f138e6042d8321d98ff88805809f26750dd5b0b934e10a9e63ea6f46560d438710134ed7f0c707fd2e43b14d4d5656245ebce1eb391446a
6
+ metadata.gz: 6504ce6e5d9162e084b055deb28710aaf73b7433eb0f0e58ba543ac219e3e22c8154ad6e4604e14955c70cc7ab58c5988b27095cf7e8cdcbef2fe590eef39958
7
+ data.tar.gz: 96bd8fb3d4797bd36ac5ba4e735a7a8741a165fa046db94cc9ab9ac5231364eef1a2d857d35c31c317afe4fbcb027962ef99653559c02bb4232eb488ae21b7f9
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source "https://rubygems.org"
3
+ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in new_super_codebreaker_2021.gemspec
6
6
  gemspec
data/Rakefile CHANGED
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler/gem_tasks"
4
- require "rubocop/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rubocop/rake_task'
5
3
 
6
4
  begin
7
- require "rspec/core/rake_task"
5
+ require 'rspec/core/rake_task'
8
6
  RSpec::Core::RakeTask.new(:spec)
9
7
  rescue LoadError
10
8
  # Ignored
data/bin/console CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require "bundler/setup"
5
- require "new_super_codebreaker_2021"
4
+ require 'bundler/setup'
5
+ require 'new_super_codebreaker_2021'
6
6
 
7
7
  # You can add fixtures and/or initialization code here to make experimenting
8
8
  # with your gem easier. You can also use a different console, if you like.
@@ -11,5 +11,5 @@ require "new_super_codebreaker_2021"
11
11
  # require "pry"
12
12
  # Pry.start
13
13
 
14
- require "irb"
14
+ require 'irb'
15
15
  IRB.start(__FILE__)
data/lib/db_methods.rb CHANGED
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  module DBMethods
4
2
  def save(user, file)
5
3
  rating = load_file(file)
6
4
  rating.push(user)
7
- File.open(file, "w") do |filename|
5
+ File.open(file, 'w') do |filename|
8
6
  YAML.dump(rating, filename)
9
7
  end
10
8
  end
data/lib/game.rb CHANGED
@@ -1,26 +1,30 @@
1
- require "yaml"
2
- require_relative "validate"
3
- require_relative "show_content"
4
- require_relative "db_methods"
5
- require_relative "user"
1
+ require 'yaml'
2
+ require_relative 'validate'
3
+ require_relative 'show_content'
4
+ require_relative 'db_methods'
5
+ require_relative 'user'
6
6
  module NewSuperCodebreaker2021
7
7
  class Game
8
8
  include Validate
9
9
  include ShowContent
10
10
  include DBMethods
11
11
 
12
+ def initialize
13
+ @code = generate_code
14
+ end
15
+
16
+ GUESS_COMMANDS = %i[hint rules exit].freeze
12
17
  START_COMMANDS = %i[start rules stats exit].freeze
13
18
  DIFFICULTY_COMMANDS = %i[easy medium hell exit].freeze
14
- GUESS_COMMANDS = %i[hint rules exit].freeze
15
19
  AFTER_GAME_COMMANDS = %i[start save exit].freeze
16
20
  YES_NO_COMMANDS = %i[yes no].freeze
17
21
 
18
- def chose_com(command)
19
- START_COMMANDS.include?(command.to_sym) ? command.to_sym : false
22
+ def chose_command(command)
23
+ check_input(command, START_COMMANDS)
20
24
  end
21
25
 
22
26
  def take_name(input_name)
23
- if input_name == "exit"
27
+ if input_name == 'exit'
24
28
  :exit
25
29
  else
26
30
  validate_name(input_name)
@@ -28,59 +32,65 @@ module NewSuperCodebreaker2021
28
32
  end
29
33
 
30
34
  def chose_difficulty(difficulty)
31
- DIFFICULTY_COMMANDS.include?(difficulty.to_sym) ? difficulty.to_sym : false
32
- end
33
-
34
- def generate_code
35
- Array.new(4) { rand(1..6) }
35
+ check_input(difficulty, DIFFICULTY_COMMANDS)
36
36
  end
37
37
 
38
38
  def user_guess(code)
39
- GUESS_COMMANDS.include?(code.to_s.to_sym) ? code.to_s.to_sym : validate_user_code(code)
39
+ if code.to_i != 0
40
+ validate_user_code(code)
41
+ elsif GUESS_COMMANDS.include?(code.to_sym)
42
+ code.to_sym
43
+ else false
44
+ end
40
45
  end
41
46
 
42
- def take_hint(user, code, used_hints)
47
+ def take_hint(user, used_hints)
48
+ code_copy = @code.dup
43
49
  if user.hints_total > user.hints_used
44
50
  user.hints_used += 1
45
- used_hints.each { |hint| code.delete(hint) }
46
- code.sample
51
+ used_hints.each { |hint| code_copy.delete(hint) }
52
+ code_copy.sample
47
53
  else
48
54
  false
49
55
  end
50
56
  end
51
57
 
52
58
  def after_game_commands(command)
53
- AFTER_GAME_COMMANDS.include?(command.to_sym) ? command.to_sym : false
59
+ check_input(command, AFTER_GAME_COMMANDS)
54
60
  end
55
61
 
56
62
  def attempt_to_start(command)
57
- YES_NO_COMMANDS.include?(command.to_sym) ? command.to_sym : false
63
+ check_input(command, YES_NO_COMMANDS)
58
64
  end
59
65
 
60
- def compare_codes(secret_code, user_code)
61
- matches, u_char = number_on_right_place(secret_code, user_code)
62
- number_in_secret_code(secret_code, user_code, matches, u_char)
66
+ def compare_codes(user_code)
67
+ matches, u_char = number_on_right_place(user_code)
68
+ number_in_secret_code(user_code, matches, u_char)
63
69
  end
64
70
 
65
71
  private
66
72
 
67
- def number_on_right_place(secret_code, user_code)
73
+ def number_on_right_place(user_code)
68
74
  matches = []
69
75
  u_char = []
70
76
  user_code.each_index do |i|
71
- if secret_code[i] == user_code[i]
72
- matches.unshift("+")
77
+ if @code[i] == user_code[i]
78
+ matches.unshift('+')
73
79
  u_char << user_code[i]
74
80
  end
75
81
  end
76
82
  [matches, u_char]
77
83
  end
78
84
 
79
- def number_in_secret_code(secret_code, user_code, matches, u_char)
85
+ def number_in_secret_code(user_code, matches, u_char)
80
86
  user_code.each do |element|
81
- matches.push("-") if secret_code.include?(element) && !u_char.include?(element)
87
+ matches.push('-') if @code.include?(element) && !u_char.include?(element)
82
88
  end
83
89
  matches
84
90
  end
91
+
92
+ def generate_code
93
+ Array.new(4) { rand(1..6) }
94
+ end
85
95
  end
86
96
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NewSuperCodebreaker2021
4
- VERSION = "0.3.4"
4
+ VERSION = '0.4.2'
5
5
  end
@@ -1,5 +1,5 @@
1
- require_relative "new_super_codebreaker_2021/version"
2
- require "game"
1
+ require_relative 'new_super_codebreaker_2021/version'
2
+ require 'game'
3
3
 
4
4
  module NewSuperCodebreaker2021
5
5
  class Error < StandardError; end
data/lib/show_content.rb CHANGED
@@ -1,8 +1,32 @@
1
+ require 'terminal-table'
2
+
1
3
  module ShowContent
4
+ DIFFICULTY = {
5
+ easy: { attempts: 15, hints: 2 },
6
+ medium: { attempts: 10, hints: 1 },
7
+ hell: { attempts: 5, hints: 1 }
8
+ }.freeze
9
+
2
10
  def show_stats(file)
3
11
  data = YAML.load_file(file) || []
4
12
  data.sort_by(&:hints_used).sort_by(&:attempts_used).sort_by { |game| -game.difficulty }
13
+ create_table(data)
5
14
  rescue Errno::ENOENT
6
15
  []
7
16
  end
17
+
18
+ private
19
+
20
+ def create_table(users)
21
+ table = Terminal::Table.new(headings: ['Rating', 'Name', 'Difficulty', 'Attempts Total',
22
+ 'Attempts Used', 'Hints Total', 'Hints Used'])
23
+ rate = 1
24
+
25
+ users.each do |user|
26
+ table.add_row([rate, user.name, DIFFICULTY.keys[user.difficulty],
27
+ user.attempts_total, user.attempts_used, user.hints_used, user.hints_total])
28
+ rate += 1
29
+ end
30
+ table
31
+ end
8
32
  end
data/lib/validate.rb CHANGED
@@ -16,6 +16,13 @@ module Validate
16
16
  end
17
17
  end
18
18
 
19
+ def check_input(input, command_list)
20
+ if input.to_i.zero? && command_list.include?(input.to_sym)
21
+ input.to_sym
22
+ else false
23
+ end
24
+ end
25
+
19
26
  private
20
27
 
21
28
  def valid_number?(arr_code)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: new_super_codebreaker_2021
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nazar Dakhno
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-29 00:00:00.000000000 Z
11
+ date: 2021-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fasterer
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.21.2
83
+ - !ruby/object:Gem::Dependency
84
+ name: terminal-table
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 3.0.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 3.0.1
83
97
  description: Game where you need to guess the secret code
84
98
  email:
85
99
  - dakhnonazar@gmail.com