module BenTrackerGem

Constants

BOOK_HISTORY
HISTORY
URL_POST
VALID_CATS
VERSION

Public Class Methods

book_diary(begin_date = "last week", end_date = "today") click to toggle source
# File lib/bentrackergem.rb, line 93
def self.book_diary(begin_date = "last week", end_date = "today")
   date_range_visual("title", 
                    Chronic.parse(begin_date).to_s[0..9],
                    Chronic.parse(end_date).to_s[0..9],
                    1)
end
date_range(begin_date, end_date, book_flag = 0) click to toggle source
# File lib/bentrackergem.rb, line 62
def self.date_range(begin_date, end_date, book_flag = 0)
  begin_date, end_date, hold = valid_format(begin_date), valid_format(end_date), []
  all, key = get_history, "day_of" if book_flag == 0
  all, key = get_book_history, "created_at" if book_flag == 1

  all.select { |summary| summary[key] >= begin_date && 
                                         summary[key] <= end_date }.
              map { |summary| day_stats(summary[key], book_flag) }.
              sort_by { |summary| summary[key.to_sym] }
end
date_range_visual(req, begin_date, end_date, book_flag = 0, sort = 0) click to toggle source
# File lib/bentrackergem.rb, line 73
def self.date_range_visual(req, begin_date, end_date, book_flag = 0, sort = 0)
  raise ArgumentError, "must select valid category" if !VALID_CATS.include? req

  filter, key = date_range(begin_date, end_date), "day_of".to_sym if book_flag == 0
  filter, key = date_range(begin_date, end_date, 1), "created_at".to_sym if book_flag == 1
  filter = filter.reverse if sort == 1
  
  filter.each do |visi|
    puts visi[key.to_sym] + ". " + visi[req.to_sym].to_s if book_flag == 0
    puts visi[key.to_sym] + ". " + visi[:title].to_s + " by " +  visi[:author].to_s if book_flag == 1
  end
  "COMPLETE"
end
day_stats(date, book_flag = 0) click to toggle source
# File lib/bentrackergem.rb, line 51
def self.day_stats(date, book_flag = 0)
  date = valid_format(date)
  all, key = get_history, "day_of" if book_flag == 0
  all, key = get_book_history, "created_at" if book_flag == 1
  all.each do |summary|
    if summary[key] == date
      return filter_hash(summary, book_flag)
    end
  end
end
diary(begin_date = "last week", end_date = "today") click to toggle source
# File lib/bentrackergem.rb, line 87
def self.diary(begin_date = "last week", end_date = "today")
  date_range_visual("message", 
                    Chronic.parse(begin_date).to_s[0..9],
                    Chronic.parse(end_date).to_s[0..9])
end
filter_hash(hash, book_flag = 0) click to toggle source
# File lib/bentrackergem.rb, line 37
def self.filter_hash(hash, book_flag = 0)
  if book_flag == 0
    return {:day_of => hash["day_of"],
            :message => hash["message"],
            :code => hash["code"],
            :fitness => hash["fitness"]}
  else
    return {:created_at => hash["created_at"],
            :title => hash["title"],  
            :author => hash["author"],
            :time_reading => hash["time_reading"]}
  end
end
get_book_history() click to toggle source
# File lib/bentrackergem.rb, line 20
def self.get_book_history
  books = JSON.parse(RestClient.get BOOK_HISTORY).to_h["books"]
  books.each do |book|
    book["created_at"] = book["created_at"][0..9]
  end
  return books
end
get_history() click to toggle source
# File lib/bentrackergem.rb, line 16
def self.get_history
  JSON.parse(RestClient.get HISTORY).to_h["days"]
end
post_message(message) click to toggle source
# File lib/bentrackergem.rb, line 100
def self.post_message(message)
  raise ArgumentError, "must enter message as String" if !message.is_a? String

  # Must have valid credentials as environment variables
  user = ENV['bg_user']
  pass = ENV['bg_pass']
  curl = "curl -d message='#{message}' -u #{user}:#{pass} #{URL_POST}"
  system(curl)
end
valid_format(date) click to toggle source
# File lib/bentrackergem.rb, line 28
def self.valid_format(date)
  date = DateTime.parse(date, "%Y-%m-%d").to_s[0..9]
  now = Time.now.to_s[0..9]
  if date > now || date < "2014-09-30"
    raise ArgumentError, "Date outside range (data begins 2014-09-30)"
  end
  date
end