icodebreaker_gem 0.2.2 → 0.3.3

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: 042dbedd8e000d620a90aa17a91afc3f08bd64e486e7e06df12a409919503d57
4
- data.tar.gz: 40b79540a1bb21afb573b0ae671bb7d9fb05ccd53e6d82f33287a961329106f6
3
+ metadata.gz: 347e81d6f8a975f1f098cfc8f2a6b020d716b9ea98d1cf42070e163c625c38e4
4
+ data.tar.gz: f118662c52300ff261a39451de93575cad0607c46fad4bbe9a20e2f6549febdf
5
5
  SHA512:
6
- metadata.gz: 600c4497bd0c6af0cb66ce0e6d26c8c4f8da62cb15b8b136ab4217676d8c74d137c904d7142c2077cec076e549b534d737cefb25c690d19a8c1db04132979642
7
- data.tar.gz: 15f30eeb6037b8329fba8f12baeaadb1c6a10158ab14fa5dc17fdb697815149e0f0e724cd3b012df4afb019c7d581f7f20844153f628fd0b7f3e8d858fcde79b
6
+ metadata.gz: 201b6f72d7afb800495ad1695cc096caf9175993f0bbca482c5d2f21a5af6c8bc15fe3c1e6963c1964a4fcbc4bd0e363bcf4ee198ca988aff6294a12ab82de7d
7
+ data.tar.gz: 211a669fc83604daefcde7155e87bff3791b52f10af7b6a0a0826ee444578e4725139084182b2525c553b08cb7e9b4c48f2ffd65c6d99d56d9b5a2d7b0b0aeeb
data/.rspec_status CHANGED
@@ -1,30 +1,30 @@
1
1
  example_id | status | run_time |
2
2
  ------------------------------------ | ------ | --------------- |
3
- ./spec/game_core_spec.rb[1:1] | passed | 0.00023 seconds |
4
- ./spec/game_core_spec.rb[1:2] | passed | 0.00073 seconds |
5
- ./spec/game_core_spec.rb[1:3:1] | passed | 0.00034 seconds |
6
- ./spec/game_core_spec.rb[1:4:1] | passed | 0.00055 seconds |
3
+ ./spec/game_core_spec.rb[1:1] | passed | 0.00027 seconds |
4
+ ./spec/game_core_spec.rb[1:2] | passed | 0.00075 seconds |
5
+ ./spec/game_core_spec.rb[1:3:1] | passed | 0.00043 seconds |
6
+ ./spec/game_core_spec.rb[1:4:1] | passed | 0.00065 seconds |
7
7
  ./spec/game_core_spec.rb[1:5:1:1] | passed | 0.00008 seconds |
8
- ./spec/game_core_spec.rb[1:5:1:2] | passed | 0.0001 seconds |
9
- ./spec/game_core_spec.rb[1:5:1:3] | passed | 0.00008 seconds |
10
- ./spec/game_core_spec.rb[1:5:1:4] | passed | 0.0001 seconds |
11
- ./spec/game_core_spec.rb[1:5:1:5] | passed | 0.00005 seconds |
12
- ./spec/game_core_spec.rb[1:5:1:6] | passed | 0.00005 seconds |
13
- ./spec/game_core_spec.rb[1:5:1:7] | passed | 0.00004 seconds |
14
- ./spec/game_core_spec.rb[1:5:2:1] | passed | 0.00005 seconds |
8
+ ./spec/game_core_spec.rb[1:5:1:2] | passed | 0.00008 seconds |
9
+ ./spec/game_core_spec.rb[1:5:1:3] | passed | 0.00009 seconds |
10
+ ./spec/game_core_spec.rb[1:5:1:4] | passed | 0.00009 seconds |
11
+ ./spec/game_core_spec.rb[1:5:1:5] | passed | 0.00006 seconds |
12
+ ./spec/game_core_spec.rb[1:5:1:6] | passed | 0.00008 seconds |
13
+ ./spec/game_core_spec.rb[1:5:1:7] | passed | 0.00007 seconds |
14
+ ./spec/game_core_spec.rb[1:5:2:1] | passed | 0.00008 seconds |
15
15
  ./spec/game_core_spec.rb[1:5:2:2] | passed | 0.00005 seconds |
