GemCodebreaker 0.1.3 → 0.1.7

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: 2d2dfa9bf68321cf0ace835182a126beeccc97c404d366fb22e6a6980ec7418c
4
- data.tar.gz: 50f150bd2712c5ab440b0bc100d6f2148f8b82247d25884bc33368e2eeb95c83
3
+ metadata.gz: 165c0f083158238518f77331d6deac350b0e04ceef650c360c76ef5b8f10fb9e
4
+ data.tar.gz: 98b51e7044010d4bb3b30a906066f076ebec34202fa5c53ac449a5e45094f1bb
5
5
  SHA512:
6
- metadata.gz: 06b5ad061b3ef49d02ba0f1c6733245e2ba8bdd0ec70419ea133a18959369de0085a2f84e6cee4bf0fd109bf217335add8c1b55d0cb0a3277d033ac549ae8dc8
7
- data.tar.gz: c2c2630ec9f37bcc360384063355e6ff24d1c9d28a8f0ad099b0989e7b32056e29cf5d94590b86a922677040591903ab0954e6e2dcc0462aabcd637e62b3c3ce
6
+ metadata.gz: 382808a328022ed926e26f7dd2fbda09bebeb68e2cd491f7cc1dc1fd407e288564bdbf90c7affccadd8c1f9c032f5d332e348d469f6034c22be265e762fae4f6
7
+ data.tar.gz: f84fa6609821fc98ab0054073f2ffc96d6138dde50472575af417da3b73ceb5e7b48f6666eee6c47712f94545764c7841c74046b270c46a1040cec60b9cda987
@@ -3,7 +3,7 @@ version: 2.1
3
3
  executors:
4
4
  default:
5
5
  working_directory: ~/codebreaker
6
- description: Gem for codebreaker game
6
+ description: Gem for game codebreaker
7
7
  docker:
8
8
  - image: circleci/ruby:2.7.1
9
9
 
@@ -30,6 +30,9 @@ commands:
30
30
  - run:
31
31
  name: rubocop
32
32
  command: bundle exec rubocop
33
+ - run:
34
+ name: fasterer
35
+ command: bundle exec fasterer
33
36
  run_specs:
34
37
  description: Run specs
35
38
  steps:
@@ -0,0 +1,21 @@
1
+ speedups:
2
+ rescue_vs_respond_to: true
3
+ module_eval: true
4
+ shuffle_first_vs_sample: true
5
+ for_loop_vs_each: true
6
+ each_with_index_vs_while: false
7
+ map_flatten_vs_flat_map: true
8
+ reverse_each_vs_reverse_each: true
9
+ select_first_vs_detect: true
10
+ sort_vs_sort_by: true
11
+ fetch_with_argument_vs_block: true
12
+ keys_each_vs_each_key: true
13
+ hash_merge_bang_vs_hash_brackets: true
14
+ block_vs_symbol_to_proc: true
15
+ proc_call_vs_yield: true
16
+ gsub_vs_tr: true
17
+ select_last_vs_reverse_detect: true
18
+ getter_vs_attr_reader: true
19
+ setter_vs_attr_writer: true
20
+ exclude_paths:
21
+ - 'vendor/**/*.rb'
data/.gitignore CHANGED
@@ -8,5 +8,4 @@
8
8
  /tmp/
9
9
 
10
10
  .rspec_status
11
- Gemfile.lock
12
11
  .idea
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
29
  spec.require_paths = ['lib']
30
30
  spec.add_development_dependency 'fasterer', '~> 0.8.3'
31
+ spec.add_development_dependency 'i18n', '~> 1.8.3'
31
32
  spec.add_development_dependency 'rake', '~> 13.0.1'
32
33
  spec.add_development_dependency 'rspec', '~> 3.7.0'
33
34
  spec.add_development_dependency 'rubocop', '~> 0.84.0'
