Class: WorkGuide::Guide

Inherits:
Object
  • Object
show all
Defined in:
lib/work_guide/guide.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(description:, cycle: 'daily', done_at: nil, priority: 'medium') ⇒ Guide

Returns a new instance of Guide.



31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/work_guide/guide.rb', line 31

def initialize(
      description: ,
      cycle: 'daily',
      done_at: nil,
      priority: 'medium'
    )
  @description = description
  @cycle = cycle
  if done_at
    @done_at = Time.parse(done_at)
  end
  @priority = priority
end

Instance Attribute Details

#cycleObject

Returns the value of attribute cycle.



6
7
8
# File 'lib/work_guide/guide.rb', line 6

def cycle
  @cycle
end

#descriptionObject

Returns the value of attribute description.



6
7
8
# File 'lib/work_guide/guide.rb', line 6

def description
  @description
end

#done_atObject

Returns the value of attribute done_at.



6
7
8
# File 'lib/work_guide/guide.rb', line 6

def done_at
  @done_at
end

#priorityObject

Returns the value of attribute priority.



6
7
8
# File 'lib/work_guide/guide.rb', line 6

def priority
  @priority
end

Class Method Details

.allObject



16
17
18
# File 'lib/work_guide/guide.rb', line 16

def all
  @all ||= Storage.new(:guide).load.map { |h| new(h.symbolize_keys) }
end

.create(args) ⇒ Object



9
10
11
12
13
14
# File 'lib/work_guide/guide.rb', line 9

def create(args)
  guide = new(args)
  all << guide
  save
  guide
end

.saveObject



20
21
22
# File 'lib/work_guide/guide.rb', line 20

def save
  Storage.new(:guide).store(to_json)
end

Instance Method Details

#priority_rateObject



64
65
66
67
68
69
70
71
# File 'lib/work_guide/guide.rb', line 64

def priority_rate
  case priority
  when 'high'  ; 1
  when 'medium'; 2
  when 'low'   ; 3
  else         ; 9
  end
end

#should_do?Boolean

Returns:

  • (Boolean)


45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/work_guide/guide.rb', line 45

def should_do?
  if done_at
    case cycle
    when 'hourly'
      1.hour.since(done_at).beginning_of_hour.past?
    when 'daily'
      1.day.since(done_at).beginning_of_day.past?
    when 'weekly'
      1.week.since(done_at).beginning_of_day.past?
    when 'monthly'
      1.month.since(done_at).beginning_of_month.past?
    else
      raise ArgumentError, "Unknown cycle: #{cycle}"
    end
  else
    true
  end
end

#to_hObject



73
74
75
76
77
78
79
80
# File 'lib/work_guide/guide.rb', line 73

def to_h
  {
    description: description,
    cycle: cycle,
    done_at: done_at,
    priority: priority,
  }
end

#to_sObject



82
83
84
# File 'lib/work_guide/guide.rb', line 82

def to_s
  "[#{cycle}/#{priority}] #{description} (#{done_at || '--'})"
end