Updated mcollective.init according to OSCI-658
[packages/precise/mcollective.git] / lib / mcollective / vendor.rb
diff --git a/lib/mcollective/vendor.rb b/lib/mcollective/vendor.rb
new file mode 100644 (file)
index 0000000..0451467
--- /dev/null
@@ -0,0 +1,41 @@
+module MCollective
+  # Simple module to manage vendored code.
+  #
+  # To vendor a library simply download its whole git repo or untar
+  # into vendor/libraryname and create a load_libraryname.rb file
+  # to add its libdir into the $:.
+  #
+  # Once you have that file, add a require line in vendor/require_vendored.rb
+  # which will run after all the load_* files.
+  #
+  # The intention is to not change vendored libraries and to eventually
+  # make adding them in optional so that distros can simply adjust their
+  # packaging to exclude this directory and the various load_xxx.rb scripts
+  # if they wish to install these gems as native packages.
+  class Vendor
+    class << self
+      def vendor_dir
+        File.join([File.dirname(File.expand_path(__FILE__)), "vendor"])
+      end
+
+      def load_entry(entry)
+        Log.debug("Loading vendored #{$1}")
+        load "#{vendor_dir}/#{entry}"
+      end
+
+      def require_libs
+        require 'mcollective/vendor/require_vendored'
+      end
+
+      def load_vendored
+        Dir.entries(vendor_dir).each do |entry|
+          if entry.match(/load_(\w+?)\.rb$/)
+            load_entry entry
+          end
+        end
+
+        require_libs
+      end
+    end
+  end
+end