codebreaker_manfly 0.1.0 → 0.1.1

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: 1bf5a2d407b3dfe6aa376b4b1ee2898aff5218f029ed50431f923da3dc995f64
4
- data.tar.gz: 76af7bcf0724470479f18b0311d0c2a766daf16755395c50d4c46276102ce7f8
3
+ metadata.gz: 712151060b79bacafe34e148dedc46708adacf8693e92dc1c7fc34a4c67d0acd
4
+ data.tar.gz: 15b66fc81ee87dd9dc5d4e26b7b81ed007daa8f64e7b9255b8d1d3aa1595b458
5
5
  SHA512:
6
- metadata.gz: e809f5396db417e025168bfae271c4d2cf4bb571685e68b1e90444e022f5e80e8aabb04e8abf97179e0c450a0277d576972e5cd4c5213c56912f8ccb44e112af
7
- data.tar.gz: '0193faae4c52a1264d6b322607e9f226463e6b69cefc6ab9966b4664d757633bfde8f318c963931e34f717e153824f8f73b537a17dde13518dbaedf58d49c0ab'
6
+ metadata.gz: 8e5b79427b3d0d997407b029d9edde67cb2bd797d95e3b9ba1f2059d5dd0d567cab514d23ce0df5a5505fdec9f670d1fb5a6b46c783a7d054ab76ff9dbf13a61
7
+ data.tar.gz: '019a5fdb7dc2fe2292aec262226e1b843bb20cc4d57389e14eed40537dde74af30f1019791acb601689862977dfa3d53c6b94b20384e5d1c763311c4159377c3'
data/.rubocop.yml CHANGED
@@ -1,26 +1,14 @@
1
1
  AllCops:
2
2
  TargetRubyVersion: 2.7
3
3
 
4
- Style/StringLiterals:
5
- Enabled: true
6
- EnforcedStyle: double_quotes
7
-
8
4
  Style/Documentation:
9
5
  Enabled: false
10
6
 
11
7
  Metrics/BlockLength:
12
- Exclude:
13
- - spec/game_spec.rb
14
- Max: 50
15
-
16
- Metrics/BlockLength:
17
- Exclude:
18
- - spec/codebreaker/game_spec.rb
19
- Max: 50
20
-
21
- Style/StringLiteralsInInterpolation:
22
- Enabled: true
23
- EnforcedStyle: double_quotes
8
+ ExcludedMethods: ['describe', 'context']
24
9
 
25
10
  Layout/LineLength:
26
11
  Max: 120
12
+
13
+ Metrics/LineLength:
14
+ Max: 120
data/.ruby-gemset ADDED
File without changes
data/Gemfile CHANGED
@@ -1,10 +1,10 @@
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 codebreaker.gemspec
6
6
  gemspec
7
7
 
