Class: Release
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Release
- Defined in:
- app/models/release.rb
Instance Attribute Summary collapse
-
#commit_not_found_error_message ⇒ Object
readonly
Returns the value of attribute commit_not_found_error_message.
Class Method Summary collapse
- .after(time) ⇒ Object
- .before(time) ⇒ Object
- .earliest ⇒ Object
- .for_deploy(deploy) ⇒ Object
- .for_projects(*projects) ⇒ Object
- .latest ⇒ Object
- .most_recent ⇒ Object
- .most_recent_commit ⇒ Object
- .to_environment(environment_name) ⇒ Object (also: to)
- .with_message ⇒ Object
Instance Method Summary collapse
- #antecedents ⇒ Object
- #build_changes_from_commits ⇒ Object
- #can_read_commits? ⇒ Boolean
- #commit0 ⇒ Object
- #commit0=(sha) ⇒ Object
- #commit1 ⇒ Object
- #commit1=(sha) ⇒ Object
- #environment_name=(value) ⇒ Object
- #ignore? ⇒ Boolean
- #load_commits! ⇒ Object
- #load_tickets! ⇒ Object
- #message=(value) ⇒ Object
- #name ⇒ Object
- #notification_recipients ⇒ Object
- #release_changes ⇒ Object
- #release_changes=(changes) ⇒ Object
- #release_changes_attributes=(params) ⇒ Object
- #release_date ⇒ Object (also: #date)
- #released_at ⇒ Object
Instance Attribute Details
#commit_not_found_error_message ⇒ Object (readonly)
Returns the value of attribute commit_not_found_error_message.
112 113 114 |
# File 'app/models/release.rb', line 112 def @commit_not_found_error_message end |
Class Method Details
.after(time) ⇒ Object
53 54 55 56 |
# File 'app/models/release.rb', line 53 def after(time) return all if time.nil? where(arel_table[:created_at].gt(time)) end |
.before(time) ⇒ Object
48 49 50 51 |
# File 'app/models/release.rb', line 48 def before(time) return all if time.nil? where(arel_table[:created_at].lt(time)) end |
.earliest ⇒ Object
62 63 64 |
# File 'app/models/release.rb', line 62 def earliest last end |
.for_deploy(deploy) ⇒ Object
39 40 41 |
# File 'app/models/release.rb', line 39 def for_deploy(deploy) where(deploy_id: deploy.id) end |
.for_projects(*projects) ⇒ Object
34 35 36 37 |
# File 'app/models/release.rb', line 34 def for_projects(*projects) ids = projects.flatten.map { |project| project.is_a?(Project) ? project.id : project } where(project_id: ids) end |
.latest ⇒ Object
58 59 60 |
# File 'app/models/release.rb', line 58 def latest first end |
.most_recent ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'app/models/release.rb', line 70 def most_recent joins <<-SQL INNER JOIN ( SELECT project_id, environment_name, MAX(created_at) AS created_at FROM releases GROUP BY project_id, environment_name ) AS most_recent_releases ON releases.project_id=most_recent_releases.project_id AND releases.environment_name=most_recent_releases.environment_name AND releases.created_at=most_recent_releases.created_at SQL end |
.most_recent_commit ⇒ Object
43 44 45 46 |
# File 'app/models/release.rb', line 43 def most_recent_commit release = where(arel_table[:commit1].not_eq("")).first release ? release.commit1 : Houston::NULL_GIT_COMMIT end |
.to_environment(environment_name) ⇒ Object Also known as: to
29 30 31 |
# File 'app/models/release.rb', line 29 def to_environment(environment_name) where(environment_name: environment_name) end |
.with_message ⇒ Object
66 67 68 |
# File 'app/models/release.rb', line 66 def where arel_table[:message].not_eq("") end |
Instance Method Details
#antecedents ⇒ Object
167 168 169 170 171 172 |
# File 'app/models/release.rb', line 167 def antecedents @antecedents ||= (tickets.map(&:antecedents) + commits.map(&:antecedents)) .flatten .uniq .sort end |
#build_changes_from_commits ⇒ Object
151 152 153 154 155 |
# File 'app/models/release.rb', line 151 def build_changes_from_commits self.release_changes = commits .map { |commit| ReleaseChange.from_commit(self, commit) } .reject { |change| change.tag.nil? } end |
#can_read_commits? ⇒ Boolean
102 103 104 |
# File 'app/models/release.rb', line 102 def can_read_commits? (commit_before.present? || commit0 == Houston::NULL_GIT_COMMIT) && commit_after.present? end |
#commit0 ⇒ Object
86 87 88 |
# File 'app/models/release.rb', line 86 def commit0 super || commit_before.try(:sha) end |
#commit0=(sha) ⇒ Object
90 91 92 |
# File 'app/models/release.rb', line 90 def commit0=(sha) super; self.commit_before = identify_commit(sha) end |
#commit1 ⇒ Object
94 95 96 |
# File 'app/models/release.rb', line 94 def commit1 super || commit_after.try(:sha) end |
#commit1=(sha) ⇒ Object
98 99 100 |
# File 'app/models/release.rb', line 98 def commit1=(sha) super; self.commit_after = identify_commit(sha) end |
#environment_name=(value) ⇒ Object
106 107 108 |
# File 'app/models/release.rb', line 106 def environment_name=(value) super value.downcase end |
#ignore? ⇒ Boolean
176 177 178 |
# File 'app/models/release.rb', line 176 def ignore? !project.show_release_notes_for?(environment_name) end |
#load_commits! ⇒ Object
157 158 159 |
# File 'app/models/release.rb', line 157 def load_commits! self.commits = project.commits.between(commit_before, commit_after) end |
#load_tickets! ⇒ Object
161 162 163 |
# File 'app/models/release.rb', line 161 def load_tickets! self.tickets = project.tickets.mentioned_by_commits(commits) end |
#message=(value) ⇒ Object
131 132 133 |
# File 'app/models/release.rb', line 131 def (value) super value.to_s.strip end |
#name ⇒ Object
127 128 129 |
# File 'app/models/release.rb', line 127 def name release_date.strftime("%A, %b %e, %Y") end |
#notification_recipients ⇒ Object
180 181 182 |
# File 'app/models/release.rb', line 180 def notification_recipients @notification_recipients ||= project.followers.unretired end |
#release_changes ⇒ Object
135 136 137 |
# File 'app/models/release.rb', line 135 def release_changes super.lines.map { |s| ReleaseChange.from_s(self, s) } end |
#release_changes=(changes) ⇒ Object
139 140 141 |
# File 'app/models/release.rb', line 139 def release_changes=(changes) super changes.map(&:to_s).join("\n") end |
#release_changes_attributes=(params) ⇒ Object
143 144 145 146 147 |
# File 'app/models/release.rb', line 143 def release_changes_attributes=(params) self.release_changes = params.values .reject { |attrs| attrs["_destroy"] == "1" } .map { |attrs| ReleaseChange.new(self, attrs["tag_slug"], attrs["description"]) } end |
#release_date ⇒ Object Also known as: date
120 121 122 |
# File 'app/models/release.rb', line 120 def release_date released_at.to_date end |
#released_at ⇒ Object
116 117 118 |
# File 'app/models/release.rb', line 116 def released_at deploy ? deploy.completed_at : created_at end |