Class: Durt::Issue

Inherits:
ApplicationRecord show all
Defined in:
lib/durt/issue.rb

Instance Method Summary collapse

Methods inherited from ApplicationRecord

#active!

Instance Method Details

#estimation_ratioObject



39
40
41
42
43
# File 'lib/durt/issue.rb', line 39

def estimation_ratio
  return Float::INFINITY if total_tracked_time.zero?

  estimate.to_f / total_tracked_time
end

#estimation_result_labelObject



71
72
73
74
75
76
# File 'lib/durt/issue.rb', line 71

def estimation_result_label
  return 'Underestimated' if underestimated?
  return 'Overestimated' if overestimated?

  'Who are you?'
end

#labelObject



78
79
80
# File 'lib/durt/issue.rb', line 78

def label
  "[#{key}]"
end

#overestimated?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/durt/issue.rb', line 45

def overestimated?
  estimation_ratio > 1
end

#pluginObject



27
28
29
# File 'lib/durt/issue.rb', line 27

def plugin
  project.plugins.find { |p| p.plugin_name == source }
end

#puts_statsObject



67
68
69
# File 'lib/durt/issue.rb', line 67

def puts_stats
  puts stats
end

#start_tracking!Object



18
19
20
21
22
23
24
25
# File 'lib/durt/issue.rb', line 18

def start_tracking!
  if tracking?
    puts 'Already tracking'
    return sessions.tracking.last
  end

  sessions.create(open_at: Time.now)
end

#statsObject

Presenters



55
56
57
58
59
60
61
62
63
64
65
# File 'lib/durt/issue.rb', line 55

def stats
  <<~MSG

    -- #{self} --
    Estimated: #{ChronicDuration.output(estimate || 0, format: :long)}.
    Tracked: #{ChronicDuration.output(total_tracked_time, format: :long)}.
    Estimation ratio: #{estimation_ratio} (#{estimation_result_label})
    -----------------------------------

  MSG
end

#stop_tracking!Object



31
32
33
# File 'lib/durt/issue.rb', line 31

def stop_tracking!
  sessions.tracking.update_all(closed_at: Time.now)
end

#to_sObject



82
83
84
# File 'lib/durt/issue.rb', line 82

def to_s
  "#{label} #{summary}"
end

#total_tracked_timeObject



35
36
37
# File 'lib/durt/issue.rb', line 35

def total_tracked_time
  sessions.map(&:tracked_time).sum
end

#tracking?Boolean

Returns:

  • (Boolean)


14
15
16
# File 'lib/durt/issue.rb', line 14

def tracking?
  !sessions.tracking.empty?
end

#underestimated?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/durt/issue.rb', line 49

def underestimated?
  estimation_ratio < 1
end