codebreakergem 0.1.2 → 0.1.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: a554e54d1bb2267b523273df450e3ba8700d9058900991fd26f513d233f39db7
4
- data.tar.gz: b8678da0756d9c132e69e148b3c64d18356cc35d447b1c6053640c27faf9bb81
3
+ metadata.gz: f0c5b1a584661b23298d2337e1d0530534f8d43c3a564c6afde060eafeb73295
4
+ data.tar.gz: 33288826820a0a21e89a7d8ac41817367e4ab7c557a2129975cb8c3b4c95c9b0
5
5
  SHA512:
6
- metadata.gz: 3ca13e6237f6ef81cb8b52b17c16c35891b6b5b18a412fbd5f685c6dc9de703b260623ec633f67dd9bbb8fc4b9e5a766c0236b556fe20e27e5da29aa8b16d249
7
- data.tar.gz: 99e8c0ea543ced4c103d45b36d6d94fae886966c671e590e18d196aef00484ffee615998e380cf8bc60098fe42eef415c19d0294cce3fee34af84ae42f507bea
6
+ metadata.gz: ec1cdefd9043a82198cb13861758019d4715431feadd7da274ef117b55255e5a1b495c208f292a9774db5c1088f364e739b6e0edf8971f418dc80204da3e34b8
7
+ data.tar.gz: ef317ec213410ef46b234ac9c1f35a327b225f8c1f410fcb2913f420ceb997517a2be882a8e741b8c620a5f6331080c1881f3a65a36bbe42617320f02b46e1ff
data/.fasterer.yml ADDED
@@ -0,0 +1,19 @@
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
data/.rubocop.yml ADDED
@@ -0,0 +1,13 @@
1
+ Style/Documentation:
2
+ Enabled: false
3
+
4
+ Style/RaiseArgs:
5
+ EnforcedStyle: compact
6
+
7
+ Metrics/LineLength:
8
+ Max: 120
9
+
10
+ AllCops:
11
+ Exclude:
12
+ - 'main.rb'
13
+ - 'spec/spec_helper.rb'
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.5p114
data/Gemfile.lock ADDED
@@ -0,0 +1,70 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ ast (2.4.0)
5
+ byebug (9.1.0)
6
+ coderay (1.1.2)
7
+ colorize (0.8.1)
8
+ diff-lcs (1.3)
9
+ docile (1.1.5)
10
+ fasterer (0.8.1)
11
+ colorize (~> 0.7)
12
+ ruby_parser (>= 3.14.1)
13
+ i18n (0.7.0)
14
+ jaro_winkler (1.5.4)
15
+ json (2.3.0)
16
+ method_source (0.8.2)
17
+ parallel (1.19.1)
18
+ parser (2.6.5.0)
19
+ ast (~> 2.4.0)
20
+ pry (0.10.4)
21
+ coderay (~> 1.1.0)
22
+ method_source (~> 0.8.1)
23
+ slop (~> 3.4)
24
+ rainbow (3.0.0)
25
+ rspec (3.9.0)
26
+ rspec-core (~> 3.9.0)
27
+ rspec-expectations (~> 3.9.0)
28
+ rspec-mocks (~> 3.9.0)
29
+ rspec-core (3.9.0)
30
+ rspec-support (~> 3.9.0)
31
+ rspec-expectations (3.9.0)
32
+ diff-lcs (>= 1.2.0, < 2.0)
33
+ rspec-support (~> 3.9.0)
34
+ rspec-mocks (3.9.0)
35
+ diff-lcs (>= 1.2.0, < 2.0)
36
+ rspec-support (~> 3.9.0)
37
+ rspec-support (3.9.0)
38
+ rubocop (0.76.0)
39
+ jaro_winkler (~> 1.5.1)
40
+ parallel (~> 1.10)
41
+ parser (>= 2.6)
42
+ rainbow (>= 2.2.2, < 4.0)
43
+ ruby-progressbar (~> 1.7)
44
+ unicode-display_width (>= 1.4.0, < 1.7)
45
+ ruby-progressbar (1.10.1)
46
+ ruby_parser (3.14.1)
47
+ sexp_processor (~> 4.9)
48
+ sexp_processor (4.13.0)
49
+ simplecov (0.12.0)
50
+ docile (~> 1.1.0)
51
+ json (>= 1.8, < 3)
52
+ simplecov-html (~> 0.10.0)
53
+ simplecov-html (0.10.2)
54
+ slop (3.6.0)
55
+ unicode-display_width (1.6.0)
56
+
57
+ PLATFORMS
58
+ x64-mingw32
59
+
60
+ DEPENDENCIES
61
+ byebug (~> 9.0, >= 9.0.6)
62
+ fasterer (~> 0.8.0)
63
+ i18n (~> 0.7.0)
64
+ pry (~> 0.10.3)
65
+ rspec (~> 3.9)
66
+ rubocop (~> 0.76.0)
67
+ simplecov (~> 0.12.0)
68
+
69
+ BUNDLED WITH
70
+ 1.17.2
Binary file
Binary file
Binary file
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Codebreakergem
4
+ class Difficulty
5
+ attr_reader :name, :order
6
+ attr_accessor :attempts, :hints
7
+
8
+ def initialize(name:, attempts:, hints:, order:)
9
+ @name = name
10
+ @attempts = attempts
11
+ @hints = hints
12
+ @order = order
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Codebreakergem
4
+ class FileWorker
5
+ class << self
6
+ def read_from_file(filename)
7
+ permitted_class = [Statistic, Difficulty]
8
+ unless File.file?(Game::FILE)
9
+ puts 'File doesn\'t exist'
10
+ return
11
+ end
12
+ YAML.safe_load(File.read(filename), permitted_class, [], true)
13
+ end
14
+
15
+ def add_to_file(filename, data)
16
+ permitted_class = [Statistic, Difficulty]
17
+ data_in_file = YAML.safe_load(File.read(filename), permitted_class, [], true)
18
+ if data_in_file.is_a? Array
19
+ data_in_file << data
20
+ File.open(filename, 'w') { |file| file.write(data_in_file.to_yaml) }
21
+ else
22
+ File.open(filename, 'w') { |file| file.write([data_in_file, data].to_yaml) }
23
+ end
24
+ end
25
+
26
+ def write_to_file(filename, data)
27
+ File.open(filename, 'w') { |file| file.write(data.to_yaml) }
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Codebreakergem
4
+ class Statistic
5
+ attr_accessor :name, :difficulty, :attempts_total,
6
+ :attempts_used, :hints_total, :hints_used
7
+
8
+ def initialize(name:, difficulty:, attempts_total:, hints_total:)
9
+ @name = name
10
+ @difficulty = difficulty
11
+ @attempts_total = attempts_total
12
+ @attempts_used = attempts_total - difficulty.attempts
13
+ @hints_total = hints_total
14
+ @hints_used = hints_total - difficulty.hints
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Codebreakergem
4
+ class User
5
+ include Checker
6
+
7
+ attr_accessor :name
8
+
9
+ def initialize(name)
10
+ @name = name
11
+ end
12
+
13
+ def validate?
14
+ validate_string_length(name)
15
+ end
16
+ end
17
+ end
@@ -1,17 +1,15 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'yaml'
3
4
  require 'i18n'