16
16
  ./spec/game_core_spec.rb[1:5:3:1] | passed | 0.00005 seconds |
17
- ./spec/game_core_spec.rb[1:5:3:2] | passed | 0.00005 seconds |
18
- ./spec/game_core_spec.rb[1:5:3:3] | passed | 0.00007 seconds |
19
- ./spec/game_spec.rb[1:1:1] | passed | 0.00013 seconds |
20
- ./spec/game_spec.rb[1:2:1] | passed | 0.00025 seconds |
17
+ ./spec/game_core_spec.rb[1:5:3:2] | passed | 0.00007 seconds |
18
+ ./spec/game_core_spec.rb[1:5:3:3] | passed | 0.00004 seconds |
19
+ ./spec/game_spec.rb[1:1:1] | passed | 0.00012 seconds |
20
+ ./spec/game_spec.rb[1:2:1] | passed | 0.00018 seconds |
21
21
  ./spec/game_spec.rb[1:2:2] | passed | 0.00006 seconds |
22
22
  ./spec/game_spec.rb[1:2:3] | passed | 0.00006 seconds |
23
23
  ./spec/game_spec.rb[1:2:4] | passed | 0.00006 seconds |
24
- ./spec/game_spec.rb[1:2:5] | passed | 0.00006 seconds |
25
- ./spec/game_spec.rb[1:3:1] | passed | 0.00039 seconds |
26
- ./spec/game_spec.rb[1:3:2] | passed | 0.00018 seconds |
27
- ./spec/game_spec.rb[1:3:3] | passed | 0.00014 seconds |
28
- ./spec/game_spec.rb[1:4:1] | passed | 0.00011 seconds |
29
- ./spec/game_spec.rb[1:5:1] | passed | 0.00112 seconds |
30
- ./spec/icodebreaker_gem_spec.rb[1:1] | passed | 0.00008 seconds |
24
+ ./spec/game_spec.rb[1:2:5] | passed | 0.00005 seconds |
25
+ ./spec/game_spec.rb[1:3:1] | passed | 0.00045 seconds |
26
+ ./spec/game_spec.rb[1:3:2] | passed | 0.00016 seconds |
27
+ ./spec/game_spec.rb[1:3:3] | passed | 0.00012 seconds |
28
+ ./spec/game_spec.rb[1:4:1] | passed | 0.00272 seconds |
29
+ ./spec/game_spec.rb[1:5:1] | passed | 0.001 seconds |
30
+ ./spec/icodebreaker_gem_spec.rb[1:1] | passed | 0.00006 seconds |
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- icodebreaker_gem (0.2.2)
4
+ icodebreaker_gem (0.3.3)
5
5
  rake (~> 13.0)
6
6
 
7
7
  GEM
@@ -10,11 +10,14 @@ GEM
10
10
  ast (2.4.2)
11
11
  coderay (1.1.3)
12
12
  colorize (0.8.1)
13
+ concurrent-ruby (1.1.9)
13
14
  diff-lcs (1.4.4)
14
15
  docile (1.4.0)
15
16
  fasterer (0.9.0)
16
17
  colorize (~> 0.7)
17
18
  ruby_parser (>= 3.14.1)
19
+ i18n (1.8.10)
20
+ concurrent-ruby (~> 1.0)
18
21
  method_source (1.0.0)
19
22
  parallel (1.21.0)
20
23
  parser (3.0.2.0)
@@ -66,12 +69,13 @@ PLATFORMS
66
69
  x86_64-linux
67
70
 
68
71
  DEPENDENCIES
69
- fasterer
72
+ fasterer (>= 0.9.0)
73
+ i18n
70
74
  icodebreaker_gem!
71
- pry
75
+ pry (>= 0.14.1)
72
76
  rspec (~> 3.0)
73
77
  rubocop (~> 1.7)
74
- simplecov
78
+ simplecov (>= 0.21.2)
75
79
 
76
80
  BUNDLED WITH
77
81
  2.2.26