@@ -0,0 +1,74 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ GemCodebreaker (0.1.7)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ ast (2.4.1)
10
+ colorize (0.8.1)
11
+ concurrent-ruby (1.1.6)
12
+ diff-lcs (1.3)
13
+ docile (1.3.2)
14
+ fasterer (0.8.3)
15
+ colorize (~> 0.7)
16
+ ruby_parser (>= 3.14.1)
17
+ i18n (1.8.3)
18
+ concurrent-ruby (~> 1.0)
19
+ parallel (1.19.2)
20
+ parser (2.7.1.3)
21
+ ast (~> 2.4.0)
22
+ rainbow (3.0.0)
23
+ rake (13.0.1)
24
+ rexml (3.2.4)
25
+ rspec (3.7.0)
26
+ rspec-core (~> 3.7.0)
27
+ rspec-expectations (~> 3.7.0)
28
+ rspec-mocks (~> 3.7.0)
29
+ rspec-core (3.7.1)
30
+ rspec-support (~> 3.7.0)
31
+ rspec-expectations (3.7.0)
32
+ diff-lcs (>= 1.2.0, < 2.0)
33
+ rspec-support (~> 3.7.0)
34
+ rspec-mocks (3.7.0)
35
+ diff-lcs (>= 1.2.0, < 2.0)
36
+ rspec-support (~> 3.7.0)
37
+ rspec-support (3.7.1)
38
+ rubocop (0.84.0)
39
+ parallel (~> 1.10)
40
+ parser (>= 2.7.0.1)
41
+ rainbow (>= 2.2.2, < 4.0)
42
+ rexml
43
+ rubocop-ast (>= 0.0.3)
44
+ ruby-progressbar (~> 1.7)
45
+ unicode-display_width (>= 1.4.0, < 2.0)
46
+ rubocop-ast (0.0.3)
47
+ parser (>= 2.7.0.1)
48
+ rubocop-rspec (1.41.0)
49
+ rubocop (>= 0.68.1)
50
+ ruby-progressbar (1.10.1)
51
+ ruby_parser (3.14.2)
52
+ sexp_processor (~> 4.9)
53
+ sexp_processor (4.15.0)
54
+ simplecov (0.18.5)
55
+ docile (~> 1.1)
56
+ simplecov-html (~> 0.11)
57
+ simplecov-html (0.12.2)
58
+ unicode-display_width (1.7.0)
59
+
60
+ PLATFORMS
61
+ ruby
62
+
63
+ DEPENDENCIES
64
+ GemCodebreaker!
65
+ fasterer (~> 0.8.3)
66
+ i18n (~> 1.8.3)
67
+ rake (~> 13.0.1)
68
+ rspec (~> 3.7.0)
69
+ rubocop (~> 0.84.0)
70
+ rubocop-rspec (~> 1.41.0)
71
+ simplecov (~> 0.18.5)
72
+
73
+ BUNDLED WITH
74
+ 2.1.4
@@ -1,9 +1,9 @@
1
- # frozen_string_literal: true
1
+ #!/usr/bin/env ruby
2
2
 
3
- # !/usr/bin/env ruby
3
+ # frozen_string_literal: true
4
4
 
5
5
  require 'bundler/setup'
6
- require 'GemCodebreaker'
6
+ require 'GemCodebreaker/gem_codebreaker'
7
7
 
8
8
  # You can add fixtures and/or initialization code here to make experimenting
9
9
  # with your gem easier. You can also use a different console, if you like.
@@ -3,18 +3,16 @@
3
3
  module GemCodebreaker
4
4
  # Game class
5
5
  class Game
6
- LENGTH_OF_SECRET_CODE = (1..4).freeze
6
+ LENGTH_OF_SECRET_CODE = 4
7
7
  DIGIT_RANGE = (1..6).freeze
8
8
 
9
9
  include GameConfigurations
10
10
  include Validator
11
- attr_reader :attempts, :hints, :secrete_code, :statistic, :matcher_hash
11
+ attr_reader :secrete_code, :statistic, :matcher_hash
12
12
  attr_accessor :config
13
13
 
14
14
  def initialize(user, level)
15
15
  @config = GameConfig.new(user, level.to_sym)
16
- @attempts = @config.user_attempts
17
- @hints = @config.user_hints
18
16
  @statistic = []
19
17
  end
20
18
 
@@ -23,20 +21,20 @@ module GemCodebreaker
23
21
  end
24
22
 
25
23
  def generate_secret_code