4
5
  require 'pry'
5
6
  require './lib/modules/check_module.rb'
6
7
  require './lib/classes/difficulty.rb'
7
- #require './lib/codebreakergem.rb'
8
8
  require './lib/classes/user.rb'
9
- require './lib/classes/file_worker.rb'
10
9
  require './lib/classes/statistic.rb'
11
- require './lib/codebreakergem/version'
12
-
13
- I18n.load_path = Dir[File.expand_path('lib/locales') + '/*.yml']
14
- I18n.locale = :en
10
+ require './lib/classes/file_worker.rb'
11
+ require './lib/config.rb'
12
+ require './lib/codebreakergem/version.rb'
15
13
 
16
14
  module Codebreakergem
17
15
  class Game
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Codebreakergem
4
- VERSION = '0.1.2'
4
+ VERSION = '0.1.3'
5
5
  end
data/lib/config.rb ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ I18n.load_path = Dir[File.expand_path('lib/locales') + '/*.yml']
4
+ I18n.config.available_locales = :en
5
+ I18n.locale = :en
data/lib/data/.gitkeep ADDED
File without changes
data/lib/data/data.yml ADDED
@@ -0,0 +1,23 @@
1
+ ---
2
+ - !ruby/object:Codebreakergem::Statistic
3
+ name: Alex
4
+ difficulty: !ruby/object:Codebreakergem::Difficulty
5
+ name: Easy
6
+ attempts: 8
7
+ hints: 1
8
+ order: 3
9
+ attempts_total: 15
10
+ attempts_used: 7
11
+ hints_total: 2
12
+ hints_used: 1
13
+ - !ruby/object:Codebreakergem::Statistic
14
+ name: Alex
15
+ difficulty: !ruby/object:Codebreakergem::Difficulty
16
+ name: Medium
17
+ attempts: 5
18
+ hints: 1
19
+ order: 2
20
+ attempts_total: 10
21
+ attempts_used: 5
22
+ hints_total: 1
23
+ hints_used: 0
@@ -0,0 +1,46 @@
1
+ en:
2
+ class_error: 'Wrong type of variable'
3
+ length_error: 'Length of the string is not in allowed range'
4
+ no_hints: 'You have no more hints'
5
+ hello_message: 'Hello player! Welcome to codebreaker'
6
+ stats_header: "Rating Name Difficulty Attempts Total Attempts Used Hints Total Hints Used\n"
7
+ menu: "Chose action:\n
8
+ 1) Start\n
9
+ 2) Rules\n
10
+ 3) Stats\n
11
+ 4) Exit\n"
12
+ victory_message: 'Congratulations!!! YOU WON!!!'
13
+ out_of_attempts: 'Unfortunately you have no more attempts'
14
+ rules: " ____________________________________________________________________________________________\n
15
+ | |\n
16
+ | Rules |\n
17
+ |____________________________________________________________________________________________|\n
18
+ | |\n
19
+ | * Codebreaker is a logic game in which a code-breaker tries to break a secret code |\n
20
+ | created by a code-maker. The codemaker, which will be played by the application we’re |\n
21
+ | going to write, creates a secret code of four numbers between 1 and 6. |\n
22
+ | |\n
23
+ | * The codebreaker gets some number of chances to break the code (depends on chosen |\n
24
+ | difficulty). In each turn, the codebreaker makes a guess of 4 numbers. The codemaker |\n
25
+ | then marks the guess with up to 4 signs - '+' or '-' or empty spaces. |\n
26
+ | |\n
27
+ | * A + indicates an exact match: one of the numbers in the guess is the same as one of the |\n
28
+ | numbers in the secret code and in the same position. For example: |\n
29
+ | Secret number - 1234 |\n
30
+ | Input number - 6264 |\n
31
+ | Number of pluses - 2 (second and fourth position) |\n
32
+ | |\n
33
+ | * A - indicates a number match: one of the numbers in the guess is the same as one of the |\n
34
+ | numbers in the secret code but in a different position. For example: |\n
35
+ | Secret number - 1234 |\n
36
+ | Input number - 6462 |\n
37
+ | Number of minuses - 2 (second and fourth position) |\n
38
+ | |\n
39
+ | * An empty space indicates that there is not a current digit in a secret number. |\n
40
+ | |\n
41
+ | * If codebreaker inputs the exact number as a secret number - codebreaker wins the |\n
42
+ | game. If all attempts are spent - codebreaker loses. |\n
43
+ | |\n
44
+ | * Codebreaker also has some number of hints(depends on chosen difficulty). If a user |\n
45
+ | takes a hint - he receives back a separate digit of the secret code. |\n
46
+ |____________________________________________________________________________________________|"
@@ -0,0 +1,2 @@
1
+ ru:
2
+ class_error: 'Неверный тип переменной'
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Codebreakergem
4
+ module Checker
5
+ ALLOWED_LENGTH = (3..21).freeze
6
+
7
+ def validate_string_length(incoming_string)
8
+ return true if ALLOWED_LENGTH.include? incoming_string.to_s.length
9
+
10
+ puts I18n.t(:length_error)
11
+ false
12
+ end
13
+ end
14
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codebreakergem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sasha
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-22 00:00:00.000000000 Z
11
+ date: 2019-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -59,19 +59,36 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
+ - ".fasterer.yml"
62
63
  - ".gitignore"