@@ -0,0 +1,4 @@
1
+ en:
2
+ message:
3
+ lose: "The game is over."
4
+ no_hints: "No hints left."
data/lib/config.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
-
4
3
  require 'yaml'
5
-
4
+ require 'i18n'
5
+ require 'psych'
6
6
  require_relative 'modules/validation'
7
7
  require_relative 'modules/storage'
8
8
 
@@ -10,4 +10,5 @@ require_relative 'game_core'
10
10
  require_relative 'game'
11
11
  require_relative 'icodebreaker_gem/version'
12
12
  require_relative 'icodebreaker_gem'
13
- require_relative 'constants'
13
+
14
+ I18n.load_path << Dir[['config', 'locales', '**', '*.yml'].join('/')]
data/lib/game.rb CHANGED
@@ -5,7 +5,24 @@ module IcodebreakerGem
5
5
  include Validation
6
6
  include Storage
7
7
 
8
- attr_reader :name, :difficulty, :attempts_used, :hints_used, :status, :result
8
+ STATUS = %i[go_on over].freeze
9
+ RESULT = %i[win lose].freeze
10
+ DIFFICULTIES = {
11
+ easy: {
12
+ attempts_total: 15,
13
+ hints_total: 2
14
+ },
15
+ medium: {
16
+ attempts_total: 10,
17
+ hints_total: 1
18
+ },
19
+ hell: {
20
+ attempts_total: 5,
21
+ hints_total: 1
22
+ }
23
+ }.freeze
24
+
25
+ attr_accessor :name, :difficulty, :attempts_used, :hints_used, :status, :result, :code
9
26
 
10
27
  def initialize(name = 'User1', difficulty = :easy, secret = GameCore.random)
11
28
  validate_name name
@@ -40,19 +57,19 @@ module IcodebreakerGem
40
57
  check_lose
41
58
  answer
42
59
  when :over
43
- 'The game is over.'
60
+ I18n.t('message.lose')
44
61
  end
45
62
  end
46
63
 
47
64
  def hint
48
65
  case @status
49
66
  when :go_on
50
- return 'No hints left.' if @hints_used >= hints_total
67
+ return I18n.t('message.no_hints') if @hints_used >= hints_total
51
68
 
52
69
  @hints_used += 1
53
70
  @code.hint
54
71
  when :over
55
- 'The game is over.'
72
+ I18n.t('message.lose')
56
73
  end
57
74
  end
58
75
 
data/lib/game_core.rb CHANGED
@@ -4,19 +4,16 @@ module IcodebreakerGem
4
4
  class GameCore
5
5
  include Validation
6
6
 
7
- attr_reader :secret
8
-
9
7
  def initialize(secret)
10
8
  validate_code secret
11
9
 
12
10
  @secret = secret.to_s
13
- @shuffle = @secret.each_char.to_a.shuffle
14
- @hint_idx = 0
11
+ @shuffle = @secret.chars.shuffle
15
12
  end
16
13
 
17
14
  def compare(guess)
18
15
  return '++++' if @secret == guess
19
- return '' if (@secret.each_char.to_a & guess.each_char.to_a).empty?
16
+ return '' if (@secret.chars & guess.chars).empty?
20
17
 
21
18
  pluses1, minuses1 = pluses_and_minuses(@secret, guess)
22
19
 
@@ -26,24 +23,21 @@ module IcodebreakerGem
26
23
  end
27
24
 
28
25
  def hint
29
- result = @shuffle[@hint_idx]
30
- @hint_idx += 1
31
- @hint_idx = 0 if @hint_idx >= @shuffle.size
32
- result
26
+ @shuffle.pop
33
27
  end
34
28
 
35
29
  def self.random
36
- (0..3).map { rand(1..6) }.map(&:to_s).join
30
+ (0..3).map { rand(1..6) }.join
37
31
  end
38
32
 
39
33
  private
40
34
 
41
- def pluses_and_minuses(word1, word2)
35
+ def pluses_and_minuses(guess_secret, secret_guess)
42
36
  pluses = minuses = 0
43
- word1.each_char.to_a.each_index do |index|
44
- if word2[index] == word1[index]
37
+ guess_secret.chars.each_index do |index|
38
+ if secret_guess[index] == guess_secret[index]
45
39
  pluses += 1
