Class: Teletype::Stats
- Inherits:
-
Object
- Object
- Teletype::Stats
- Defined in:
- lib/teletype/stats.rb
Overview
Stats keep track of hit/miss rate for pair of keys. It also has suggestions for keys that need more practice.
Defined Under Namespace
Classes: Pair
Instance Method Summary collapse
- #hit!(key) ⇒ Object
-
#initialize(profile, text) ⇒ Stats
constructor
A new instance of Stats.
- #load(text) ⇒ Object
- #lookup(key) ⇒ Object
- #miss!(key) ⇒ Object
- #rankings ⇒ Object
- #save ⇒ Object
- #suggestions ⇒ Object
Constructor Details
#initialize(profile, text) ⇒ Stats
Returns a new instance of Stats.
7 8 9 10 11 12 |
# File 'lib/teletype/stats.rb', line 7 def initialize(profile, text) @file = File.join(profile, 'stats') @previous = nil @pairs = {} load(text) end |
Instance Method Details
#hit!(key) ⇒ Object
30 31 32 |
# File 'lib/teletype/stats.rb', line 30 def hit!(key) lookup(key)&.hit! end |
#load(text) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/teletype/stats.rb', line 14 def load(text) return unless File.exist?(@file) File.readlines(@file).each do |line| keys, hit, miss = line.split("\t") @pairs[keys] = Pair.new(keys, hit: Integer(hit), miss: Integer(miss), available: text.scan(keys).count.positive?) end end |
#lookup(key) ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/teletype/stats.rb', line 38 def lookup(key) current = key.downcase keys = "#{@previous}#{current}" @previous = current return if keys.strip.length < 2 @pairs[keys] ||= Pair.new(keys) end |
#miss!(key) ⇒ Object
34 35 36 |
# File 'lib/teletype/stats.rb', line 34 def miss!(key) lookup(key)&.miss! end |
#rankings ⇒ Object
51 52 53 |
# File 'lib/teletype/stats.rb', line 51 def rankings @pairs.values.select(&:available).sort.first(10).map(&:to_s).join(' ') end |
#save ⇒ Object
26 27 28 |
# File 'lib/teletype/stats.rb', line 26 def save File.write(@file, @pairs.map { |k, p| [k, p.hit, p.miss].join("\t") }.join("\n")) end |
#suggestions ⇒ Object
47 48 49 |
# File 'lib/teletype/stats.rb', line 47 def suggestions @pairs.values.select(&:available).select(&:inefficient?).sort.map(&:keys) end |