Class: Uur::ArgsParser

Inherits:
Object
  • Object
show all
Defined in:
lib/uur/args_parser.rb

Instance Method Summary collapse

Instance Method Details

#parse(args) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
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
60
61
62
63
64
65
66
# File 'lib/uur/args_parser.rb', line 6

def parse(args)
  options = {}

  OptionParser.new do |opts|
    opts.banner = "Usage: uur [options]"

    opts.separator ""
    opts.separator "Reports:"

    opts.on "-l", "--list", "List entries" do
      options[:print_list] = true
    end

    opts.on "-s", "--summary [daily|weekly|monthly|yearly|all]", "Print summary" do |value|
      options[:print_summary] = true
      options[:summary_interval] = value
    end

    opts.separator ""
    opts.separator "Filtering:"

    opts.on "-w", "--within today|yesterday|this-week|last-week|this-month|last-month|this-year|last-year", String, "Time period (default: today)" do |value|
      options[:within] = value
    end

    opts.separator ""
    opts.separator "Common options:"

    opts.on "-d", "--duration-format hours-minutes|hours-decimal", String, "Duration time format (default: hours-minutes)" do |value|
      options[:duration_format] = value
    end

    opts.separator ""
    opts.separator "Others:"

    opts.on_tail "-h", "--help", "Show this help message" do
      puts opts
      exit
    end

    opts.on_tail "--version", "Show version" do
      puts "uur version #{Uur::VERSION}"
      exit
    end

  end.parse!(args)

  options[:within         ] ||= "today" if options[:summary_interval].nil?
  options[:duration_format] ||= "hours-minutes"
  options[:print_list     ]   = true if !options[:print_list] && !options[:print_summary]

  set_default_summary_interval(options) if options[:print_summary] && options[:summary_interval].nil?

  if options[:within]
    time_mapper = TimeMapper.new(Time.now)
    options[:since] = time_mapper.since(options[:within])
    options[:to   ] = time_mapper.to(   options[:within])
  end

  options
end