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.



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

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



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/train/platforms/platform.rb', line 80

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



43
44
45
46
47
48
49
50
# File 'lib/train/platforms/platform.rb', line 43

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



33
34
35
# File 'lib/train/platforms/platform.rb', line 33

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

#find_family_hierarchy(platform = self) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/train/platforms/platform.rb', line 25

def find_family_hierarchy(platform = self)
  families = platform.families.each_with_object([]) do |(k, _v), memo|
    memo << k.name
    memo << find_family_hierarchy(k) unless k.families.empty?
  end
  @family_hierarchy = families.flatten
end

#nameObject



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

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

#title(title = nil) ⇒ Object



66
67
68
69
70
# File 'lib/train/platforms/platform.rb', line 66

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

#to_hashObject



72
73
74
# File 'lib/train/platforms/platform.rb', line 72

def to_hash
  @platform
end

#uuidObject



52
53
54
# File 'lib/train/platforms/platform.rb', line 52

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