Class: Task
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Task
- Defined in:
- app/models/task.rb
Class Method Summary collapse
- .checked_out_by(user, during: nil) ⇒ Object
- .committed ⇒ Object
- .completed ⇒ Object
- .completed_during(sprint) ⇒ Object
- .default ⇒ Object
- .find_by_project_and_shorthand(project_slug, shorthand) ⇒ Object
- .in_current_sprint ⇒ Object
- .lettered(*letters) ⇒ Object
- .numbered(*numbers) ⇒ Object
- .open ⇒ Object
- .released ⇒ Object
- .uncommitted ⇒ Object
- .unreleased ⇒ Object
- .versions ⇒ Object
- .with_shorthand(shorthand) ⇒ Object
Instance Method Summary collapse
- #check_in!(sprint) ⇒ Object
- #check_out!(sprint, user) ⇒ Object
- #checked_out?(sprint) ⇒ Boolean
- #checked_out_by_me?(sprint, user) ⇒ Boolean
- #committed? ⇒ Boolean
- #completed! ⇒ Object (also: #complete!)
- #completed? ⇒ Boolean
- #completed_during?(sprint) ⇒ Boolean
- #default_task? ⇒ Boolean
- #description ⇒ Object
- #letter ⇒ Object
- #manually_completed? ⇒ Boolean
- #mark_committed!(commit) ⇒ Object
- #open? ⇒ Boolean
- #released!(release) ⇒ Object
- #released? ⇒ Boolean
- #reopen! ⇒ Object
- #shorthand ⇒ Object
Class Method Details
.checked_out_by(user, during: nil) ⇒ Object
69 70 71 72 |
# File 'app/models/task.rb', line 69 def checked_out_by(user, during: nil) raise ArgumentError, "Please specify :during which Sprint" unless during all.merge(SprintTask.where(sprint_id: during.id)) end |
.committed ⇒ Object
45 46 47 |
# File 'app/models/task.rb', line 45 def committed where(arel_table[:first_commit_at].not_eq(nil)) end |
.completed ⇒ Object
57 58 59 |
# File 'app/models/task.rb', line 57 def completed where(arel_table[:completed_at].not_eq(nil)) end |
.completed_during(sprint) ⇒ Object
61 62 63 |
# File 'app/models/task.rb', line 61 def completed_during(sprint) where(arel_table[:completed_at].in(sprint.range).or(arel_table[:first_commit_at].in(sprint.range))) end |
.default ⇒ Object
37 38 39 |
# File 'app/models/task.rb', line 37 def default where description: nil end |
.find_by_project_and_shorthand(project_slug, shorthand) ⇒ Object
74 75 76 77 78 79 |
# File 'app/models/task.rb', line 74 def find_by_project_and_shorthand(project_slug, shorthand) with_shorthand(shorthand) .merge(Ticket.joins(:project) .where(Project.arel_table[:slug].eq(project_slug))) .first end |
.in_current_sprint ⇒ Object
65 66 67 |
# File 'app/models/task.rb', line 65 def in_current_sprint joins(:sprint).where("sprints.end_date >= current_date") end |
.lettered(*letters) ⇒ Object
33 34 35 |
# File 'app/models/task.rb', line 33 def lettered(*letters) numbered letters.flatten.map { |letter| to_number(letter) } end |
.numbered(*numbers) ⇒ Object
29 30 31 |
# File 'app/models/task.rb', line 29 def numbered(*numbers) where number: numbers.flatten end |
.open ⇒ Object
25 26 27 |
# File 'app/models/task.rb', line 25 def open where completed_at: nil end |
.released ⇒ Object
53 54 55 |
# File 'app/models/task.rb', line 53 def released where(arel_table[:first_release_at].not_eq(nil)) end |
.uncommitted ⇒ Object
41 42 43 |
# File 'app/models/task.rb', line 41 def uncommitted where first_commit_at: nil end |
.unreleased ⇒ Object
49 50 51 |
# File 'app/models/task.rb', line 49 def unreleased where first_release_at: nil end |
.versions ⇒ Object
88 89 90 |
# File 'app/models/task.rb', line 88 def versions VestalVersions::Version.where(versioned_type: "Task", versioned_id: pluck(:id)) end |
.with_shorthand(shorthand) ⇒ Object
81 82 83 84 85 86 |
# File 'app/models/task.rb', line 81 def with_shorthand(shorthand) _, ticket_number, letter = shorthand.split /(\d+)([a-z]+)/ joins(:ticket) .where(Ticket.arel_table[:number].eq(ticket_number)) .lettered(letter) end |
Instance Method Details
#check_in!(sprint) ⇒ Object
184 185 186 |
# File 'app/models/task.rb', line 184 def check_in!(sprint) SprintTask.where(sprint_id: sprint.id, task_id: id).check_in! end |
#check_out!(sprint, user) ⇒ Object
180 181 182 |
# File 'app/models/task.rb', line 180 def check_out!(sprint, user) SprintTask.where(sprint_id: sprint.id, task_id: id).check_out!(user) end |
#checked_out?(sprint) ⇒ Boolean
172 173 174 |
# File 'app/models/task.rb', line 172 def checked_out?(sprint) SprintTask.where(sprint_id: sprint.id, task_id: id).checked_out.exists? end |
#checked_out_by_me?(sprint, user) ⇒ Boolean
176 177 178 |
# File 'app/models/task.rb', line 176 def checked_out_by_me?(sprint, user) SprintTask.where(sprint_id: sprint.id, task_id: id).checked_out_by(user).exists? end |
#committed? ⇒ Boolean
132 133 134 |
# File 'app/models/task.rb', line 132 def committed? first_commit_at.present? end |
#completed! ⇒ Object Also known as: complete!
138 139 140 141 142 |
# File 'app/models/task.rb', line 138 def completed! return if completed? touch :completed_at Houston.observer.fire "task:completed", self end |
#completed? ⇒ Boolean
145 146 147 |
# File 'app/models/task.rb', line 145 def completed? completed_at.present? end |
#completed_during?(sprint) ⇒ Boolean
153 154 155 156 |
# File 'app/models/task.rb', line 153 def completed_during?(sprint) return false unless completed? completed_at < sprint.ends_at end |
#default_task? ⇒ Boolean
190 191 192 |
# File 'app/models/task.rb', line 190 def default_task? number == 1 && read_attribute(:description).nil? end |
#description ⇒ Object
105 106 107 |
# File 'app/models/task.rb', line 105 def description super || ticket.summary end |
#letter ⇒ Object
95 96 97 98 99 100 101 102 103 |
# File 'app/models/task.rb', line 95 def letter bytes = [] remaining = number while remaining > 0 bytes.unshift (remaining - 1) % 26 + 97 remaining = (remaining - 1) / 26 end bytes.pack "c*" end |
#manually_completed? ⇒ Boolean
149 150 151 |
# File 'app/models/task.rb', line 149 def manually_completed? completed? && !committed? && !released? end |
#mark_committed!(commit) ⇒ Object
127 128 129 130 |
# File 'app/models/task.rb', line 127 def mark_committed!(commit) update_column :first_commit_at, commit. unless committed? Houston.observer.fire "task:committed", self end |
#open? ⇒ Boolean
166 167 168 |
# File 'app/models/task.rb', line 166 def open? !completed? end |
#released!(release) ⇒ Object
115 116 117 118 119 |
# File 'app/models/task.rb', line 115 def released!(release) self.releases << release unless releases.exists?(release.id) update_column :first_release_at, release.created_at unless released? Houston.observer.fire "task:released", self end |
#released? ⇒ Boolean
121 122 123 |
# File 'app/models/task.rb', line 121 def released? first_release_at.present? end |
#reopen! ⇒ Object
160 161 162 163 164 |
# File 'app/models/task.rb', line 160 def reopen! return unless manually_completed? update_column :completed_at, nil Houston.observer.fire "task:reopened", self end |
#shorthand ⇒ Object
109 110 111 |
# File 'app/models/task.rb', line 109 def shorthand "#{ticket.number}#{letter}" end |