Class: Lono::Inspector::Summary

Inherits:
Base show all
Defined in:
lib/lono/inspector/summary.rb

Instance Method Summary collapse

Methods inherited from Base

#all_templates, #generate, #generate_templates, #run

Methods inherited from AbstractBase

#initialize, #reinitialize, #template_path

Methods included from Blueprint::Root

#find_blueprint_root, #set_blueprint_root

Constructor Details

This class inherits a constructor from Lono::AbstractBase

Instance Method Details

#description_example(description) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/lono/inspector/summary.rb', line 52

def description_example(description)
  default = ''
  return default unless description
  md = description.match(/(Example|IE): (.*)/)
  return default unless md
  md[2]
end

#output_templateObject



86
87
88
# File 'lib/lono/inspector/summary.rb', line 86

def output_template
  Lono::Output::Template.new(@blueprint, @template)
end

#parameter_line(name) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/lono/inspector/summary.rb', line 39

def parameter_line(name)
  data = parameters[name]
  example = description_example(data["Description"])
  if data["Default"].nil?
    line = "#{name}=#{example} # (required)"
  else
    default = data["Default"]
    line = "# #{name}=#{default}"
    line = "#{line} # #{example}" if example
  end
  line
end

#perform(template) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/lono/inspector/summary.rb', line 6

def perform(template)
  # little dirty but @template is used in data method so we dont have to pass it to the data method
  @template = template

  puts "=> CloudFormation Template Summary for template #{@template.color(:sienna)}:"
  return if @options[:noop]

  print_parameters_summary
  puts "# Resources:"
  print_resource_types
end


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/lono/inspector/summary.rb', line 18

def print_parameters_summary
  if parameters.empty?
    puts "There are no parameters in this template."
    return
  end

  shown = []
  puts "# Parameters Total (#{parameters.size})"
  parameter_groups.each do |label, parameters|
    puts "# Parameter Group (#{parameters.size}): #{label}".color(:sienna)
    parameters.each do |name|
      puts parameter_line(name)
      shown << name
    end
  end if output_template.parameter_groups

  parameters.each do |name, data|
    puts parameter_line(name) unless shown.include?(name)
  end
end


71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/lono/inspector/summary.rb', line 71

def print_resource_types
  unless resource_types
    puts "No resources found."
    return
  end

  types = resource_types.sort_by {|r| r[1] * -1} # Hash -> 2D Array
  types.each do |a|
    type, count = a
    printf "%3s %s\n", count, type
  end
  total = types.inject(0) { |sum,(type,count)| sum += count }
  printf "%3s %s\n", total, "Total"
end

#resource_typesObject



60
61
62
63
64
65
66
67
68
69
# File 'lib/lono/inspector/summary.rb', line 60

def resource_types
  resources = data["Resources"]
  return unless resources

  types = Hash.new(0)
  resources.each do |logical_id, resource|
    types[resource["Type"]] += 1
  end
  types
end