Updated mcollective.init according to OSCI-658
[packages/precise/mcollective.git] / lib / mcollective / generators / base.rb
diff --git a/lib/mcollective/generators/base.rb b/lib/mcollective/generators/base.rb
new file mode 100644 (file)
index 0000000..57ff3a0
--- /dev/null
@@ -0,0 +1,46 @@
+module MCollective
+  module Generators
+    class Base
+      attr_accessor :meta, :plugin_name, :mod_name
+      def initialize(name, description, author, license, version, url, timeout)
+        @meta = {:name => name,
+                 :description => description,
+                 :author => author,
+                 :license => license,
+                 :version => version,
+                 :url => url,
+                 :timeout => timeout}
+      end
+
+      def create_metadata_string
+        ddl_template = File.read(File.join(File.dirname(__FILE__), "templates", "ddl.erb"))
+        ERB.new(ddl_template, nil, "-").result(binding)
+      end
+
+      def create_plugin_string
+        plugin_template = File.read(File.join(File.dirname(__FILE__), "templates", "plugin.erb"))
+        ERB.new(plugin_template, nil, "-").result(binding)
+      end
+
+      def write_plugins
+        begin
+          Dir.mkdir @plugin_name
+          dirname = File.join(@plugin_name, @mod_name.downcase)
+          Dir.mkdir dirname
+          puts "Created plugin directory : #{@plugin_name}"
+
+          File.open(File.join(dirname, "#{@plugin_name}.ddl"), "w"){|f| f.puts @ddl}
+          puts "Created DDL file : #{File.join(dirname, "#{@plugin_name}.ddl")}"
+
+          File.open(File.join(dirname, "#{@plugin_name}.rb"), "w"){|f| f.puts @plugin}
+          puts "Created #{@mod_name} file : #{File.join(dirname, "#{@plugin_name}.rb")}"
+        rescue Errno::EEXIST
+          raise "cannot generate '#{@plugin_name}' : plugin directory already exists."
+        rescue Exception => e
+          FileUtils.rm_rf(@plugin_name) if File.directory?(@plugin_name)
+          raise "cannot generate plugin - #{e}"
+        end
+      end
+    end
+  end
+end