lib/bookmaker/stats.rb in bookmaker-0.6.0 vs lib/bookmaker/stats.rb in bookmaker-0.7.0.pre3

- old
+ new

@@ -1,45 +1,114 @@ +class Fixnum + def day + self * (60 * 60 * 24) # seconds * hours * minutes + end + def ago + Time.now - self + end +end +require 'json' module Bookmaker class Stats attr_reader :root_dir def initialize(root_dir) @root_dir = root_dir + @files = Dir["#{root_dir}/text/**/[0-9]*.tex"] + @words = 0 + @progress = (File.exist?(log)) ? JSON.parse(File.open(log,'r').read).clone : {} end - def text - @text ||= html.text + def log + "#{root_dir}/.wordcount" end - def html - @html ||= Nokogiri::HTML(content) + def target + Bookmaker.config(@root_dir)['wordcount'] end - - def words - @words ||= text.split(" ").size + def now + Date.today.to_s end + def words + if @words == 0 + most_recent = @files.max_by {|f| File.mtime(f)} + if !@progress[now].nil? and File.mtime(log) > File.mtime(most_recent) + @progress[now] + else + detex = "/usr/texbin/detex" - def chapters - @chapters ||= html.css(".chapter").size + file = Tempfile.new('foo.tex') + file.write(text) + file.close + @progress[now] = `detex #{file.path}| wc -w`.to_i + file.unlink + # Do previous day's progress...if nil. + @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 images - @images ||= html.css("img").size + def lasttime + p = nil + @progress.keys.sort.each do |k| + break if k == now + p = k + end + p end - - def footnotes - @footnotes ||= html.css("p.footnote").size + def yesterday + @progress[lasttime] end - - def links - @links ||= html.css("[href^='http']").size + def today + @words - @progress[lasttime] end - - def code_blocks - @code_blocks ||= html.css("pre").size + def text + @text = nil + @text = @files.map{|f| File.open(f,'r').read}.join("\n\n\n") if @text.nil? end - - def content - @content ||= Parser::HTML.new(root_dir).content + def remaining + target - words end + + # def html + # @html ||= Nokogiri::HTML(content) + # end + + # def words + # @words ||= text.split(" ").size + # end + + # def chapters + # @chapters ||= html.css(".chapter").size + # end + + # def images + # @images ||= html.css("img").size + # end + + # def footnotes + # @footnotes ||= html.css("p.footnote").size + # end + + # def links + # @links ||= html.css("[href^='http']").size + # end + + # def code_blocks + # @code_blocks ||= html.css("pre").size + # end + + # def content + # @content ||= Parser::HTML.new(root_dir).content + # end end end