ep-codebreaker 0.3.0 → 0.3.1
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 +4 -4
 - data/README.md +0 -1
 - data/lib/ep-codebreaker/game.rb +17 -19
 - data/lib/ep-codebreaker/game_writer.rb +23 -0
 - data/lib/ep-codebreaker/messages.rb +1 -1
 - data/lib/ep-codebreaker/version.rb +1 -1
 - data/lib/ep-codebreaker.rb +2 -4
 - metadata +3 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 9d8b421d3c5caf1b37d80b9d168a7ebc32820b58
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 26c7ee1e48c44513879769ebce8984bc6b9d5e7f
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f7e0278325eabc82ccfa08f38035df512801f64ef8270521b3ade44ad4a1bf3fe869bdec67adba03c481be69b2e5a8713491419181dfea4d67edd063acf1ec6c
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: a84d3cf7b3136cec8df57365cc71ef2262b1d43a60ec6496b62a9edce86c947a7b985c22b4a443975dc64325e41f79aa85c9e891be510c3cbaa050a8bf51b663
         
     | 
    
        data/README.md
    CHANGED
    
    
    
        data/lib/ep-codebreaker/game.rb
    CHANGED
    
    | 
         @@ -1,7 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require_relative 'player'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative 'game_writer'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
       3 
6 
     | 
    
         
             
            module Codebreaker
         
     | 
| 
       4 
7 
     | 
    
         
             
              class Game
         
     | 
| 
      
 8 
     | 
    
         
            +
                include GameWriter
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       5 
10 
     | 
    
         
             
                MIN = 1
         
     | 
| 
       6 
11 
     | 
    
         
             
                MAX = 6
         
     | 
| 
       7 
12 
     | 
    
         
             
                LENGTH = 4
         
     | 
| 
         @@ -42,10 +47,7 @@ module Codebreaker 
     | 
|
| 
       42 
47 
     | 
    
         
             
                  @hints_left -= 1
         
     | 
| 
       43 
48 
     | 
    
         
             
                  define_stage
         
     | 
| 
       44 
49 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
                   
     | 
| 
       46 
     | 
    
         
            -
                  hint = '_' * LENGTH
         
     | 
| 
       47 
     | 
    
         
            -
                  hint[index] = @code[index]
         
     | 
| 
       48 
     | 
    
         
            -
                  hint
         
     | 
| 
      
 50 
     | 
    
         
            +
                  generate_hint
         
     | 
| 
       49 
51 
     | 
    
         
             
                end
         
     | 
| 
       50 
52 
     | 
    
         | 
| 
       51 
53 
     | 
    
         
             
                def finished?
         
     | 
| 
         @@ -60,18 +62,12 @@ module Codebreaker 
     | 
|
| 
       60 
62 
     | 
    
         
             
                  @code if finished?
         
     | 
| 
       61 
63 
     | 
    
         
             
                end
         
     | 
| 
       62 
