Class: Train::Platforms::Platform

Inherits:
Object
  • Object
show all
Includes:
Common
Defined in:
lib/train/platforms/platform.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Common

#detect, #in_family

Constructor Details

#initialize(name, condition = {}) ⇒ Platform

Returns a new instance of Platform.



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/train/platforms/platform.rb', line 8

def initialize(name, condition = {})
  @name = name
  @condition = condition
  @families = {}
  @family_hierarchy = []
  @platform = {}
  @detect = nil
  @title = name.to_s.capitalize

  # add itself to the platform list
  Train::Platforms.list[name] = self
end

Instance Attribute Details

#backendObject

Returns the value of attribute backend.



6
7
8
# File 'lib/train/platforms/platform.rb', line 6

def backend
  @backend
end

#conditionObject

Returns the value of attribute condition.



6
7
8
# File 'lib/train/platforms/platform.rb', line 6

def condition
  @condition
end

#familiesObject

Returns the value of attribute families.



6
7
8
# File 'lib/train/platforms/platform.rb', line 6

def families
  @families
end

#family_hierarchyObject

Returns the value of attribute family_hierarchy.



6
7
8
# File 'lib/train/platforms/platform.rb', line 6

def family_hierarchy
  @family_hierarchy
end

#platformObject

Returns the value of attribute platform.



6
7
8
# File 'lib/train/platforms/platform.rb', line 6

def platform
  @platform
end

Instance Method Details

#[](name) ⇒ Object

This is for backwords compatability with the current inspec os resource.



50
51
52
53
54
55
56
# File 'lib/train/platforms/platform.rb', line 50

def[](name)
  if respond_to?(name)
    send(name)
  else
    'unknown'
  end
end

#add_platform_methodsObject

Add generic family? and platform methods to an existing platform

This is done later to add any custom families/properties that were created



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/train/platforms/platform.rb', line 72

def add_platform_methods
  # Redo clean name if there is a detect override
  clean_name(force: true) unless @platform[:name].nil?

  # Add in family methods
  family_list = Train::Platforms.families
  family_list.each_value do |k|
    next if respond_to?(k.name + '?')
    define_singleton_method(k.name + '?') do
      family_hierarchy.include?(k.name)
    end
  end

  # Helper methods for direct platform info
  @platform.each_key do |m|
    next if respond_to?(m)
    define_singleton_method(m) do
      @platform[m]
    end
  end

  # Create method for name if its not already true
  m = name + '?'
  return if respond_to?(m)
  define_singleton_method(m) do
    true
  end
end

#clean_name(force: false) ⇒ Object



35
36
37
38
39
40
41
42
# File 'lib/train/platforms/platform.rb', line 35

def clean_name(force: false)
  @cleaned_name = nil if force
  @cleaned_name ||= begin
                      name = (@platform[:name] || @name)
                      name.downcase!.tr!(' ', '_') if name =~ /[A-Z ]/
                      name
                    end
end

#direct_familiesObject



21
22
23
# File 'lib/train/platforms/platform.rb', line 21

def direct_families
  @families.collect { |k, _v| k.name }
end

#familyObject



25
26
27
# File 'lib/train/platforms/platform.rb', line 25

def family
  @platform[:family] || @family_hierarchy[0]
end

#nameObject



29
30
31
32
33
# File 'lib/train/platforms/platform.rb', line 29

def name
  # Override here incase a updated name was set
  # during the detect logic
  clean_name
end

#title(title = nil) ⇒ Object



58
59
60
61
62
# File 'lib/train/platforms/platform.rb', line 58

def title(title = nil)
  return @title if title.nil?
  @title = title
  self
end

#to_hashObject



64
65
66
# File 'lib/train/platforms/platform.rb', line 64

def to_hash
  @platform
end

#uuidObject



44
45
46
# File 'lib/train/platforms/platform.rb', line 44

def uuid
  @uuid ||= Train::Platforms::Detect::UUID.new(self).find_or_create_uuid.downcase
end