codebreakerq 0.1.7 → 0.1.8

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: c31b9328367e799a547506f25268c44afdc819860a4d8813189ff9cabdbc4bd3
4
- data.tar.gz: 447b9a0d252f1cec4fbb29c73bcdba86ff30059d0375f1a53d28126abf0790cf
3
+ metadata.gz: 402724968927fc41f18355083079127c5068f483494dbd8356027a9031db49db
4
+ data.tar.gz: 7181b649bd7bd4441c6108e2264cb2b043acdd5225ed9356ca33bff51ab5e75f
5
5
  SHA512:
6
- metadata.gz: ea314febeb3178fe6b5fdd668c529f03753fa2ec8f81d269a906ace0df0dfdb00c8de6dec641ba86410ddaee51b05f36267e785469c603cea659fbc057836560
7
- data.tar.gz: 0b591a2386c4c92e39af8164b1a8b6307ce0b2984f7a9b4b58e70ec736c503e7312f22a8a23f54f9a651530369b43bbde01d6f5dfdfe06fa90f878f460c728ea
6
+ metadata.gz: f551e555300c15619e3489bb2a3cade9cd76d03abb31e834b5b584c2b635aff92927171d617d925b4bc14454c9050168562d9ce49ceef3b7d9735d92c79499b6
7
+ data.tar.gz: 8da8b2de67f992a194d310dd78f000adb1325d9edaa93272a5eb25f711600d8599b19420856ec7d3f1cfcbf997b978b08e8fe8211d462403c0a024e1c2521ede
data/.gitignore CHANGED
@@ -8,6 +8,7 @@
8
8
  /pkg/
9
9
  /spec/reports/
10
10
  /tmp/
11
+ /spec/coverage/
11
12
 
12
13
  # rspec failure tracking
13
14
  .rspec_status
@@ -1,3 +1,6 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.7.1
3
+
1
4
  Style/Documentation:
2
5
  Enabled: false
3
6
 
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ SimpleCov.start do
4
+ enable_coverage :branch
5
+ add_filter 'spec/'
6
+ end
7
+
8
+ SimpleCov.minimum_coverage line: 90, branch: 80
@@ -1,14 +1,27 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- codebreakerq (0.1.7)
4
+ codebreakerq (0.1.8)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
+ ast (2.4.1)
9
10
  cli-ui (1.3.0)
10
- diff-lcs (1.4.1)
11
- rake (12.3.3)
11
+ colorize (0.8.1)
12
+ diff-lcs (1.4.4)
13
+ docile (1.3.2)
14
+ fasterer (0.8.3)
15
+ colorize (~> 0.7)
16
+ ruby_parser (>= 3.14.1)
17
+ lefthook (0.7.2)
18
+ parallel (1.19.2)
19
+ parser (2.7.1.4)
20
+ ast (~> 2.4.1)
21
+ rainbow (3.0.0)
22
+ rake (13.0.1)
23
+ regexp_parser (1.7.1)
24
+ rexml (3.2.4)
12
25
  rspec (3.9.0)
13
26
  rspec-core (~> 3.9.0)
14
27
  rspec-expectations (~> 3.9.0)
@@ -22,6 +35,29 @@ GEM
22
35
  diff-lcs (>= 1.2.0, < 2.0)
23
36
  rspec-support (~> 3.9.0)
24
37
  rspec-support (3.9.3)
38
+ rubocop (0.88.0)
39
+ parallel (~> 1.10)
40
+ parser (>= 2.7.1.1)
41
+ rainbow (>= 2.2.2, < 4.0)
42
+ regexp_parser (>= 1.7)
43
+ rexml
44
+ rubocop-ast (>= 0.1.0, < 1.0)
45
+ ruby-progressbar (~> 1.7)
46
+ unicode-display_width (>= 1.4.0, < 2.0)
47
+ rubocop-ast (0.2.0)
48
+ parser (>= 2.7.0.1)
49
+ rubocop-rspec (1.42.0)
50
+ rubocop (>= 0.87.0)
51
+ ruby-progressbar (1.10.1)
52
+ ruby_parser (3.14.2)
53
+ sexp_processor (~> 4.9)
54
+ sexp_processor (4.15.0)
55
+ simplecov (0.18.5)
56
+ docile (~> 1.1)
57
+ simplecov-html (~> 0.11)
58
+ simplecov-html (0.12.2)
59
+ unicode-display_width (1.7.0)
60
+ yaml (0.1.0)
25
61
 
26
62
  PLATFORMS
27
63
  ruby
@@ -30,8 +66,14 @@ DEPENDENCIES
30
66
  bundler
