summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2009-06-02 17:11:03 -0500
committerJames Turnbull <james@lovedthanlost.net>2009-06-06 19:57:58 +1000
commitc16fd1bff64fd426d36e07648a7f8550563ae6e1 (patch)
tree16392c5f7f3e668f00a7bd625d4b581d0fa2acdc
parentf059c518411f2f12bbe9108094b12f9bfc13e080 (diff)
downloadpuppet-c16fd1bff64fd426d36e07648a7f8550563ae6e1.tar.gz
puppet-c16fd1bff64fd426d36e07648a7f8550563ae6e1.tar.xz
puppet-c16fd1bff64fd426d36e07648a7f8550563ae6e1.zip
Adding a JSON utility module for providing Ruby compat
This provides the class-method behaviour that Ruby's JSON support expects but that we don't provide. Signed-off-by: Luke Kanies <luke@madstop.com>
-rw-r--r--lib/puppet/util/json.rb13
-rwxr-xr-xspec/unit/util/json.rb21
2 files changed, 34 insertions, 0 deletions
diff --git a/lib/puppet/util/json.rb b/lib/puppet/util/json.rb
new file mode 100644
index 000000000..d6f1a2f75
--- /dev/null
+++ b/lib/puppet/util/json.rb
@@ -0,0 +1,13 @@
+# A simple module to provide consistency between how we use JSON and how
+# ruby expects it to be used. Basically, we don't want to require
+# that the sender specify a class.
+# Ruby wants everyone to provide a 'json_class' field, and the JSON support
+# requires such a field to track the class down. Because we use our URL to
+# figure out what class we're working on, we don't need that, and we don't want
+# our consumers and producers to need to know anything about our internals.
+module Puppet::Util::Json
+ def json_create(json)
+ raise ArgumentError, "No data provided in json data" unless json['data']
+ from_json(json['data'])
+ end
+end
diff --git a/spec/unit/util/json.rb b/spec/unit/util/json.rb
new file mode 100755
index 000000000..5ef5dc6ac
--- /dev/null
+++ b/spec/unit/util/json.rb
@@ -0,0 +1,21 @@
+#!/usr/bin/env ruby
+
+Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f) : Dir.chdir("..") { s.call(f) } }).call("spec/spec_helper.rb") }
+
+require 'puppet/util/json'
+
+class JsonUtil
+ include Puppet::Util::Json
+end
+
+describe Puppet::Util::Json do
+ it "should fail if no data is provided" do
+ lambda { JsonUtil.new.json_create("json_class" => "foo") }.should raise_error(ArgumentError)
+ end
+
+ it "should call 'from_json' with the provided data" do
+ json = JsonUtil.new
+ json.expects(:from_json).with("mydata")
+ json.json_create("json_class" => "foo", "data" => "mydata")
+ end
+end