50 lines
1.2 KiB
Ruby
50 lines
1.2 KiB
Ruby
usage 'wc'
|
|
summary 'word count of logs'
|
|
description 'Prints word count of log entries for Beeminder logging.'
|
|
|
|
require "sanitize"
|
|
|
|
module Nanoc::CLI::Commands
|
|
class WordCount < ::Nanoc::CLI::CommandRunner
|
|
def run
|
|
sites = %w{daily}
|
|
|
|
sites.each do |name|
|
|
site = load_site name
|
|
puts "compiling site (sorry)..."
|
|
site.compile
|
|
|
|
logs = site.items_by_date.select do |i|
|
|
i.reps.any? {|r| r.name == :wordcount}
|
|
end
|
|
|
|
total = total_practice = 0
|
|
logs.each do |log|
|
|
practice = words_in_content log, :wordcount
|
|
all_words = words_in_content log, :default
|
|
|
|
total += all_words
|
|
total_practice += practice
|
|
|
|
puts "#{log.identifier} -> #{practice} / #{all_words}"
|
|
end
|
|
puts "total: #{total_practice} / #{total}"
|
|
end
|
|
end
|
|
|
|
def words_in_content log, rep
|
|
content = log.rep_named(rep).compiled_content
|
|
stripped = strip content.dup.force_encoding("utf-8")
|
|
words = stripped.scan(/( \S+ )/x)
|
|
words.size
|
|
end
|
|
|
|
def strip content
|
|
Sanitize.clean(content,
|
|
:remove_contents => %w{blockquote})
|
|
end
|
|
end
|
|
end
|
|
|
|
runner Nanoc::CLI::Commands::WordCount
|