26
- @secrete_code = LENGTH_OF_SECRET_CODE.map { rand DIGIT_RANGE }
24
+ @secrete_code = (1..LENGTH_OF_SECRET_CODE).map { rand DIGIT_RANGE }
27
25
  end
28
26
 
29
27
  def guess_valid?(user_code)
30
28
  validate_string(user_code)
31
- validate_guess_length if user_code.length != LENGTH_OF_SECRET_CODE.to_a.length
29
+ validate_guess_length if user_code.length != LENGTH_OF_SECRET_CODE
32
30
  validate_chars_range unless user_code[/\A[1-6]{4}\z/]
33
31
  true
34
32
  end
35
33
 
36
34
  def guess_start(input_code)
37
- validate_number_of_attempts if @attempts >= @config.max_attempts
35
+ validate_number_of_attempts if @config.user_attempts >= @config.max_attempts
38
36
 
39
- @attempts += 1
37
+ @config.user_attempts += 1
40
38
  user_code = convert_string_to_array(input_code)
41
39
  code_marker = CodeMaker.new(@secrete_code, user_code)
42
40
  code_marker.calculate_result_code
@@ -44,27 +42,27 @@ module GemCodebreaker
44
42
  end
45
43
 
46
44
  def win_game?
47
- @matcher_hash[:plus] == LENGTH_OF_SECRET_CODE.to_a.last
45
+ @matcher_hash[:plus] == LENGTH_OF_SECRET_CODE
48
46
  end
49
47
 
50
48
  def game_over?
51
- (@attempts >= @config.max_attempts) && win_game? == false
49
+ (@config.user_attempts >= @config.max_attempts) && win_game? == false
52
50
  end
53
51
 
54
52
  def hints_used?
55
- @hints >= @config.max_hints
53
+ @config.user_hints >= @config.max_hints
56
54
  end
57
55
 
58
56
  def hint
59
57
  validate_number_of_hints if hints_used?
60
58
 
61
- @hints += 1
59
+ @config.user_hints += 1
62
60
  @secrete_code.sample
63
61
  end
64
62
 
65
63
  def reset
66
- @attempts = 0
67
- @hints = 0
64
+ @config.user_attempts = 0
65
+ @config.user_hints = 0
68
66
  generate_secret_code
69
67
  end
70
68
 
@@ -4,15 +4,13 @@ module GemCodebreaker
4
4
  # Configuration class for game
5
5
  class GameConfig
6
6
  include GameConfigurations
7
- attr_reader :user_attempts, :user_hints, :difficulty_priority
8
- attr_accessor :user_nick_name, :difficulty, :max_attempts, :max_hints
7
+ attr_accessor :user_nick_name, :difficulty, :max_attempts, :max_hints, :user_attempts, :user_hints
9
8
 
10
9
  def initialize(user, level)
11
10
  @user_nick_name = user.nick_name
12
11
  @difficulty = level
13
12
  @max_attempts = GAME_LEVEL[level][:attempts]
14
13
  @max_hints = GAME_LEVEL[level][:hints]
15
- @difficulty_priority = GAME_LEVEL_PRIORITY[level]
16
14
  @user_attempts = 0
17
15
  @user_hints = 0
18
16
  end
@@ -3,17 +3,15 @@
3
3
  module GemCodebreaker
4
4
  # Game statistic class
5
5
  class GameStatistic
6
- attr_reader :user_nickname, :difficulty, :attempts_total, :attempts_used, :hints_total, :hints_used,
7
- :difficulty_priority
6
+ attr_reader :user_nickname, :difficulty, :attempts_total, :attempts_used, :hints_total, :hints_used
8
7
 
9
8
  def initialize(game)
10
9
  @user_nickname = game.config.user_nick_name
11
10
  @difficulty = game.config.difficulty
12
11
  @attempts_total = game.config.max_attempts
13
- @attempts_used = game.attempts
12
+ @attempts_used = game.config.user_attempts
14
13
  @hints_total = game.config.max_hints
15
- @hints_used = game.hints
16
- @difficulty_priority = game.config.difficulty_priority
14
+ @hints_used = game.config.user_hints
17
15
  end
18
16
  end
