diff --git a/bin/dat b/bin/dat index b6fd0fb..274d5fa 100755 --- a/bin/dat +++ b/bin/dat @@ -56,6 +56,10 @@ when :make puts "making..." require 'make' Make.command(options) +when :execute + puts "Ececuting: #{options.name}" + require 'execute' + Execute.file(options) when :goto Dir.chdir(ENV["DAT_ROOT"]) when :vm diff --git a/lib/execute.rb b/lib/execute.rb new file mode 100644 index 0000000..d91d6ef --- /dev/null +++ b/lib/execute.rb @@ -0,0 +1,71 @@ + +module Execute + + +end + + +require 'rubygems' +require 'ostruct' + +# dat execute progress +# dat execute < default Configfile + +module Execute + def dependency(name) + puts "Checking for #{name}..." + + unless gem_installed?(name) + puts "Installing #{name}..." + system("gem install #{name}") + else + puts "#{name} is already installed." + end + + require name + rescue LoadError => e + puts "Failed to load #{name}: #{e.message}" + end + + def gem_installed?(name) + Gem::Specification::find_all_by_name(name).any? + end + + def postgres + require 'setup/postgresql' + puts 'installing postgres' + Setup::PostgreSQL.install + end + + def service(name) + if block_given? + context = OpenStruct.new + output = yield context + puts output + puts "context: #{context}" + else + puts "No block provided" + end + end + + def user(name) + puts "Creating user: #{name}" + end + + def install(*packages) + packages.each do |pkg| + puts "Installing #{pkg}" + end + end + + def self.file(options) + puts "options: #{options}" + dsl = Object.new + dsl.extend(Execute) + # Configfile + path = File.join(Dir.pwd, options.name || "./Configfile") + dsl.instance_eval(File.read(path), path) + # Execute the config + end +end +