codebreaker_kub 0.1.3 → 0.1.8

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: fde79c91f97484a155ebcd260580fe0ac26a894e654860c7ac796aa9f328f714
4
- data.tar.gz: b8c42dd32712d538b2c5ed007afd721c780ded93571d779ae295ab22ce990057
3
+ metadata.gz: 4ca339901e4380146ff8f4454ad542b513fd422331f53f9ddd8a14efdb2e72c5
4
+ data.tar.gz: 7b349065f626cdc2b54fcebfbc6601ea0d66a4d66fe42309b2d7cc61d7e02783
5
5
  SHA512:
6
- metadata.gz: f5e2273d6d0ca94e9f26d1b8fb05f771d4995ce9b8fe05da939fcf7ae0b1b6307dd45dd8d48599c81aeabadd3ff58485279f457728a9203eece109f8c1ef9ee8
7
- data.tar.gz: a10ae9b2e238c7f6444fbce501271ad0b818c4c83057f5a6b9f7eb957958873269429fc91ffc027fa9161e20ad8d404755ab315a47184eb6e90c720cf4ba8eda
6
+ metadata.gz: 197df5af39c7c1e49b9d689f0042cd820a42c7ab9fae406331a9b17dc2f07ff07738700349c85053165f0add09262f630f4103416bd7c1e16509604888aa1b28
7
+ data.tar.gz: 96974c45577b6193a2e0d86e217e95ee0869cb1a821883d1a9fa038ba004ff9eaf4e4072a13e3cc44c159f54ee7616070e7a0019cd17659c9d9dc6b6debc7da8
@@ -0,0 +1,57 @@
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.7.0
9
+ caches:
10
+ - &bundle_cache v1-repo-{{ checksum "Gemfile.lock" }}
11
+ commands:
12
+ run_linters:
13
+ description: command to start linters
14
+ steps:
15
+ - run:
16
+ name: rubocop
17
+ command: bundle exec rubocop
18
+ run_specs:
19
+ steps:
20
+ - run:
21
+ name: run specs
22
+ command: |
23
+ mkdir /tmp/test-results
24
+ TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"
25
+ bundle exec rspec --format progress \
26
+ --out /tmp/test-results/rspec.xml \
27
+ $TEST_FILES
28
+ setup_environment:
29
+ steps:
30
+ - checkout
31
+ - restore_cache:
32
+ key: *bundle_cache
33
+ - run: bundle install --path vendor/bundle
34
+ - save_cache:
35
+ key: *bundle_cache
36
+ paths:
37
+ - vendor/bundle
38
+ jobs:
39
+ lintering:
40
+ executor: default
41
+ steps:
42
+ - setup_environment
43
+ - run_linters
44
+ run_specs:
45
+ executor: default
46
+ steps:
47
+ - setup_environment
48
+ - run_specs
49
+
50
+ workflows:
51
+ version: 2
52
+ build:
53
+ jobs:
54
+ - lintering
55
+ - run_specs:
56
+ requires:
57
+ - lintering
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  .rvmrc
2
2
  /coverage/
3
+ .rspec_status
@@ -5,7 +5,7 @@ Style/Documentation:
5
5
  Enabled: false
6
6
 
7
7
  Layout/LineLength:
8
- Max: 100
8
+ Max: 110
9
9
 
10
10
  Style/FrozenStringLiteralComment:
11
11
  Enabled: false
data/Gemfile CHANGED
@@ -2,6 +2,3 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in codebreaker.gemspec
4
4
  gemspec
5
-
6
- gem 'rake', '~> 12.0'
7
- gem 'rspec', '~> 3.0'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- codebreaker_kub (0.0.1)
4
+ codebreaker_kub (0.1.7)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -65,7 +65,7 @@ DEPENDENCIES
65
65
  fasterer (~> 0.8)
66
66
  i18n (~> 1.8)
67
67
  rake (~> 12.0)
68
- rspec (~> 3.0)
68
+ rspec (~> 3.9)
69
69
  rubocop (~> 0.87)
70
70
  simplecov (~> 0.18)
71
71
 
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
 
29
29
  spec.add_development_dependency 'fasterer', '~>0.8'
30
30
  spec.add_development_dependency 'i18n', '~>1.8'
31
+ spec.add_development_dependency 'rake', '~> 12.0'
31
32
  spec.add_development_dependency 'rspec', '~>3.9'
32
33
  spec.add_development_dependency 'rubocop', '~>0.87'
33
34
  spec.add_development_dependency 'simplecov', '~>0.18'
@@ -4,6 +4,4 @@ require_relative 'codebreaker/output'
4
4
  require_relative 'codebreaker/validation'
5
5
  require_relative 'codebreaker/version'
6
6
  require 'i18n'
7
- require 'open-uri'
8
7
  require 'yaml'
