class Vagrant::RsVagrantShim::Provisioners::RsVagrantShim::Config

Attributes

one_time_runlist_file[R]
run_list_dir[RW]
shim_dir[RW]

Public Instance Methods

validate(env, errors) click to toggle source

TODO: Better error handling, verify shim dir and runlist dir exist, catch json errors when parsing runlists

Calls superclass method
# File lib/rs_vagrant_shim/vagrant/rs_vagrant_shim/provisioners/rs_vagrant_shim.rb, line 33
def validate(env, errors)

  errors.add(I18n.t("vagrant.config.rs_vagrant_shim.shim_dir_missing")) if !@shim_dir || @shim_dir.empty?
  errors.add(I18n.t("vagrant.config.rs_vagrant_shim.run_list_dir_missing")) if !@run_list_dir || @run_list_dir.empty?

  if @shim_dir && !@shim_dir.empty? && @run_list_dir && !@run_list_dir.empty?
    node_js_file = File.join(Dir.pwd, @shim_dir, 'node.js')
    dispatch_dir = File.join(Dir.pwd, @shim_dir, 'dispatch')
    FileUtils.mkdir_p dispatch_dir unless File.directory? dispatch_dir

    dispatch_files = Dir.entries(dispatch_dir).reject{|f| /^\.+/ =~ f}.sort_by{|f| File.mtime(File.join(dispatch_dir, f))}

    runlist = JSON.parse(File.read(File.join(Dir.pwd, @run_list_dir, 'default.json')))

    if File.exist? node_js_file
      runlist.merge! JSON.parse(File.read(node_js_file))["normal"]
    end

    # A specified runlist trumps all, but still inherits from default
    if ENV['runlist']
      runlist_file = File.join(Dir.pwd, @run_list_dir, "#{ENV['runlist']}.json")
      runlist.merge!(JSON.parse(File.read(runlist_file))) if File.exist? runlist_file
    elsif dispatch_files.length > 0
      dispatch_file = File.join(dispatch_dir, dispatch_files.first)
      runlist.merge!(JSON.parse(File.read(dispatch_file)))
      @one_time_runlist_file = dispatch_file
    end

    @json = {:rs_vagrant_shim => to_hash}.merge(runlist)
    @run_list = runlist['run_list']
  end

  super(env, errors)
end