alex_codebreaker 0.1.12 → 0.1.13
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 +4 -4
- data/README.md +8 -2
- data/lib/alex_codebreaker.rb +1 -1
- data/lib/alex_codebreaker/configuration.rb +5 -3
- data/lib/alex_codebreaker/game.rb +25 -5
- data/lib/alex_codebreaker/id_generator.rb +18 -0
- data/lib/alex_codebreaker/players_rating.rb +6 -2
- data/lib/alex_codebreaker/session.rb +11 -2
- data/lib/alex_codebreaker/version.rb +1 -1
- metadata +3 -4
- data/lib/alex_codebreaker/files_config.rb +0 -15
- data/lib/alex_codebreaker/modules/files.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c5a6d38c548011653e19a27a4104ea2d1c489e4da6b40a668eb8f65692113f5e
|
4
|
+
data.tar.gz: 3196886d889cc891d472944d7e8f27373c4466835a1a87222266faa575917996
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd9759580e561f62ef281b33038c12dad441f38f2f57b5034fc79e676e3e738f4ef0715a4a5f5407c14dbecda581e35fe6027a22b5d74c99371f1d917ea89aca
|
7
|
+
data.tar.gz: 55344c2fc1a93e3b8487982a7e01775be6062107d685ce2866cd816cc03223f5143179cc02ffec4178f823bedd9c55475c607734310c105d5c51bd6ebb5a3a81
|
data/README.md
CHANGED
@@ -20,8 +20,14 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
To config
|
24
|
-
|
23
|
+
To config winners folder path add this to your app config:
|
24
|
+
|
25
|
+
`AlexCodebreaker.configure { |config| config.winners_folder_path = 'your/path/' }`
|
26
|
+
|
27
|
+
To config save games folder path add this to your app config:
|
28
|
+
|
29
|
+
`AlexCodebreaker.configure { |config| config.games_folder_path = 'your/folder/' }`
|
30
|
+
|
25
31
|
|
26
32
|
Use this gem for creating amazing version of codebreaker game!
|
27
33
|
|
data/lib/alex_codebreaker.rb
CHANGED
@@ -6,8 +6,8 @@ require_relative 'alex_codebreaker/modules/settings'
|
|
6
6
|
require_relative 'alex_codebreaker/modules/difficulty_levels'
|
7
7
|
require_relative 'alex_codebreaker/modules/validators'
|
8
8
|
require_relative 'alex_codebreaker/modules/arguments_validation'
|
9
|
-
require_relative 'alex_codebreaker/files_config'
|
10
9
|
require_relative 'alex_codebreaker/secret_code_generator'
|
10
|
+
require_relative 'alex_codebreaker/id_generator'
|
11
11
|
require_relative 'alex_codebreaker/comparison'
|
12
12
|
require_relative 'alex_codebreaker/players_rating'
|
13
13
|
require_relative 'alex_codebreaker/session'
|
@@ -1,11 +1,13 @@
|
|
1
1
|
module AlexCodebreaker
|
2
2
|
class Configuration
|
3
|
-
|
3
|
+
DEFAULT_WINNERS_FOLDER_PATH = 'games/winners/'.freeze
|
4
|
+
DEFAULT_GAMES_FOLDER_PATH = 'games/'.freeze
|
4
5
|
|
5
|
-
attr_accessor :
|
6
|
+
attr_accessor :winners_folder_path, :games_folder_path
|
6
7
|
|
7
8
|
def initialize
|
8
|
-
@
|
9
|
+
@winners_folder_path = DEFAULT_WINNERS_FOLDER_PATH
|
10
|
+
@games_folder_path = DEFAULT_GAMES_FOLDER_PATH
|
9
11
|
end
|
10
12
|
end
|
11
13
|
|
@@ -1,13 +1,16 @@
|
|
1
1
|
module AlexCodebreaker
|
2
2
|
class Game
|
3
3
|
include AlexCodebreaker::Modules::ArgumentsValidation
|
4
|
+
FILENAME_EXTENSION = '.yml'.freeze
|
4
5
|
|
5
|
-
attr_reader :secret_code, :session
|
6
|
+
attr_reader :secret_code, :session, :game_id
|
6
7
|
|
7
|
-
def initialize
|
8
|
+
def initialize(outer_id: nil)
|
9
|
+
@game_id = outer_id if outer_id
|
8
10
|
@secret_code = AlexCodebreaker::SecretCodeGenerator.new.secret_code
|
9
11
|
@secret_code_for_hint = @secret_code.clone.uniq
|
10
12
|
@session = Session.new
|
13
|
+
save_game
|
11
14
|
end
|
12
15
|
|
13
16
|
def hint
|
@@ -19,15 +22,20 @@ module AlexCodebreaker
|
|
19
22
|
def guess(user_input)
|
20
23
|
return unless guess_validation(user_input) && @session.check_attempts
|
21
24
|
|
25
|
+
save_game
|
22
26
|
compare_codes(user_input)
|
23
27
|
end
|
24
28
|
|
25
29
|
private
|
26
30
|
|
27
31
|
def process_hint
|
28
|
-
|
29
|
-
|
30
|
-
|
32
|
+
hint = if @secret_code_for_hint.one?
|
33
|
+
@secret_code_for_hint.first
|
34
|
+
else
|
35
|
+
@secret_code_for_hint.delete(@secret_code_for_hint.sample)
|
36
|
+
end
|
37
|
+
save_game
|
38
|
+
hint
|
31
39
|
end
|
32
40
|
|
33
41
|
def compare_codes(user_input)
|
@@ -39,5 +47,17 @@ module AlexCodebreaker
|
|
39
47
|
def format_user_input(user_input)
|
40
48
|
user_input.chars.map(&:to_i)
|
41
49
|
end
|
50
|
+
|
51
|
+
def save_game
|
52
|
+
@game_id ||= AlexCodebreaker::IDGenerator.new.unique_id
|
53
|
+
unless File.directory?(AlexCodebreaker.configuration.games_folder_path)
|
54
|
+
FileUtils.mkdir_p(AlexCodebreaker.configuration.games_folder_path)
|
55
|
+
end
|
56
|
+
File.open(save_game_path, 'w') { |file| file.write(to_yaml) }
|
57
|
+
end
|
58
|
+
|
59
|
+
def save_game_path
|
60
|
+
"#{AlexCodebreaker.configuration.games_folder_path}#{@game_id}#{FILENAME_EXTENSION}"
|
61
|
+
end
|
42
62
|
end
|
43
63
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module AlexCodebreaker
|
2
|
+
class IDGenerator
|
3
|
+
MIN_NUMBER = 1
|
4
|
+
MAX_NUMBER = 9_999_999_999
|
5
|
+
|
6
|
+
attr_reader :unique_id
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@unique_id = generate_id
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def generate_id
|
15
|
+
rand(MIN_NUMBER..MAX_NUMBER)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -10,14 +10,14 @@ module AlexCodebreaker
|
|
10
10
|
private
|
11
11
|
|
12
12
|
def load_and_sort_stats
|
13
|
-
return unless File.exist?(
|
13
|
+
return unless File.exist?(winners_path)
|
14
14
|
|
15
15
|
load_stats
|
16
16
|
sort_stats
|
17
17
|
end
|
18
18
|
|
19
19
|
def load_stats
|
20
|
-
File.open(
|
20
|
+
File.open(winners_path) do |file|
|
21
21
|
@stats = Array.new(YAML.load_stream(file))
|
22
22
|
end
|
23
23
|
end
|
@@ -25,5 +25,9 @@ module AlexCodebreaker
|
|
25
25
|
def sort_stats
|
26
26
|
@stats.sort_by! { |value| [-value.difficulty_level, value.attempts_used, value.hints_used] }
|
27
27
|
end
|
28
|
+
|
29
|
+
def winners_path
|
30
|
+
"#{AlexCodebreaker.configuration.winners_folder_path}#{AlexCodebreaker::Session::WINNERS_FILE_NAME}"
|
31
|
+
end
|
28
32
|
end
|
29
33
|
end
|
@@ -4,6 +4,7 @@ module AlexCodebreaker
|
|
4
4
|
|
5
5
|
INITIAL_ATTEMPTS_USED = 0
|
6
6
|
INITIAL_HINTS_USED = 0
|
7
|
+
WINNERS_FILE_NAME = 'winners.yml'.freeze
|
7
8
|
|
8
9
|
attr_reader :hints_used, :attempts_used, :player_name, :hints_total,
|
9
10
|
:difficulty_name, :attempts_total, :difficulty_level, :time
|
@@ -38,9 +39,17 @@ module AlexCodebreaker
|
|
38
39
|
@attempts_used
|
39
40
|
end
|
40
41
|
|
41
|
-
def
|
42
|
+
def save_winner_statistic
|
42
43
|
@time = Time.new
|
43
|
-
|
44
|
+
check_folder_existence
|
45
|
+
path = "#{AlexCodebreaker.configuration.winners_folder_path}#{WINNERS_FILE_NAME}"
|
46
|
+
File.open(path, 'a') { |file| file.write(to_yaml) }
|
47
|
+
end
|
48
|
+
|
49
|
+
def check_folder_existence
|
50
|
+
return if File.directory?(AlexCodebreaker.configuration.winners_folder_path)
|
51
|
+
|
52
|
+
FileUtils.mkdir_p(AlexCodebreaker.configuration.winners_folder_path)
|
44
53
|
end
|
45
54
|
end
|
46
55
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alex_codebreaker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oleksandr Loza
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -162,11 +162,10 @@ files:
|
|
162
162
|
- lib/alex_codebreaker.rb
|
163
163
|
- lib/alex_codebreaker/comparison.rb
|
164
164
|
- lib/alex_codebreaker/configuration.rb
|
165
|
-
- lib/alex_codebreaker/files_config.rb
|
166
165
|
- lib/alex_codebreaker/game.rb
|
166
|
+
- lib/alex_codebreaker/id_generator.rb
|
167
167
|
- lib/alex_codebreaker/modules/arguments_validation.rb
|
168
168
|
- lib/alex_codebreaker/modules/difficulty_levels.rb
|
169
|
-
- lib/alex_codebreaker/modules/files.rb
|
170
169
|
- lib/alex_codebreaker/modules/settings.rb
|
171
170
|
- lib/alex_codebreaker/modules/validators.rb
|
172
171
|
- lib/alex_codebreaker/players_rating.rb
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module AlexCodebreaker
|
2
|
-
class FilesConfig
|
3
|
-
# rubocop:disable Style/ClassVars
|
4
|
-
DEFAULT_PATH = 'stats.yml'.freeze
|
5
|
-
|
6
|
-
def default_path
|
7
|
-
@@default_path ||= DEFAULT_PATH
|
8
|
-
end
|
9
|
-
|
10
|
-
def default_path=(path)
|
11
|
-
@@default_path = path
|
12
|
-
end
|
13
|
-
# rubocop:enable Style/ClassVars
|
14
|
-
end
|
15
|
-
end
|