19
17
  end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'i18n'
4
+
5
+ I18n.available_locales = %i[en ua]
@@ -4,7 +4,7 @@ module GemCodebreaker
4
4
  # Error class to check the length of user code
5
5
  class IncorrectLengthError < StandardError
6
6
  def initialize
7
- super('Input data must contain 4 characters')
7
+ super(I18n.t('errors.incorrect_length'))
8
8
  end
9
9
  end
10
10
  end
@@ -4,7 +4,7 @@ module GemCodebreaker
4
4
  # Error class to check user nickname
5
5
  class NameLengthError < StandardError
6
6
  def initialize
7
- super('Username must contain at least 3 and no more than 20 characters')
7
+ super(I18n.t('errors.name_length'))
8
8
  end
9
9
  end
10
10
  end
@@ -4,7 +4,7 @@ module GemCodebreaker
4
4
  # Error class to check for attempts
5
5
  class NoAttemptsError < StandardError
6
6
  def initialize
7
- super('Sorry, you used all possible attempts')
7
+ super(I18n.t('errors.no_attempts'))
8
8
  end
9
9
  end
10
10
  end
@@ -4,7 +4,7 @@ module GemCodebreaker
4
4
  # Error class to check for hints
5
5
  class NoHintsError < StandardError
6
6
  def initialize
7
- super('Sorry, you used all possible hints')
7
+ super(I18n.t('errors.no_hints'))
8
8
  end
9
9
  end
10
10
  end
@@ -4,7 +4,7 @@ module GemCodebreaker
4
4
  # Error class to check game difficulty
5
5
  class UnknowLevelError < StandardError
6
6
  def initialize
7
- super('Selected unknow game level')
7
+ super(I18n.t('errors.unknow_level'))
8
8
  end
9
9
  end
10
10
  end
@@ -4,7 +4,7 @@ module GemCodebreaker
4
4
  # Error class to check user code
5
5
  class ValueRangeError < StandardError
6
6
  def initialize
7
- super('Valid values for code entry are in the range 1-6')
7
+ super(I18n.t('errors.value_range'))
8
8
  end
9
9
  end
10
10
  end
@@ -4,7 +4,7 @@ module GemCodebreaker
4
4
  # Error class to check object class
5
5
  class WrongClassError < StandardError
6
6
  def initialize
7
- super('Input data must be class String')
7
+ super(I18n.t('errors.wrong_class'))
8
8
  end
9
9
  end
10
10
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'GemCodebreaker/config/i18n_locales'
4
+ require 'GemCodebreaker/version'
5
+ require 'GemCodebreaker/errors/incorrect_length_error'
6
+ require 'GemCodebreaker/errors/name_length_error'
7
+ require 'GemCodebreaker/errors/no_attempts_error'
8
+ require 'GemCodebreaker/errors/no_hints_error'
9
+ require 'GemCodebreaker/errors/unknow_level_error'
10
+ require 'GemCodebreaker/errors/value_range_error'
11
+ require 'GemCodebreaker/errors/wrong_class_error'
12
+ require 'GemCodebreaker/modules/validator'
13
+ require 'GemCodebreaker/modules/serializer_deserializer'
14
+ require 'GemCodebreaker/modules/game_configurations'
15
+ require 'GemCodebreaker/classes/user'
16
+ require 'GemCodebreaker/classes/codemaker'
17
+ require 'GemCodebreaker/classes/game_config'
18
+ require 'GemCodebreaker/classes/game_statistic'
19
+ require 'GemCodebreaker/classes/game'
20
+
21
+ module GemCodebreaker
22
+ class Error < StandardError; end
23
+ end
@@ -14,9 +14,5 @@ module GemCodebreaker
14
14
  strong_hell:
15
15
  { attempts: 1,
16
16
  hints: 0 } }.freeze
17
- GAME_LEVEL_PRIORITY = { easy: 4,
18
- medium: 3,
19
- hell: 2,
20
- strong_hell: 1 }.freeze
21
17
  end
22
18
  end
@@ -5,7 +5,7 @@ module GemCodebreaker
5
5
  module SerializerDeserializer
6
6
  FILE_NAME = 'game_statistic.yml'
