Updated mcollective.init according to OSCI-658
[packages/precise/mcollective.git] / lib / mcollective / data / result.rb
diff --git a/lib/mcollective/data/result.rb b/lib/mcollective/data/result.rb
new file mode 100644 (file)
index 0000000..e19a652
--- /dev/null
@@ -0,0 +1,40 @@
+module MCollective
+  module Data
+    class Result
+      # remove some methods that might clash with commonly
+      # used return data to improve the effectiveness of the
+      # method_missing lookup strategy
+      undef :type if method_defined?(:type)
+
+      def initialize
+        @data = {}
+      end
+
+      def include?(key)
+        @data.include?(key.to_sym)
+      end
+
+      def [](key)
+        @data[key.to_sym]
+      end
+
+      def []=(key, val)
+        raise "Can only store String, Integer, Float or Boolean data but got #{val.class} for key #{key}" unless [String, Fixnum, Bignum, Float, TrueClass, FalseClass].include?(val.class)
+
+        @data[key.to_sym] = val
+      end
+
+      def keys
+        @data.keys
+      end
+
+      def method_missing(method, *args)
+        key = method.to_sym
+
+        raise NoMethodError, "undefined local variable or method `%s'" % key unless include?(key)
+
+        @data[key]
+      end
+    end
+  end
+end