jets 0.8.0 → 0.8.1
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/CHANGELOG.md +6 -0
- data/Gemfile.lock +3 -1
- data/jets.gemspec +2 -0
- data/lib/jets/application.rb +1 -1
- data/lib/jets/cfn.rb +1 -2
- data/lib/jets/cfn/builders.rb +19 -0
- data/lib/jets/cfn/builders/api_deployment_builder.rb +32 -0
- data/lib/jets/cfn/{template_builders → builders}/api_gateway_builder.rb +10 -21
- data/lib/jets/cfn/builders/base_child_builder.rb +49 -0
- data/lib/jets/cfn/{template_builders → builders}/controller_builder.rb +7 -7
- data/lib/jets/cfn/{template_builders → builders}/function_builder.rb +1 -2
- data/lib/jets/cfn/builders/interface.rb +128 -0
- data/lib/jets/cfn/{template_builders → builders}/job_builder.rb +2 -2
- data/lib/jets/cfn/builders/parent_builder.rb +84 -0
- data/lib/jets/cfn/{template_builders → builders}/rule_builder.rb +4 -5
- data/lib/jets/commands/base.rb +1 -1
- data/lib/jets/commands/build.rb +11 -15
- data/lib/jets/commands/delete.rb +12 -0
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +1 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +1 -1
- data/lib/jets/commands/url.rb +10 -12
- data/lib/jets/controller/base.rb +2 -2
- data/lib/jets/core.rb +1 -1
- data/lib/jets/core_ext/kernel.rb +11 -1
- data/lib/jets/internal/app/controllers/jets/public_controller.rb +11 -8
- data/lib/jets/lambda/dsl.rb +1 -1
- data/lib/jets/lambda/task.rb +9 -1
- data/lib/jets/naming.rb +2 -2
- data/lib/jets/pascalize.rb +9 -1
- data/lib/jets/poly_fun/base_executor.rb +2 -2
- data/lib/jets/preheat.rb +2 -2
- data/lib/jets/rails_overrides/common_methods.rb +1 -1
- data/lib/jets/resource.rb +55 -5
- data/lib/jets/resource/api_gateway.rb +7 -0
- data/lib/jets/resource/{route → api_gateway}/cors.rb +11 -10
- data/lib/jets/resource/api_gateway/deployment.rb +75 -0
- data/lib/jets/resource/{route.rb → api_gateway/method.rb} +26 -22
- data/lib/jets/{cfn/template_mappers/gateway_resource_mapper.rb → resource/api_gateway/resource.rb} +41 -27
- data/lib/jets/resource/api_gateway/rest_api.rb +23 -0
- data/lib/jets/resource/base.rb +17 -0
- data/lib/jets/resource/child_stack.rb +5 -0
- data/lib/jets/resource/child_stack/api_deployment.rb +58 -0
- data/lib/jets/resource/child_stack/api_gateway.rb +29 -0
- data/lib/jets/resource/child_stack/app_class.rb +81 -0
- data/lib/jets/resource/function.rb +184 -0
- data/lib/jets/resource/iam.rb +8 -0
- data/lib/jets/resource/iam/application_role.rb +27 -0
- data/lib/jets/resource/iam/base_role_definition.rb +44 -0
- data/lib/jets/resource/iam/class_role.rb +25 -0
- data/lib/jets/resource/iam/function_role.rb +25 -0
- data/lib/jets/{cfn/template_builders/managed_iam_policy/base_policy.rb → resource/iam/managed_policy.rb} +6 -6
- data/lib/jets/resource/iam/policy_document.rb +43 -0
- data/lib/jets/resource/permission.rb +38 -21
- data/lib/jets/resource/replacer.rb +50 -17
- data/lib/jets/resource/s3.rb +17 -0
- data/lib/jets/route.rb +3 -1
- data/lib/jets/rule/dsl.rb +7 -1
- data/lib/jets/server/route_matcher.rb +2 -1
- data/lib/jets/version.rb +1 -1
- metadata +46 -52
- data/lib/jets/cfn/template_builders.rb +0 -25
- data/lib/jets/cfn/template_builders/api_gateway_deployment_builder.rb +0 -38
- data/lib/jets/cfn/template_builders/base_child_builder.rb +0 -72
- data/lib/jets/cfn/template_builders/function_properties.rb +0 -6
- data/lib/jets/cfn/template_builders/function_properties/base_builder.rb +0 -128
- data/lib/jets/cfn/template_builders/function_properties/node_builder.rb +0 -12
- data/lib/jets/cfn/template_builders/function_properties/python_builder.rb +0 -12
- data/lib/jets/cfn/template_builders/function_properties/ruby_builder.rb +0 -13
- data/lib/jets/cfn/template_builders/iam_policy.rb +0 -6
- data/lib/jets/cfn/template_builders/iam_policy/application_policy.rb +0 -19
- data/lib/jets/cfn/template_builders/iam_policy/base_policy.rb +0 -57
- data/lib/jets/cfn/template_builders/iam_policy/class_policy.rb +0 -20
- data/lib/jets/cfn/template_builders/iam_policy/function_policy.rb +0 -21
- data/lib/jets/cfn/template_builders/interface.rb +0 -97
- data/lib/jets/cfn/template_builders/managed_iam_policy.rb +0 -6
- data/lib/jets/cfn/template_builders/managed_iam_policy/application_policy.rb +0 -11
- data/lib/jets/cfn/template_builders/managed_iam_policy/class_policy.rb +0 -10
- data/lib/jets/cfn/template_builders/managed_iam_policy/function_policy.rb +0 -10
- data/lib/jets/cfn/template_builders/parent_builder.rb +0 -95
- data/lib/jets/cfn/template_builders/templates/minimal-stack.yml +0 -9
- data/lib/jets/cfn/template_mappers.rb +0 -22
- data/lib/jets/cfn/template_mappers/api_gateway_deployment_mapper.rb +0 -48
- data/lib/jets/cfn/template_mappers/api_gateway_mapper.rb +0 -4
- data/lib/jets/cfn/template_mappers/child_mapper.rb +0 -41
- data/lib/jets/cfn/template_mappers/controller_mapper.rb +0 -36
- data/lib/jets/cfn/template_mappers/function_mapper.rb +0 -4
- data/lib/jets/cfn/template_mappers/iam_policy.rb +0 -6
- data/lib/jets/cfn/template_mappers/iam_policy/application_policy_mapper.rb +0 -37
- data/lib/jets/cfn/template_mappers/iam_policy/base_policy_mapper.rb +0 -49
- data/lib/jets/cfn/template_mappers/iam_policy/class_policy_mapper.rb +0 -42
- data/lib/jets/cfn/template_mappers/iam_policy/function_policy_mapper.rb +0 -42
- data/lib/jets/cfn/template_mappers/job_mapper.rb +0 -4
- data/lib/jets/cfn/template_mappers/lambda_function_mapper.rb +0 -52
- data/lib/jets/cfn/template_mappers/rule_mapper.rb +0 -5
- data/lib/jets/resource/attributes.rb +0 -46
- data/lib/jets/resource/creator.rb +0 -17
- data/lib/jets/resource/replacer/base.rb +0 -98
- data/lib/jets/resource/replacer/config_rule.rb +0 -18
- data/lib/jets/resource/route/attributes.rb +0 -8
@@ -1,48 +0,0 @@
|
|
1
|
-
class Jets::Cfn::TemplateMappers
|
2
|
-
class ApiGatewayDeploymentMapper < ChildMapper
|
3
|
-
def logical_id
|
4
|
-
self.class.logical_id
|
5
|
-
end
|
6
|
-
|
7
|
-
def timestamp
|
8
|
-
self.class.timestamp
|
9
|
-
end
|
10
|
-
|
11
|
-
# stage_name: stag, stag-1, stag-2, etc
|
12
|
-
def stage_name
|
13
|
-
self.class.stage_name
|
14
|
-
end
|
15
|
-
|
16
|
-
def parameters
|
17
|
-
{
|
18
|
-
RestApi: "!GetAtt ApiGateway.Outputs.RestApi"
|
19
|
-
}
|
20
|
-
end
|
21
|
-
|
22
|
-
def depends_on
|
23
|
-
expression = "#{Jets::Naming.template_path_prefix}-*_controller*"
|
24
|
-
controller_logical_ids = []
|
25
|
-
Dir.glob(expression).each do |path|
|
26
|
-
next unless File.file?(path)
|
27
|
-
# @s3_bucket is available from the inherited ChildMapper class
|
28
|
-
map = ChildMapper.new(path, @s3_bucket)
|
29
|
-
controller_logical_ids << map.logical_id
|
30
|
-
end
|
31
|
-
controller_logical_ids
|
32
|
-
end
|
33
|
-
|
34
|
-
# Returns: "ApiGatewayDeployment[timestamp]"
|
35
|
-
def self.logical_id
|
36
|
-
"ApiGatewayDeployment#{timestamp}"
|
37
|
-
end
|
38
|
-
|
39
|
-
@@timestamp = nil
|
40
|
-
def self.timestamp
|
41
|
-
@@timestamp ||= Time.now.strftime("%Y%m%d%H%M%S")
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.stage_name
|
45
|
-
[Jets.config.short_env, Jets.config.env_extra].compact.join('_').gsub('-','_') # Stage name only allows a-zA-Z0-9_
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
class Jets::Cfn::TemplateMappers
|
2
|
-
class ChildMapper
|
3
|
-
attr_reader :path
|
4
|
-
def initialize(path, s3_bucket)
|
5
|
-
# "#{Jets.build_root}/templates/demo-dev-posts_controller.yml"
|
6
|
-
@path = path
|
7
|
-
@s3_bucket = s3_bucket
|
8
|
-
end
|
9
|
-
|
10
|
-
# common parameters to all child stacks
|
11
|
-
def parameters
|
12
|
-
{
|
13
|
-
# YAML.dump converts it to a string
|
14
|
-
# !GetAtt Base.Outputs.IamRole => "!GetAtt Base.Outputs.IamRole"
|
15
|
-
# But post processing of the template fixes this
|
16
|
-
IamRole: "!GetAtt IamRole.Arn",
|
17
|
-
S3Bucket: "!Ref S3Bucket",
|
18
|
-
}
|
19
|
-
end
|
20
|
-
|
21
|
-
# Example: PostsController
|
22
|
-
def logical_id
|
23
|
-
regexp = Regexp.new(".*#{Jets.config.project_namespace}-")
|
24
|
-
contoller_name = @path.sub(regexp, '').sub('.yml', '')
|
25
|
-
# map the path to a camelized logical_id. Example:
|
26
|
-
# /tmp/jets/demo/templates/demo-dev-2-posts_controller.yml to
|
27
|
-
# PostsController
|
28
|
-
contoller_name.underscore.camelize
|
29
|
-
end
|
30
|
-
|
31
|
-
def template_url
|
32
|
-
# here's where it gets interesting with the bucket. The bucket will
|
33
|
-
# need to exist for the child templates. But wont be created until the stack
|
34
|
-
# has been first launched. We can create the bucket in a separate stack
|
35
|
-
# And then grab it and then store it in a cache file.
|
36
|
-
basename = File.basename(@path)
|
37
|
-
# IE: https://s3.amazonaws.com/[bucket]/jets/cfn-templates/demo-dev-posts_controller.yml"
|
38
|
-
"https://s3.amazonaws.com/#{@s3_bucket}/jets/cfn-templates/#{basename}"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
class Jets::Cfn::TemplateMappers
|
2
|
-
class ControllerMapper < ChildMapper
|
3
|
-
# Parameters that are common to all controller stacks
|
4
|
-
def parameters
|
5
|
-
parameters = super
|
6
|
-
return parameters if Jets::Router.routes.empty?
|
7
|
-
|
8
|
-
# Add the API Gateway parameters
|
9
|
-
parameters[:RestApi] = "!GetAtt ApiGateway.Outputs.RestApi"
|
10
|
-
scoped_routes.each do |route|
|
11
|
-
map = GatewayResourceMapper.new(route.path)
|
12
|
-
parameters[map.logical_id] = "!GetAtt ApiGateway.Outputs.#{map.logical_id}"
|
13
|
-
end
|
14
|
-
|
15
|
-
parameters
|
16
|
-
end
|
17
|
-
|
18
|
-
def scoped_routes
|
19
|
-
@routes ||= Jets::Router.routes.select do |route|
|
20
|
-
route.controller_name == current_class
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# Example:
|
25
|
-
# 1. demo-stag-admin-related_pages_controller.yml
|
26
|
-
# 2. admin/posts_controller
|
27
|
-
# 3. Admin::PostsController
|
28
|
-
def current_class
|
29
|
-
templates_prefix = "#{Jets::Naming.template_path_prefix}-"
|
30
|
-
@path.sub(templates_prefix, '')
|
31
|
-
.sub(/\.yml$/,'')
|
32
|
-
.gsub('-','/')
|
33
|
-
.classify
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,6 +0,0 @@
|
|
1
|
-
module Jets::Cfn::TemplateMappers::IamPolicy
|
2
|
-
autoload :ApplicationPolicyMapper, "jets/cfn/template_mappers/iam_policy/application_policy_mapper"
|
3
|
-
autoload :BasePolicyMapper, "jets/cfn/template_mappers/iam_policy/base_policy_mapper"
|
4
|
-
autoload :ClassPolicyMapper, "jets/cfn/template_mappers/iam_policy/class_policy_mapper"
|
5
|
-
autoload :FunctionPolicyMapper, "jets/cfn/template_mappers/iam_policy/function_policy_mapper"
|
6
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# Implements:
|
2
|
-
#
|
3
|
-
# initialize
|
4
|
-
# iam_policy
|
5
|
-
# managed_iam_policy
|
6
|
-
# logical_id
|
7
|
-
# role_name
|
8
|
-
#
|
9
|
-
module Jets::Cfn::TemplateMappers::IamPolicy
|
10
|
-
class ApplicationPolicyMapper < BasePolicyMapper
|
11
|
-
def initialize; end # does nothing
|
12
|
-
|
13
|
-
# Assume we always have at least some baseline iam policy permissions.
|
14
|
-
def iam_policy
|
15
|
-
Jets::Cfn::TemplateBuilders::IamPolicy::ApplicationPolicy.new
|
16
|
-
end
|
17
|
-
memoize :iam_policy
|
18
|
-
|
19
|
-
def managed_iam_policy
|
20
|
-
return unless Jets.config.managed_iam_policy
|
21
|
-
|
22
|
-
Jets::Cfn::TemplateBuilders::ManagedIamPolicy::ApplicationPolicy.new
|
23
|
-
end
|
24
|
-
memoize :managed_iam_policy
|
25
|
-
|
26
|
-
# Example: PostsControllerLambdaFunction
|
27
|
-
# Note there are is no "Show" action in the name
|
28
|
-
def logical_id
|
29
|
-
"IamRole" # very simple logical ideal for the application-wide logical id
|
30
|
-
end
|
31
|
-
|
32
|
-
# There should be namespace in the role_name.
|
33
|
-
def role_name
|
34
|
-
"#{namespace}_application_iam_role".underscore.dasherize
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
# Class that inherits this base class should implement:
|
2
|
-
#
|
3
|
-
# initialize
|
4
|
-
# iam_policy
|
5
|
-
# managed_iam_policy
|
6
|
-
# logical_id
|
7
|
-
# role_name
|
8
|
-
#
|
9
|
-
module Jets::Cfn::TemplateMappers::IamPolicy
|
10
|
-
class BasePolicyMapper
|
11
|
-
extend Memoist
|
12
|
-
|
13
|
-
def properties
|
14
|
-
properties = {
|
15
|
-
AssumeRolePolicyDocument: {
|
16
|
-
Version: "2012-10-17",
|
17
|
-
Statement: [{
|
18
|
-
Effect: "Allow",
|
19
|
-
Principal: {Service: ["lambda.amazonaws.com"]},
|
20
|
-
Action: ["sts:AssumeRole"]}
|
21
|
-
]},
|
22
|
-
Path: "/"
|
23
|
-
}
|
24
|
-
|
25
|
-
properties[:Policies] = [
|
26
|
-
PolicyName: iam_policy.policy_name,
|
27
|
-
PolicyDocument: iam_policy.policy_document,
|
28
|
-
] if iam_policy
|
29
|
-
|
30
|
-
properties[:ManagedPolicyArns] = managed_iam_policy.arns if managed_iam_policy
|
31
|
-
|
32
|
-
properties[:RoleName] = role_name
|
33
|
-
properties.deep_stringify_keys!
|
34
|
-
properties
|
35
|
-
end
|
36
|
-
|
37
|
-
def namespace
|
38
|
-
Jets.config.project_namespace.underscore
|
39
|
-
end
|
40
|
-
|
41
|
-
# Need to underscore and then classify again for this case:
|
42
|
-
# Jets::PreheatJob_policy => JetsPreheatJobPolicy
|
43
|
-
# Or else you we get this:
|
44
|
-
# Jets::PreheatJob_policy => JetsPreheatjobPolicy
|
45
|
-
def classify_name(text)
|
46
|
-
text.gsub('::','_').underscore.classify
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# Implements:
|
2
|
-
#
|
3
|
-
# initialize
|
4
|
-
# iam_policy
|
5
|
-
# managed_iam_policy
|
6
|
-
# logical_id
|
7
|
-
# role_name
|
8
|
-
#
|
9
|
-
module Jets::Cfn::TemplateMappers::IamPolicy
|
10
|
-
class ClassPolicyMapper < BasePolicyMapper
|
11
|
-
def initialize(app_class)
|
12
|
-
@app_class = app_class
|
13
|
-
# IE: @app_class: PostsController, HardJob, Hello, HelloFunction
|
14
|
-
end
|
15
|
-
|
16
|
-
def iam_policy
|
17
|
-
return unless @app_class.class_iam_policy
|
18
|
-
|
19
|
-
Jets::Cfn::TemplateBuilders::IamPolicy::ClassPolicy.new(@app_class)
|
20
|
-
end
|
21
|
-
memoize :iam_policy
|
22
|
-
|
23
|
-
def managed_iam_policy
|
24
|
-
return unless @app_class.class_managed_iam_policy
|
25
|
-
|
26
|
-
Jets::Cfn::TemplateBuilders::ManagedIamPolicy::ClassPolicy.new(@app_class)
|
27
|
-
end
|
28
|
-
memoize :managed_iam_policy
|
29
|
-
|
30
|
-
# Example: PostsControllerLambdaFunction
|
31
|
-
# Note there are is no "Show" action in the name
|
32
|
-
# There should be no namespace in the logical_id.
|
33
|
-
def logical_id
|
34
|
-
classify_name("#{@app_class}_iam_role")
|
35
|
-
end
|
36
|
-
|
37
|
-
# There should be namespace in the role_name.
|
38
|
-
def role_name
|
39
|
-
classify_name("#{namespace}_#{@app_class}_iam_role").underscore.dasherize
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# Implements:
|
2
|
-
#
|
3
|
-
# initialize
|
4
|
-
# iam_policy
|
5
|
-
# managed_iam_policy
|
6
|
-
# logical_id
|
7
|
-
# role_name
|
8
|
-
#
|
9
|
-
module Jets::Cfn::TemplateMappers::IamPolicy
|
10
|
-
class FunctionPolicyMapper < BasePolicyMapper
|
11
|
-
def initialize(task)
|
12
|
-
@task = task
|
13
|
-
@app_class = task.class_name.to_s
|
14
|
-
# IE: @app_class: PostsController, HardJob, Hello, HelloFunction
|
15
|
-
end
|
16
|
-
|
17
|
-
def iam_policy
|
18
|
-
return unless @task.iam_policy
|
19
|
-
|
20
|
-
Jets::Cfn::TemplateBuilders::IamPolicy::FunctionPolicy.new(@task)
|
21
|
-
end
|
22
|
-
memoize :iam_policy
|
23
|
-
|
24
|
-
def managed_iam_policy
|
25
|
-
return unless @task.managed_iam_policy
|
26
|
-
|
27
|
-
Jets::Cfn::TemplateBuilders::ManagedIamPolicy::FunctionPolicy.new(@task)
|
28
|
-
end
|
29
|
-
memoize :managed_iam_policy
|
30
|
-
|
31
|
-
# Example: PostsControllerShowLambdaFunction
|
32
|
-
# There should be no namespace in the logical_id.
|
33
|
-
def logical_id
|
34
|
-
classify_name("#{@app_class}_#{@task.meth}_iam_role")
|
35
|
-
end
|
36
|
-
|
37
|
-
# There should be namespace in the role_name.
|
38
|
-
def role_name
|
39
|
-
classify_name("#{namespace}_#{@app_class}_#{@task.meth}_iam_role").underscore.dasherize
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
class Jets::Cfn::TemplateMappers
|
2
|
-
class LambdaFunctionMapper
|
3
|
-
def initialize(task)
|
4
|
-
@task = task
|
5
|
-
@app_class = task.class_name.to_s
|
6
|
-
# @app_class examples: PostsController, HardJob, Hello, HelloFunction
|
7
|
-
end
|
8
|
-
|
9
|
-
# Example: SleepJobPerformLambdaFunction
|
10
|
-
def logical_id
|
11
|
-
"#{class_action}LambdaFunction".gsub('::','')
|
12
|
-
end
|
13
|
-
|
14
|
-
def environment
|
15
|
-
env = Jets.config.environment ? Jets.config.environment.to_h : {}
|
16
|
-
jets_env_options = {JETS_ENV: Jets.env.to_s}
|
17
|
-
jets_env_options[:JETS_ENV_EXTRA] = Jets.config.env_extra if Jets.config.env_extra
|
18
|
-
env.deep_merge(jets_env_options)
|
19
|
-
end
|
20
|
-
|
21
|
-
# Example: PostsControllerIndex or SleepJobPerform
|
22
|
-
def class_action
|
23
|
-
"#{@app_class}_#{@task.meth}".camelize
|
24
|
-
end
|
25
|
-
|
26
|
-
# Examples:
|
27
|
-
# "#{Jets.config.project_namespace}-sleep_job-perform"
|
28
|
-
# "demo-dev-sleep_job-perform"
|
29
|
-
def function_name
|
30
|
-
# Example values:
|
31
|
-
# @app_class: admin/pages_controller
|
32
|
-
# @task.meth: index
|
33
|
-
method = @app_class.underscore
|
34
|
-
# method: admin/pages_controller
|
35
|
-
method = method.sub('/','-') + "-#{@task.meth}"
|
36
|
-
# method: admin-pages_controller-index
|
37
|
-
"#{Jets.config.project_namespace}-#{method}"
|
38
|
-
end
|
39
|
-
|
40
|
-
def handler
|
41
|
-
handler_value(@task.meth)
|
42
|
-
end
|
43
|
-
|
44
|
-
def handler_value(meth)
|
45
|
-
"handlers/#{@task.type.pluralize}/#{@app_class.underscore}.#{meth}"
|
46
|
-
end
|
47
|
-
|
48
|
-
def code_s3_key
|
49
|
-
Jets::Naming.code_s3_key
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module Jets::Resource
|
2
|
-
class Attributes
|
3
|
-
extend Memoist
|
4
|
-
|
5
|
-
def initialize(data, task, replacements={})
|
6
|
-
@data = data
|
7
|
-
@task = task
|
8
|
-
@replacements = replacements
|
9
|
-
end
|
10
|
-
|
11
|
-
def logical_id
|
12
|
-
id = @data.keys.first
|
13
|
-
# replace possible {namespace} in the logical id
|
14
|
-
id = replacer.replace_value(id)
|
15
|
-
Jets::Pascalize.pascalize_string(id)
|
16
|
-
end
|
17
|
-
|
18
|
-
def type
|
19
|
-
attributes['Type']
|
20
|
-
end
|
21
|
-
|
22
|
-
def properties
|
23
|
-
attributes['Properties']
|
24
|
-
end
|
25
|
-
|
26
|
-
def attributes
|
27
|
-
attributes = @data.values.first
|
28
|
-
attributes = replacer.replace_placeholders(attributes, @replacements)
|
29
|
-
Jets::Pascalize.pascalize(attributes)
|
30
|
-
end
|
31
|
-
|
32
|
-
def replacer
|
33
|
-
# Use raw @data to avoid infinite loop from using attributes
|
34
|
-
attributes = Jets::Pascalize.pascalize(@data.values.first)
|
35
|
-
type = attributes['Type']
|
36
|
-
replacer_class = Replacer.lookup(type)
|
37
|
-
replacer_class.new(@task)
|
38
|
-
end
|
39
|
-
memoize :replacer
|
40
|
-
|
41
|
-
def permission
|
42
|
-
Permission.new(@task, self)
|
43
|
-
end
|
44
|
-
memoize :permission
|
45
|
-
end
|
46
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Jets::Resource
|
2
|
-
class Creator
|
3
|
-
extend Memoist
|
4
|
-
|
5
|
-
def initialize(definition, task)
|
6
|
-
@definition = definition
|
7
|
-
@task = task # task that the definition belongs to
|
8
|
-
end
|
9
|
-
|
10
|
-
# Template snippet that gets injected into the CloudFormation template.
|
11
|
-
def attributes
|
12
|
-
Attributes.new(@definition, @task)
|
13
|
-
end
|
14
|
-
alias_method :resource, :attributes
|
15
|
-
memoize :attributes
|
16
|
-
end
|
17
|
-
end
|