31
67
  cli-ui
32
68
  codebreakerq!
33
- rake (~> 12.0)
34
- rspec (~> 3.0)
69
+ fasterer (~> 0.8.3)
70
+ lefthook (~> 0.7.2)
71
+ rake
72
+ rspec
73
+ rubocop
74
+ rubocop-rspec
75
+ simplecov
76
+ yaml
35
77
 
36
78
  BUNDLED WITH
37
79
  2.1.4
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
 
11
11
  spec.summary = 'Game `Codebreaker`'
12
12
  spec.description = ''
13
- spec.homepage = 'https://github.com/bastare/codebreaker-gem'
13
+ spec.homepage = 'https://github.com/bastare/codebreaker.git'
14
14
  spec.license = 'MIT'
15
15
  spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
16
16
 
@@ -24,6 +24,12 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.add_development_dependency 'bundler'
26
26
  spec.add_development_dependency 'cli-ui'
27
- spec.add_development_dependency 'rake', '~> 12.0'
28
- spec.add_development_dependency 'rspec', '~> 3.0'
27
+ spec.add_development_dependency 'yaml'
28
+ spec.add_development_dependency 'fasterer', '~> 0.8.3'
29
+ spec.add_development_dependency 'lefthook', '~> 0.7.2'
30
+ spec.add_development_dependency 'rake'
31
+ spec.add_development_dependency 'rspec'
32
+ spec.add_development_dependency 'rubocop'
33
+ spec.add_development_dependency 'rubocop-rspec'
34
+ spec.add_development_dependency 'simplecov'
29
35
  end
@@ -0,0 +1,9 @@
1
+ pre-commit:
2
+ parallel: true
3
+ commands:
4
+ rubocop:
5
+ glob: "*.rb"
6
+ run: bundle exec rubocop --force-exclusion {staged_files} --parallel
7
+ fasterer:
8
+ glob: "*.rb"
9
+ run: bundle exec fasterer
@@ -3,36 +3,35 @@
3
3
  require_relative 'codebreaker/index'
4
4
 
5
5
  module Codebreaker
6
+ STAT_FILE = './statistic.yaml'
6
7
  NoAttamptsError = Class.new(ArgumentError)
7
8
  class << self
8
- def start(**diffucult)
9
- BLL::GameEngine.new(**diffucult).tap do |breaker|
10
- loop do
11
- input = CLI::UI.ask("Enter ur guesse. (`hint` - total #{breaker.hints}, `attempts - #{breaker.attempts}`)")
12
-
13
- p breaker.secret_number.to_s
9
+ def create(**diffucult)
10
+ BLL::GameEngine.new(**diffucult)
11
+ end
14
12
 
15
- if input == 'hint'
16
- puts breaker.hint
13
+ def save_statistic(path, **statistic_info)
14
+ [].tap do |data_to_write|
15
+ data_to_write << statistic_info
17
16
 
18
- next
19
- end
17
+ create_db path
20
18
 
21
- break if breaker.input_guess?(input.chars.map(&:to_i))
22
- end
19
+ data_to_write.concat YAML.load_file(path) if YAML.load_file(path)
23
20
 
24
- save_statistic(diffucult_name: diffucult[:diffucult_name], attempts: breaker.attempts, hints: breaker.hints)
21
+ File.open(path, 'w') { |file| file.write(data_to_write.to_yaml) }
25
22
  end
23
+ end
26
24
 
27
- private
25
+ def fetch_statistic(path)
26
+ create_db path
28
27
 
29
- def save_statistic(**stats)
30
- UI::SuccessesPage.save_statistic(
31
- diffucult_name: stats[:diffucult_name],
32
- attempts: stats[:attempts],
33
- hints: stats[:hints]
34
- )
35
- end
28
+ YAML.load_file path
29
+ end
30
+
31
+ private
32
+
33
+ def create_db path
34
+ File.new path,"w" unless File.exist? path
36
35
  end
37
36
  end
38
37
  end
@@ -5,45 +5,77 @@ require_relative '../index'
5
5
  module Codebreaker
6
6
  module BLL
7
7
  class GameEngine
8
- WrongGuessNumber = Class.new(Error::ValidationError)
8
+ WIN_CONDITION = '++++'
9
+ NUMBER_CONFIGURATION = {
10
+ range: 1..6,
11
+ length: 4
12
+ }.freeze
9
13
 
10
- attr_reader :secret_number, :hints, :attempts
14
+ attr_reader :hints, :attempts, :secret_number
11
15
 
12
16
  def initialize(**diffucult)
