codebreaker_mats 0.1.0 → 0.1.5

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: b39759797f3037fd9401960c010999d876ece547ca4d425adaacc5eedc9811d3
4
- data.tar.gz: a158d6a43b46877090d307d61ddb4918d2d6b751acce2f64003cbe22fcd43682
3
+ metadata.gz: 12b55316ac669cd102916e9ba8464d9b59496d9c3989d6060fd6072589f0cc20
4
+ data.tar.gz: 80940e1039b864382fd3f48fdfe9c6b08afb58bcd1d345bbdf15172dacf768da
5
5
  SHA512:
6
- metadata.gz: 3b8895a717e7d28aba7d1109f4d4f4a9b710800f0ef5a458cbf8a908599062f5705a2e082afa30098a3a12e2db7b547e28530988848987ebdd13d5a7989cb286
7
- data.tar.gz: 416a11442b8d18f06c084460e19f2e008fc90eaf43b0895839877083a8923cb0ef07cf581001d381c7720a9c8d0fa9b636c0a043013acd3dd165c6c275e5be07
6
+ metadata.gz: 4a062ea5f80757f5536c61dedc8254ad321176c3d7353df6f37945bbe883e052352210acd4743e1db13ede973702e4090852d4274ca1447435491f13f6db209f
7
+ data.tar.gz: 5dc51e336f99829bb4cc3f91182ba36b64d589d9560aee782bf5cf5a706427cf3c6bae878d92f874a01ed15a9241ddccd5b2e973beb6bd00bc3e8c1b9070d9cc
@@ -0,0 +1,70 @@
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.0-node
9
+ environment:
10
+ BUNDLER_VERSION: 2.1.4
11
+
12
+ caches:
13
+ - &bundle_cache_full v2-repo-{{ checksum "Gemfile.lock" }}
14
+ - &bundle_cache v2-repo-
15
+
16
+ commands:
17
+ defaults:
18
+ steps:
19
+ - checkout
20
+ - restore_cache:
21
+ keys:
22
+ - *bundle_cache_full
23
+ - *bundle_cache
24
+ - run:
25
+ name: Configure Bundler
26
+ command: |
27
+ gem update --system
28
+ gem install bundler
29
+ - run: bundle install --path vendor/bundle
30
+ - save_cache:
31
+ key: *bundle_cache_full
32
+ paths:
33
+ - vendor/bundle
34
+ run_linters:
35
+ description: command to start linters
36
+ steps:
37
+ - run:
38
+ name: rubocop
39
+ command: bundle exec rubocop
40
+
41
+ run_specs:
42
+ steps:
43
+ - run:
44
+ name: run specs
45
+ command: |
46
+ mkdir /tmp/test-results
47
+ TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"
48
+ bundle exec rspec --format progress \
49
+ --out /tmp/test-results/rspec.xml \
50
+ $TEST_FILES
51
+ jobs:
52
+ lintering:
53
+ executor: default
54
+ steps:
55
+ - defaults
56
+ - run_linters
57
+ run_specs:
58
+ executor: default
59
+ steps:
60
+ - defaults
61
+ - run_specs
62
+
63
+ workflows:
64
+ version: 2
65
+ build:
66
+ jobs:
67
+ - lintering
68
+ - run_specs:
69
+ requires:
70
+ - lintering
@@ -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
@@ -0,0 +1,14 @@
1
+ require: rubocop-rspec
2
+ Style:
3
+ Enabled: false
4
+ RSpec/FilePath:
5
+ Enabled: false
6
+ RSpec/MultipleExpectations:
7
+ Enabled: false
8
+ RSpec/MessageSpies:
9
+ Enabled: false
10
+ Metrics/BlockLength:
11
+ Exclude:
12
+ - 'Rakefile'
13
+ - '**/*.rake'
14
+ - 'spec/**/*.rb'
data/Gemfile CHANGED
@@ -1,7 +1,11 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in codebreaker_mats.gemspec
4
4
  gemspec
5
5
 
