
Since we use repository.settings as a kind of dump for all sorts of settings, some user-facing and some not, this lets us leave the db as it is, but pretend to have separate models for each "kind" of setting.
80 lines
2.3 KiB
Ruby
80 lines
2.3 KiB
Ruby
module Travis::API::V3
|
|
class Models::Repository < Model
|
|
has_many :commits, dependent: :delete_all
|
|
has_many :requests, dependent: :delete_all
|
|
has_many :branches, dependent: :delete_all, order: 'branches.id DESC'.freeze
|
|
has_many :builds, dependent: :delete_all, order: 'builds.id DESC'.freeze
|
|
has_many :permissions, dependent: :delete_all
|
|
has_many :users, through: :permissions
|
|
has_many :stars
|
|
|
|
belongs_to :owner, polymorphic: true
|
|
belongs_to :last_build, class_name: 'Travis::API::V3::Models::Build'.freeze
|
|
belongs_to :current_build, class_name: 'Travis::API::V3::Models::Build'.freeze
|
|
|
|
has_one :default_branch,
|
|
foreign_key: [:repository_id, :name],
|
|
primary_key: [:id, :default_branch],
|
|
class_name: 'Travis::API::V3::Models::Branch'.freeze
|
|
|
|
after_initialize do
|
|
update_attributes! default_branch_name: 'master'.freeze unless default_branch_name
|
|
end
|
|
|
|
def slug
|
|
@slug ||= "#{owner_name}/#{name}"
|
|
end
|
|
|
|
def default_branch_name
|
|
read_attribute(:default_branch)
|
|
end
|
|
|
|
def default_branch_name=(value)
|
|
write_attribute(:default_branch, value)
|
|
end
|
|
|
|
def default_branch
|
|
super || branch(default_branch_name, create_without_build: true)
|
|
end
|
|
|
|
# Creates a branch object on the fly if it doesn't exist.
|
|
#
|
|
# Will not create a branch object if we don't have any builds for it unless
|
|
# the create_without_build option is set to true.
|
|
def branch(name, create_without_build: false)
|
|
return nil unless branch = branches.where(name: name).first_or_initialize
|
|
return branch unless branch.new_record?
|
|
return nil unless create_without_build or branch.builds.any?
|
|
branch.last_build = branch.builds.first
|
|
branch.save!
|
|
branch
|
|
rescue ActiveRecord::RecordNotUnique
|
|
branches.where(name: name).first
|
|
end
|
|
|
|
def id_default_branch
|
|
[id, default_branch_name]
|
|
end
|
|
|
|
def send(name, *args, &block)
|
|
if name == [:id, :default_branch]
|
|
name = :id_default_branch
|
|
end
|
|
|
|
__send__(name, *args, &block)
|
|
end
|
|
|
|
def settings
|
|
@settings ||= JSON.load(super || '{}'.freeze)
|
|
end
|
|
|
|
def user_settings
|
|
@user_settings ||= Models::UserSettings.new(settings)
|
|
end
|
|
|
|
def admin_settings
|
|
@admin_settings ||= Models::AdminSettings.new(settings)
|
|
end
|
|
end
|
|
end
|