codebreaker_diz 0.2.5 → 0.2.6

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: f372885f870268ef00dbe3df3a3260bf06a2709c82befea7992b60614324f0e3
4
- data.tar.gz: 7268f9caace93e8f76f5dd9da81d15242a5946a73807199d4237eec14492a7a9
3
+ metadata.gz: b25b6d901bf9bd538342fb86c878b4cb1e66a2b33f50902a39989677c89b036b
4
+ data.tar.gz: b2b97cdbaeb85c13b95190770aa476da1443f158ebd5786d7b44e9cb3fa626c1
5
5
  SHA512:
6
- metadata.gz: 9a352e055e7048a0486d1fa8d9094a253b740e0e9e86ffb60fbe2ae06ad2c8537dabe1a2c4b520b2eae91339bc3d2b1f102c63d0f3a8ee4d9531dbed48aa1cc1
7
- data.tar.gz: 3e538de718cf88cb1d5cf96c55adf0b52b9c911ac7386ee9fd427853809e988bafc1f8b43d599d85ce39275fad41a3f55b976c6e64218bf3eb487b415e98b159
6
+ metadata.gz: bb0673a0234e0daa3bb044139e7dd25c0a210dc21e57ceedce78f70b72d9263a874a730531360030a0bc013c9e17e806ec2bff3dff8c9789d8f04d4ef6079cef
7
+ data.tar.gz: 9d78f67fc142ed43e3feef1d9f7e246207f59a985635e8e3c2360770b361e7e1aa9c37ea3d4b87d76e312ac0285074638e3777525dc0283dcd2020a9ad35b485
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- codebreaker_diz (0.2.4)
4
+ codebreaker_diz (0.2.6)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -35,5 +35,4 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency 'simplecov', '~> 0.16.1'
36
36
  spec.add_development_dependency 'pry', '~> 0.12.2'
37
37
  spec.add_development_dependency 'bundle-audit', '~> 0.1.0'
38
- spec.add_development_dependency 'i18n', '~> 1.6'
39
38
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CodebreakerDiz
4
+ DifficultyError = Class.new(StandardError)
5
+
6
+ GuessFormatError = Class.new(StandardError)
7
+
8
+ NoHintsError = Class.new(StandardError)
9
+ end
@@ -4,7 +4,7 @@ require_relative 'config'
4
4
 
5
5
  module CodebreakerDiz
6
6
  class Game
7
- attr_reader :tries_count, :hints_count
7
+ attr_reader :tries_count, :hints_count, :errors
8
8
 
9
9
  def initialize(difficulty: :kid)
10
10
  validate_difficulty(difficulty)
@@ -18,25 +18,25 @@ module CodebreakerDiz
18
18
  @tries_count = DIFFICULTIES[@difficulty][:tries]
19
19
  @hints_count = DIFFICULTIES[@difficulty][:hints]
20
20
 
21
- @matches = ''
22
- end
21
+ @errors = []
23
22
 
24
- def validate_difficulty(difficulty)
25
- raise ArgumentError, I18n.t(:INVALID_DIFFICULTY) unless DIFFICULTIES.include? difficulty.to_sym
23
+ @matches = ''
26
24
  end
27
25
 
28
26
  def check_guess(input)
29
27
  input = to_array(input)
30
28
 
31
- return I18n.t(:WRONG_FORMAT) unless valid? input
29
+ return add_error(GuessFormatError) unless valid? input
32
30
 
33
31
  @tries_count -= 1
34
32
 
35
- @matches = Matcher.new(@secret, input).matches
33
+ resolver = CodeResolver.new(@secret, input)
34
+
35
+ @matches = resolver.matches
36
36
  end
37
37
 
38
38
  def generate_hint
39
- return I18n.t(:NO_HINTS_LEFT) if @hints_count.zero?
39
+ return add_error(NoHintsError) if @hints_count.zero?
40
40
 
