codebreaker_gapdn 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: fa14e7cb2d841cf2d73e2ce9935da8a3cbdcc4f768f2d524b12ae6cd001def8b
4
+ data.tar.gz: 449f49e492b1bed7ecb8e0191f1d9d1165fb28e39c0a649f4d484758f1303e0c
5
+ SHA512:
6
+ metadata.gz: 651f28f33c29b4f77e67241ac8129e20c535a215550867871c68b5911f8ef35b8bc5e7f4aab391776adb50e32e6062a95dc536ef1627e55ded9ea19d78ca4af5
7
+ data.tar.gz: 7e1bb7e935874852c5fc30f8dff12e52f7704630a4efaae54e3e1e5797e85a7d024aec61f67c205c3326a522fadd958be7e0b269e27a092fae53362b77a5b456
@@ -0,0 +1,72 @@
1
+ version: 2.1
2
+
3
+ executors:
4
+ default:
5
+ working_directory: ~/repo
6
+ description: The official CircleCI Ruby Docker image
7
+ docker:
8
+ - image: circleci/ruby:2.6.3-node
9
+
10
+ caches:
11
+ - &bundle_cache v1-repo-{{ checksum "Gemfile.lock" }}
12
+
13
+ commands:
14
+ run_linters:
15
+ description: command to start linters
16
+ steps:
17
+ - run:
18
+ name: rubocop
19
+ command: bundle exec rubocop
20
+ - run:
21
+ name: fasterer
22
+ command: bundle exec fasterer
23
+
24
+ run_specs:
25
+ steps:
26
+ - run:
27
+ name: run specs
28
+ command: |
29
+ mkdir /tmp/test-results
30
+ TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"
31
+ bundle exec rspec --format progress \
32
+ --out /tmp/test-results/rspec.xml \
33
+ --format progress \
34
+ $TEST_FILES
35
+ defaults:
36
+ steps:
37
+ - checkout
38
+ - restore_cache:
39
+ key: *bundle_cache
40
+ - run: gem install bundler:2.0.2
41
+ - run: bundle install
42
+ - save_cache:
43
+ key: *bundle_cache
44
+ paths:
45
+ - bundle vendor/bundle
46
+
47
+ jobs:
48
+ lintering:
49
+ executor: default
50
+ steps:
51
+ - defaults
52
+ - run_linters
53
+ run_specs:
54
+ executor: default
55
+ steps:
56
+ - defaults
57
+ - run_specs
58
+
59
+ workflows:
60
+ version: 2.
61
+ build:
62
+ jobs:
63
+ - lintering:
64
+ filters:
65
+ branches:
66
+ only: develop
67
+ - run_specs:
68
+ filters:
69
+ branches:
70
+ only: develop
71
+ requires:
72
+ - lintering
@@ -0,0 +1,20 @@
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
+
@@ -0,0 +1,52 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
11
+ /tmp/
12
+
13
+ # Used by dotenv library to load environment variables.
14
+ # .env
15
+
16
+ ## Specific to RubyMotion:
17
+ .dat*
18
+ .repl_history
19
+ build/
20
+ *.bridgesupport
21
+ build-iPhoneOS/
22
+ build-iPhoneSimulator/
23
+
24
+ ## Specific to RubyMotion (use of CocoaPods):
25
+ #
26
+ # We recommend against adding the Pods directory to your .gitignore. However
27
+ # you should judge for yourself, the pros and cons are mentioned at:
28
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
29
+ #
30
+ # vendor/Pods/
31
+
32
+ ## Documentation cache and generated files:
33
+ /.yardoc/
34
+ /_yardoc/
35
+ /doc/
36
+ /rdoc/
37
+
38
+ ## Environment normalization:
39
+ /.bundle/
40
+ /vendor/bundle
41
+ /lib/bundler/man/
42
+
43
+ # for a library or gem, you might want to ignore these files since the code is
44
+ # intended to run in multiple environments; otherwise, check them in:
45
+ # Gemfile.lock
46
+ # .ruby-version
47
+ # .ruby-gemset
48
+
49
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
50
+ .rvmrc
51
+ .rspec_status
52
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,7 @@
1
+ require: rubocop-rspec
2
+ Metrics/LineLength:
3
+ Max: 120
4
+ Metrics/BlockLength:
5
+ ExcludedMethods: ['describe']
6
+ Style/Documentation:
7
+ Enabled: false
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.6.3
7
+ before_install: gem install bundler -v 2.0.2
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in codebreaker.gemspec
6
+ gemspec
@@ -0,0 +1,70 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ codebreaker_gapdn (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ ast (2.4.0)
10
+ colorize (0.8.1)
11
+ diff-lcs (1.3)
12
+ docile (1.3.2)
13
+ fasterer (0.8.1)
14
+ colorize (~> 0.7)
15
+ ruby_parser (>= 3.14.1)
16
+ jaro_winkler (1.5.4)
17
+ json (2.2.0)
18
+ parallel (1.19.1)
19
+ parser (2.6.5.0)
20
+ ast (~> 2.4.0)
21
+ rainbow (3.0.0)
22
+ rake (10.5.0)
23
+ rspec (3.9.0)
24
+ rspec-core (~> 3.9.0)
25
+ rspec-expectations (~> 3.9.0)
26
+ rspec-mocks (~> 3.9.0)
27
+ rspec-core (3.9.0)
28
+ rspec-support (~> 3.9.0)
29
+ rspec-expectations (3.9.0)
30
+ diff-lcs (>= 1.2.0, < 2.0)
31
+ rspec-support (~> 3.9.0)
32
+ rspec-mocks (3.9.0)
33
+ diff-lcs (>= 1.2.0, < 2.0)
34
+ rspec-support (~> 3.9.0)
35
+ rspec-support (3.9.0)
36
+ rubocop (0.76.0)
37
+ jaro_winkler (~> 1.5.1)
38
+ parallel (~> 1.10)
39
+ parser (>= 2.6)
40
+ rainbow (>= 2.2.2, < 4.0)
41
+ ruby-progressbar (~> 1.7)
42
+ unicode-display_width (>= 1.4.0, < 1.7)
43
+ rubocop-rspec (1.30.1)
44
+ rubocop (>= 0.60.0)
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.17.1)
50
+ docile (~> 1.1)
51
+ json (>= 1.8, < 3)
52
+ simplecov-html (~> 0.10.0)
53
+ simplecov-html (0.10.2)
54
+ unicode-display_width (1.6.0)
55
+
56
+ PLATFORMS
57
+ ruby
58
+
59
+ DEPENDENCIES
60
+ bundler (~> 2.0)
61
+ codebreaker_gapdn!
62
+ fasterer (~> 0.8.0)
63
+ rake (~> 10.0)
64
+ rspec (~> 3.0)
65
+ rubocop (~> 0.76.0)
66
+ rubocop-rspec
67
+ simplecov (~> 0.17.1)
68
+
69
+ BUNDLED WITH
70
+ 2.0.2
@@ -0,0 +1 @@
1
+ # codebreaker
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'codebreaker'
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require 'irb'
15
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'codebreaker/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'codebreaker_gapdn'
9
+ spec.version = Codebreaker::VERSION
10
+ spec.authors = ['gapdn']
11
+ spec.email = ['dn090784gap@gmail.com']
12
+
13
+ spec.summary = 'Write a short summary, because RubyGems requires one.'
14
+ spec.description = 'Write a longer description or delete this line.'
15
+ spec.homepage = 'http://mysite.loc'
16
+
17
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
18
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ end
20
+ spec.bindir = 'exe'
21
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
+ spec.require_paths = ['lib']
23
+
24
+ spec.add_development_dependency 'bundler', '~> 2.0'
25
+ spec.add_development_dependency 'fasterer', '~> 0.8.0'
26
+ spec.add_development_dependency 'rake', '~> 10.0'
27
+ spec.add_development_dependency 'rspec', '~> 3.0'
28
+ spec.add_development_dependency 'rubocop', '~> 0.76.0'
29
+ spec.add_development_dependency 'rubocop-rspec'
30
+ spec.add_development_dependency 'simplecov', '~> 0.17.1'
31
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+ require_relative 'database/data_handler'
5
+ require_relative 'database/statistic'
6
+ require_relative 'helper/validator'
7
+ require_relative 'entities/base_class'
8
+ require_relative 'entities/user'
9
+ require_relative 'entities/guess'
10
+ require_relative 'entities/difficulty'
11
+ require_relative 'codebreaker/game'
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Game
4
+ GUESS_PRESENCE = '-'
5
+ GUESS_PLACE = '+'
6
+
7
+ attr_reader :secret_code, :attempts_counter, :hinted_numbers, :current_difficulty, :win
8
+
9
+ def initialize(difficulty)
10
+ @secret_code = create_secret_code
11
+ @guess = []
12
+ @attempts_counter = 0
13
+ difficulty(difficulty)
14
+ end
15
+
16
+ def difficulty(difficulty)
17
+ @current_difficulty = difficulty.level
18
+ @hinted_numbers = @secret_code.sample(@current_difficulty[:hints])
19
+ end
20
+
21
+ def check_number_match(guess)
22
+ @guess = guess
23
+ @attempts_counter += 1
24
+ if @guess == @secret_code
25
+ @win = true
26
+ return win_string
27
+ end
28
+
29
+ number_match(exact_match)
30
+ end
31
+
32
+ def take_hint
33
+ @hinted_numbers.pop
34
+ end
35
+
36
+ def win?(string)
37
+ string == win_string
38
+ end
39
+
40
+ def lose?
41
+ @attempts_counter >= @current_difficulty[:attempts]
42
+ end
43
+
44
+ private
45
+
46
+ def win_string
47
+ GUESS_PLACE * Guess::VALID_GUESS_LENGTH
48
+ end
49
+
50
+ def create_secret_code
51
+ Array.new(4) { rand(0..6) }
52
+ end
53
+
54
+ def exact_match
55
+ array = @secret_code.dup
56
+ array.map.with_index do |_char, index|
57
+ next unless array[index] == @guess[index]
58
+
59
+ @guess[index] = nil
60
+ GUESS_PLACE
61
+ end.compact
62
+ end
63
+
64
+ def number_match(pluses)
65
+ s_code = @secret_code.map.with_index { |char, index| @guess[index].nil? ? nil : char }.compact
66
+ @guess.compact!
67
+ s_code.map.with_index do |_char, index|
68
+ if s_code.include? @guess[index]
69
+ s_code[s_code.index(@guess[index])] = nil
70
+ pluses << GUESS_PRESENCE
71
+ end
72
+ end
73
+ pluses.join
74
+ end
75
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Codebreaker
4
+ VERSION = '0.1.0'
5
+ end
@@ -0,0 +1 @@
1
+ storage.yml
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DataHandler
4
+ def self.load(file_path)
5
+ if File.exist?(file_path)
6
+ YAML.safe_load(File.read(file_path), [Symbol], [], true)
7
+ else
8
+ File.open(file_path, 'w+')
9
+ false
10
+ end
11
+ end
12
+
13
+ def self.save(file_path, object)
14
+ File.open(file_path, 'w') { |file| file.write(object.to_yaml) }
15
+ end
16
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Statistic
4
+ include DataHandler
5
+
6
+ attr_reader :headers
7
+
8
+ def initialize(db = __dir__ + '/storage.yml')
9
+ @db = db
10
+ @headers = %w[ratign name difficulty attempts_total attempts_used hints_total hints_used]
11
+ @items = load || []
12
+ end
13
+
14
+ def statistic
15
+ sort
16
+ @items.each_with_index.map do |item, index|
17
+ [index.next, item[:name], item[:difficulty], item[:attempts_total],
18
+ item[:attempts_used], item[:hints_total], item[:hints_used]]
19
+ end
20
+ end
21
+
22
+ def add_item(game, username)
23
+ @items << { name: username,
24
+ difficulty: game.current_difficulty[:name],
25
+ difficulty_id: game.current_difficulty[:id],
26
+ attempts_total: game.current_difficulty[:attempts],
27
+ attempts_used: game.attempts_counter,
28
+ hints_total: game.current_difficulty[:hints],
29
+ hints_used: hints_used(game) }
30
+ save
31
+ end
32
+
33
+ private
34
+
35
+ def hints_used(game)
36
+ game.current_difficulty[:hints] - game.hinted_numbers.size
37
+ end
38
+
39
+ def load
40
+ DataHandler.load(@db)
41
+ end
42
+
43
+ def save
44
+ DataHandler.save(@db, @items)
45
+ end
46
+
47
+ def sort
48
+ @items.sort_by! do |item|
49
+ [-item[:difficulty_id], item[:attempts_used], item[:hints_used]]
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ class BaseClass
4
+ include Validator
5
+
6
+ def valid?
7
+ validate
8
+ @errors.empty?
9
+ end
10
+
11
+ private
12
+
13
+ def validate
14
+ raise NotImplementedError
15
+ end
16
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Difficulty < BaseClass
4
+ LEVELS = {
5
+ easy: { attempts: 15, hints: 3, name: 'easy', id: 1 },
6
+ medium: { attempts: 10, hints: 2, name: 'medium', id: 2 },
7
+ hell: { attempts: 5, hints: 1, name: 'hell', id: 3 }
8
+ }.freeze
9
+
10
+ attr_reader :errors, :level
11
+
12
+ def initialize(level = :easy)
13
+ @level = LEVELS[level.to_sym]
14
+ @errors = []
15
+ end
16
+
17
+ def validate
18
+ @errors << 'unexpected_comand' unless LEVELS.values.include? @level
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Guess < BaseClass
4
+ VALID_GUESS_LENGTH = 4
5
+ VALID_GUESS_RANGE = ('0'..'6').freeze
6
+
7
+ attr_accessor :number
8
+ attr_reader :errors
9
+
10
+ def initialize(guess)
11
+ @number = guess
12
+ @errors = []
13
+ end
14
+
15
+ def validate
16
+ @errors << 'error_number_length' unless check_length?(@number, VALID_GUESS_LENGTH)
17
+ @errors << 'error_number_digit' unless check_number_in_range?(@number, VALID_GUESS_RANGE)
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class User < BaseClass
4
+ VALID_NAME_RANGE = (3..20).freeze
5
+ VALID_SYMBOLS_RANGE = ('a'..'z').freeze
6
+
7
+ attr_accessor :name
8
+ attr_reader :errors
9
+
10
+ def initialize(name = 'Codebreaker')
11
+ @name = name
12
+ @errors = []
13
+ end
14
+
15
+ def validate
16
+ @errors << 'error_name_length' unless check_length_in_range?(@name, VALID_NAME_RANGE)
17
+ @errors << 'error_name_chars' unless check_symbols_in_range?(@name, VALID_SYMBOLS_RANGE)
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Validator
4
+ def check_length?(string, current_length)
5
+ string.length == current_length
6
+ end
7
+
8
+ def check_length_in_range?(string, range)
9
+ range.include? string.length
10
+ end
11
+
12
+ def check_number_in_range?(string, range)
13
+ string.chars.all? { |char| range.include? char }
14
+ end
15
+
16
+ def check_symbols_in_range?(string, range)
17
+ string.chars.all? { |char| range.include? char }
18
+ end
19
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: codebreaker_gapdn
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - gapdn
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-12-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: fasterer
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.8.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.8.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.76.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.76.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.17.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.17.1
111
+ description: Write a longer description or delete this line.
112
+ email:
113
+ - dn090784gap@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".circleci/config.yml"
119
+ - ".fasterer.yml"
120
+ - ".gitignore"
121
+ - ".rspec"
122
+ - ".rubocop.yml"
123
+ - ".travis.yml"
124
+ - Gemfile
125
+ - Gemfile.lock
126
+ - README.md
127
+ - Rakefile
128
+ - bin/console
129
+ - bin/setup
130
+ - codebreaker.gemspec
131
+ - lib/codebreaker.rb
132
+ - lib/codebreaker/game.rb
133
+ - lib/codebreaker/version.rb
134
+ - lib/database/.gitignore
135
+ - lib/database/data_handler.rb
136
+ - lib/database/statistic.rb
137
+ - lib/entities/base_class.rb
138
+ - lib/entities/difficulty.rb
139
+ - lib/entities/guess.rb
140
+ - lib/entities/user.rb
141
+ - lib/helper/validator.rb
142
+ homepage: http://mysite.loc
143
+ licenses: []
144
+ metadata: {}
145
+ post_install_message:
146
+ rdoc_options: []
147
+ require_paths:
148
+ - lib
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ requirements: []
160
+ rubygems_version: 3.0.6
161
+ signing_key:
162
+ specification_version: 4
163
+ summary: Write a short summary, because RubyGems requires one.
164
+ test_files: []