6
- gem "rake", "~> 12.0"
7
- gem "rspec", "~> 3.0"
6
+ gem 'fasterer', '0.8.3'
7
+ gem 'rake', '~> 12.0'
8
+ gem 'rspec', '~> 3.0'
9
+ gem 'rubocop-rspec', require: false
10
+
11
+ gem 'simplecov'
@@ -1,13 +1,25 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- codebreaker_mats (0.1.0)
4
+ codebreaker_mats (0.1.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
+ ast (2.4.1)
10
+ colorize (0.8.1)
9
11
  diff-lcs (1.4.4)
12
+ docile (1.3.2)
13
+ fasterer (0.8.3)
14
+ colorize (~> 0.7)
15
+ ruby_parser (>= 3.14.1)
16
+ parallel (1.19.2)
17
+ parser (2.7.1.4)
18
+ ast (~> 2.4.1)
19
+ rainbow (3.0.0)
10
20
  rake (12.3.3)
21
+ regexp_parser (1.7.1)
22
+ rexml (3.2.4)
11
23
  rspec (3.9.0)
12
24
  rspec-core (~> 3.9.0)
13
25
  rspec-expectations (~> 3.9.0)
@@ -21,14 +33,39 @@ GEM
21
33
  diff-lcs (>= 1.2.0, < 2.0)
22
34
  rspec-support (~> 3.9.0)
23
35
  rspec-support (3.9.3)
36
+ rubocop (0.88.0)
37
+ parallel (~> 1.10)
38
+ parser (>= 2.7.1.1)
39
+ rainbow (>= 2.2.2, < 4.0)
40
+ regexp_parser (>= 1.7)
41
+ rexml
42
+ rubocop-ast (>= 0.1.0, < 1.0)
43
+ ruby-progressbar (~> 1.7)
44
+ unicode-display_width (>= 1.4.0, < 2.0)
45
+ rubocop-ast (0.2.0)
46
+ parser (>= 2.7.0.1)
47
+ rubocop-rspec (1.42.0)
48
+ rubocop (>= 0.87.0)
49
+ ruby-progressbar (1.10.1)
50
+ ruby_parser (3.14.2)
51
+ sexp_processor (~> 4.9)
52
+ sexp_processor (4.14.1)
53
+ simplecov (0.18.5)
54
+ docile (~> 1.1)
55
+ simplecov-html (~> 0.11)
56
+ simplecov-html (0.12.2)
57
+ unicode-display_width (1.7.0)
24
58
 
25
59
  PLATFORMS
26
60
  ruby
27
61
 
28
62
  DEPENDENCIES
29
63
  codebreaker_mats!
64
+ fasterer (= 0.8.3)
30
65
  rake (~> 12.0)
31
66
  rspec (~> 3.0)
67
+ rubocop-rspec
68
+ simplecov
32
69
 
33
70
  BUNDLED WITH
34
71
  2.1.4
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "codebreaker_mats"
3
+ require 'bundler/setup'
4
+ require 'codebreaker_mats'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "codebreaker_mats"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start(__FILE__)
@@ -1,26 +1,26 @@
1
1
  require_relative 'lib/codebreaker_mats/version'
2
2
 
3
3
  Gem::Specification.new do |spec|
4
- spec.name = "codebreaker_mats"
4
+ spec.name = 'codebreaker_mats'
5
5
  spec.version = CodebreakerMats::VERSION
6
- spec.authors = ["Ivan"]
7
- spec.email = ["ivan.matsiyk18092002@gmail.com"]
6
+ spec.authors = ['Ivan']
7
+ spec.email = ['ivan.matsiyk18092002@gmail.com']
8
8
 
9
9
  spec.summary = 'codebreaker game'
10
10
  spec.description = 'The app provides core for codebreaker game'
11
11
  spec.homepage = 'https://github.com/Swooty18/codebreaker_mats.git'
12
- spec.license = "MIT"
13
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
12
+ spec.license = 'MIT'
13
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
14
14
 
15
- spec.metadata["homepage_uri"] = spec.homepage
16
- spec.metadata["source_code_uri"] = 'https://github.com/Swooty18/codebreaker_mats.git'
15
+ spec.metadata['homepage_uri'] = spec.homepage
16
+ spec.metadata['source_code_uri'] = 'https://github.com/Swooty18/codebreaker_mats.git'
17
17
 
18
18
  # Specify which files should be added to the gem when it is released.
19
19
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
20
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
20
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
21
21
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
22
  end
23
- spec.bindir = "exe"
23
+ spec.bindir = 'exe'
24
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
- spec.require_paths = ["lib"]
25
+ spec.require_paths = ['lib']
26
26
  end
@@ -1,7 +1,4 @@
1
- require_relative "codebreaker_mats/version"
2
-
3
1
  require 'yaml'
4
- require 'i18n'
5
2
 
6
3
  require_relative 'codebreaker_mats/version'
7
4
  require_relative 'codebreaker_mats/matcher'
@@ -12,3 +9,5 @@ require_relative 'codebreaker_mats/exceptions/terminate_error'
12
9
  require_relative 'codebreaker_mats/markers/plus_minus_marker'
13
10
  require_relative 'codebreaker_mats/markers/classical_marker'
14
11
 
12
+ require 'simplecov'
13
+ SimpleCov.start
@@ -3,10 +3,9 @@
3
3
  module Codebreaker
4
4
  # Game of bulls and cows.
5
5
  class Game
6
- FILESTAT = './stat.yml'
7
6
  attr_reader :storage, :matcher, :hints, :status
8
7
 
9
- attr_accessor :user, :number_of_attempts, :number_of_hints, :attempts_left, :hints_left, :difficulty
8
+ attr_accessor :user, :number_of_attempts, :number_of_hints, :attempts_left, :hints_left, :difficulty, :secret_code
10
9
  def initialize(matcher: Matcher.new)
11
10
  @storage = storage
12
11
  @matcher = matcher
@@ -15,8 +14,8 @@ module Codebreaker
15
14
  def start
16
15
  generate_secret_code
17
16
  generate_hints
18
- @attempts_left = @number_of_attempts
19
- @hints_left = @number_of_hints
17
+ @attempts_left = @number_of_attempts = 0
18
+ @hints_left = @number_of_hints = 0
20
19
  matcher.secret_code = @secret_code
21
20
  @status = :in_progress
22
21
  @difficulty
@@ -29,8 +28,6 @@ module Codebreaker
29
28
  end
30
29
 
31
30
  def guess(guess)
32
- raise Exceptions::NoAttemptsLeft unless attempts_available?
33
-
34
31
  @attempts_left -= 1
35
32
  matcher.match?(guess) && won
36
33
  end
@@ -58,16 +55,8 @@ module Codebreaker
58
55
  status == :in_progress
59
56
  end
60
57
 
61
- def save
62
- storage.save([@user].concat(to_a))
63
- end
64
-
65
- def scores
66
- storage.to_a
67
- end
68
-
69
- def save_stat
70
- File.open(FILESTAT, 'a+') do |f|
58
+ def save_stat(stat_file)
59
+ File.open(stat_file, 'a+') do |f|
71
60
  f.write({ user: @user,
72
61
  difficulty: @difficulty,
73
62
  attempts: @number_of_attempts,
@@ -77,6 +66,12 @@ module Codebreaker
77
66
  end
78
67
  end
79
68
 
69
+ def set_difficulty(diff, attempts, hints)
70
+ @number_of_attempts = @attempts_left = attempts
71
+ @number_of_hints = @hints_left = hints
72
+ @difficulty = diff
73
+ end
74
+
80
75
  private
81
76
 
82
77
  def generate_secret_code
@@ -93,15 +88,11 @@ module Codebreaker
93
88
 
94
89
  def won
95
90
  @status = :won
96
- print I18n.t(:secret_code)
97
- puts @secret_code
98
91
  true
99
92
  end
100
93
 
101
94
  def lost
102
95
  @status = :lost
103
- print I18n.t(:secret_code)
104
- puts @secret_code
105
96
  false
106
97
  end
107
98
  end
@@ -16,8 +16,6 @@ module Codebreaker
16
16
  end
17
17
 
18
18
  def match?(guess)
19
- raise Exceptions::InvalidGuessFormat unless valid_code?(guess)
20
-
21
19
  match(array_to_hash_of_positions(unify_code(guess)))
22
20
 
23
21
  bulls == 4
@@ -29,12 +27,6 @@ module Codebreaker
29
27
 
30
28
  private
31
29
 
32
- def valid_code?(code)
33
- code = code.join('') if code.is_a?(Array)
34
-
35
- code.match(/^[1-6]{4}$/)
36
- end
37
-
38
30
  def unify_code(code)
39
31
  code.is_a?(String) ? code.split('') : code
40
32
  end
@@ -1,3 +1,3 @@
1
1
  module CodebreakerMats
2
- VERSION = "0.1.0"
2
+ VERSION = '0.1.5'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codebreaker_mats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-22 00:00:00.000000000 Z
11
+ date: 2020-07-31 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: The app provides core for codebreaker game
14
14
  email:
@@ -17,9 +17,11 @@ executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
+ - ".circleci/config.yml"
21
+ - ".faterer.yml"
20
22
  - ".gitignore"
21
23
  - ".rspec"
22
- - ".travis.yml"
24
+ - ".rubocop.yml"
23
25
  - CODE_OF_CONDUCT.md
24
26
  - Gemfile
25
27
  - Gemfile.lock
@@ -57,7 +59,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
57
59
  - !ruby/object:Gem::Version
58
60
  version: '0'
59
61
  requirements: []
60
- rubygems_version: 3.1.3
62
+ rubygems_version: 3.1.4
61
63
  signing_key:
62
64
  specification_version: 4
63
65
  summary: codebreaker game
@@ -1,6 +0,0 @@
1
- ---
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.7.1
6
- before_install: gem install bundler -v 2.1.4