Class: Release

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/release.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#commit_not_found_error_messageObject (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
  @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

.earliestObject



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

.latestObject



58
59
60
# File 'app/models/release.rb', line 58

def latest
  first
end

.most_recentObject



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_commitObject



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_messageObject



66
67
68
# File 'app/models/release.rb', line 66

def with_message
  where arel_table[:message].not_eq("")
end

Instance Method Details

#antecedentsObject



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_commitsObject



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

Returns:

  • (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

#commit0Object



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

#commit1Object



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

Returns:

  • (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 message=(value)
  super value.to_s.strip
end

#nameObject



127
128
129
# File 'app/models/release.rb', line 127

def name
  release_date.strftime("%A, %b %e, %Y")
end

#notification_recipientsObject



180
181
182
# File 'app/models/release.rb', line 180

def notification_recipients
  @notification_recipients ||= project.followers.unretired
end

#release_changesObject



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_dateObject Also known as: date



120
121
122
# File 'app/models/release.rb', line 120

def release_date
  released_at.to_date
end

#released_atObject



116
117
118
# File 'app/models/release.rb', line 116

def released_at
  deploy ? deploy.completed_at : created_at
end