13
- diffucult_parameters = diffucult[:diffucult_parameters]
17
+ @number_of_digits = NUMBER_CONFIGURATION[:length]
18
+ @digits_range = NUMBER_CONFIGURATION[:range]
14
19
 
15
- @number_of_digits = BLL::NUMBER[:digits]
16
- @digits_range = BLL::NUMBER[:range]
17
- @hints = diffucult_parameters[:hints]
18
- @attempts = diffucult_parameters[:attempts]
20
+ @hints = diffucult[:hints]
21
+ @attempts = diffucult[:attempts]
22
+ @diffucult_name = diffucult[:name]
23
+
24
+ @game_state = true
19
25
 
20
26
  @secret_number = generate_number(@number_of_digits, @digits_range)
21
27
  end
22
28
 
29
+ def input(input)
30
+ return unless @game_state
31
+
32
+ return if hint?(input)
33
+
34
+ return unless input_guess?(input.chars.map(&:to_i))
35
+
36
+ form_result
37
+ end
38
+
39
+ private
40
+
23
41
  def input_guess?(guess_number)
24
42
  return unless guess_number_valid? guess_number
25
43
 
26
44
  attemps_counter
27
45
 
28
- metching(guess_number) == '++++'
46
+ metching!(guess_number).tap do |metching_result|
47
+ puts metching_result
48
+
49
+ return metching_result == WIN_CONDITION
50
+ end
29
51
  end
30
52
 
31
- def hint
32
- return CLI::UI.fmt '{{x}}All hints were used' if @hints.zero?
53
+ def hint?(input)
54
+ return false unless input == 'hint'
33
55
 
34
- @hints -= 1
56
+ if @hints.zero?
57
+ puts CLI::UI.fmt '{{x}}All hints were used'
58
+ else
59
+ @hints -= 1
35
60
 
36
- CLI::UI.fmt "{{*}}#{@secret_number.sample}"
61
+ puts CLI::UI.fmt "{{*}}#{@secret_number.sample}"
62
+ end
63
+
64
+ true
37
65
  end
38
66
 
39
- private
67
+ def form_result
68
+ @game_state = false
40
69
 
41
- def metching(guess_number)
70
+ { diffucult_name: @diffucult_name, attempts: @attempts, hints: @hints }
71
+ end
72
+
73
+ def metching!(guess_number)
42
74
  secret_number = @secret_number.clone
43
75
 
44
76
  [].tap do |result_array|
45
77
  result_array.concat perfect_metching!(guess_number, secret_number)
46
- result_array.concat metching!(guess_number, secret_number)
78
+ result_array.concat partial_metching!(guess_number, secret_number)
47
79
  end.join
48
80
  end
49
81
 
@@ -58,7 +90,7 @@ module Codebreaker
58
90
  end
59
91
  end
60
92
 
61
- def metching!(guess_number, secret_number)
93
+ def partial_metching!(guess_number, secret_number)
62
94
  guess_number.compact!
63
95
  secret_number.compact!
64
96
 
@@ -70,7 +102,11 @@ module Codebreaker
70
102
  end
71
103
 
72
104
  def attemps_counter
73
- raise(NoAttamptsError, CLI::UI.fmt('{{x}} No atempts left')) if @attempts.zero?
105
+ if @attempts.zero?
106
+ @game_state = false
107
+
108
+ raise(NoAttamptsError, CLI::UI.fmt("{{x}} No atempts left. Secrete number was #{@secret_number.join}"))
109
+ end
74
110
 
75
111
  @attempts -= 1
76
112
  end
@@ -2,21 +2,10 @@
2
2
 
3
3
  # require 'require_all'
4
4
  # require 'rspec'
5
- # require 'cli/ui'
5
+ require 'cli/ui'
6
+ require 'yaml'
6
7
 
7
- require_relative './helpers/error'
8
- require_relative './helpers/helpers_module'
9
- require_relative './helpers/validation_module'
10
-
11
- require_relative './bll/modules/error_module'
12
- require_relative './bll/modules/rules_module'
13
-
14
- require_relative './dal/modules/error_module'
15
- require_relative './dal/modules/dal_module'
16
-
17
- require_relative './bll/comands'
18
8
  require_relative './bll/game_engine'
19
- require_relative './bll/statistic'
20
9
 
21
10
  require_relative 'version'
22
11
  require_relative '../codebreaker'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Codebreaker