9
- game = Codebreaker::Game.new
@@ -5,6 +5,7 @@
5
5
  - Load game statistics - puts 'stats'\n
6
6
  - Exit from game - puts 'exit'\n"
7
7
  goodbye: "Bye bye!\n"
8
+ available_commands: "Enter 'start', 'rules', 'stats' or 'exit'"
8
9
  rules: "GAME RULES:\n
9
10
  # Codebreaker is a logic game in which a code-breaker tries to break a secret code created by a code-maker. The\n codemaker, which will be played by the application we’re going to write, creates a secret code.\n
10
11
  # The codebreaker gets some number of chances to break the code (depends on chosen difficulty). In each turn, the\n codebreaker makes a guess. The codemaker then marks the guess with special symbols.\n
@@ -18,6 +19,7 @@
18
19
  wrong_difficulty: "There is no such level. Select from available, please"
19
20
  get_hint: "You can choose get hint - puts 'hint'"
20
21
  no_hints: "You have no hints"
22
+ enter_guess: "Enter your guess, please"
21
23
  wrong_input: "Your input is invalid or there is no such command."
22
24
  win: "YOU WIN!"
23
25
  lose: "You lose, sorry("
@@ -1,10 +1,17 @@
1
1
  module Codebreaker
2
2
  class Game
3
3
  attr_accessor :input_code, :code, :name, :difficulties, :difficulty, :hints_left, :attempts_left
4
-
4
+ attr_reader :minuse, :plus, :none
5
5
  def initialize
6
- p @difficulties = Codebreaker::Loader.load('difficulties')
6
+ @difficulties = Codebreaker::Loader.load('difficulties')
7
7
  @code = generate_code
8
+ symbols
9
+ end
10
+
11
+ def symbols(minuse = '-', plus = '+', none = '')
12
+ @minuse = minuse
13
+ @plus = plus
14
+ @none = none
8
15
  end
9
16
 
10
17
  def game_option(name, difficulty)
@@ -50,11 +57,13 @@ module Codebreaker
50
57
  def check_input(code = @code.chars)
51
58
  input = @input_code.chars
52
59
  minuses = (code & input).map { |element| [code.count(element), input.count(element)].min }.sum
53
- result = '-' * minuses
60
+ result = @minuse * minuses
54
61
  input.each.with_index do |element, index|
55
- result.sub!('-', '+') if element == code[index]
62
+ result.sub!(@minuse, @plus) if element == code[index]
56
63
  end
57
- result
64
+ return result unless result.empty?
65
+
66
+ @none
58
67
  end
59
68
 
60
69
  def generate_code
@@ -76,8 +85,8 @@ module Codebreaker
76
85
  attempts: difficulty_option[:attempts],
77
86
  hints: difficulty_option[:hints],
78
87
  code: @code,
79
- attempts_left: @attempts_left,
80
- hints_left: @hints_left,
88
+ used_attempts: difficulty_option[:attempts] - @attempts_left,
89
+ used_hints: difficulty_option[:hints] - @hints_left,
81
90
  win: win?
82
91
  }
83
92
  end
@@ -4,12 +4,9 @@ module Codebreaker
4
4
  EXTENCTION = '.yml'.freeze
5
5
  def self.load(file_name)
6
6
  file_name = PATH + file_name + EXTENCTION.to_s
7
- if File.exist?(file_name)
8
- YAML.load_file(file_name)
9
- else
10
- File.new(file_name, 'w')
11
- []
12
- end
7
+ raise LoadError, 'No such file to load' unless File.exist?(file_name)
8
+
9
+ YAML.load_file(file_name)
13
10
  end
14
11
 
15
12
  def self.save(obj, file_name)
@@ -1,14 +1,20 @@
1
1
  module Codebreaker
2
2
  class Output
3
+ attr_reader :stats
3
4
  def initialize
4
- I18n.load_path << Dir[File.expand_path('./lib/codebreaker/data/locales') + '/*.yml']
5
+ I18n.load_path << Dir[File.expand_path(File.join(File.dirname(__FILE__), 'data/locales/')) + '/*.yml']
5
6
  I18n.config.available_locales = :en
7
+ @stats = Codebreaker::Loader.load('stat')
6
8
  end
7
9
 
8
10
  def greeting
9
11
  puts I18n.t(:hey)
10
12
  end
11
13
 
14
+ def available_commands
15
+ puts I18n.t(:available_commands)
16
+ end
17
+
12
18
  def choose_name
13
19
  puts I18n.t(:choose_name)
14
20
  end
@@ -21,12 +27,23 @@ module Codebreaker
21
27
  puts I18n.t(:rules)
22
28
  end
23
29
 
30
+ def sort_stats
31
+ @stats = @stats.sort_by do |game|
32
+ [game[:attempts], game[:used_attempts],
33
+ game[:used_hints]]
34
+ end
35
+ end
36
+
24
37
  def show_stats
