Module: Metasploit::Model::Configuration::Parent

Included in:
Metasploit::Model::Configuration
Defined in:
lib/metasploit/model/configuration/parent.rb

Overview

Instance Method Summary collapse

Instance Method Details

#child(name) ⇒ void

This method returns an undefined value.

Declares a Child with the given name.

Parameters:

  • name (Symbol)

    The name of the child.



7
8
9
10
11
12
13
14
15
16
17
18
19
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/metasploit/model/configuration/parent.rb', line 7

def child(name)
  child_class_attribute_name = "#{name}_class"
  child_class_instance_variable_name = "@#{child_class_attribute_name}".to_sym
  child_instance_variable_name = "@#{name}".to_sym

  #
  # Attributes
  #

  # @!attribute [rw] <name>_class
  #   The `Class` used to create {#<name>}.
  #
  #   @return [Class]
  attr_writer child_class_attribute_name

  #
  # Methods
  #

  define_method(name) do
    unless instance_variable_defined? child_instance_variable_name
      child_instance = send(child_class_attribute_name).new
      child_instance.configuration = self

      instance_variable_set child_instance_variable_name, child_instance
    end

    instance_variable_get child_instance_variable_name
  end

  define_method(child_class_attribute_name) do
    child_class = instance_variable_get child_class_instance_variable_name

    unless child_class
      require "metasploit/model/configuration/#{name}"

      child_class = "Metasploit::Model::Configuration::#{name.to_s.camelize}".constantize
      instance_variable_set child_class_instance_variable_name, child_class
    end

    child_class
  end
end