jets 0.8.0 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|