codebreaker_manfly 0.1.0 → 0.1.1

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
  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