4
- VERSION = '0.1.7'
4
+ VERSION = '0.1.8'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codebreakerq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - bastare
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-12 00:00:00.000000000 Z
11
+ date: 2020-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -39,33 +39,117 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: yaml
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: fasterer
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '12.0'
61
+ version: 0.8.3
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '12.0'
68
+ version: 0.8.3
55
69
  - !ruby/object:Gem::Dependency
56
- name: rspec
70
+ name: lefthook
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '3.0'
75
+ version: 0.7.2
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '3.0'
82
+ version: 0.7.2
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
69
153
  description: ''
70
154
  email:
71
155
  - noobfrizz1@gmail.com
@@ -79,8 +163,8 @@ files:
79
163
  - ".rspec"
80
164
  - ".rubocop.yml"
81
165
  - ".ruby-version"
166
+ - ".simplecov"
82
167
  - ".travis.yml"
83
- - CODE_OF_CONDUCT.md
84
168
  - Gemfile
85
169
  - Gemfile.lock
86
170
  - LICENSE.txt
@@ -89,22 +173,12 @@ files:
89
173
  - bin/console
90
174
  - bin/setup
91
175
  - codebreaker.gemspec
176
+ - lefthook.yml
92
177
  - lib/codebreaker.rb
93
- - lib/codebreaker/bll/comands.rb
94
178
  - lib/codebreaker/bll/game_engine.rb
95
- - lib/codebreaker/bll/modules/error_module.rb
96
- - lib/codebreaker/bll/modules/rules_module.rb
97
- - lib/codebreaker/bll/spec/bll_spec.rb
98
- - lib/codebreaker/bll/statistic.rb
99
- - lib/codebreaker/dal/modules/dal_module.rb
100
- - lib/codebreaker/dal/modules/error_module.rb
101
- - lib/codebreaker/dal/spec/dal_spec.rb
102
- - lib/codebreaker/helpers/error.rb
103
- - lib/codebreaker/helpers/helpers_module.rb
104
- - lib/codebreaker/helpers/validation_module.rb
105
179
  - lib/codebreaker/index.rb
106
180
  - lib/codebreaker/version.rb
107
- homepage: https://github.com/bastare/codebreaker-gem
181
+ homepage: https://github.com/bastare/codebreaker.git
108
182
  licenses:
109
183
  - MIT
110
184
  metadata: {}
@@ -123,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
197
  - !ruby/object:Gem::Version
124
198
  version: '0'
125
199
  requirements: []
126
- rubygems_version: 3.1.4
200
+ rubygems_version: 3.1.2
127
201
  signing_key:
128
202
  specification_version: 4
129
203
  summary: Game `Codebreaker`
