codebreaker_diz 0.2.5 → 0.2.6

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