8
- gem "rake", "~> 13.0"
9
- gem "rspec", "~> 3.10"
10
- gem "rubocop", "~> 1.7"
8
+ gem 'rake', '~> 13.0'
9
+ gem 'rspec', '~> 3.10'
10
+ gem 'rubocop', '~> 1.7'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- codebreaker_manfly (0.1.0)
4
+ codebreaker_manfly (0.1.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/gem_tasks"
4
- require "rubocop/rake_task"
3
+ require 'bundler/gem_tasks'
4
+ require 'rubocop/rake_task'
5
5
 
6
6
  RuboCop::RakeTask.new
7
7
 
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 "codebreaker"
4
+ require 'bundler/setup'
5
+ require 'codebreaker'
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 "codebreaker"
11
11
  # require "pry"
12
12
  # Pry.start
13
13
 
14
- require "irb"
14
+ require 'irb'
15
15
  IRB.start(__FILE__)
data/db/results_test.yml CHANGED
@@ -86,3 +86,135 @@ difficulty: :easy
86
86
  date: 2021-10-08
87
87
  attempts: 15
88
88
  number_of_hints: 2
89
+ --- !ruby/object:Codebreaker::Game
90
+ user: !ruby/object:RSpec::Mocks::InstanceVerifyingDouble
91
+ doubled_module: !ruby/object:RSpec::Mocks::NamedObjectReference
92
+ const_name: User
93
+ __expired: false
94
+ name:
95
+ __sending_message:
96
+ difficulty: :easy
97
+ date: 2021-10-08
98
+ attempts: 15
99
+ number_of_hints: 2
100
+ --- !ruby/object:Codebreaker::Game
101
+ user: !ruby/object:RSpec::Mocks::InstanceVerifyingDouble
102
+ doubled_module: !ruby/object:RSpec::Mocks::NamedObjectReference
103
+ const_name: User
104
+ __expired: false
105
+ name:
106
+ __sending_message:
107
+ difficulty: :easy
108
+ date: 2021-10-08
109
+ attempts: 15
110
+ number_of_hints: 2
111
+ --- !ruby/object:Codebreaker::Game
112
+ user: !ruby/object:RSpec::Mocks::InstanceVerifyingDouble
113
+ doubled_module: !ruby/object:RSpec::Mocks::NamedObjectReference
114
+ const_name: User
115
+ __expired: false
116
+ name:
117
+ __sending_message:
118
+ difficulty: :easy
119
+ date: 2021-10-19
120
+ attempts: 15
121
+ number_of_hints: 2
122
+ --- !ruby/object:Codebreaker::Game
123
+ user: !ruby/object:RSpec::Mocks::InstanceVerifyingDouble
124
+ doubled_module: !ruby/object:RSpec::Mocks::NamedObjectReference
125
+ const_name: User
126
+ __expired: false
127
+ name:
128
+ __sending_message:
129
+ difficulty: :easy
130
+ date: 2021-10-19
131
+ attempts: 15
132
+ number_of_hints: 2
133
+ --- !ruby/object:Codebreaker::Game
134
+ user: !ruby/object:RSpec::Mocks::InstanceVerifyingDouble
135
+ doubled_module: !ruby/object:RSpec::Mocks::NamedObjectReference
136
+ const_name: User
137
+ __expired: false
138
+ name:
139
+ __sending_message:
140
+ difficulty: :easy
141
+ date: 2021-10-19
142
+ attempts: 15
143
+ number_of_hints: 2
144
+ --- !ruby/object:Codebreaker::Game
145
+ user: !ruby/object:RSpec::Mocks::InstanceVerifyingDouble
146
+ doubled_module: !ruby/object:RSpec::Mocks::NamedObjectReference
147
+ const_name: User
148
+ __expired: false
149
+ name:
150
+ __sending_message:
151
+ difficulty: :easy
152
+ date: 2021-10-19
153
+ attempts: 15
154
+ number_of_hints: 2
155
+ --- !ruby/object:Codebreaker::Game
156
+ user: !ruby/object:RSpec::Mocks::InstanceVerifyingDouble
157
+ doubled_module: !ruby/object:RSpec::Mocks::NamedObjectReference
158
+ const_name: User
159
+ __expired: false
160
+ name:
161
+ __sending_message:
162
+ difficulty: :easy
163
+ date: 2021-10-19
164
+ attempts: 15
165
+ number_of_hints: 2
166
+ --- !ruby/object:Codebreaker::Game
167
+ user: !ruby/object:RSpec::Mocks::InstanceVerifyingDouble
168
+ doubled_module: !ruby/object:RSpec::Mocks::NamedObjectReference
169
+ const_name: User
170
+ __expired: false
171
+ name:
172
+ __sending_message:
173
+ difficulty: :easy
174
+ date: 2021-10-19
175
+ attempts: 15
176
+ number_of_hints: 2
177
+ --- !ruby/object:Codebreaker::Game
178
+ user: !ruby/object:RSpec::Mocks::InstanceVerifyingDouble
179
+ doubled_module: !ruby/object:RSpec::Mocks::NamedObjectReference
180
+ const_name: User
181
+ __expired: false
182
+ name:
183
+ __sending_message:
184
+ difficulty: :easy
185
+ date: 2021-10-19
186
+ attempts: 15
187
+ number_of_hints: 2
188
+ --- !ruby/object:Codebreaker::Game
189
+ user: !ruby/object:RSpec::Mocks::InstanceVerifyingDouble
190
+ doubled_module: !ruby/object:RSpec::Mocks::NamedObjectReference
191
+ const_name: User
192
+ __expired: false
193
+ name:
194
+ __sending_message:
195
+ difficulty: :easy
196
+ date: 2021-10-19
197
+ attempts: 15
198
+ number_of_hints: 2
199
+ --- !ruby/object:Codebreaker::Game
200
+ user: !ruby/object:RSpec::Mocks::InstanceVerifyingDouble
201
+ doubled_module: !ruby/object:RSpec::Mocks::NamedObjectReference
202
+ const_name: User
203
+ __expired: false
204
+ name:
205
+ __sending_message:
206
+ difficulty: :easy
207
+ date: 2021-10-19
208
+ attempts: 15
209
+ number_of_hints: 2
210
+ --- !ruby/object:Codebreaker::Game
211
+ user: !ruby/object:RSpec::Mocks::InstanceVerifyingDouble
212
+ doubled_module: !ruby/object:RSpec::Mocks::NamedObjectReference
213
+ const_name: User
214
+ __expired: false
215
+ name:
216
+ __sending_message:
217
+ difficulty: :easy
218
+ date: 2021-10-19
219
+ attempts: 15
220
+ number_of_hints: 2
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Codebreaker
4
- class SaveRes
4
+ class FileLoader
5
5
  include Validation
6
6
 
7
- FILE_PATH = "#{ENV["DB_PATH"]}#{ENV["DB_FILE"]}"
7
+ FILE_PATH = "#{ENV['DB_PATH']}#{ENV['DB_FILE']}"
8
8
 
9
9
  def initialize(db_file_path = FILE_PATH)
10
10
  @db_file_path = db_file_path
@@ -13,14 +13,14 @@ module Codebreaker
13
13
  def load
14
14
  validate_file_existens(FILE_PATH)
15
15
 
16
- File.open(FILE_PATH, "r") do |file|
16
+ File.open(FILE_PATH, 'r') do |file|
17
17
  YAML.load_stream(file)
18
18
  end
19
19
  end
20
20
 
21
21
  def save(object)
22
- create_directory("DB_PATH") unless Dir.exist?(ENV["DB_PATH"])
23
- File.open(FILE_PATH, "a") { |file| file.write(object.to_yaml) }
22
+ create_directory('DB_PATH') unless Dir.exist?(ENV['DB_PATH'])
23
+ File.open(FILE_PATH, 'a') { |file| file.write(object.to_yaml) }
24
24
  end
25
25
 
26
26
  def create_directory(path)
@@ -3,11 +3,11 @@
3
3
  module Codebreaker
4
4
  module Validation
5
5
  ERROR_MESSAGES = {
6
- invalid_name: "Name should be of 3 to 20 characters",
7
- invalid_guess: "Expect 4 digits from 1 to 6",
8
- no_hints_left: "No hints left, mate",
9
- no_difficulty: "No such difficulty",
10
- no_save_data: "No saved data is found"
6
+ invalid_name: 'Name should be of 3 to 20 characters',
7
+ invalid_guess: 'Expect 4 digits from 1 to 6',
8
+ no_hints_left: 'No hints left, mate',
9
+ no_difficulty: 'No such difficulty',
10
+ no_save_data: 'No saved data is found'
11
11
  }.freeze
12
12
 
13
13
  class GameError < StandardError; end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Codebreaker
4
- VERSION = "0.1.0"
4
+ VERSION = '0.1.1'
5
5
  end
data/lib/codebreaker.rb CHANGED
@@ -1,8 +1,100 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "../entity"
4
- require_relative "codebreaker/version"
3
+ require 'yaml/store'
4
+ require 'date'
5
+
6
+ require_relative 'codebreaker/module/validation'
7
+ require_relative 'codebreaker/gameload'
8
+ require_relative 'codebreaker/user'
9
+ require_relative 'codebreaker/file_loader'
10
+ require_relative 'codebreaker/version'
5
11
 
6
12
  module Codebreaker
7
- class Error < StandardError; end
13
+ class Game
14
+ include Validation
15
+
16
+ attr_reader :clues, :user, :difficulty,
17
+ :attempts_used, :hints_used, :very_secret_code,
18
+ :date
19
+
20
+ DIFFICULTIES = {
21
+ easy: { attempts: 15, hints: 2 },
22
+ medium: { attempts: 10, hints: 1 },
23
+ hell: { attempts: 5, hints: 1 }
24
+ }.freeze
25
+
26
+ CODE_LENGTH = 4
27
+ RANGE_GUESS_CODE = (1..6).freeze
28
+
29
+ def initialize(difficulty:, user:, date: Date.today)
30
+ validate_difficulty(difficulty, DIFFICULTIES)
31
+
32
+ @user = user
33
+ @difficulty = difficulty
34
+ @date = date
35
+
36
+ attempts
37
+ number_of_hints
38
+ end
39
+
40
+ def start_new_game
41
+ @very_secret_code = generate_random_code
42
+ @hints = @very_secret_code.clone
43
+ @attempts_used = 0
44
+ @hints_used = 0
45
+ @user_guess = []
46
+ @clues = []
47
+ end
48
+
49
+ def guess(user_guess)
50
+ guess = user_guess.each_char.map(&:to_i)
51
+ validate_guess(guess, CODE_LENGTH, RANGE_GUESS_CODE)
52
+ check_guess(guess, very_secret_code)
53
+
54
+ increase_attempts
55
+ end
56
+
57
+ def show_hint
58
+ validate_hints(hints_used, number_of_hints)
59
+
60
+ @hints_used += 1
61
+ @hints.shuffle!.pop
62
+ end
63
+
64
+ def won?
65
+ @user_guess.nil?
66
+ end
67
+
68
+ def lost?
69
+ @attempts_used >= @attempts
70
+ end
71
+
72
+ def save_game
73
+ FileLoader.new.save(self)
74
+ end
75
+
76
+ def attempts
77
+ @attempts ||= DIFFICULTIES[difficulty.to_sym][:attempts]
78
+ end
79
+
80
+ def number_of_hints
81
+ @number_of_hints ||= DIFFICULTIES[difficulty.to_sym][:hints]
82
+ end
83
+
84
+ private
85
+
86
+ def generate_random_code
87
+ Array.new(CODE_LENGTH) { rand(RANGE_GUESS_CODE) }
88
+ end
89
+
90
+ def check_guess(guess, secret_code)
91
+ gameload = Codebreaker::Gameload.new(guess, secret_code)
92
+ @user_guess = gameload.match
93
+ @clues = gameload.clues
94
+ end
95
+
96
+ def increase_attempts
97
+ @attempts_used += 1
98
+ end
99
+ end
8
100
  end
metadata CHANGED
@@ -1,15 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codebreaker_manfly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrii Ivaniuk
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-08 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2021-10-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '13.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '13.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.10'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.7'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.7'
13
55
  description: Longer description or delete this line.
14
56
  email:
15
57
  - aivanuyk0@gmail.com
@@ -18,8 +60,8 @@ extensions: []
18
60
  extra_rdoc_files: []
19
61
  files:
20
62
  - ".rspec"
21
- - ".rspec_status"
22
63
  - ".rubocop.yml"
64
+ - ".ruby-gemset"
23
65
  - ".ruby-version"
24
66
  - CHANGELOG.md
25
67
  - CODE_OF_CONDUCT.md
@@ -31,13 +73,10 @@ files:
31
73
  - bin/console
32
74
  - bin/setup
33
75
  - db/results_test.yml
34
- - entity.rb
35
76
  - lib/codebreaker.rb
36
- - lib/codebreaker/game.rb
77
+ - lib/codebreaker/file_loader.rb
37
78
  - lib/codebreaker/gameload.rb
38
- - lib/codebreaker/module/save_res.rb
39
79
  - lib/codebreaker/module/validation.rb
40
- - lib/codebreaker/save_res.rb
41
80
  - lib/codebreaker/user.rb
42
81
  - lib/codebreaker/version.rb
43
82
  homepage:
data/.rspec_status DELETED
@@ -1,56 +0,0 @@
1
- example_id | status | run_time |
2
- -------------------------------------------- | ------ | --------------- |
3
- ./spec/codebreaker/game_spec.rb[1:1:1:1] | passed | 0.00042 seconds |
4
- ./spec/codebreaker/game_spec.rb[1:1:2:1] | passed | 0.00097 seconds |
5
- ./spec/codebreaker/game_spec.rb[1:1:3:1] | passed | 0.00035 seconds |
6
- ./spec/codebreaker/game_spec.rb[1:1:3:2] | passed | 0.00045 seconds |
7
- ./spec/codebreaker/game_spec.rb[1:1:3:3] | passed | 0.00015 seconds |
8
- ./spec/codebreaker/game_spec.rb[1:2:1:1] | passed | 0.00013 seconds |
9
- ./spec/codebreaker/game_spec.rb[1:2:1:2] | passed | 0.00086 seconds |
10
- ./spec/codebreaker/game_spec.rb[1:2:1:3] | passed | 0.00151 seconds |
11
- ./spec/codebreaker/game_spec.rb[1:3:1:1] | passed | 0.0002 seconds |
12
- ./spec/codebreaker/game_spec.rb[1:3:1:2] | passed | 0.00015 seconds |
13
- ./spec/codebreaker/game_spec.rb[1:3:2:1] | passed | 0.00016 seconds |
14
- ./spec/codebreaker/game_spec.rb[1:3:2:2] | passed | 0.00014 seconds |
15
- ./spec/codebreaker/game_spec.rb[1:3:2:3] | passed | 0.00014 seconds |
16
- ./spec/codebreaker/game_spec.rb[1:3:3:1] | passed | 0.00017 seconds |
17
- ./spec/codebreaker/game_spec.rb[1:3:3:2] | passed | 0.00015 seconds |
18
- ./spec/codebreaker/game_spec.rb[1:3:4:1] | passed | 0.00022 seconds |
19
- ./spec/codebreaker/game_spec.rb[1:4:1:1] | passed | 0.00016 seconds |
20
- ./spec/codebreaker/gameload_spec.rb[1:1:1:1] | passed | 0.0001 seconds |
21
- ./spec/codebreaker/gameload_spec.rb[1:1:2:1] | passed | 0.00009 seconds |
22
- ./spec/codebreaker/gameload_spec.rb[1:1:3:1] | passed | 0.00009 seconds |
23
- ./spec/codebreaker/gameload_spec.rb[1:1:4:1] | passed | 0.00007 seconds |
24
- ./spec/codebreaker/gameload_spec.rb[1:1:5:1] | passed | 0.00009 seconds |
25
- ./spec/codebreaker/gameload_spec.rb[1:1:6:1] | passed | 0.00008 seconds |
26
- ./spec/codebreaker/save_res_spec.rb[1:1:1:1] | passed | 0.00144 seconds |
27
- ./spec/codebreaker/save_res_spec.rb[1:1:2:1] | passed | 0.00068 seconds |
28
- ./spec/codebreaker/user_spec.rb[1:1:1:1] | passed | 0.00016 seconds |
29
- ./spec/codebreaker/user_spec.rb[1:1:2:1] | passed | 0.00022 seconds |
30
- ./spec/codebreaker/game_spec.rb[1:1:1:1] | passed | 0.00043 seconds |
31
- ./spec/codebreaker/game_spec.rb[1:1:2:1] | passed | 0.00089 seconds |
32
- ./spec/codebreaker/game_spec.rb[1:1:3:1] | passed | 0.00033 seconds |
33
- ./spec/codebreaker/game_spec.rb[1:1:3:2] | passed | 0.00043 seconds |
34
- ./spec/codebreaker/game_spec.rb[1:1:3:3] | passed | 0.00012 seconds |
35
- ./spec/codebreaker/game_spec.rb[1:2:1:1] | passed | 0.00012 seconds |
36
- ./spec/codebreaker/game_spec.rb[1:2:1:2] | passed | 0.00086 seconds |
37
- ./spec/codebreaker/game_spec.rb[1:2:1:3] | passed | 0.00147 seconds |
38
- ./spec/codebreaker/game_spec.rb[1:3:1:1] | passed | 0.0002 seconds |
39
- ./spec/codebreaker/game_spec.rb[1:3:1:2] | passed | 0.00014 seconds |
40
- ./spec/codebreaker/game_spec.rb[1:3:2:1] | passed | 0.00016 seconds |
41
- ./spec/codebreaker/game_spec.rb[1:3:2:2] | passed | 0.00012 seconds |
42
- ./spec/codebreaker/game_spec.rb[1:3:2:3] | passed | 0.00012 seconds |
43
- ./spec/codebreaker/game_spec.rb[1:3:3:1] | passed | 0.00017 seconds |
44
- ./spec/codebreaker/game_spec.rb[1:3:3:2] | passed | 0.00013 seconds |
45
- ./spec/codebreaker/game_spec.rb[1:3:4:1] | passed | 0.00022 seconds |
46
- ./spec/codebreaker/game_spec.rb[1:4:1:1] | passed | 0.00015 seconds |
47
- ./spec/codebreaker/gameload_spec.rb[1:1:1:1] | passed | 0.00009 seconds |
48
- ./spec/codebreaker/gameload_spec.rb[1:1:2:1] | passed | 0.00008 seconds |
49
- ./spec/codebreaker/gameload_spec.rb[1:1:3:1] | passed | 0.00007 seconds |
50
- ./spec/codebreaker/gameload_spec.rb[1:1:4:1] | passed | 0.00007 seconds |
51
- ./spec/codebreaker/gameload_spec.rb[1:1:5:1] | passed | 0.00008 seconds |
52
- ./spec/codebreaker/gameload_spec.rb[1:1:6:1] | passed | 0.00007 seconds |
53
- ./spec/codebreaker/save_res_spec.rb[1:1:1:1] | passed | 0.00213 seconds |
54
- ./spec/codebreaker/save_res_spec.rb[1:1:2:1] | passed | 0.00104 seconds |
55
- ./spec/codebreaker/user_spec.rb[1:1:1:1] | passed | 0.00018 seconds |
56
- ./spec/codebreaker/user_spec.rb[1:1:2:1] | passed | 0.00016 seconds |
data/entity.rb DELETED
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "yaml/store"
4
- require "date"
5
-
6
- require_relative "lib/codebreaker/module/validation"
7
- require_relative "lib/codebreaker/gameload"
8
- require_relative "lib/codebreaker/user"
9
- require_relative "lib/codebreaker/game"
10
- require_relative "lib/codebreaker/save_res"
11
- require_relative "lib/codebreaker/module/save_res"
12
- require_relative "lib/codebreaker"
@@ -1,91 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Codebreaker
4
- class Game
5
- include Validation
6
-
7
- attr_reader :clues, :user, :difficulty,
8
- :attempts_used, :hints_used, :very_secret_code,
9
- :date
10
-
11
- DIFFICULTIES = {
12
- easy: { attempts: 15, hints: 2 },
13
- medium: { attempts: 10, hints: 1 },
14
- hell: { attempts: 5, hints: 1 }
15
- }.freeze
16
-
17
- CODE_LENGTH = 4
18
- RANGE_GUESS_CODE = (1..6).freeze
19
-
20
- def initialize(difficulty:, user:, date: Date.today)
21
- validate_difficulty(difficulty, DIFFICULTIES)
22
-
23
- @user = user
24
- @difficulty = difficulty
25
- @date = date
26
-
27
- attempts
28
- number_of_hints
29
- end
30
-
31
- def start_new_game
32
- @very_secret_code = generate_random_code
33
- @hints = @very_secret_code.clone
34
- @attempts_used = 0
35
- @hints_used = 0
36
- @user_guess = []
37
- @clues = []
38
- end
39
-
40
- def guess(user_guess)
41
- guess = user_guess.each_char.map(&:to_i)
42
- validate_guess(guess, CODE_LENGTH, RANGE_GUESS_CODE)
43
- check_guess(guess, very_secret_code)
44
-
45
- increase_attempts
46
- end
47
-
48
- def show_hint
49
- validate_hints(hints_used, number_of_hints)
50
-
51
- @hints_used += 1
52
- @hints.shuffle!.pop
53
- end
54
-
55
- def won?
56
- @user_guess.nil?
57
- end
58
-
59
- def lost?
60
- @attempts_used >= @attempts
61
- end
62
-
63
- def save_game
64
- SaveRes.new.save(self)
65
- end
66
-
67
- def attempts
68
- @attempts ||= DIFFICULTIES[difficulty.to_sym][:attempts]
69
- end
70
-
71
- def number_of_hints
72
- @number_of_hints ||= DIFFICULTIES[difficulty.to_sym][:hints]
73
- end
74
-
75
- private
76
-
77
- def generate_random_code
78
- Array.new(CODE_LENGTH) { rand(RANGE_GUESS_CODE) }
79
- end
80
-
81
- def check_guess(guess, secret_code)
82
- gameload = Codebreaker::Gameload.new(guess, secret_code)
83
- @user_guess = gameload.match
84
- @clues = gameload.clues
85
- end
86
-
87
- def increase_attempts
88
- @attempts_used += 1
89
- end
90
- end
91
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Codebreaker
4
- class SaveRes
5
- include Validation
6
-
7
- FILE_PATH = "#{ENV["DB_PATH"]}#{ENV["DB_FILE"]}"
8
-
9
- def initialize(db_file_path = FILE_PATH)
10
- @db_file_path = db_file_path
11
- end
12
-
13
- def load
14
- validate_file_existens(FILE_PATH)
15
-
16
- File.open(FILE_PATH, "r") do |file|
17
- YAML.load_stream(file)
18
- end
19
- end
20
-
21
- def save(object)
22
- create_directory("DB_PATH") unless Dir.exist?(ENV["DB_PATH"])
23
- File.open(FILE_PATH, "a") { |file| file.write(object.to_yaml) }
24
- end
25
-
26
- def create_directory(path)
27
- Dir.mkdir(ENV[path])
28
- end
29
- end
30
- end