Class: Teletype::Stats
- Inherits:
-
Object
- Object
- Teletype::Stats
- Defined in:
- lib/teletype/stats.rb
Overview
Stats keep track of hit/miss rate for each key and suggests a key that needs more practice.
Defined Under Namespace
Classes: Pair
Instance Method Summary collapse
- #file ⇒ Object
- #hit!(key) ⇒ Object
-
#initialize(text) ⇒ Stats
constructor
A new instance of Stats.
- #load(text) ⇒ Object
- #lookup(key) ⇒ Object
- #miss!(key) ⇒ Object
- #rankings ⇒ Object
- #save ⇒ Object
- #suggestions(_lines) ⇒ Object
Constructor Details
#initialize(text) ⇒ Stats
Returns a new instance of Stats.
6 7 8 9 10 |
# File 'lib/teletype/stats.rb', line 6 def initialize(text) @previous = nil @pairs = {} load(text) end |
Instance Method Details
#file ⇒ Object
28 29 30 |
# File 'lib/teletype/stats.rb', line 28 def file File.join(Dir.home, '.teletype-stats') end |
#hit!(key) ⇒ Object
32 33 34 |
# File 'lib/teletype/stats.rb', line 32 def hit!(key) lookup(key)&.hit! end |
#load(text) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/teletype/stats.rb', line 12 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
40 41 42 43 44 45 46 47 |
# File 'lib/teletype/stats.rb', line 40 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
36 37 38 |
# File 'lib/teletype/stats.rb', line 36 def miss!(key) lookup(key)&.miss! end |
#rankings ⇒ Object
53 54 55 |
# File 'lib/teletype/stats.rb', line 53 def rankings @pairs.values.select(&:available).sort.first(10).map(&:to_s).join(' ') end |
#save ⇒ Object
24 25 26 |
# File 'lib/teletype/stats.rb', line 24 def save File.write(file, @pairs.map { |k, p| [k, p.hit, p.miss].join("\t") }.join("\n")) end |
#suggestions(_lines) ⇒ Object
49 50 51 |
# File 'lib/teletype/stats.rb', line 49 def suggestions(_lines) @pairs.values.select(&:available).select(&:inefficient?).sort.map(&:keys) end |