46
- elsif word2.include? word1[index]
40
+ elsif secret_guess.include? guess_secret[index]
47
41
  minuses += 1
48
42
  end
49
43
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module IcodebreakerGem
4
- VERSION = '0.2.2'
4
+ VERSION = '0.3.3'
5
5
  end
@@ -2,7 +2,4 @@
2
2
 
3
3
  require_relative 'icodebreaker_gem/version'
4
4
  require_relative 'config'
5
- module IcodebreakerGem
6
- class Error < StandardError; end
7
- # Your code goes here...
8
- end
5
+ module IcodebreakerGem end
@@ -15,7 +15,7 @@ module IcodebreakerGem
15
15
  class << self
16
16
  def load_storage
17
17
  create_storage
18
- YAML.load(File.read(data_path)) || []
18
+ YAML.safe_load(File.read(data_path)) || []
19
19
  end
20
20
 
21
21
  def sort_codebreakers
@@ -2,12 +2,15 @@
2
2
 
3
3
  module IcodebreakerGem
4
4
  module Validation
5
+ USERNAME = /^[0-9a-zA-Z]{3,20}$/.freeze
6
+ CODE = /^[1-6]{4}$/.freeze
7
+
5
8
  def validate_name(name)
6
- raise ArgumentError, 'Incorrect username' unless name.to_s.match?(/^[0-9a-zA-Z]{3,20}$/)
9
+ raise ArgumentError, 'Incorrect username' unless name.to_s.match?(USERNAME)
7
10
  end
8
11
 
9
12
  def validate_code(code)
10
- raise ArgumentError, 'Incorrect code' unless code.to_s.match?(/^[1-6]{4}$/)
13
+ raise ArgumentError, 'Incorrect code' unless code.to_s.match?(CODE)
11
14
  end
12
15
 
13
16
  def validate_difficulty(difficulty)
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: icodebreaker_gem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - JohnnyGsy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-27 00:00:00.000000000 Z
11
+ date: 2021-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -26,6 +26,20 @@ dependencies:
26
26
  version: '13.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: fasterer
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.9.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.9.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: i18n
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
@@ -44,14 +58,14 @@ dependencies:
44
58
  requirements:
45
59
  - - ">="
46
60
  - !ruby/object:Gem::Version
47
- version: '0'
61
+ version: 0.14.1
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: '0'
68
+ version: 0.14.1
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +100,14 @@ dependencies:
86
100
  requirements:
87
101
  - - ">="
88
102
  - !ruby/object:Gem::Version
89
- version: '0'
103
+ version: 0.21.2
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - ">="
95
109
  - !ruby/object:Gem::Version
96
- version: '0'
110
+ version: 0.21.2
97
111
  description: Guess the secret code
98
112
  email:
99
113
  - vanstrelok@gmail.com
@@ -115,8 +129,8 @@ files:
115
129
  - Rakefile
116
130
  - bin/console
117
131
  - bin/setup
132
+ - config/locales/en.yml
118
133
  - lib/config.rb
119
- - lib/constants.rb
120
134
  - lib/game.rb
121
135
  - lib/game_core.rb
122
136
  - lib/icodebreaker_gem.rb
@@ -124,6 +138,7 @@ files:
124
138
  - lib/modules/storage.rb
125
139
  - lib/modules/validation.rb
126
140
  - reek.yml
141
+ - storage/codebreakers.yml
127
142
  homepage: https://github.com/JohnnyGsy/icodebreaker_gem
128
143
  licenses:
129
144
  - MIT
data/lib/constants.rb DELETED
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module IcodebreakerGem
4
- STATUS = %i[go_on over].freeze
5
- RESULT = %i[win lose].freeze
6
- DIFFICULTIES = {
7
- easy: {
8
- attempts_total: 15,
9
- hints_total: 2
10
- },
11
- medium: {
12
- attempts_total: 10,
13
- hints_total: 1
14
- },
15
- hell: {
16
- attempts_total: 5,
17
- hints_total: 1
18
- }
19
- }.freeze
20
- end