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.



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

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



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
100
101
102
103
104
105
106
107
# File 'lib/train/platforms/platform.rb', line 75

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|
    name = "#{k.name}?"

    next if respond_to?(name)

    define_singleton_method(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



41
42
43
44
# File 'lib/train/platforms/platform.rb', line 41

def clean_name(force: false)
  @cleaned_name = nil if force
  @cleaned_name ||= (@platform[:name] || @name).downcase.tr(" ", "_")
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



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

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

#find_family_hierarchy(platform = self) ⇒ Object



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

def find_family_hierarchy(platform = self)
  families = platform.families.map { |k, v| [k.name, find_family_hierarchy(k)] }

  @family_hierarchy = families.flatten
end

#nameObject



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

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

#title(title = nil) ⇒ Object



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

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

  @title = title
  self
end

#to_hashObject



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

def to_hash
  @platform
end

#uuidObject



46
47
48
# File 'lib/train/platforms/platform.rb', line 46

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