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.

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:

  • (ArgumentError)


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
50
# 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)
  init_attribute(:charset, nil)

  method_list.each do |method, value|
    init_attribute(method, value)
  end

  raise ArgumentError, _("Unsupported option(s) %{options_list}") % { options_list: @options.keys } unless @options.empty?

  @options = nil

  instance_eval(&block) if block_given?
end

Instance Attribute Details

#charsetObject

Returns the value of attribute charset.



11
12
13
# File 'lib/puppet/network/format.rb', line 11

def charset
  @charset
end

#extensionObject

Returns the value of attribute extension.



11
12
13
# File 'lib/puppet/network/format.rb', line 11

def extension
  @extension
end

#intern_methodObject

Returns the value of attribute intern_method.



11
12
13
# File 'lib/puppet/network/format.rb', line 11

def intern_method
  @intern_method
end

#intern_multiple_methodObject

Returns the value of attribute intern_multiple_method.



11
12
13
# File 'lib/puppet/network/format.rb', line 11

def intern_multiple_method
  @intern_multiple_method
end

#mimeObject

Returns the value of attribute mime.



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

def mime
  @mime
end

#nameObject (readonly)

Returns the value of attribute name.



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

def name
  @name
end

#render_methodObject

Returns the value of attribute render_method.



11
12
13
# File 'lib/puppet/network/format.rb', line 11

def render_method
  @render_method
end

#render_multiple_methodObject

Returns the value of attribute render_multiple_method.



11
12
13
# File 'lib/puppet/network/format.rb', line 11

def render_multiple_method
  @render_multiple_method
end

#required_methodsObject

Returns the value of attribute required_methods.



11
12
13
# File 'lib/puppet/network/format.rb', line 11

def required_methods
  @required_methods
end

#weightObject

Returns the value of attribute weight.



11
12
13
# File 'lib/puppet/network/format.rb', line 11

def weight
  @weight
end

Instance Method Details

#init_attribute(name, default) ⇒ Object



13
14
15
16
17
18
# File 'lib/puppet/network/format.rb', line 13

def init_attribute(name, default)
  value = @options.delete(name)
  value = default if value.nil?

  send(name.to_s + "=", value)
end

#intern(klass, text) ⇒ Object

Raises:

  • (NotImplementedError)


52
53
54
55
56
# File 'lib/puppet/network/format.rb', line 52

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:

  • (NotImplementedError)


58
59
60
61
62
# File 'lib/puppet/network/format.rb', line 58

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:

  • (NotImplementedError)


68
69
70
71
72
# File 'lib/puppet/network/format.rb', line 68

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:

  • (NotImplementedError)


74
75
76
77
78
79
80
# File 'lib/puppet/network/format.rb', line 74

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, _("%{klass} does not respond to %{method}; can not render multiple instances to %{mime}") %
                             { klass: instances[0].class, method: render_multiple_method, mime: mime }
end

#required_methods_present?(klass) ⇒ Boolean

Returns:

  • (Boolean)


82
83
84
85
86
87
88
89
90
# File 'lib/puppet/network/format.rb', line 82

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:

  • (Boolean)


92
93
94
# File 'lib/puppet/network/format.rb', line 92

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

#to_sObject



96
97
98
# File 'lib/puppet/network/format.rb', line 96

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