7
7
  STATISTIC_DIR = 'data'
8
- STORAGE_PATH = File.expand_path("./#{STATISTIC_DIR}/#{FILE_NAME}", File.dirname(__FILE__))
8
+ STORAGE_PATH = File.expand_path("./#{STATISTIC_DIR}/#{FILE_NAME}")
9
9
 
10
10
  def data_dir_get
11
11
  data_directory = File.dirname(STORAGE_PATH)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GemCodebreaker
4
- VERSION = '0.1.3'
4
+ VERSION = '0.1.7'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: GemCodebreaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vasyl
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-09 00:00:00.000000000 Z
11
+ date: 2020-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fasterer
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.8.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: i18n
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.8.3
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.8.3
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -102,20 +116,23 @@ extensions: []
102
116
  extra_rdoc_files: []
103
117
  files:
104
118
  - ".circleci/config.yml"
119
+ - ".fasterer.yml"
105
120
  - ".gitignore"
106
121
  - ".rspec"
107
122
  - ".rubocop.yml"
108
123
  - GemCodebreaker.gemspec
109
124
  - Gemfile
125
+ - Gemfile.lock
110
126
  - LICENSE.txt
111
127
  - README.md
112
- - bin/console.rb
128
+ - bin/console
113
129
  - bin/setup
114
130
  - lib/GemCodebreaker/classes/codemaker.rb
115
131
  - lib/GemCodebreaker/classes/game.rb
116
132
  - lib/GemCodebreaker/classes/game_config.rb
117
133
  - lib/GemCodebreaker/classes/game_statistic.rb
118
134
  - lib/GemCodebreaker/classes/user.rb
135
+ - lib/GemCodebreaker/config/i18n_locales.rb
119
136
  - lib/GemCodebreaker/errors/incorrect_length_error.rb
120
137
  - lib/GemCodebreaker/errors/name_length_error.rb
121
138
  - lib/GemCodebreaker/errors/no_attempts_error.rb
@@ -123,14 +140,11 @@ files:
123
140
  - lib/GemCodebreaker/errors/unknow_level_error.rb
124
141
  - lib/GemCodebreaker/errors/value_range_error.rb
125
142
  - lib/GemCodebreaker/errors/wrong_class_error.rb
143
+ - lib/GemCodebreaker/gem_codebreaker.rb
126
144
  - lib/GemCodebreaker/modules/game_configurations.rb
127
145
  - lib/GemCodebreaker/modules/serializer_deserializer.rb
128
146
  - lib/GemCodebreaker/modules/validator.rb
129
147
  - lib/GemCodebreaker/version.rb
130
- - lib/gem_codebreaker.rb
131
- - lib/include_classes.rb
132
- - lib/include_errors.rb
133
- - lib/include_modules.rb
134
148
  homepage: https://github.com/vasivaas/GemCodebreaker
135
149
  licenses:
136
150
  - MIT
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'GemCodebreaker/version'
4
- require_relative 'include_errors'
5
- require_relative 'include_modules'
6
- require_relative 'include_classes'
7
-
8
- module GemCodebreaker
9
- class Error < StandardError; end
10
- # Your code goes here...
11
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'GemCodebreaker/classes/user'
4
- require_relative 'GemCodebreaker/classes/codemaker'
5
- require_relative 'GemCodebreaker/classes/game_config'
6
- require_relative 'GemCodebreaker/classes/game_statistic'
7
- require_relative 'GemCodebreaker/classes/game'
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'GemCodebreaker/errors/incorrect_length_error'
4
- require_relative 'GemCodebreaker/errors/name_length_error'
5
- require_relative 'GemCodebreaker/errors/no_attempts_error'
6
- require_relative 'GemCodebreaker/errors/no_hints_error'
7
- require_relative 'GemCodebreaker/errors/unknow_level_error'
8
- require_relative 'GemCodebreaker/errors/value_range_error'
9
- require_relative 'GemCodebreaker/errors/wrong_class_error'
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'GemCodebreaker/modules/validator'
4
- require_relative 'GemCodebreaker/modules/serializer_deserializer'
5
- require_relative 'GemCodebreaker/modules/game_configurations'