Class: Task
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Task
- Defined in:
- app/models/task.rb
Class Method Summary collapse
- .checked_out_by(user) ⇒ 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!(commit) ⇒ Object
- #committed? ⇒ Boolean
- #completed! ⇒ Object (also: #complete!)
- #completed? ⇒ Boolean
- #completed_during?(sprint) ⇒ Boolean
- #default_task? ⇒ Boolean
- #description ⇒ Object
- #letter ⇒ Object
- #manually_completed? ⇒ Boolean
- #open? ⇒ Boolean
- #released!(release) ⇒ Object
- #released? ⇒ Boolean
- #reopen! ⇒ Object
- #shorthand ⇒ Object
Class Method Details
.checked_out_by(user) ⇒ Object
69 70 71 |
# File 'app/models/task.rb', line 69 def checked_out_by(user) where(checked_out_by_id: user.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
73 74 75 76 77 78 |
# File 'app/models/task.rb', line 73 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
87 88 89 |
# File 'app/models/task.rb', line 87 def versions VestalVersions::Version.where(versioned_type: "Task", versioned_id: pluck(:id)) end |
.with_shorthand(shorthand) ⇒ Object
80 81 82 83 84 85 |
# File 'app/models/task.rb', line 80 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
183 184 185 |
# File 'app/models/task.rb', line 183 def check_in!(sprint) SprintTask.where(sprint_id: sprint.id, task_id: id).check_in! end |
#check_out!(sprint, user) ⇒ Object
179 180 181 |
# File 'app/models/task.rb', line 179 def check_out!(sprint, user) SprintTask.where(sprint_id: sprint.id, task_id: id).check_out!(user) end |
#checked_out?(sprint) ⇒ Boolean
171 172 173 |
# File 'app/models/task.rb', line 171 def checked_out?(sprint) SprintTask.where(sprint_id: sprint.id, task_id: id).checked_out.exists? end |
#checked_out_by_me?(sprint, user) ⇒ Boolean
175 176 177 |
# File 'app/models/task.rb', line 175 def checked_out_by_me?(sprint, user) SprintTask.where(sprint_id: sprint.id, task_id: id).checked_out_by(user).exists? end |
#committed!(commit) ⇒ Object
126 127 128 129 |
# File 'app/models/task.rb', line 126 def committed!(commit) update_column :first_commit_at, commit. unless committed? Houston.observer.fire "task:committed", self end |
#committed? ⇒ Boolean
131 132 133 |
# File 'app/models/task.rb', line 131 def committed? first_commit_at.present? end |
#completed! ⇒ Object Also known as: complete!
137 138 139 140 141 |
# File 'app/models/task.rb', line 137 def completed! return if completed? touch :completed_at Houston.observer.fire "task:completed", self end |
#completed? ⇒ Boolean
144 145 146 |
# File 'app/models/task.rb', line 144 def completed? completed_at.present? end |
#completed_during?(sprint) ⇒ Boolean
152 153 154 155 |
# File 'app/models/task.rb', line 152 def completed_during?(sprint) return false unless completed? completed_at < sprint.ends_at end |
#default_task? ⇒ Boolean
189 190 191 |
# File 'app/models/task.rb', line 189 def default_task? number == 1 && read_attribute(:description).nil? end |
#description ⇒ Object
104 105 106 |
# File 'app/models/task.rb', line 104 def description super || ticket.summary end |
#letter ⇒ Object
94 95 96 97 98 99 100 101 102 |
# File 'app/models/task.rb', line 94 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
148 149 150 |
# File 'app/models/task.rb', line 148 def manually_completed? completed? && !committed? && !released? end |
#open? ⇒ Boolean
165 166 167 |
# File 'app/models/task.rb', line 165 def open? !completed? end |
#released!(release) ⇒ Object
114 115 116 117 118 |
# File 'app/models/task.rb', line 114 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
120 121 122 |
# File 'app/models/task.rb', line 120 def released? first_release_at.present? end |
#reopen! ⇒ Object
159 160 161 162 163 |
# File 'app/models/task.rb', line 159 def reopen! return unless manually_completed? update_column :completed_at, nil Houston.observer.fire "task:reopened", self end |
#shorthand ⇒ Object
108 109 110 |
# File 'app/models/task.rb', line 108 def shorthand "#{ticket.number}#{letter}" end |