codebreakerq 0.1.7 → 0.1.8

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