Module: AbideDevUtils::Ppt::CodeGen::DataTypes

Included in:
AbideDevUtils::Ppt::CodeIntrospection::Declaration, AbideDevUtils::Ppt::CodeIntrospection::Parameter
Defined in:
lib/abide_dev_utils/ppt/code_gen/data_types.rb

Instance Method Summary collapse

Instance Method Details

#display_type_expr(param) ⇒ Object

Displays a Puppet type expression (type signature) as a string

Parameters:

  • param (Puppet::Pops::Model::Parameter)

    AST Parameter node of a parsed Puppet manifest



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/abide_dev_utils/ppt/code_gen/data_types.rb', line 28

def display_type_expr(param)
  te = param.respond_to?(:type_expr) ? param.type_expr : param
  if te.respond_to? :left_expr
    display_type_expr_with_left_expr(te)
  elsif te.respond_to? :entries
    display_type_expr_with_entries(te)
  elsif te.respond_to? :cased_value
    te.cased_value
  elsif te.respond_to? :value
    te.value
  end
end

#display_type_expr_with_entries(te) ⇒ Object

Used by #display_type_expr



52
53
54
55
56
57
58
59
60
# File 'lib/abide_dev_utils/ppt/code_gen/data_types.rb', line 52

def display_type_expr_with_entries(te)
  te.entries.each_with_object({}) do |x, hsh|
    key = nil
    val = nil
    key = display_value(x.key) if x.respond_to? :key
    val = display_type_expr(x.value) if x.respond_to? :value
    hsh[key] = val if key
  end
end

#display_type_expr_with_left_expr(te) ⇒ Object

Used by #display_type_expr



42
43
44
45
46
47
48
49
# File 'lib/abide_dev_utils/ppt/code_gen/data_types.rb', line 42

def display_type_expr_with_left_expr(te)
  cased = nil
  keys = nil
  cased = te.left_expr.cased_value if te.left_expr.respond_to? :cased_value
  keys = te.keys.map { |x| display_type_expr(x) }.to_s if te.respond_to? :keys
  keys.tr!('"', '') unless cased == 'Enum'
  "#{cased}#{keys}"
end

#display_value(val) ⇒ Object

Displays a Puppet type value as a string



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/abide_dev_utils/ppt/code_gen/data_types.rb', line 14

def display_value(val)
  if val.is_a?(Puppet::Pops::Model::LiteralUndef)
    'undef'
  elsif val.respond_to?(:value)
    display_value(val.value)
  elsif val.respond_to?(:cased_value)
    display_value(val.cased_value)
  else
    val
  end
end

#infer_data_type(data) ⇒ Object



9
10
11
# File 'lib/abide_dev_utils/ppt/code_gen/data_types.rb', line 9

def infer_data_type(data)
  Puppet::Pops::Types::TypeCalculator.infer(data).to_s
end