41
41
  index = @hint_indexes.sample
42
42
 
@@ -70,6 +70,14 @@ module CodebreakerDiz
70
70
 
71
71
  private
72
72
 
73
+ def add_error(err)
74
+ (@errors << err) && nil
75
+ end
76
+
77
+ def validate_difficulty(difficulty)
78
+ raise DifficultyError unless DIFFICULTIES.include? difficulty.to_sym
79
+ end
80
+
73
81
  def to_array(input)
74
82
  input.to_i.digits.reverse
75
83
  end
@@ -3,29 +3,33 @@
3
3
  require_relative 'config'
4
4
 
5
5
  module CodebreakerDiz
6
- class Matcher
6
+ class CodeResolver
7
+ attr_reader :matches
8
+
7
9
  def initialize(secret_code, user_code)
8
- @secret_code = secret_code.clone
9
- @user_code = user_code
10
+ @secret_code = secret_code.clone
11
+ @user_code = user_code
10
12
 
11
- @exact_matches = 0
13
+ @exact_matches = 0
12
14
  @number_matches = 0
15
+
16
+ @matches = obtain_matches
13
17
  end
14
18
 
15
- def matches
16
- calculate_matches
19
+ private
20
+
21
+ def obtain_matches
22
+ calculate_matches unless @secret_code.empty?
17
23
 
18
24
  EXACT_MATCH_SIGN * @exact_matches << NUMBER_MATCH_SIGN * @number_matches
19
25
  end
20
26
 
21
- private
22
-
23
27
  def calculate_matches
24
28
  @secret_code.zip(@user_code).each do |secret_code_number, user_code_number|
25
29
  next unless @secret_code.include? user_code_number
26
30
 
27
- if secret_code_number == user_code_number then @exact_matches += 1
28
- elsif @secret_code.include? user_code_number then @number_matches += 1
31
+ if secret_code_number == user_code_number then @exact_matches += 1
32
+ else @number_matches += 1
29
33
  end
30
34
 
31
35
  @secret_code.delete_at(@secret_code.index(user_code_number))
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CodebreakerDiz
4
- VERSION = '0.2.5'
4
+ VERSION = '0.2.6'
5
5
  end
@@ -1,11 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'i18n'
4
-
5
3
  require_relative 'codebreaker_diz/game'
6
4
  require_relative 'codebreaker_diz/matcher'
5
+ require_relative 'codebreaker_diz/errors'
7
6
  require_relative 'codebreaker_diz/version'
8
-
9
- I18n.config.load_path << Dir[File.expand_path('config/locales') + '/*.yml']
10
- I18n.config.available_locales = :en
11
- I18n.default_locale = :en
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codebreaker_diz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - bl0rch1d
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-06-04 00:00:00.000000000 Z
11
+ date: 2019-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -164,20 +164,6 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: 0.1.0
167
- - !ruby/object:Gem::Dependency
168
- name: i18n
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: '1.6'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: '1.6'
181
167
  description: Game for true Hackers
182
168
  email:
183
169
  - temaflash96@gmail.com
@@ -203,9 +189,9 @@ files:
203
189
  - bin/console
204
190
  - bin/setup
205
191
  - codebreaker_diz.gemspec
206
- - config/locales/en.yml
207
192
  - lib/codebreaker_diz.rb
208
193
  - lib/codebreaker_diz/config.rb
194
+ - lib/codebreaker_diz/errors.rb
209
195
  - lib/codebreaker_diz/game.rb
210
196
  - lib/codebreaker_diz/matcher.rb
211
197
  - lib/codebreaker_diz/version.rb
@@ -1,5 +0,0 @@
1
- en:
2
- NO_TRIES_LEFT: 'no tries left'
3
- WRONG_FORMAT: 'wrong format'
4
- NO_HINTS_LEFT: 'no hints left'
5
- INVALID_DIFFICULTY: 'invalid difficulty'