vagrant/plugins/pushes/atlas/config.rb

117 lines
3.3 KiB
Ruby
Raw Normal View History

2014-10-29 03:54:16 +00:00
module VagrantPlugins
module AtlasPush
2014-10-29 03:54:16 +00:00
class Config < Vagrant.plugin("2", :config)
# The name of the application to push to. This will be created (with
# user confirmation) if it doesn't already exist.
#
# @return [String]
attr_accessor :app
# The base directory with file contents to upload. By default this
# is the same directory as the Vagrantfile, but you can specify this
# if you have a `src` folder or `bin` folder or some other folder
# you want to upload.
#
# @return [String]
attr_accessor :dir
# Lists of files to include/exclude in what is uploaded. Exclude is
# always the last run filter, so if a file is matched in both include
# and exclude, it will be excluded.
#
# The value of the array elements should be a simple file glob relative
# to the directory being packaged.
#
# @return [Array<String>]
attr_accessor :includes
attr_accessor :excludes
2014-10-29 03:54:16 +00:00
# If set to true, Vagrant will automatically use VCS data to determine
# the files to upload. As a caveat: uncommitted changes will not be
# deployed.
#
# @return [Boolean]
attr_accessor :vcs
# The path to the uploader binary to shell out to. This usually
# is only set for debugging/development. If not set, the uploader
# will be looked for within the Vagrant installer dir followed by
# the PATH.
#
# @return [String]
attr_accessor :uploader_path
# The address of the Atlas server to upload to. By default this will
# be the public Atlas server.
#
# @return [String]
attr_accessor :address
2014-10-29 03:54:16 +00:00
def initialize
@app = UNSET_VALUE
@dir = UNSET_VALUE
@vcs = UNSET_VALUE
@address = UNSET_VALUE
@includes = []
@excludes = []
@uploader_path = UNSET_VALUE
2014-10-29 03:54:16 +00:00
end
def merge(other)
super.tap do |result|
result.includes = self.includes.dup.concat(other.includes).uniq
result.excludes = self.excludes.dup.concat(other.excludes).uniq
2014-10-29 03:54:16 +00:00
end
end
def finalize!
@address = nil if @address == UNSET_VALUE
2014-10-29 03:54:16 +00:00
@app = nil if @app == UNSET_VALUE
@dir = "." if @dir == UNSET_VALUE
@uploader_path = nil if @uploader_path == UNSET_VALUE
2014-10-29 03:54:16 +00:00
@vcs = true if @vcs == UNSET_VALUE
end
def validate(machine)
errors = _detected_errors
if missing?(@app)
errors << I18n.t("atlas_push.errors.missing_attribute",
attribute: "app",
)
end
if missing?(@dir)
errors << I18n.t("atlas_push.errors.missing_attribute",
attribute: "dir",
)
2014-10-29 03:54:16 +00:00
end
{ "Atlas push" => errors }
end
# Add the filepath to the list of includes
# @param [String] filepath
def include(filepath)
@includes << filepath
end
alias_method :include=, :include
# Add the filepath to the list of excludes
# @param [String] filepath
def exclude(filepath)
@excludes << filepath
end
alias_method :exclude=, :exclude
private
# Determine if the given string is "missing" (blank)
# @return [true, false]
def missing?(obj)
obj.to_s.strip.empty?
2014-10-29 03:54:16 +00:00
end
end
end
end