Class: Jets::Stack

Inherits:
Object
  • Object
show all
Extended by:
Memoist
Includes:
Main::Dsl, Output::Dsl, Parameter::Dsl, Resource::Dsl
Defined in:
lib/jets/stack/output.rb,
lib/jets/stack.rb,
lib/jets/stack/main.rb,
lib/jets/stack/builder.rb,
lib/jets/stack/function.rb,
lib/jets/stack/main/dsl.rb,
lib/jets/stack/resource.rb,
lib/jets/stack/parameter.rb,
lib/jets/stack/definition.rb,
lib/jets/stack/output/dsl.rb,
lib/jets/stack/resource/dsl.rb,
lib/jets/stack/parameter/dsl.rb

Overview

Class that include Definition should implement:

template - method should use @definition to build a CloudFormation template section

Defined Under Namespace

Modules: Definition Classes: Builder, Function, Main, Output, Parameter, Resource

Class Method Summary collapse

Methods included from Resource::Dsl

#resources

Methods included from Output::Dsl

#outputs

Methods included from Parameter::Dsl

#add_common_parameters, #add_depends_on_parameters, #dependency_outputs, #parameters

Methods included from Main::Dsl

included

Class Method Details

.build?Boolean

Build it to figure out if we need to build the stack for the SharedBuilder

Returns:

  • (Boolean)


32
33
34
35
# File 'lib/jets/stack.rb', line 32

def build?
  empty = template == {"Parameters"=>{"IamRole"=>{"Type"=>"String"}, "S3Bucket"=>{"Type"=>"String"}}}
  !empty
end

.eager_load_shared_resources!Object



76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/jets/stack.rb', line 76

def eager_load_shared_resources!
  ActiveSupport::Dependencies.autoload_paths += ["#{Jets.root}app/shared/resources"]
  Dir.glob("#{Jets.root}app/shared/resources/*.rb").select do |path|
    next if !File.file?(path) or path =~ %r{/javascript/} or path =~ %r{/views/}

    class_name = path
                  .sub(/\.rb$/,'') # remove .rb
                  .sub(Jets.root.to_s,'') # remove ./
                  .sub(%r{app/shared/resources/},'') # remove app/shared/resources/
                  .classify
    class_name.constantize # use constantize instead of require so dont have to worry about order.
  end
end

.functionsObject



37
38
39
40
41
42
43
44
45
46
# File 'lib/jets/stack.rb', line 37

def functions
  stack = new
  # All the & because resources might be nil
  templates = stack.resources&.map(&:template)&.select do |t|
    attributes = t.values.first
    attributes['Type'] == 'AWS::Lambda::Function'
  end
  templates ||= []
  templates.map { |t| Function.new(t) }
end

.has_resources?Boolean

Usage:

Jets::Stack.has_resources?

Returns:

  • (Boolean)


68
69
70
# File 'lib/jets/stack.rb', line 68

def has_resources?
  !subclasses.empty?
end

.inherited(base) ⇒ Object



26
27
28
29
# File 'lib/jets/stack.rb', line 26

def inherited(base)
  super
  self.subclasses << base if base.name
end

.lookerObject



94
95
96
# File 'lib/jets/stack.rb', line 94

def looker
  Jets::Stack::Output::Lookup.new(self)
end

.lookup(logical_id) ⇒ Object



90
91
92
# File 'lib/jets/stack.rb', line 90

def lookup(logical_id)
  looker.output(logical_id)
end

.output_keysObject



99
100
101
102
# File 'lib/jets/stack.rb', line 99

def output_keys
  outputs = new.outputs || []
  outputs.map(&:template).map {|o| o.keys.first}
end

.subclassesObject

Track all command subclasses.



22
23
24
# File 'lib/jets/stack.rb', line 22

def subclasses
  @subclasses ||= []
end

.templateObject



48
49
50
51
52
53
54
55
56
57
# File 'lib/jets/stack.rb', line 48

def template
  # Pretty funny looking, creating an instance of stack to be passed to the Builder.
  # Another way of looking at it:
  #
  #   stack = new # MyStack.new
  #   builder = Jets::Stack::Builder.new(stack)
  #
  builder = Jets::Stack::Builder.new(new)
  builder.template
end