Class: WorkLog::Logger

Inherits:
Object
  • Object
show all
Defined in:
lib/work_log/logger.rb

Constant Summary collapse

HOME_PATH =
ENV['HOME']
CONFIGURATION_FILE =
HOME_PATH + "/.work_log_gem"
DEFAULT_LOGFILE =
HOME_PATH + "/work_log.yml"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ Logger

Returns a new instance of Logger.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/work_log/logger.rb', line 17

def initialize(args)
  action = args.shift
  load_config

  begin
    load
  rescue
    save
    load
  end

  time = args.empty? ? DateTime.now : DateTime.parse((Chronic.parse(args.join(' ')) || DateTime.now).to_s)

  puts '', ''

  if action == 'start' || action == 's'
    add "Work started", time
    print entries.last
  elsif action == 'end' || action == 'e'
    add "Work ended", time
    print entries.last
  elsif action == 'all' || action == 'a'
    entries.each {|e| print e }
  elsif action == 'week' || action == 'w'
    puts "Entries for this week:"
    entries.select{|entry| entry['time'].cwyear == Date.today.cwyear && entry['time'].cweek == Date.today.cweek }.each {|e| print e }
  elsif action == 'since'
    puts "Entries since #{args.join(' ')}"
    entries.select{|entry| entry['time'] > time }.each {|e| print e }
  elsif action == 'last'
    print entries.last
  elsif action == 'undo'
    removed_entry = entries.pop
    save
    puts "Removed the following entry:"
    print removed_entry
  else
    puts "Unknown arguments."
  end

  puts '', ''

end

Instance Attribute Details

#entriesObject

Returns the value of attribute entries.



11
12
13
# File 'lib/work_log/logger.rb', line 11

def entries
  @entries
end

#logfileObject

Returns the value of attribute logfile.



10
11
12
# File 'lib/work_log/logger.rb', line 10

def logfile
  @logfile
end

Instance Method Details

#add(message, time = DateTime.now) ⇒ Object



72
73
74
75
76
77
78
# File 'lib/work_log/logger.rb', line 72

def add(message, time = DateTime.now)
  @entries << {
    'time'    => time,
    'message' => message
  }
  save
end

#loadObject



80
81
82
83
84
85
# File 'lib/work_log/logger.rb', line 80

def load
  file_content = YAML.load_file(logfile)
  @entries = file_content && file_content['entries'] ? file_content['entries']: []
  @entries.each {|entry| entry['time'] = DateTime.parse entry['time'].to_s }
  @entries
end

#load_configObject



61
62
63
64
65
66
# File 'lib/work_log/logger.rb', line 61

def load_config
  return @logfile = DEFAULT_LOGFILE unless File.exist?(CONFIGURATION_FILE)

  config = YAML::load_file(CONFIGURATION_FILE)
  @logfile = config['logfile'] ? config['logfile'] : DEFAULT_LOGFILE
end


68
69
70
# File 'lib/work_log/logger.rb', line 68

def print(entry)
  puts "#{entry['time'].strftime("%a, %b %d %Y at %H:%M")} -> #{entry['message']}"
end

#saveObject



87
88
89
90
91
# File 'lib/work_log/logger.rb', line 87

def save
  File.open(logfile, 'w') do |file|
    file.write YAML.dump({'entries' => entries})
  end
end