class LeapCli::Leapfile
Attributes
environment[R]
platform_directory_path[R]
provider_directory_path[R]
valid[R]
Public Class Methods
new()
click to toggle source
# File lib/leap_cli/leapfile.rb, line 20 def initialize end
Public Instance Methods
environment_filter()
click to toggle source
The way the Leapfile
handles pinning of environment (self.environment) is a little tricky. If self.environment is nil, then there is no pin. If self.environment is 'default', then there is a pin to the default environment. The problem is that an environment of nil is used to indicate the default environment in node properties.
This method returns the environment tag as needed when filtering nodes.
# File lib/leap_cli/leapfile.rb, line 31 def environment_filter if self.environment == 'default' nil else self.environment end end
load(search_directory=nil)
click to toggle source
# File lib/leap_cli/leapfile.rb, line 39 def load(search_directory=nil) directory = File.expand_path(find_in_directory_tree('Leapfile', search_directory)) if directory == '/' return nil else # # set up paths # @provider_directory_path = directory begin # load leaprc first, so that we can potentially access which environment is pinned in Leapfile # but also load leaprc last, so that it can override what is set in Leapfile. read_settings(leaprc_path) rescue StandardError end read_settings(directory + '/Leapfile') read_settings(leaprc_path) @platform_directory_path = File.expand_path(@platform_directory_path || '../leap_platform', @provider_directory_path) # # load the platform # platform_class = "#{@platform_directory_path}/lib/leap/platform" platform_definition = "#{@platform_directory_path}/platform.rb" unless File.exist?(platform_definition) Util.bail! "ERROR: The file `#{platform_file}` does not exist. Please check the value of `@platform_directory_path` in `Leapfile` or `~/.leaprc`." end begin require platform_class require platform_definition rescue LoadError Util.log "The leap_platform at #{platform_directory_path} is not compatible with this version of leap_cli" Util.log "You can either:" do Util.log "Upgrade leap_platform to version " + LeapCli::COMPATIBLE_PLATFORM_VERSION.first Util.log "Or, downgrade leap_cli to version 1.8" end Util.bail! rescue StandardError => exc Util.bail! exc.to_s end begin Leap::Platform.validate!(LeapCli::VERSION, LeapCli::COMPATIBLE_PLATFORM_VERSION, self) rescue StandardError => exc Util.bail! exc.to_s end leapfile_extensions = "#{@platform_directory_path}/lib/leap_cli/leapfile_extensions.rb" if File.exist?(leapfile_extensions) require leapfile_extensions end # # validate # instance_variables.each do |var| var = var.to_s.sub('@', '') if !self.respond_to?(var) LeapCli.log :warning, "the variable `#{var}` is set in .leaprc or Leapfile, but it is not supported." end end @valid = validate return @valid end end
set(property, value)
click to toggle source
# File lib/leap_cli/leapfile.rb, line 103 def set(property, value) edit_leaprc(property, value) end
unset(property)
click to toggle source
# File lib/leap_cli/leapfile.rb, line 107 def unset(property) edit_leaprc(property) end
valid?()
click to toggle source
# File lib/leap_cli/leapfile.rb, line 111 def valid? !!@valid end
Private Instance Methods
edit_leaprc(property, value=nil)
click to toggle source
adds or removes a line to .leaprc for this particular provider directory. if value is nil, the line is removed. if not nil, it is added or replaced.
# File lib/leap_cli/leapfile.rb, line 121 def edit_leaprc(property, value=nil) file_path = leaprc_path lines = [] if File.exist?(file_path) regexp = /self\.#{Regexp.escape(property)} = .*? if @provider_directory_path == '#{Regexp.escape(@provider_directory_path)}'/ File.readlines(file_path).each do |line| unless line =~ regexp lines << line end end end unless value.nil? lines << "self.#{property} = #{value.inspect} if @provider_directory_path == '#{@provider_directory_path}'\n" end File.open(file_path, 'w') do |f| f.write(lines.join) end rescue Errno::EACCES, IOError => exc Util::bail! :error, "trying to save ~/.leaprc (#{exc})." end
find_in_directory_tree(filename, directory_tree=nil)
click to toggle source
# File lib/leap_cli/leapfile.rb, line 153 def find_in_directory_tree(filename, directory_tree=nil) search_dir = directory_tree || Dir.pwd while search_dir != "/" Dir.foreach(search_dir) do |f| return search_dir if f == filename end search_dir = File.dirname(search_dir) end return search_dir end
leaprc_path()
click to toggle source
# File lib/leap_cli/leapfile.rb, line 142 def leaprc_path File.join(ENV['HOME'], '.leaprc') end
method_missing(method, *args)
click to toggle source
# File lib/leap_cli/leapfile.rb, line 164 def method_missing(method, *args) if method =~ /=$/ self.instance_variable_set('@' + method.to_s.sub('=',''), args.first) else self.instance_variable_get('@' + method.to_s) end end
read_settings(file)
click to toggle source
# File lib/leap_cli/leapfile.rb, line 146 def read_settings(file) if File.exist? file LeapCli.log 2, :read, file instance_eval(File.read(file), file) end end