Sha256: 4f199d2da21a5366f6ab9e31c43e2ce7e23bfb9372b022bf8db84658e6c89ee0

Contents?: true

Size: 1.82 KB

Versions: 4

Compression:

Stored size: 1.82 KB

Contents

class Integer
  def day
    self * (60 * 60 * 24) # seconds * hours * minutes
  end
  def ago
    Time.now - self
  end
end
require 'json'
module Verku
  class Stats
    attr_reader :root_dir

    def initialize(root_dir)
      @root_dir = root_dir
      @files = Dir["#{root_dir}/text/**/[0-9]*.{md,markdown,mkd}"]
      @words = 0
      @progress = (File.exist?(log)) ? JSON.parse(File.open(log,'r').read).clone : {}
    end

    def log
      "#{root_dir}/.kalkulado"
    end

    def target
      Verku.config(@root_dir)['wordcount'] || 1000
    end
    def now
      Date.today.to_s
    end
    def words
      if @words == 0
        File.open(log,'w').write( JSON.generate(Hash.new) ) unless File.exist?(log)

        most_recent = @files.max_by {|f| File.mtime(f)}
        if !@progress[now].nil? and File.mtime(log) > File.mtime(most_recent)
          @progress[now]
        else
          @progress[now] = text.split(/\s/).keep_if { |word| word.length > 0 }.count
          @progress[Date.yesterday.to_s] = @progress[now] if @progress.keys.count == 1
        end
      end
      if (lasttime != Date.yesterday.to_s)
        # Update the record.
        n = lasttime
        w = @progress[lasttime]
        n.upto(Date.yesterday.to_s) do |k|
          puts "Upto #{k}: @progress[#{k}] = #{w}"
          @progress[k] = w
        end
      end
      File.open(log,'w').write( JSON.generate(@progress) )
      @words = @progress[now]
    end
    def lasttime
      p = nil
      @progress.keys.sort.each do |k|
        break if k == now
        p = k
      end
      p
    end
    def yesterday
      @progress[lasttime]
    end
    def today
      @words - @progress[lasttime]
    end
    def text
      @text = nil
      @text = @files.map{|f| File.open(f,'r').read}.join("\n\n\n") if @text.nil?
    end
    def remaining
      target - words
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
verku-0.16.10 lib/verku/stats.rb
verku-0.16.9 lib/verku/stats.rb
verku-0.16.8 lib/verku/stats.rb
verku-0.16.7 lib/verku/stats.rb