@@ -1,74 +0,0 @@
1
- # Contributor Covenant Code of Conduct
2
-
3
- ## Our Pledge
4
-
5
- In the interest of fostering an open and welcoming environment, we as
6
- contributors and maintainers pledge to making participation in our project and
7
- our community a harassment-free experience for everyone, regardless of age, body
8
- size, disability, ethnicity, gender identity and expression, level of experience,
9
- nationality, personal appearance, race, religion, or sexual identity and
10
- orientation.
11
-
12
- ## Our Standards
13
-
14
- Examples of behavior that contributes to creating a positive environment
15
- include:
16
-
17
- * Using welcoming and inclusive language
18
- * Being respectful of differing viewpoints and experiences
19
- * Gracefully accepting constructive criticism
20
- * Focusing on what is best for the community
21
- * Showing empathy towards other community members
22
-
23
- Examples of unacceptable behavior by participants include:
24
-
25
- * The use of sexualized language or imagery and unwelcome sexual attention or
26
- advances
27
- * Trolling, insulting/derogatory comments, and personal or political attacks
28
- * Public or private harassment
29
- * Publishing others' private information, such as a physical or electronic
30
- address, without explicit permission
31
- * Other conduct which could reasonably be considered inappropriate in a
32
- professional setting
33
-
34
- ## Our Responsibilities
35
-
36
- Project maintainers are responsible for clarifying the standards of acceptable
37
- behavior and are expected to take appropriate and fair corrective action in
38
- response to any instances of unacceptable behavior.
39
-
40
- Project maintainers have the right and responsibility to remove, edit, or
41
- reject comments, commits, code, wiki edits, issues, and other contributions
42
- that are not aligned to this Code of Conduct, or to ban temporarily or
43
- permanently any contributor for other behaviors that they deem inappropriate,
44
- threatening, offensive, or harmful.
45
-
46
- ## Scope
47
-
48
- This Code of Conduct applies both within project spaces and in public spaces
49
- when an individual is representing the project or its community. Examples of
50
- representing a project or community include using an official project e-mail
51
- address, posting via an official social media account, or acting as an appointed
52
- representative at an online or offline event. Representation of a project may be
53
- further defined and clarified by project maintainers.
54
-
55
- ## Enforcement
56
-
57
- Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
- reported by contacting the project team at noobfrizz1@gmail.com. All
59
- complaints will be reviewed and investigated and will result in a response that
60
- is deemed necessary and appropriate to the circumstances. The project team is
61
- obligated to maintain confidentiality with regard to the reporter of an incident.
62
- Further details of specific enforcement policies may be posted separately.
63
-
64
- Project maintainers who do not follow or enforce the Code of Conduct in good
65
- faith may face temporary or permanent repercussions as determined by other
66
- members of the project's leadership.
67
-
68
- ## Attribution
69
-
70
- This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
- available at [https://contributor-covenant.org/version/1/4][version]
72
-
73
- [homepage]: https://contributor-covenant.org
74
- [version]: https://contributor-covenant.org/version/1/4/
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../index'
4
-
5
- module Codebreaker
6
- module BLL
7
- module Commands
8
- class << self
9
- def start(**difucult)
10
- Codebreaker.start(**difucult)
11
- end
12
-
13
- def stats
14
- # TODO: add DAL
15
- end
16
-
17
- def save_game_statistic(**statistic)
18
- p statistic.to_s
19
- end
20
-
21
- def enter_name
22
- DAL.enter_name(CLI::UI.ask('What ur name?'))
23
- # DAL.enter_name('qwer')
24
- end
25
-
26
- def chose_diffucult
27
- CLI::UI::Prompt.ask('Chose diffucult:') do |handler|
28
- BLL::DIFFUCULTS.each do |diffucult_name, diffucult_parameters|
29
- handler.option(diffucult_name.to_s) do
30
- { diffucult_name: diffucult_name, diffucult_parameters: diffucult_parameters }
31
- end
32
- end
33
- end
34
- # BLL::DIFFUCULTS.values.first
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../index'
4
-
5
- module Codebreaker
6
- module BLL
7
- module Error
8
- class ValidationError < Codebreaker::UnexpectedActionError; end
9
- class WrongDiffucultError < Codebreaker::UnexpectedActionError; end
10
- class NoHintsError < Codebreaker::UnexpectedActionError; end
11
- end
12
- end
13
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../index'
4
-
5
- module Codebreaker
6
- module BLL
7
- DIFFUCULTS = {
8
- easy: { attempts: 15, hints: 2 }.freeze,
9
- medium: { attempts: 10, hints: 1 }.freeze,
10
- hell: { attempts: 5, hints: 1 }.freeze
11
- }.freeze
12
-
13
- NUMBER = { digits: 4, range: 1..6 }.freeze
14
- end
15
- end
File without changes
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Codebreaker
4
- module BLL
5
- end
6
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../index'
4
-
5
- module Codebreaker
6
- module DAL
7
- extend Helpers::Validatable
8
-
9
- def self.enter_name(player_name)
10
- validation(player_name, ->(name) { name.length.between?(3, 20) }, presence: true) do
11
- raise Error::ValidationError, '`Player name` '
12
- end
13
- end
14
- end
15
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../index'
4
-
5
- module Codebreaker
6
- module DAL
7
- module Error
8
- class ValidationError < Codebreaker::UnexpectedActionError; end
9
- end
10
- end
11
- end
File without changes
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Codebreaker
4
- class UnexpectedActionError < ArgumentError; end
5
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Codebreaker
4
- module Helpers
5
- end
6
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Codebreaker
4
- module Helpers
5
- module Validatable
6
- ArgumentNilError = Class.new(ArgumentError)
7
- WrongTypeError = Class.new(ArgumentError)
8
- ValidationError = Class.new(ArgumentError)
9
-
10
- protected
11
-
12
- def validation(target, *predicates, type: nil, presence: false, &block)
13
- required_validation(target) if presence
14
- type_validation(target, type) if type
15
- condition_validation(target, predicates, &block) if predicates.any?
16
- end
17
-
18
- private
19
-
20
- def type_validation(target, type)
21
- raise(WrongTypeError, 'Wrong type') unless target.is_a? type
22
- end
23
-
24
- def condition_validation(target, predicates)
25
- return if predicates.all? { |predicate| predicate.call(target) }
26
-
27
- block_given? ? yield(target) : raise(ValidationError, 'Validation failed')
28
- end
29
-
30
- def required_validation(target)
31
- raise(ArgumentNilError, 'Value is nil') if target.nil?
32
- end
33
- end
34
- end
35
- end