Class: Project
Class Method Summary
collapse
Instance Method Summary
collapse
adapters, has_adapter
#broken_features, #feature_broken!, #feature_state, #feature_states, #feature_working!, #set_feature_state!
Methods included from Retirement
#retire!, #retired?, #unretire!
Class Method Details
.[](slug) ⇒ Object
81
82
83
|
# File 'app/models/project.rb', line 81
def self.[](slug)
find_by_slug(slug)
end
|
.with_feature(feature) ⇒ Object
85
86
87
|
# File 'app/models/project.rb', line 85
def self.with_feature(feature)
where ["? = ANY(projects.selected_features)", feature]
end
|
Instance Method Details
#add_teammate(user_or_id, role = "Follower") ⇒ Object
116
117
118
119
120
|
# File 'app/models/project.rb', line 116
def add_teammate(user_or_id, role="Follower")
attributes = {project: self, name: role}
attributes[user_or_id.is_a?(User) ? :user : :user_id] = user_or_id
roles.create!(attributes)
end
|
#all_milestones ⇒ Object
172
173
174
|
# File 'app/models/project.rb', line 172
def all_milestones
milestones.fetch_all
end
|
#all_tickets ⇒ Object
158
159
160
|
# File 'app/models/project.rb', line 158
def all_tickets
tickets.fetch_all
end
|
#ci_server_job_url ⇒ Object
Continuous Integration ————————————————————————- #
253
254
255
|
# File 'app/models/project.rb', line 253
def ci_server_job_url
ci_server.job_url
end
|
#color_value ⇒ Object
49
50
51
|
# File 'app/models/project.rb', line 49
def color_value
Houston.config.project_colors[color]
end
|
#create_milestone!(attributes) ⇒ Object
180
181
182
183
184
185
186
187
188
189
190
191
192
|
# File 'app/models/project.rb', line 180
def create_milestone!(attributes)
milestone = milestones.build attributes
if milestone.valid?
if ticket_tracker.respond_to?(:create_milestone!)
milestone = milestones.create(
attributes.merge(
ticket_tracker.create_milestone!(milestone).attributes))
else
milestone.save
end
end
milestone
end
|
#create_ticket!(attributes) ⇒ Object
146
147
148
149
150
|
# File 'app/models/project.rb', line 146
def create_ticket!(attributes)
ticket = tickets.build attributes.merge(number: 0)
ticket = tickets.create_from_remote ticket_tracker.create_ticket!(ticket) if ticket.valid?
ticket
end
|
#environment(environment_name) ⇒ Object
65
66
67
|
# File 'app/models/project.rb', line 65
def environment(environment_name)
Environment.new(self, environment_name)
end
|
#environments ⇒ Object
53
54
55
|
# File 'app/models/project.rb', line 53
def environments
@environments ||= deploys.environments.map(&:downcase).uniq
end
|
#environments_with_release_notes ⇒ Object
57
58
59
|
# File 'app/models/project.rb', line 57
def environments_with_release_notes
environments.select(&method(:show_release_notes_for?))
end
|
#error_tracker_error_url(error_id) ⇒ Object
240
241
242
|
# File 'app/models/project.rb', line 240
def error_tracker_error_url(error_id)
error_tracker.error_url(error_id)
end
|
#error_tracker_project_url ⇒ Object
Error Tracker ————————————————————————- #
236
237
238
|
# File 'app/models/project.rb', line 236
def error_tracker_project_url
error_tracker.project_url
end
|
#extended_attributes ⇒ Object
69
70
71
|
# File 'app/models/project.rb', line 69
def extended_attributes
super || (self.extended_attributes = {})
end
|
#feature?(feature_slug) ⇒ Boolean
97
98
99
|
# File 'app/models/project.rb', line 97
def feature?(feature_slug)
selected_features.member? feature_slug.to_sym
end
|
#features ⇒ Object
89
90
91
|
# File 'app/models/project.rb', line 89
def features
(Houston.config.project_features & selected_features) + [:settings]
end
|
#find_commit_by_sha(sha) ⇒ Object
215
216
217
|
# File 'app/models/project.rb', line 215
def find_commit_by_sha(sha)
commits.find_or_create_by_sha(sha)
end
|
#find_or_create_tickets_by_number(*numbers) ⇒ Object
154
155
156
|
# File 'app/models/project.rb', line 154
def find_or_create_tickets_by_number(*numbers)
tickets.numbered(*numbers, sync: true)
end
|
#find_tickets(*query) ⇒ Object
166
167
168
|
# File 'app/models/project.rb', line 166
def find_tickets(*query)
tickets.fetch_with_query(*query)
end
|
#followers ⇒ Object
<– redefine followers to be everyone who participates in or follows the project
112
113
114
|
# File 'app/models/project.rb', line 112
def followers
roles.to_users
end
|
#is_teammate?(user_or_id) ⇒ Boolean
Also known as:
teammate?
122
123
124
|
# File 'app/models/project.rb', line 122
def is_teammate?(user_or_id)
roles.for_user(user_or_id).any?
end
|
#on_github? ⇒ Boolean
223
224
225
|
# File 'app/models/project.rb', line 223
def on_github?
repo.is_a? Houston::Adapters::VersionControl::GitAdapter::GithubRepo
end
|
#open_milestones ⇒ Object
176
177
178
|
# File 'app/models/project.rb', line 176
def open_milestones
milestones.fetch_open
end
|
#open_tickets ⇒ Object
162
163
164
|
# File 'app/models/project.rb', line 162
def open_tickets
tickets.fetch_open
end
|
#read_file(path, options = {}) ⇒ Object
219
220
221
|
# File 'app/models/project.rb', line 219
def read_file(path, options={})
repo.read_file(path, options)
end
|
#selected_features ⇒ Object
93
94
95
|
# File 'app/models/project.rb', line 93
def selected_features
Array(super).map(&:to_sym)
end
|
#show_release_notes_for?(environment_name) ⇒ Boolean
61
62
63
|
# File 'app/models/project.rb', line 61
def show_release_notes_for?(environment_name)
extended_attributes["releases.ignore.#{environment_name.downcase}"] != "1"
end
|
#teammates ⇒ Object
Teammates ————————————————————————- #
108
109
110
|
# File 'app/models/project.rb', line 108
def teammates
roles.participants.to_users
end
|
#testers ⇒ Object
77
78
79
|
# File 'app/models/project.rb', line 77
def testers
@testers ||= User.testers
end
|
#ticket_tracker_project_url ⇒ Object
Ticket Tracking ————————————————————————- #
136
137
138
|
# File 'app/models/project.rb', line 136
def ticket_tracker_project_url
ticket_tracker.project_url
end
|
#ticket_tracker_sync_in_progress? ⇒ Boolean
196
197
198
|
# File 'app/models/project.rb', line 196
def ticket_tracker_sync_in_progress?
ticket_tracker_sync_started_at.present? and ticket_tracker_sync_started_at > 5.minutes.ago
end
|
#ticket_tracker_ticket_url(ticket_number) ⇒ Object
140
141
142
|
# File 'app/models/project.rb', line 140
def ticket_tracker_ticket_url(ticket_number)
ticket_tracker.ticket_url(ticket_number)
end
|
#to_param ⇒ Object
45
46
47
|
# File 'app/models/project.rb', line 45
def to_param
slug
end
|
#version_control_temp_path ⇒ Object
211
212
213
|
# File 'app/models/project.rb', line 211
def version_control_temp_path
Houston.root.join("tmp", "#{slug}.git").to_s
end
|
#view_options ⇒ Object
73
74
75
|
# File 'app/models/project.rb', line 73
def view_options
super || {}
end
|