64 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
                def save_score(name 
     | 
| 
       64 
     | 
    
         
            -
                   
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
                  scores = process_file(file_name)
         
     | 
| 
       67 
     | 
    
         
            -
                  scores << player
         
     | 
| 
       68 
     | 
    
         
            -
                  scores = scores.max_by(10, &:points)
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
                  File.open(file_name, 'w') { |f| f.write scores.to_yaml }
         
     | 
| 
      
 65 
     | 
    
         
            +
                def save_score(name)
         
     | 
| 
      
 66 
     | 
    
         
            +
                  write Player.new(name, @tries_left, @hints_left)
         
     | 
| 
       71 
67 
     | 
    
         
             
                end
         
     | 
| 
       72 
68 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
                def high_scores 
     | 
| 
       74 
     | 
    
         
            -
                  process_file 
     | 
| 
      
 69 
     | 
    
         
            +
                def high_scores
         
     | 
| 
      
 70 
     | 
    
         
            +
                  process_file
         
     | 
| 
       75 
71 
     | 
    
         
             
                end
         
     | 
| 
       76 
72 
     | 
    
         | 
| 
       77 
73 
     | 
    
         
             
                def as_json
         
     | 
| 
         @@ -105,6 +101,13 @@ module Codebreaker 
     | 
|
| 
       105 
101 
     | 
    
         
             
                  ('+' * num_of_pluses) + ('-' * num_of_minuses)
         
     | 
| 
       106 
102 
     | 
    
         
             
                end
         
     | 
| 
       107 
103 
     | 
    
         | 
| 
      
 104 
     | 
    
         
            +
                def generate_hint
         
     | 
| 
      
 105 
     | 
    
         
            +
                  hint = '_' * LENGTH
         
     | 
| 
      
 106 
     | 
    
         
            +
                  index = @indexes_for_hint.delete(@indexes_for_hint.sample)
         
     | 
| 
      
 107 
     | 
    
         
            +
                  hint[index] = @code[index]
         
     | 
| 
      
 108 
     | 
    
         
            +
                  hint
         
     | 
| 
      
 109 
     | 
    
         
            +
                end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
       108 
111 
     | 
    
         
             
                def define_stage(result = '')
         
     | 
| 
       109 
112 
     | 
    
         
             
                  if result == ('+' * LENGTH)
         
     | 
| 
       110 
113 
     | 
    
         
             
                    @finished = true
         
     | 
| 
         @@ -114,11 +117,6 @@ module Codebreaker 
     | 
|
| 
       114 
117 
     | 
    
         
             
                  end
         
     | 
| 
       115 
118 
     | 
    
         
             
                end
         
     | 
| 
       116 
119 
     | 
    
         | 
| 
       117 
     | 
    
         
            -
                def process_file(file_name)
         
     | 
| 
       118 
     | 
    
         
            -
                  return [] if !File.exist?(file_name) || File.zero?(file_name)
         
     | 
| 
       119 
     | 
    
         
            -
                  YAML.load_file(file_name)
         
     | 
| 
       120 
     | 
    
         
            -
                end
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
120 
     | 
    
         
             
                def verify(input)
         
     | 
| 
       123 
121 
     | 
    
         
             
                  msg = "Guesses must consist of #{LENGTH} digits from #{MIN} to #{MAX}"
         
     | 
| 
       124 
122 
     | 
    
         
             
                  raise(ArgumentError, msg) if !input.is_a?(String) || !input.match?(REGEXP)
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module Codebreaker
         
     | 
| 
      
 6 
     | 
    
         
            +
              module GameWriter
         
     | 
| 
      
 7 
     | 
    
         
            +
                private
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                FILE_NAME = 'scores.yml'.freeze
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def write(player)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  scores = process_file
         
     | 
| 
      
 13 
     | 
    
         
            +
                  scores << player
         
     | 
| 
      
 14 
     | 
    
         
            +
                  scores = scores.max_by(10, &:points)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  File.open(FILE_NAME, 'w') { |f| f.write scores.to_yaml }
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def process_file
         
     | 
| 
      
 19 
     | 
    
         
            +
                  return [] if !File.exist?(FILE_NAME) || File.zero?(FILE_NAME)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  YAML.load_file(FILE_NAME)
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/ep-codebreaker.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: ep-codebreaker
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.3. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.3.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Eugene Poberezhny
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2017-06- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-06-22 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -75,6 +75,7 @@ files: 
     | 
|
| 
       75 
75 
     | 
    
         
             
            - lib/ep-codebreaker.rb
         
     | 
| 
       76 
76 
     | 
    
         
             
            - lib/ep-codebreaker/console_app.rb
         
     | 
| 
       77 
77 
     | 
    
         
             
            - lib/ep-codebreaker/game.rb
         
     | 
| 
      
 78 
     | 
    
         
            +
            - lib/ep-codebreaker/game_writer.rb
         
     | 
| 
       78 
79 
     | 
    
         
             
            - lib/ep-codebreaker/messages.rb
         
     | 
| 
       79 
80 
     | 
    
         
             
            - lib/ep-codebreaker/player.rb
         
     | 
| 
       80 
81 
     | 
    
         
             
            - lib/ep-codebreaker/version.rb
         
     |