Class: Puppet::Network::Format
- Includes:
- Confiner
- Defined in:
- lib/puppet/network/format.rb
Overview
A simple class for modeling encoding formats for moving instances around the network.
Instance Attribute Summary collapse
- #extension ⇒ Object
- #intern_method ⇒ Object
- #intern_multiple_method ⇒ Object
- #mime ⇒ Object
- #name ⇒ Object readonly
- #render_method ⇒ Object
- #render_multiple_method ⇒ Object
- #required_methods ⇒ Object
- #weight ⇒ Object
Instance Method Summary collapse
- #init_attribute(name, default) ⇒ Object
-
#initialize(name, options = {}, &block) ⇒ Format
constructor
A new instance of Format.
- #intern(klass, text) ⇒ Object
- #intern_multiple(klass, text) ⇒ Object
- #render(instance) ⇒ Object
- #render_multiple(instances) ⇒ Object
- #required_methods_present?(klass) ⇒ Boolean
- #supported?(klass) ⇒ Boolean
- #to_s ⇒ Object
Methods included from Confiner
#confine, #confine_collection, #suitable?
Constructor Details
#initialize(name, options = {}, &block) ⇒ Format
Returns a new instance of Format.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/puppet/network/format.rb', line 20 def initialize(name, = {}, &block) @name = name.to_s.downcase.intern @options = # This must be done early the values can be used to set required_methods define_method_names method_list = { :intern_method => "from_#{name}", :intern_multiple_method => "from_multiple_#{name}", :render_multiple_method => "to_multiple_#{name}", :render_method => "to_#{name}" } init_attribute(:mime, "text/#{name}") init_attribute(:weight, 5) init_attribute(:required_methods, method_list.keys) init_attribute(:extension, name.to_s) method_list.each do |method, value| init_attribute(method, value) end raise ArgumentError, "Unsupported option(s) #{@options.keys}" unless @options.empty? @options = nil instance_eval(&block) if block_given? end |
Instance Attribute Details
#extension ⇒ Object
9 10 11 |
# File 'lib/puppet/network/format.rb', line 9 def extension @extension end |
#intern_method ⇒ Object
9 10 11 |
# File 'lib/puppet/network/format.rb', line 9 def intern_method @intern_method end |
#intern_multiple_method ⇒ Object
9 10 11 |
# File 'lib/puppet/network/format.rb', line 9 def intern_multiple_method @intern_multiple_method end |
#render_method ⇒ Object
9 10 11 |
# File 'lib/puppet/network/format.rb', line 9 def render_method @render_method end |
#render_multiple_method ⇒ Object
9 10 11 |
# File 'lib/puppet/network/format.rb', line 9 def render_multiple_method @render_multiple_method end |
#required_methods ⇒ Object
9 10 11 |
# File 'lib/puppet/network/format.rb', line 9 def required_methods @required_methods end |
Instance Method Details
#init_attribute(name, default) ⇒ Object
11 12 13 14 15 16 17 18 |
# File 'lib/puppet/network/format.rb', line 11 def init_attribute(name, default) if value = @options[name] @options.delete(name) else value = default end self.send(name.to_s + "=", value) end |
#intern(klass, text) ⇒ Object
51 52 53 54 |
# File 'lib/puppet/network/format.rb', line 51 def intern(klass, text) return klass.send(intern_method, text) if klass.respond_to?(intern_method) raise NotImplementedError, "#{klass} does not respond to #{intern_method}; can not intern instances from #{mime}" end |
#intern_multiple(klass, text) ⇒ Object
56 57 58 59 |
# File 'lib/puppet/network/format.rb', line 56 def intern_multiple(klass, text) return klass.send(intern_multiple_method, text) if klass.respond_to?(intern_multiple_method) raise NotImplementedError, "#{klass} does not respond to #{intern_multiple_method}; can not intern multiple instances from #{mime}" end |
#render(instance) ⇒ Object
65 66 67 68 |
# File 'lib/puppet/network/format.rb', line 65 def render(instance) return instance.send(render_method) if instance.respond_to?(render_method) raise NotImplementedError, "#{instance.class} does not respond to #{render_method}; can not render instances to #{mime}" end |
#render_multiple(instances) ⇒ Object
70 71 72 73 74 |
# File 'lib/puppet/network/format.rb', line 70 def render_multiple(instances) # This method implicitly assumes that all instances are of the same type. return instances[0].class.send(render_multiple_method, instances) if instances[0].class.respond_to?(render_multiple_method) raise NotImplementedError, "#{instances[0].class} does not respond to #{render_multiple_method}; can not intern multiple instances to #{mime}" end |
#required_methods_present?(klass) ⇒ Boolean
76 77 78 79 80 81 82 83 84 |
# File 'lib/puppet/network/format.rb', line 76 def required_methods_present?(klass) [:intern_method, :intern_multiple_method, :render_multiple_method].each do |name| return false unless required_method_present?(name, klass, :class) end return false unless required_method_present?(:render_method, klass, :instance) true end |
#supported?(klass) ⇒ Boolean
86 87 88 |
# File 'lib/puppet/network/format.rb', line 86 def supported?(klass) suitable? and required_methods_present?(klass) end |
#to_s ⇒ Object
90 91 92 |
# File 'lib/puppet/network/format.rb', line 90 def to_s "Puppet::Network::Format[#{name}]" end |