Class: Project

Inherits:
ActiveRecord::Base
  • Object
show all
Extended by:
ProjectAdapter
Includes:
FeatureState, Retirement
Defined in:
app/models/project.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ProjectAdapter

adapters, has_adapter

Methods included from FeatureState

#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



77
78
79
# File 'app/models/project.rb', line 77

def self.[](slug)
  find_by_slug(slug)
end

Instance Method Details

#add_teammate(user_or_id, role = "Follower") ⇒ Object



104
105
106
107
108
# File 'app/models/project.rb', line 104

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_milestonesObject



160
161
162
# File 'app/models/project.rb', line 160

def all_milestones
  milestones.fetch_all
end

#all_ticketsObject



146
147
148
# File 'app/models/project.rb', line 146

def all_tickets
  tickets.fetch_all
end

#ci_server_job_urlObject

Continuous Integration ————————————————————————- #



241
242
243
# File 'app/models/project.rb', line 241

def ci_server_job_url
  ci_server.job_url
end

#color_valueObject



45
46
47
# File 'app/models/project.rb', line 45

def color_value
  Houston.config.project_colors[color]
end

#create_milestone!(attributes) ⇒ Object



168
169
170
171
172
173
174
175
176
177
178
179
180
# File 'app/models/project.rb', line 168

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



134
135
136
137
138
# File 'app/models/project.rb', line 134

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



61
62
63
# File 'app/models/project.rb', line 61

def environment(environment_name)
  Environment.new(self, environment_name)
end

#environmentsObject



49
50
51
# File 'app/models/project.rb', line 49

def environments
  @environments ||= deploys.environments.map(&:downcase).uniq
end

#environments_with_release_notesObject



53
54
55
# File 'app/models/project.rb', line 53

def environments_with_release_notes
  environments.select(&method(:show_release_notes_for?))
end

#error_tracker_error_url(error_id) ⇒ Object



228
229
230
# File 'app/models/project.rb', line 228

def error_tracker_error_url(error_id)
  error_tracker.error_url(error_id)
end

#error_tracker_project_urlObject

Error Tracker ————————————————————————- #



224
225
226
# File 'app/models/project.rb', line 224

def error_tracker_project_url
  error_tracker.project_url
end

#extended_attributesObject



65
66
67
# File 'app/models/project.rb', line 65

def extended_attributes
  super || (self.extended_attributes = {})
end

#featuresObject



81
82
83
# File 'app/models/project.rb', line 81

def features
  (selected_features & Houston.config.project_features) + [:settings]
end

#find_commit_by_sha(sha) ⇒ Object



203
204
205
# File 'app/models/project.rb', line 203

def find_commit_by_sha(sha)
  commits.find_or_create_by_sha(sha)
end

#find_or_create_tickets_by_number(*numbers) ⇒ Object



142
143
144
# File 'app/models/project.rb', line 142

def find_or_create_tickets_by_number(*numbers)
  tickets.numbered(*numbers, sync: true)
end

#find_tickets(*query) ⇒ Object



154
155
156
# File 'app/models/project.rb', line 154

def find_tickets(*query)
  tickets.fetch_with_query(*query)
end

#followersObject

<– redefine followers to be everyone who participates in or follows the project



100
101
102
# File 'app/models/project.rb', line 100

def followers # <-- redefine followers to be everyone who participates in or follows the project
  roles.to_users
end

#is_teammate?(user_or_id) ⇒ Boolean Also known as: teammate?

Returns:

  • (Boolean)


110
111
112
# File 'app/models/project.rb', line 110

def is_teammate?(user_or_id)
  roles.for_user(user_or_id).any?
end

#on_github?Boolean

Returns:

  • (Boolean)


211
212
213
# File 'app/models/project.rb', line 211

def on_github?
  repo.is_a? Houston::Adapters::VersionControl::GitAdapter::GithubRepo
end

#open_milestonesObject



164
165
166
# File 'app/models/project.rb', line 164

def open_milestones
  milestones.fetch_open
end

#open_ticketsObject



150
151
152
# File 'app/models/project.rb', line 150

def open_tickets
  tickets.fetch_open
end

#read_file(path, options = {}) ⇒ Object



207
208
209
# File 'app/models/project.rb', line 207

def read_file(path, options={})
  repo.read_file(path, options)
end

#selected_featuresObject



85
86
87
# File 'app/models/project.rb', line 85

def selected_features
  Array(super).map(&:to_sym)
end

#show_release_notes_for?(environment_name) ⇒ Boolean

Returns:

  • (Boolean)


57
58
59
# File 'app/models/project.rb', line 57

def show_release_notes_for?(environment_name)
  extended_attributes["releases.ignore.#{environment_name.downcase}"] != "1"
end

#teammatesObject

Teammates ————————————————————————- #



96
97
98
# File 'app/models/project.rb', line 96

def teammates
  roles.participants.to_users
end

#testersObject



73
74
75
# File 'app/models/project.rb', line 73

def testers
  @testers ||= User.testers
end

#ticket_tracker_project_urlObject

Ticket Tracking ————————————————————————- #



124
125
126
# File 'app/models/project.rb', line 124

def ticket_tracker_project_url
  ticket_tracker.project_url
end

#ticket_tracker_sync_in_progress?Boolean

Returns:

  • (Boolean)


184
185
186
# File 'app/models/project.rb', line 184

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



128
129
130
# File 'app/models/project.rb', line 128

def ticket_tracker_ticket_url(ticket_number)
  ticket_tracker.ticket_url(ticket_number)
end

#to_paramObject



41
42
43
# File 'app/models/project.rb', line 41

def to_param
  slug
end

#version_control_temp_pathObject



199
200
201
# File 'app/models/project.rb', line 199

def version_control_temp_path
  Houston.root.join("tmp", "#{slug}.git").to_s # <-- the .git here is misleading; could be any kind of VCS
end

#view_optionsObject



69
70
71
# File 'app/models/project.rb', line 69

def view_options
  super || {}
end