Created
June 17, 2013 17:47
-
-
Save cfcosta/5798725 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
require 'fileutils' | |
require 'rubygems' | |
require 'sqlite3' | |
class WeightTracker | |
def initialize | |
@db_file = File.expand_path("~/.wt.db") | |
end | |
def setup | |
db.execute <<-SQL | |
create table if not exists weights ( | |
time datetime, | |
weight float | |
) | |
SQL | |
end | |
def teardown | |
FileUtils.cp(@db_file, @db_file + ".bkp.#{Date.today}") | |
FileUtils.rm(@db_file) | |
end | |
def insert(time, weight) | |
db.execute("insert into weights values(?, ?)", [time.to_s, weight]) | |
end | |
def averages | |
db.execute("select date(time), avg(weight) from weights group by date(time) order by date(time)") | |
end | |
private | |
def db | |
@db ||= SQLite3::Database.new(@db_file) | |
end | |
end | |
class ConsoleAverageWeightRenderer | |
def initialize(data) | |
@data = data | |
end | |
def render | |
puts "-" * 30 | |
older_weight = 0 | |
@data.each do |date, weight| | |
pretty_weight = "% 4.1f" % weight | |
if weight > older_weight | |
pretty_weight = red(pretty_weight) | |
else | |
pretty_weight = green(pretty_weight) | |
end | |
older_weight = weight | |
puts "| %s %s | %s |" % [date, " " * 6, pretty_weight] | |
end | |
puts "-" * 30 | |
end | |
private | |
def green(str) "\e[32m#{str}\e[0m" end | |
def red(str) "\e[31m#{str}\e[0m" end | |
end | |
tracker = WeightTracker.new | |
case ARGV[0] | |
when 'setup' | |
tracker.setup | |
puts "Setup ran correctly." | |
when 'teardown' | |
tracker.teardown | |
puts "Teardown ran correctly." | |
when 'insert' | |
value = Float(ARGV[1].to_s) | |
tracker.insert(DateTime.now, value) | |
puts "Weight #{value} inserted for time #{DateTime.now}! Keep up the good work!" | |
when 'averages' | |
ConsoleAverageWeightRenderer.new(tracker.averages).render | |
else | |
puts "No idea what you mean by that dude" | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment