69 lines
1.5 KiB
Ruby
69 lines
1.5 KiB
Ruby
|
module Gitlab
|
||
|
module Ci
|
||
|
class Config
|
||
|
module Node
|
||
|
##
|
||
|
# Entry that represents an environment.
|
||
|
#
|
||
|
class Environment < Entry
|
||
|
include Validatable
|
||
|
|
||
|
ALLOWED_KEYS = %i[name url]
|
||
|
|
||
|
validations do
|
||
|
validate do
|
||
|
unless hash? || string?
|
||
|
errors.add(:config, 'should be a hash or a string')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
validates :name, presence: true
|
||
|
validates :name,
|
||
|
type: {
|
||
|
with: String,
|
||
|
message: Gitlab::Regex.environment_name_regex_message }
|
||
|
|
||
|
validates :name,
|
||
|
format: {
|
||
|
with: Gitlab::Regex.environment_name_regex,
|
||
|
message: Gitlab::Regex.environment_name_regex_message }
|
||
|
|
||
|
with_options if: :hash? do
|
||
|
validates :config, allowed_keys: ALLOWED_KEYS
|
||
|
|
||
|
validates :url,
|
||
|
length: { maximum: 255 },
|
||
|
addressable_url: true,
|
||
|
allow_nil: true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def hash?
|
||
|
@config.is_a?(Hash)
|
||
|
end
|
||
|
|
||
|
def string?
|
||
|
@config.is_a?(String)
|
||
|
end
|
||
|
|
||
|
def name
|
||
|
value[:name]
|
||
|
end
|
||
|
|
||
|
def url
|
||
|
value[:url]
|
||
|
end
|
||
|
|
||
|
def value
|
||
|
case @config
|
||
|
when String then { name: @config }
|
||
|
when Hash then @config
|
||
|
else {}
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|