jets 0.8.18 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitmodules +0 -3
- data/CHANGELOG.md +20 -1
- data/Gemfile.lock +6 -2
- data/README/prerelease.md +6 -0
- data/README/testing.md +41 -0
- data/Rakefile +9 -1
- data/jets.gemspec +1 -0
- data/lib/jets.rb +17 -18
- data/lib/jets/application.rb +26 -3
- data/lib/jets/aws_services.rb +26 -59
- data/lib/jets/aws_services/stack_status.rb +52 -0
- data/lib/jets/builders.rb +3 -2
- data/lib/jets/builders/handler_generator.rb +38 -2
- data/lib/jets/builders/shared_deducer.rb +32 -0
- data/lib/jets/cfn/builders.rb +3 -1
- data/lib/jets/cfn/builders/api_deployment_builder.rb +1 -1
- data/lib/jets/cfn/builders/api_gateway_builder.rb +1 -1
- data/lib/jets/cfn/builders/base_child_builder.rb +37 -7
- data/lib/jets/cfn/builders/controller_builder.rb +6 -1
- data/lib/jets/cfn/builders/function_builder.rb +5 -0
- data/lib/jets/cfn/builders/interface.rb +5 -6
- data/lib/jets/cfn/builders/job_builder.rb +5 -0
- data/lib/jets/cfn/builders/parent_builder.rb +17 -16
- data/lib/jets/cfn/builders/rule_builder.rb +6 -1
- data/lib/jets/cfn/builders/shared_builder.rb +14 -0
- data/lib/jets/commands.rb +9 -8
- data/lib/jets/commands/build.rb +36 -14
- data/lib/jets/commands/console.rb +1 -0
- data/lib/jets/commands/help/runner.md +17 -0
- data/lib/jets/commands/main.rb +7 -0
- data/lib/jets/commands/new.rb +39 -19
- data/lib/jets/commands/runner.rb +18 -0
- data/lib/jets/commands/sequence.rb +27 -1
- data/lib/jets/commands/templates/skeleton/.rspec +3 -0
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -1
- data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +2 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +2 -1
- data/lib/jets/commands/templates/skeleton/config/routes.rb +5 -1
- data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +5 -4
- data/lib/jets/core.rb +8 -6
- data/lib/jets/default/application.rb +1 -0
- data/lib/jets/generator.rb +1 -1
- data/lib/jets/inflections.rb +23 -0
- data/lib/jets/job/dsl.rb +69 -47
- data/lib/jets/klass.rb +6 -1
- data/lib/jets/lambda/dsl.rb +102 -34
- data/lib/jets/lambda/function_constructor.rb +2 -2
- data/lib/jets/lambda/task.rb +10 -5
- data/lib/jets/naming.rb +13 -2
- data/lib/jets/processors/deducer.rb +13 -2
- data/lib/jets/processors/main_processor.rb +1 -1
- data/lib/jets/rails_overrides.rb +1 -1
- data/lib/jets/resource.rb +20 -5
- data/lib/jets/resource/api_gateway/deployment.rb +0 -1
- data/lib/jets/resource/associated.rb +26 -0
- data/lib/jets/resource/base.rb +12 -0
- data/lib/jets/resource/child_stack.rb +2 -0
- data/lib/jets/resource/child_stack/api_deployment.rb +9 -15
- data/lib/jets/resource/child_stack/api_gateway.rb +8 -8
- data/lib/jets/resource/child_stack/app_class.rb +41 -16
- data/lib/jets/resource/child_stack/base.rb +24 -0
- data/lib/jets/resource/child_stack/shared.rb +90 -0
- data/lib/jets/resource/config.rb +4 -0
- data/lib/jets/resource/config/config_rule.rb +66 -0
- data/lib/jets/resource/config/managed_rule.rb +15 -0
- data/lib/jets/resource/events.rb +3 -0
- data/lib/jets/resource/events/rule.rb +31 -0
- data/lib/jets/resource/iam/application_role.rb +2 -2
- data/lib/jets/resource/iam/base_role_definition.rb +4 -2
- data/lib/jets/resource/iam/class_role.rb +50 -2
- data/lib/jets/resource/iam/function_role.rb +28 -0
- data/lib/jets/resource/iam/policy_document.rb +0 -4
- data/lib/jets/resource/permission.rb +12 -6
- data/lib/jets/resource/replacer.rb +4 -0
- data/lib/jets/resource/sns.rb +3 -0
- data/lib/jets/resource/standardizer.rb +42 -0
- data/lib/jets/router.rb +9 -1
- data/lib/jets/rule/dsl.rb +51 -78
- data/lib/jets/stack.rb +105 -0
- data/lib/jets/stack/builder.rb +38 -0
- data/lib/jets/stack/definition.rb +50 -0
- data/lib/jets/stack/function.rb +60 -0
- data/lib/jets/stack/main.rb +5 -0
- data/lib/jets/stack/main/dsl.rb +33 -0
- data/lib/jets/stack/main/extensions/base.rb +45 -0
- data/lib/jets/stack/main/extensions/cloudwatch.rb +19 -0
- data/lib/jets/stack/main/extensions/lambda.rb +69 -0
- data/lib/jets/stack/main/extensions/sns.rb +12 -0
- data/lib/jets/stack/main/extensions/sqs.rb +8 -0
- data/lib/jets/stack/output.rb +38 -0
- data/lib/jets/stack/output/dsl.rb +19 -0
- data/lib/jets/stack/output/lookup.rb +36 -0
- data/lib/jets/stack/parameter.rb +38 -0
- data/lib/jets/stack/parameter/dsl.rb +42 -0
- data/lib/jets/stack/resource.rb +30 -0
- data/lib/jets/stack/resource/dsl.rb +19 -0
- data/lib/jets/version.rb +1 -1
- metadata +53 -4
- data/support/clean +0 -3
- data/support/console +0 -3
@@ -15,7 +15,35 @@ class Jets::Builders
|
|
15
15
|
|
16
16
|
def generate
|
17
17
|
poly_shims
|
18
|
-
|
18
|
+
app_ruby_shim
|
19
|
+
shared_shims
|
20
|
+
end
|
21
|
+
|
22
|
+
def shared_shims
|
23
|
+
Jets::Stack.subclasses.each do |subclass|
|
24
|
+
subclass.functions.each do |fun|
|
25
|
+
if fun.lang.to_s == "ruby"
|
26
|
+
shared_ruby_shim(fun)
|
27
|
+
else
|
28
|
+
copy_source_as_handler(fun)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# app/shared/functions/kevin.py => /tmp/jets/demo/app_root/handlers/shared/functions/kevin.py
|
35
|
+
def copy_source_as_handler(fun)
|
36
|
+
source_path = fun.source_file
|
37
|
+
unless source_path
|
38
|
+
attributes = fun.template.values.first
|
39
|
+
function_name = attributes['Properties']['FunctionName']
|
40
|
+
puts "WARN: missing source file for: '#{function_name}' function".colorize(:yellow)
|
41
|
+
return
|
42
|
+
end
|
43
|
+
|
44
|
+
dest_path = "#{tmp_app_root}/#{fun.handler_dest}"
|
45
|
+
FileUtils.mkdir_p(File.dirname(dest_path))
|
46
|
+
FileUtils.cp(source_path, dest_path)
|
19
47
|
end
|
20
48
|
|
21
49
|
def poly_shims
|
@@ -55,10 +83,18 @@ class Jets::Builders
|
|
55
83
|
FileUtils.cp(source_path, dest_path)
|
56
84
|
end
|
57
85
|
|
86
|
+
def shared_ruby_shim(fun)
|
87
|
+
deducer = Jets::Builders::SharedDeducer.new(fun)
|
88
|
+
generate_shim(deducer)
|
89
|
+
end
|
90
|
+
|
58
91
|
# Generates one big node shim for a entire controller.
|
59
|
-
def
|
92
|
+
def app_ruby_shim
|
60
93
|
deducer = Jets::Builders::Deducer.new(@path)
|
94
|
+
generate_shim(deducer)
|
95
|
+
end
|
61
96
|
|
97
|
+
def generate_shim(deducer)
|
62
98
|
js_path = "#{tmp_app_root}/#{deducer.js_path}"
|
63
99
|
FileUtils.mkdir_p(File.dirname(js_path))
|
64
100
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# Deducer.new(path)
|
2
|
+
#
|
3
|
+
# @deducer.functions.each do |function_name|
|
4
|
+
# @deducer.handler_for(function_name)
|
5
|
+
# end
|
6
|
+
#
|
7
|
+
# Implements:
|
8
|
+
#
|
9
|
+
# functions
|
10
|
+
# handler_for(function_name)
|
11
|
+
# js_path
|
12
|
+
#
|
13
|
+
class Jets::Builders
|
14
|
+
class SharedDeducer < Deducer
|
15
|
+
def initialize(fun)
|
16
|
+
@fun = fun
|
17
|
+
end
|
18
|
+
|
19
|
+
def functions
|
20
|
+
[@fun.meth] # function_names
|
21
|
+
end
|
22
|
+
|
23
|
+
# dont need function_name arg but keeping the same interface as parent class
|
24
|
+
def handler_for(function_name)
|
25
|
+
@fun.handler_dest
|
26
|
+
end
|
27
|
+
|
28
|
+
def js_path
|
29
|
+
@fun.handler_dest
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/jets/cfn/builders.rb
CHANGED
@@ -9,11 +9,13 @@ class Jets::Cfn
|
|
9
9
|
# These build the app/controllers, app/jobs, and app/functions
|
10
10
|
autoload :BaseChildBuilder, "jets/cfn/builders/base_child_builder"
|
11
11
|
autoload :ControllerBuilder, "jets/cfn/builders/controller_builder"
|
12
|
-
autoload :JobBuilder, "jets/cfn/builders/job_builder"
|
13
12
|
autoload :FunctionBuilder, "jets/cfn/builders/function_builder"
|
13
|
+
autoload :JobBuilder, "jets/cfn/builders/job_builder"
|
14
14
|
autoload :RuleBuilder, "jets/cfn/builders/rule_builder"
|
15
15
|
|
16
16
|
autoload :ApiGatewayBuilder, "jets/cfn/builders/api_gateway_builder"
|
17
17
|
autoload :ApiDeploymentBuilder, "jets/cfn/builders/api_deployment_builder"
|
18
|
+
|
19
|
+
autoload :SharedBuilder, "jets/cfn/builders/shared_builder"
|
18
20
|
end
|
19
21
|
end
|
@@ -10,7 +10,7 @@ class Jets::Cfn::Builders
|
|
10
10
|
|
11
11
|
# compose is an interface method
|
12
12
|
def compose
|
13
|
-
return
|
13
|
+
return unless @options[:full] || @options[:stack_type] != :minimal
|
14
14
|
|
15
15
|
deployment = Jets::Resource::ApiGateway::Deployment.new
|
16
16
|
add_resource(deployment)
|
@@ -1,27 +1,57 @@
|
|
1
|
+
# Implements:
|
2
|
+
#
|
3
|
+
# * template_path
|
4
|
+
#
|
5
|
+
# FYI
|
6
|
+
#
|
7
|
+
# * compose implemented by the classes that include this
|
1
8
|
class Jets::Cfn::Builders
|
2
9
|
class BaseChildBuilder
|
3
10
|
include Interface
|
4
11
|
|
5
|
-
# The
|
12
|
+
# The app_class is can be a controller, job or anonymous function class.
|
6
13
|
# IE: PostsController, HardJob
|
7
|
-
def initialize(
|
8
|
-
@
|
14
|
+
def initialize(app_class)
|
15
|
+
@app_class = app_class
|
9
16
|
@template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
|
10
17
|
end
|
11
18
|
|
12
19
|
# template_path is an interface method for Interface module
|
13
20
|
def template_path
|
14
|
-
Jets::Naming.
|
21
|
+
Jets::Naming.app_template_path(@app_class)
|
15
22
|
end
|
16
23
|
|
17
24
|
def add_common_parameters
|
18
25
|
add_parameter("IamRole", Description: "Iam Role that Lambda function uses.")
|
19
26
|
add_parameter("S3Bucket", Description: "S3 Bucket for source code.")
|
27
|
+
depends_on_params.each do |logical_id, desc|
|
28
|
+
add_parameter(logical_id, Description: desc)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def depends_on_params
|
33
|
+
return {} unless @app_class.depends_on
|
34
|
+
|
35
|
+
params = {}
|
36
|
+
@app_class.depends_on.each do |shared_stack|
|
37
|
+
dependency = shared_stack.to_s.camelize # logical_id
|
38
|
+
dependency_outputs(dependency).each do |output|
|
39
|
+
dependency_class = dependency.to_s.classify
|
40
|
+
desc = "From #{dependency_class}.Outputs.#{output}"
|
41
|
+
# key: logical_id , value: description
|
42
|
+
params[output] = desc
|
43
|
+
end
|
44
|
+
end
|
45
|
+
params
|
46
|
+
end
|
47
|
+
|
48
|
+
def dependency_outputs(dependency)
|
49
|
+
dependency.to_s.classify.constantize.output_keys
|
20
50
|
end
|
21
51
|
|
22
52
|
def add_functions
|
23
53
|
add_class_iam_policy
|
24
|
-
@
|
54
|
+
@app_class.tasks.each do |task|
|
25
55
|
add_function(task)
|
26
56
|
add_function_iam_policy(task)
|
27
57
|
end
|
@@ -33,9 +63,9 @@ class Jets::Cfn::Builders
|
|
33
63
|
end
|
34
64
|
|
35
65
|
def add_class_iam_policy
|
36
|
-
return unless @
|
66
|
+
return unless @app_class.build_class_iam?
|
37
67
|
|
38
|
-
resource = Jets::Resource::Iam::ClassRole.new(@
|
68
|
+
resource = Jets::Resource::Iam::ClassRole.new(@app_class)
|
39
69
|
add_resource(resource)
|
40
70
|
end
|
41
71
|
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Implements:
|
2
|
+
#
|
3
|
+
# compose
|
4
|
+
# template_path
|
5
|
+
#
|
1
6
|
class Jets::Cfn::Builders
|
2
7
|
class ControllerBuilder < BaseChildBuilder
|
3
8
|
# compose is an interface method for Interface module
|
@@ -30,7 +35,7 @@ class Jets::Cfn::Builders
|
|
30
35
|
# routes scoped to this controller template.
|
31
36
|
def scoped_routes
|
32
37
|
@routes ||= Jets::Router.routes.select do |route|
|
33
|
-
route.controller_name == @
|
38
|
+
route.controller_name == @app_class.to_s
|
34
39
|
end
|
35
40
|
end
|
36
41
|
end
|
@@ -7,9 +7,8 @@ class Jets::Cfn::Builders
|
|
7
7
|
extend Memoist
|
8
8
|
|
9
9
|
def build
|
10
|
-
# Do not bother building
|
11
|
-
|
12
|
-
return if @app_klass && !@app_klass.build?
|
10
|
+
# Do not bother building or writing the template unless there are functions defined
|
11
|
+
return if @app_class && !@app_class.build?
|
13
12
|
|
14
13
|
compose # must be implemented by subclass
|
15
14
|
write
|
@@ -74,9 +73,9 @@ class Jets::Cfn::Builders
|
|
74
73
|
end
|
75
74
|
|
76
75
|
def add_resources
|
77
|
-
@
|
78
|
-
task.
|
79
|
-
resource = Jets::Resource.new(definition, task.replacements)
|
76
|
+
@app_class.tasks.each do |task|
|
77
|
+
task.associated_resources.each do |associated|
|
78
|
+
resource = Jets::Resource.new(associated.definition, task.replacements)
|
80
79
|
add_resource(resource)
|
81
80
|
add_resource(resource.permission)
|
82
81
|
end
|
@@ -15,7 +15,7 @@ class Jets::Cfn::Builders
|
|
15
15
|
puts "Building parent CloudFormation template."
|
16
16
|
|
17
17
|
build_minimal_resources
|
18
|
-
build_child_resources
|
18
|
+
build_child_resources if @options[:full] || @options[:stack_type] == :full
|
19
19
|
end
|
20
20
|
|
21
21
|
# template_path is an interface method
|
@@ -38,26 +38,37 @@ class Jets::Cfn::Builders
|
|
38
38
|
def build_child_resources
|
39
39
|
puts "Building child CloudFormation templates."
|
40
40
|
|
41
|
-
expression = "#{Jets::Naming.template_path_prefix}-*"
|
41
|
+
expression = "#{Jets::Naming.template_path_prefix}-app-*"
|
42
42
|
# IE: path: #{Jets.build_root}/templates/demo-dev-2-comments_controller.yml
|
43
43
|
Dir.glob(expression).each do |path|
|
44
44
|
next unless File.file?(path)
|
45
|
-
next if api_gateway_paths.include?(path) # specially treated
|
46
|
-
|
47
45
|
add_app_class_stack(path)
|
48
46
|
end
|
49
47
|
|
50
|
-
|
48
|
+
expression = "#{Jets::Naming.template_path_prefix}-shared-*"
|
49
|
+
# IE: path: #{Jets.build_root}/templates/demo-dev-2-shared-resources.yml
|
50
|
+
Dir.glob(expression).each do |path|
|
51
|
+
next unless File.file?(path)
|
52
|
+
|
53
|
+
add_shared_resources(path)
|
54
|
+
end
|
55
|
+
|
56
|
+
if (@options[:full] || @options[:stack_type] == :full) and !Jets::Router.routes.empty?
|
51
57
|
add_api_gateway
|
52
58
|
add_api_deployment
|
53
59
|
end
|
54
60
|
end
|
55
61
|
|
56
62
|
def add_app_class_stack(path)
|
57
|
-
resource = Jets::Resource::ChildStack::AppClass.new(
|
63
|
+
resource = Jets::Resource::ChildStack::AppClass.new(@options[:s3_bucket], path: path)
|
58
64
|
add_child_resources(resource)
|
59
65
|
end
|
60
66
|
|
67
|
+
def add_shared_resources(path)
|
68
|
+
resource = Jets::Resource::ChildStack::Shared.new(@options[:s3_bucket], path: path)
|
69
|
+
add_child_resources(resource) if resource.resources?
|
70
|
+
end
|
71
|
+
|
61
72
|
def add_api_gateway
|
62
73
|
resource = Jets::Resource::ChildStack::ApiGateway.new(@options[:s3_bucket])
|
63
74
|
add_child_resources(resource)
|
@@ -72,15 +83,5 @@ class Jets::Cfn::Builders
|
|
72
83
|
add_resource(resource)
|
73
84
|
add_outputs(resource.outputs)
|
74
85
|
end
|
75
|
-
|
76
|
-
def api_gateway_paths
|
77
|
-
files = %w[
|
78
|
-
api-deployment.yml
|
79
|
-
api-gateway.yml
|
80
|
-
]
|
81
|
-
files.map do |name|
|
82
|
-
"#{Jets::Naming.template_path_prefix}-#{name}"
|
83
|
-
end
|
84
|
-
end
|
85
86
|
end
|
86
87
|
end
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Implements:
|
2
|
+
#
|
3
|
+
# compose
|
4
|
+
# template_path
|
5
|
+
#
|
1
6
|
class Jets::Cfn::Builders
|
2
7
|
class RuleBuilder < BaseChildBuilder
|
3
8
|
def compose
|
@@ -10,7 +15,7 @@ class Jets::Cfn::Builders
|
|
10
15
|
# Handle config_rules associated with aws managed rules.
|
11
16
|
# List of AWS Config Managed Rules: https://amzn.to/2BOt9KN
|
12
17
|
def add_managed_rules
|
13
|
-
@
|
18
|
+
@app_class.managed_rules.each do |rule|
|
14
19
|
resource = Jets::Resource.new(rule[:definition], rule[:replacements])
|
15
20
|
add_resource(resource)
|
16
21
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Jets::Cfn::Builders
|
2
|
+
class SharedBuilder < BaseChildBuilder
|
3
|
+
def compose
|
4
|
+
stack = @app_class.new # @app_class is subclass. IE: Alarm < Jets::Stack
|
5
|
+
builder = Jets::Stack::Builder.new(stack)
|
6
|
+
@template = builder.template # overwrite entire @template
|
7
|
+
end
|
8
|
+
|
9
|
+
# template_path is an interface method for Interface module
|
10
|
+
def template_path
|
11
|
+
Jets::Naming.shared_template_path(@app_class)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/jets/commands.rb
CHANGED
@@ -1,23 +1,24 @@
|
|
1
1
|
module Jets::Commands
|
2
|
-
autoload :Help, "jets/commands/help"
|
3
2
|
autoload :Base, "jets/commands/base"
|
4
3
|
autoload :Build, "jets/commands/build"
|
5
|
-
autoload :Deploy, "jets/commands/deploy"
|
6
|
-
autoload :Delete, "jets/commands/delete"
|
7
|
-
autoload :New, "jets/commands/new"
|
8
4
|
autoload :Call, "jets/commands/call"
|
5
|
+
autoload :Clean, "jets/commands/clean"
|
9
6
|
autoload :Console, "jets/commands/console"
|
10
7
|
autoload :Db, "jets/commands/db"
|
8
|
+
autoload :Dbconsole, "jets/commands/dbconsole"
|
9
|
+
autoload :Delete, "jets/commands/delete"
|
10
|
+
autoload :Deploy, "jets/commands/deploy"
|
11
11
|
autoload :Dynamodb, "jets/commands/dynamodb"
|
12
|
+
autoload :Help, "jets/commands/help"
|
12
13
|
autoload :Main, "jets/commands/main"
|
14
|
+
autoload :Markdown, "jets/commands/markdown"
|
15
|
+
autoload :New, "jets/commands/new"
|
13
16
|
autoload :Process, "jets/commands/process"
|
14
17
|
autoload :RakeCommand, "jets/commands/rake_command"
|
15
18
|
autoload :RakeTasks, 'jets/commands/rake_tasks'
|
16
|
-
autoload :
|
19
|
+
autoload :Runner, 'jets/commands/runner'
|
17
20
|
autoload :Sequence, "jets/commands/sequence"
|
18
21
|
autoload :StackInfo, "jets/commands/stack_info"
|
19
|
-
autoload :Dbconsole, "jets/commands/dbconsole"
|
20
22
|
autoload :Url, "jets/commands/url"
|
21
|
-
autoload :
|
22
|
-
autoload :Clean, "jets/commands/clean"
|
23
|
+
autoload :WebpackerTemplate, 'jets/commands/webpacker_template'
|
23
24
|
end
|
data/lib/jets/commands/build.rb
CHANGED
@@ -31,10 +31,10 @@ module Jets::Commands
|
|
31
31
|
time :build_code
|
32
32
|
|
33
33
|
def build_templates
|
34
|
-
if @options[:stack_type] == :
|
35
|
-
build_minimal_template
|
36
|
-
else
|
34
|
+
if @options[:full] || @options[:stack_type] == :full
|
37
35
|
build_all_templates
|
36
|
+
else
|
37
|
+
build_minimal_template
|
38
38
|
end
|
39
39
|
end
|
40
40
|
time :build_templates
|
@@ -45,8 +45,10 @@ module Jets::Commands
|
|
45
45
|
# 1. Shared templates - child templates needs them
|
46
46
|
build_api_gateway_templates
|
47
47
|
# 2. Child templates - parent template needs them
|
48
|
-
|
49
|
-
#
|
48
|
+
build_app_child_templates
|
49
|
+
# 2. Child templates - parent template needs them
|
50
|
+
build_shared_resources_templates
|
51
|
+
# 4. Finally parent template
|
50
52
|
build_parent_template # must be called at the end
|
51
53
|
end
|
52
54
|
|
@@ -59,19 +61,21 @@ module Jets::Commands
|
|
59
61
|
Jets::Cfn::Builders::ApiDeploymentBuilder.new(@options).build
|
60
62
|
end
|
61
63
|
|
62
|
-
def
|
64
|
+
def build_app_child_templates
|
63
65
|
app_files.each do |path|
|
64
66
|
build_child_template(path)
|
65
67
|
end
|
66
68
|
end
|
67
69
|
|
70
|
+
def build_shared_resources_templates
|
71
|
+
Jets::Stack.subclasses.each do |subclass|
|
72
|
+
Jets::Cfn::Builders::SharedBuilder.new(subclass).build
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
68
76
|
# path: app/controllers/comments_controller.rb
|
69
77
|
# path: app/jobs/easy_job.rb
|
70
78
|
def build_child_template(path)
|
71
|
-
class_path = path.sub(%r{.*app/\w+/},'').sub(/\.rb$/,'')
|
72
|
-
class_name = class_path.classify
|
73
|
-
class_name.constantize # load app/**/* class definition
|
74
|
-
|
75
79
|
md = path.match(%r{app/(.*?)/}) # extract: controller, job or function
|
76
80
|
process_class = md[1].classify
|
77
81
|
builder_class = "Jets::Cfn::Builders::#{process_class}Builder".constantize
|
@@ -82,8 +86,8 @@ module Jets::Commands
|
|
82
86
|
# Jets::Cfn::Builders::RuleBuilder.new(CheckRule)
|
83
87
|
# Jets::Cfn::Builders::FunctionBuilder.new(Hello)
|
84
88
|
# Jets::Cfn::Builders::FunctionBuilder.new(HelloFunction)
|
85
|
-
|
86
|
-
builder = builder_class.new(
|
89
|
+
app_class = Jets::Klass.from_path(path)
|
90
|
+
builder = builder_class.new(app_class)
|
87
91
|
builder.build
|
88
92
|
end
|
89
93
|
|
@@ -119,6 +123,24 @@ module Jets::Commands
|
|
119
123
|
paths
|
120
124
|
end
|
121
125
|
|
126
|
+
def shared_files
|
127
|
+
self.class.shared_files
|
128
|
+
end
|
129
|
+
|
130
|
+
def self.shared_files
|
131
|
+
paths = []
|
132
|
+
expression = "#{Jets.root}app/**/**/*.rb"
|
133
|
+
Dir.glob(expression).each do |path|
|
134
|
+
return false unless File.file?(path)
|
135
|
+
next unless path.include?("app/shared/resources")
|
136
|
+
|
137
|
+
relative_path = path.sub(Jets.root.to_s, '')
|
138
|
+
# Rids of the Jets.root at beginning
|
139
|
+
paths << relative_path
|
140
|
+
end
|
141
|
+
paths
|
142
|
+
end
|
143
|
+
|
122
144
|
def self.poly_only?
|
123
145
|
# Scans all the app code and look for any methods that are ruby.
|
124
146
|
# If any method is written in ruby then we know the app is not a
|
@@ -129,8 +151,8 @@ module Jets::Commands
|
|
129
151
|
app_file = path.sub(%r{app/\w+/},'').sub(/\.rb$/,'')
|
130
152
|
# Internal jets controllers like Welcome and Public need a different regexp
|
131
153
|
app_file = app_file.sub(%r{.*lib/jets/internal/},'')
|
132
|
-
|
133
|
-
langs =
|
154
|
+
app_class = app_file.classify.constantize # IE: PostsController, Jets::PublicController
|
155
|
+
langs = app_class.tasks.map(&:lang)
|
134
156
|
langs.include?(:ruby)
|
135
157
|
end
|
136
158
|
!has_ruby
|