summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/network/format.rb27
-rw-r--r--lib/puppet/network/format_handler.rb21
-rw-r--r--lib/puppet/network/formats.rb4
3 files changed, 52 insertions, 0 deletions
diff --git a/lib/puppet/network/format.rb b/lib/puppet/network/format.rb
new file mode 100644
index 000000000..7c678568d
--- /dev/null
+++ b/lib/puppet/network/format.rb
@@ -0,0 +1,27 @@
+require 'puppet/provider/confiner'
+
+# A simple class for modeling encoding formats for moving
+# instances around the network.
+class Puppet::Network::Format
+ include Puppet::Provider::Confiner
+
+ attr_reader :name
+ attr_accessor :mime
+
+ def initialize(name, options = {}, &block)
+ @name = name
+
+ if mime = options[:mime]
+ @mime = mime
+ options.delete(:mime)
+ else
+ @mime = "text/%s" % name
+ end
+
+ unless options.empty?
+ raise ArgumentError, "Unsupported option(s) %s" % options.keys
+ end
+
+ instance_eval(&block) if block_given?
+ end
+end
diff --git a/lib/puppet/network/format_handler.rb b/lib/puppet/network/format_handler.rb
index f001f8242..7e540708d 100644
--- a/lib/puppet/network/format_handler.rb
+++ b/lib/puppet/network/format_handler.rb
@@ -1,6 +1,16 @@
require 'puppet/network'
+require 'puppet/network/format'
module Puppet::Network::FormatHandler
+ @formats = {}
+ def self.create(*args, &block)
+ instance = Puppet::Network::Format.new(*args)
+ instance.instance_eval(&block) if block_given?
+
+ @formats[instance.name] = instance
+ instance
+ end
+
def self.extended(klass)
klass.extend(ClassMethods)
@@ -9,6 +19,15 @@ module Puppet::Network::FormatHandler
klass.send(:include, InstanceMethods)
end
+ def self.format(name)
+ @formats[name]
+ end
+
+ # Return a format capable of handling the provided mime type.
+ def self.mime(mimetype)
+ @formats.values.find { |format| format.mime == mimetype }
+ end
+
module ClassMethods
def convert_from(format, data)
raise ArgumentError, "Format %s not supported" % format unless support_format?(format)
@@ -64,3 +83,5 @@ module Puppet::Network::FormatHandler
end
end
end
+
+require 'puppet/network/formats'
diff --git a/lib/puppet/network/formats.rb b/lib/puppet/network/formats.rb
new file mode 100644
index 000000000..640a24485
--- /dev/null
+++ b/lib/puppet/network/formats.rb
@@ -0,0 +1,4 @@
+require 'puppet/network/format_handler'
+
+Puppet::Network::FormatHandler.create(:yaml, :mime => "text/yaml")
+Puppet::Network::FormatHandler.create(:marshal, :mime => "text/marshal")