63
64
  - ".rspec"
65
+ - ".rubocop.yml"
66
+ - ".ruby-version"
64
67
  - ".travis.yml"
65
68
  - CODE_OF_CONDUCT.md
66
69
  - Gemfile
70
+ - Gemfile.lock
67
71
  - LICENSE.txt
68
72
  - README.md
69
73
  - Rakefile
70
74
  - bin/console
71
75
  - bin/setup
76
+ - codebreakergem-0.1.0.gem
77
+ - codebreakergem-0.1.1.gem
78
+ - codebreakergem-0.1.2.gem
72
79
  - codebreakergem.gemspec
80
+ - lib/classes/difficulty.rb
81
+ - lib/classes/file_worker.rb
82
+ - lib/classes/statistic.rb
83
+ - lib/classes/user.rb
73
84
  - lib/codebreakergem.rb
74
85
  - lib/codebreakergem/version.rb
86
+ - lib/config.rb
87
+ - lib/data/.gitkeep
88
+ - lib/data/data.yml
89
+ - lib/locales/en.yml
90
+ - lib/locales/ru.yml
91
+ - lib/modules/check_module.rb
75
92
  homepage: https://github.com/SashaZhuravskiy/CodebreakerGemRepo/
76
93
  licenses:
77
94
  - MIT