Class: Puppet::Network::Format

Inherits:
Object
  • Object
show all
Includes:
Confiner
Defined in:
lib/puppet/network/format.rb

Overview

A simple class for modeling encoding formats for moving instances around the network.

API:

  • public

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Confiner

#confine, #confine_collection, #suitable?

Constructor Details

#initialize(name, options = {}, &block) ⇒ Format

Returns a new instance of Format.

Raises:

API:

  • public



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, options = {}, &block)
  @name = name.to_s.downcase.intern

  @options = 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

#extensionObject

API:

  • public



9
10
11
# File 'lib/puppet/network/format.rb', line 9

def extension
  @extension
end

#intern_methodObject

API:

  • public



9
10
11
# File 'lib/puppet/network/format.rb', line 9

def intern_method
  @intern_method
end

#intern_multiple_methodObject

API:

  • public



9
10
11
# File 'lib/puppet/network/format.rb', line 9

def intern_multiple_method
  @intern_multiple_method
end

#mimeObject

API:

  • public



8
9
10
# File 'lib/puppet/network/format.rb', line 8

def mime
  @mime
end

#nameObject (readonly)

API:

  • public



8
9
10
# File 'lib/puppet/network/format.rb', line 8

def name
  @name
end

#render_methodObject

API:

  • public



9
10
11
# File 'lib/puppet/network/format.rb', line 9

def render_method
  @render_method
end

#render_multiple_methodObject

API:

  • public



9
10
11
# File 'lib/puppet/network/format.rb', line 9

def render_multiple_method
  @render_multiple_method
end

#required_methodsObject

API:

  • public



9
10
11
# File 'lib/puppet/network/format.rb', line 9

def required_methods
  @required_methods
end

#weightObject

API:

  • public



9
10
11
# File 'lib/puppet/network/format.rb', line 9

def weight
  @weight
end

Instance Method Details

#init_attribute(name, default) ⇒ Object

API:

  • public



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

Raises:

API:

  • public



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

Raises:

API:

  • public



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

Raises:

API:

  • public



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

Raises:

API:

  • public



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

Returns:

API:

  • public



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

Returns:

API:

  • public



86
87
88
# File 'lib/puppet/network/format.rb', line 86

def supported?(klass)
  suitable? and required_methods_present?(klass)
end

#to_sObject

API:

  • public



90
91
92
# File 'lib/puppet/network/format.rb', line 90

def to_s
  "Puppet::Network::Format[#{name}]"
end