25
- stats.each do |game|
38
+ sort_stats
39
+ @stats.each_with_index do |game, index|
26
40
  puts "Hey, #{game[:name]}
27
- Chosen difficulty: #{game[:difficulty]}
41
+ Rating: #{index + 1}
28
42
  Attempts: #{game[:attempts]}
29
- Hints: #{game[:hints]}"
43
+ Hints: #{game[:hints]}
44
+ Chosen difficulty: #{game[:difficulty]}
45
+ Used attempts: #{game[:used_attempts]}
46
+ Used hints: #{game[:used_hints]}"
30
47
  end
31
48
  end
32
49
 
@@ -51,6 +68,10 @@ module Codebreaker
51
68
  puts I18n.t(:wrong_difficulty)
52
69
  end
53
70
 
71
+ def enter_guess
72
+ puts I18n.t(:enter_guess)
73
+ end
74
+
54
75
  def wrong_input
55
76
  puts I18n.t(:wrong_input)
56
77
  end
@@ -1,3 +1,3 @@
1
1
  module Codebreaker
2
- VERSION = '0.1.3'.freeze
2
+ VERSION = '0.1.8'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codebreaker_kub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - katia kub
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-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fasterer
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '12.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '12.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -87,10 +101,10 @@ executables: []
87
101
  extensions: []
88
102
  extra_rdoc_files: []
89
103
  files:
104
+ - ".circleci/config.yml"
90
105
  - ".fasterer.yml"
91
106
  - ".gitignore"
92
107
  - ".overcommit.yml"
93
- - ".rspec_status"
94
108
  - ".rubocop.yml"
95
109
  - ".ruby-version"
96
110
  - CODE_OF_CONDUCT.md
@@ -1,30 +0,0 @@
1
- example_id | status | run_time |
2
- ------------------------------------------ | ------ | --------------- |
3
- ./spec/codebreaker/game_spec.rb[1:1] | passed | 0.00066 seconds |
4
- ./spec/codebreaker/game_spec.rb[1:2] | passed | 0.00069 seconds |
5
- ./spec/codebreaker/game_spec.rb[1:3] | passed | 0.00095 seconds |
6
- ./spec/codebreaker/game_spec.rb[1:4] | passed | 0.00124 seconds |
7
- ./spec/codebreaker/game_spec.rb[1:5] | passed | 0.00033 seconds |
8
- ./spec/codebreaker/game_spec.rb[1:6] | passed | 0.0052 seconds |
9
- ./spec/codebreaker/game_spec.rb[1:7] | passed | 0.00059 seconds |
10
- ./spec/codebreaker/game_spec.rb[1:8] | passed | 0.00034 seconds |
11
- ./spec/codebreaker/game_spec.rb[1:9] | passed | 0.00029 seconds |
12
- ./spec/codebreaker/game_spec.rb[1:10:1] | passed | 0.00059 seconds |
13
- ./spec/codebreaker/game_spec.rb[1:10:2] | passed | 0.00028 seconds |
14
- ./spec/codebreaker/game_spec.rb[1:10:3] | passed | 0.00026 seconds |
15
- ./spec/codebreaker/game_spec.rb[1:10:4] | passed | 0.00025 seconds |
16
- ./spec/codebreaker/game_spec.rb[1:10:5] | passed | 0.00027 seconds |
17
- ./spec/codebreaker/game_spec.rb[1:10:6] | passed | 0.00026 seconds |
18
- ./spec/codebreaker/game_spec.rb[1:10:7] | passed | 0.00026 seconds |
19
- ./spec/codebreaker/game_spec.rb[1:10:8] | passed | 0.00027 seconds |
20
- ./spec/codebreaker/game_spec.rb[1:10:9] | passed | 0.00038 seconds |
21
- ./spec/codebreaker/game_spec.rb[1:10:10] | passed | 0.00036 seconds |
22
- ./spec/codebreaker/game_spec.rb[1:10:11] | passed | 0.00034 seconds |
23
- ./spec/codebreaker/loader_spec.rb[1:1] | passed | 0.00079 seconds |
24
- ./spec/codebreaker/validation_spec.rb[1:1] | passed | 0.00023 seconds |
25
- ./spec/codebreaker/validation_spec.rb[1:2] | passed | 0.00014 seconds |
26
- ./spec/codebreaker/validation_spec.rb[1:3] | passed | 0.00013 seconds |
27
- ./spec/codebreaker/validation_spec.rb[1:4] | passed | 0.00008 seconds |
28
- ./spec/codebreaker/validation_spec.rb[1:5] | passed | 0.00009 seconds |
29
- ./spec/codebreaker/validation_spec.rb[1:6] | passed | 0.00013 seconds |
30
- ./spec/codebreaker_spec.rb[1:1] | passed | 0.00009 seconds |