-
Notifications
You must be signed in to change notification settings - Fork 1
/
issue.rb
111 lines (87 loc) · 2.95 KB
/
issue.rb
1
2
3
4
5
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
require 'active_record'
require 'wlog/domain/log_entry'
require 'wlog/domain/timelog_helper'
require 'wlog/domain/sys_config'
require 'wlog/domain/helpers'
module Wlog
# This aggregates log entries. The total time spent on this issue is
# calculated from checking out said log entries.
# @author Simon Symeonidis
class Issue < ActiveRecord::Base
has_many :log_entries
StatusNew = 0
StatusStarted = 1
StatusFinished = 2
StatusArchived = 3
# Anything which is not archived (eg: new, started work, finished)
def self.find_not_archived; where("status NOT IN (?)", StatusArchived) end
# Log the seconds into the issue
def log_time(sec)
seconds += sec
save
end
def to_s
@strmaker = SysConfig.string_decorator
"#{@strmaker.yellow('Issue')} ##{id}#{$/}"\
" #{@strmaker.blue('Reported')} : #{created_at.asctime}#{$/}"\
" #{@strmaker.blue('Due')} : #{due_date.asctime}#{$/}"\
" #{@strmaker.blue('Entries')} : TODO #{$/}"\
" #{@strmaker.blue('Status')} : #{Statuses[@status]}#{$/}"\
" #{@strmaker.blue('Time')} : #{TimelogHelper.time_to_s(timelog)}#{$/}"\
"#{$/}"\
"#{@strmaker.yellow('Summary')} #{$/}"\
" #{description}#{$/ + $/}"\
"#{@strmaker.yellow('Description')} #{$/}"\
" #{Helpers.break_string(long_description, 80)}#{$/ + $/}"
end
# Mark issue as started
def mark_started!; self.status = 0 end
# Mark the issue as working
def mark_working!; self.status = 1 end
# Mark the issue as finished
def mark_finished!; self.status = 2 end
# Archive the issue
def archive!; self.status = 3 end
# Get the status as a string
def status_s; Statuses[status] end
# # [String] Description of the issue at hand
# attr_accessor :description
# # A longer description that can provide more details as opposed to a simple
# # title as suggested by @description.
# attr_accessor :long_description
# # [Time] The due date of the issue
# attr_accessor :due_date
#
# # [Time] The reported date of the issue
# attr_accessor :reported_date
#
# # [Array<LogEntry>] an array containing the log entries that are specific
# # to this issue
# attr_accessor :log_entries
# # [Fixnum] is the identifier of this object
# attr_accessor :id
# # [Fixnum] Status of the current issue (0 is for not started, 1 working on,
# # 2 for finished)
# attr_accessor :status
# # The seconds that you have wasted your life on in order to get something
# # done
# attr_accessor :seconds
# # The database handle for this AR
# attr_accessor :db
private
Statuses = {
StatusNew => "new",
StatusStarted => "started work",
StatusFinished => "finished",
StatusArchived => "archived"}
private_class_method
# def self.generic_find_all(db, sql)
# arr = Array.new
# db.execute(sql).each do |row|
# issue = Issue.new(db)
# issue.quick_assign! row
# arr.push issue
# end
# arr end
end # class Issue
end # module Wlog