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.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/Gemfile.lock +3 -1
  4. data/jets.gemspec +2 -0
  5. data/lib/jets/application.rb +1 -1
  6. data/lib/jets/cfn.rb +1 -2
  7. data/lib/jets/cfn/builders.rb +19 -0
  8. data/lib/jets/cfn/builders/api_deployment_builder.rb +32 -0
  9. data/lib/jets/cfn/{template_builders → builders}/api_gateway_builder.rb +10 -21
  10. data/lib/jets/cfn/builders/base_child_builder.rb +49 -0
  11. data/lib/jets/cfn/{template_builders → builders}/controller_builder.rb +7 -7
  12. data/lib/jets/cfn/{template_builders → builders}/function_builder.rb +1 -2
  13. data/lib/jets/cfn/builders/interface.rb +128 -0
  14. data/lib/jets/cfn/{template_builders → builders}/job_builder.rb +2 -2
  15. data/lib/jets/cfn/builders/parent_builder.rb +84 -0
  16. data/lib/jets/cfn/{template_builders → builders}/rule_builder.rb +4 -5
  17. data/lib/jets/commands/base.rb +1 -1
  18. data/lib/jets/commands/build.rb +11 -15
  19. data/lib/jets/commands/delete.rb +12 -0
  20. data/lib/jets/commands/templates/skeleton/Gemfile.tt +1 -0
  21. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +1 -1
  22. data/lib/jets/commands/url.rb +10 -12
  23. data/lib/jets/controller/base.rb +2 -2
  24. data/lib/jets/core.rb +1 -1
  25. data/lib/jets/core_ext/kernel.rb +11 -1
  26. data/lib/jets/internal/app/controllers/jets/public_controller.rb +11 -8
  27. data/lib/jets/lambda/dsl.rb +1 -1
  28. data/lib/jets/lambda/task.rb +9 -1
  29. data/lib/jets/naming.rb +2 -2
  30. data/lib/jets/pascalize.rb +9 -1
  31. data/lib/jets/poly_fun/base_executor.rb +2 -2
  32. data/lib/jets/preheat.rb +2 -2
  33. data/lib/jets/rails_overrides/common_methods.rb +1 -1
  34. data/lib/jets/resource.rb +55 -5
  35. data/lib/jets/resource/api_gateway.rb +7 -0
  36. data/lib/jets/resource/{route → api_gateway}/cors.rb +11 -10
  37. data/lib/jets/resource/api_gateway/deployment.rb +75 -0
  38. data/lib/jets/resource/{route.rb → api_gateway/method.rb} +26 -22
  39. data/lib/jets/{cfn/template_mappers/gateway_resource_mapper.rb → resource/api_gateway/resource.rb} +41 -27
  40. data/lib/jets/resource/api_gateway/rest_api.rb +23 -0
  41. data/lib/jets/resource/base.rb +17 -0
  42. data/lib/jets/resource/child_stack.rb +5 -0
  43. data/lib/jets/resource/child_stack/api_deployment.rb +58 -0
  44. data/lib/jets/resource/child_stack/api_gateway.rb +29 -0
  45. data/lib/jets/resource/child_stack/app_class.rb +81 -0
  46. data/lib/jets/resource/function.rb +184 -0
  47. data/lib/jets/resource/iam.rb +8 -0
  48. data/lib/jets/resource/iam/application_role.rb +27 -0
  49. data/lib/jets/resource/iam/base_role_definition.rb +44 -0
  50. data/lib/jets/resource/iam/class_role.rb +25 -0
  51. data/lib/jets/resource/iam/function_role.rb +25 -0
  52. data/lib/jets/{cfn/template_builders/managed_iam_policy/base_policy.rb → resource/iam/managed_policy.rb} +6 -6
  53. data/lib/jets/resource/iam/policy_document.rb +43 -0
  54. data/lib/jets/resource/permission.rb +38 -21
  55. data/lib/jets/resource/replacer.rb +50 -17
  56. data/lib/jets/resource/s3.rb +17 -0
  57. data/lib/jets/route.rb +3 -1
  58. data/lib/jets/rule/dsl.rb +7 -1
  59. data/lib/jets/server/route_matcher.rb +2 -1
  60. data/lib/jets/version.rb +1 -1
  61. metadata +46 -52
  62. data/lib/jets/cfn/template_builders.rb +0 -25
  63. data/lib/jets/cfn/template_builders/api_gateway_deployment_builder.rb +0 -38
  64. data/lib/jets/cfn/template_builders/base_child_builder.rb +0 -72
  65. data/lib/jets/cfn/template_builders/function_properties.rb +0 -6
  66. data/lib/jets/cfn/template_builders/function_properties/base_builder.rb +0 -128
  67. data/lib/jets/cfn/template_builders/function_properties/node_builder.rb +0 -12
  68. data/lib/jets/cfn/template_builders/function_properties/python_builder.rb +0 -12
  69. data/lib/jets/cfn/template_builders/function_properties/ruby_builder.rb +0 -13
  70. data/lib/jets/cfn/template_builders/iam_policy.rb +0 -6
  71. data/lib/jets/cfn/template_builders/iam_policy/application_policy.rb +0 -19
  72. data/lib/jets/cfn/template_builders/iam_policy/base_policy.rb +0 -57
  73. data/lib/jets/cfn/template_builders/iam_policy/class_policy.rb +0 -20
  74. data/lib/jets/cfn/template_builders/iam_policy/function_policy.rb +0 -21
  75. data/lib/jets/cfn/template_builders/interface.rb +0 -97
  76. data/lib/jets/cfn/template_builders/managed_iam_policy.rb +0 -6
  77. data/lib/jets/cfn/template_builders/managed_iam_policy/application_policy.rb +0 -11
  78. data/lib/jets/cfn/template_builders/managed_iam_policy/class_policy.rb +0 -10
  79. data/lib/jets/cfn/template_builders/managed_iam_policy/function_policy.rb +0 -10
  80. data/lib/jets/cfn/template_builders/parent_builder.rb +0 -95
  81. data/lib/jets/cfn/template_builders/templates/minimal-stack.yml +0 -9
  82. data/lib/jets/cfn/template_mappers.rb +0 -22
  83. data/lib/jets/cfn/template_mappers/api_gateway_deployment_mapper.rb +0 -48
  84. data/lib/jets/cfn/template_mappers/api_gateway_mapper.rb +0 -4
  85. data/lib/jets/cfn/template_mappers/child_mapper.rb +0 -41
  86. data/lib/jets/cfn/template_mappers/controller_mapper.rb +0 -36
  87. data/lib/jets/cfn/template_mappers/function_mapper.rb +0 -4
  88. data/lib/jets/cfn/template_mappers/iam_policy.rb +0 -6
  89. data/lib/jets/cfn/template_mappers/iam_policy/application_policy_mapper.rb +0 -37
  90. data/lib/jets/cfn/template_mappers/iam_policy/base_policy_mapper.rb +0 -49
  91. data/lib/jets/cfn/template_mappers/iam_policy/class_policy_mapper.rb +0 -42
  92. data/lib/jets/cfn/template_mappers/iam_policy/function_policy_mapper.rb +0 -42
  93. data/lib/jets/cfn/template_mappers/job_mapper.rb +0 -4
  94. data/lib/jets/cfn/template_mappers/lambda_function_mapper.rb +0 -52
  95. data/lib/jets/cfn/template_mappers/rule_mapper.rb +0 -5
  96. data/lib/jets/resource/attributes.rb +0 -46
  97. data/lib/jets/resource/creator.rb +0 -17
  98. data/lib/jets/resource/replacer/base.rb +0 -98
  99. data/lib/jets/resource/replacer/config_rule.rb +0 -18
  100. data/lib/jets/resource/route/attributes.rb +0 -8
@@ -1,25 +1,58 @@
1
- module Jets::Resource
2
- module Replacer
3
- autoload :Base, 'jets/resource/replacer/base'
4
- autoload :ConfigRule, 'jets/resource/replacer/config_rule'
5
- # TODO: handle autoloading for plugins
1
+ class Jets::Resource
2
+ class Replacer
3
+ extend Memoist
6
4
 
7
- class << self
8
- def lookup(type)
9
- klass = replacer_map[type] || "Jets::Resource::Replacer::Base"
10
- klass.constantize
5
+ def initialize(replacements={})
6
+ @replacements = replacements
7
+ end
8
+
9
+ # Replace placeholder hash values with replacements. This does a deep replacement
10
+ # to the hash values. The replacement "key" is the string value within the value.
11
+ #
12
+ # Example:
13
+ #
14
+ # attributes = {whatever: "foo REPLACE_KEY bar" }
15
+ # replace_placeholders(attributes, REPLACE_KEY: "blah:arn")
16
+ # => {whatever: "foo blah:arn bar" }
17
+ #
18
+ # Also, we always replace the special {namespace} value in the hash values. Example:
19
+ #
20
+ # attributes = {whatever: "{namespace}LambdaFunction" }
21
+ # replace_placeholders(attributes, {})
22
+ # => {whatever: "foo PostsControllerIndexLambdaFunction bar" }
23
+ #
24
+ def replace_placeholders(attributes)
25
+ update_values(attributes)
26
+ end
27
+
28
+ def update_values(original)
29
+ case original
30
+ when Array
31
+ original.map { |v| update_values(v) }
32
+ when Hash
33
+ initializer = original.map do |k, v|
34
+ [k, update_values(v)]
35
+ end
36
+ Hash[initializer]
37
+ else
38
+ replace_value(original)
11
39
  end
40
+ end
12
41
 
13
- # Maps
14
- # TODO: get rid of this map, and use a convention
15
- # * connect a plugin to figure out interface.
16
- # * add ability to explicitly override principal and source_arn.
17
- def replacer_map
18
- {
19
- "AWS::Config::ConfigRule" => "Jets::Resource::Replacer::ConfigRule"
20
- }
42
+ def replace_value(value)
43
+ # Dont perform replacement on Integers
44
+ return value if value.is_a?(Integer)
45
+ # return value unless value.is_a?(String) or value.is_a?(Symbol)
46
+
47
+ value = value.to_s # normalize to String
48
+ @replacements.each do |k,v|
49
+ # IE: Replaces {namespace} => SecurityJobCheck
50
+ value = value.gsub("{#{k}}", v)
21
51
  end
52
+ value
53
+ end
22
54
 
55
+ class << self
23
56
  # Examples:
24
57
  # "AWS::Events::Rule" => "events.amazonaws.com",
25
58
  # "AWS::Config::ConfigRule" => "config.amazonaws.com",
@@ -0,0 +1,17 @@
1
+ class Jets::Resource
2
+ class S3 < Jets::Resource::Base
3
+ def definition
4
+ {
5
+ s3_bucket: {
6
+ type: "AWS::S3::Bucket"
7
+ }
8
+ }
9
+ end
10
+
11
+ def outputs
12
+ {
13
+ "S3Bucket" => "!Ref S3Bucket",
14
+ }
15
+ end
16
+ end
17
+ end
data/lib/jets/route.rb CHANGED
@@ -4,6 +4,8 @@
4
4
  # to: "posts#index",
5
5
  # )
6
6
  class Jets::Route
7
+ CAPTURE_REGEX = "([a-zA\\-Z0-9_.]*)" # as string
8
+
7
9
  def initialize(options)
8
10
  @options = options
9
11
  end
@@ -104,7 +106,7 @@ class Jets::Route
104
106
  # changes path to a string used for a regexp
105
107
  # posts/:id/edit => posts\/(.*)\/edit
106
108
  regexp_string = path.split('/').map do |s|
107
- s.include?(':') ? "([a-zA-Z0-9_]*)" : s
109
+ s.include?(':') ? CAPTURE_REGEX : s
108
110
  end.join('\/')
109
111
  # make sure beginning and end of the string matches
110
112
  regexp_string = "^#{regexp_string}$"
data/lib/jets/rule/dsl.rb CHANGED
@@ -109,7 +109,13 @@ module Jets::Rule::Dsl
109
109
  def register_managed_rule(name, definition)
110
110
  # A task object is needed to build {namespace} for later replacing.
111
111
  task = Jets::Lambda::Task.new(self.name, name, resources: @resources)
112
- all_managed_rules[name] = { definition: definition, task: task }
112
+
113
+ # TODO: figure out better way for specific replacements for different classes
114
+ name_without_rule = self.name.underscore.gsub(/_rule$/,'')
115
+ config_rule_name = "#{name_without_rule}_#{name}".dasherize
116
+ replacements = task.replacements.merge(config_rule_name: config_rule_name)
117
+
118
+ all_managed_rules[name] = { definition: definition, replacements: replacements }
113
119
  clear_properties
114
120
  end
115
121
 
@@ -78,8 +78,9 @@ class Jets::Server
78
78
  def capture_detection(route_path, actual_path)
79
79
  # changes path to a string used for a regexp
80
80
  # posts/:id/edit => posts\/(.*)\/edit
81
+
81
82
  regexp_string = route_path.split('/').map do |s|
82
- s.include?(':') ? "([a-zA-Z0-9_]*)" : s
83
+ s.include?(':') ? Jets::Route::CAPTURE_REGEX : s
83
84
  end.join('\/')
84
85
  # make sure beginning and end of the string matches
85
86
  regexp_string = "^#{regexp_string}$"
data/lib/jets/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jets
2
- VERSION = "0.8.0"
2
+ VERSION = "0.8.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-03 00:00:00.000000000 Z
11
+ date: 2018-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -290,6 +290,20 @@ dependencies:
290
290
  - - ">="
291
291
  - !ruby/object:Gem::Version
292
292
  version: '0'
293
+ - !ruby/object:Gem::Dependency
294
+ name: mimemagic
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ type: :runtime
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
293
307
  - !ruby/object:Gem::Dependency
294
308
  name: pg
295
309
  requirement: !ruby/object:Gem::Requirement
@@ -426,49 +440,18 @@ files:
426
440
  - lib/jets/builders/node-hello.js
427
441
  - lib/jets/builders/node-shim.js
428
442
  - lib/jets/cfn.rb
443
+ - lib/jets/cfn/builders.rb
444
+ - lib/jets/cfn/builders/api_deployment_builder.rb
445
+ - lib/jets/cfn/builders/api_gateway_builder.rb
446
+ - lib/jets/cfn/builders/base_child_builder.rb
447
+ - lib/jets/cfn/builders/controller_builder.rb
448
+ - lib/jets/cfn/builders/function_builder.rb
449
+ - lib/jets/cfn/builders/interface.rb
450
+ - lib/jets/cfn/builders/job_builder.rb
451
+ - lib/jets/cfn/builders/parent_builder.rb
452
+ - lib/jets/cfn/builders/rule_builder.rb
429
453
  - lib/jets/cfn/ship.rb
430
454
  - lib/jets/cfn/status.rb
431
- - lib/jets/cfn/template_builders.rb
432
- - lib/jets/cfn/template_builders/api_gateway_builder.rb
433
- - lib/jets/cfn/template_builders/api_gateway_deployment_builder.rb
434
- - lib/jets/cfn/template_builders/base_child_builder.rb
435
- - lib/jets/cfn/template_builders/controller_builder.rb
436
- - lib/jets/cfn/template_builders/function_builder.rb
437
- - lib/jets/cfn/template_builders/function_properties.rb
438
- - lib/jets/cfn/template_builders/function_properties/base_builder.rb
439
- - lib/jets/cfn/template_builders/function_properties/node_builder.rb
440
- - lib/jets/cfn/template_builders/function_properties/python_builder.rb
441
- - lib/jets/cfn/template_builders/function_properties/ruby_builder.rb
442
- - lib/jets/cfn/template_builders/iam_policy.rb
443
- - lib/jets/cfn/template_builders/iam_policy/application_policy.rb
444
- - lib/jets/cfn/template_builders/iam_policy/base_policy.rb
445
- - lib/jets/cfn/template_builders/iam_policy/class_policy.rb
446
- - lib/jets/cfn/template_builders/iam_policy/function_policy.rb
447
- - lib/jets/cfn/template_builders/interface.rb
448
- - lib/jets/cfn/template_builders/job_builder.rb
449
- - lib/jets/cfn/template_builders/managed_iam_policy.rb
450
- - lib/jets/cfn/template_builders/managed_iam_policy/application_policy.rb
451
- - lib/jets/cfn/template_builders/managed_iam_policy/base_policy.rb
452
- - lib/jets/cfn/template_builders/managed_iam_policy/class_policy.rb
453
- - lib/jets/cfn/template_builders/managed_iam_policy/function_policy.rb
454
- - lib/jets/cfn/template_builders/parent_builder.rb
455
- - lib/jets/cfn/template_builders/rule_builder.rb
456
- - lib/jets/cfn/template_builders/templates/minimal-stack.yml
457
- - lib/jets/cfn/template_mappers.rb
458
- - lib/jets/cfn/template_mappers/api_gateway_deployment_mapper.rb
459
- - lib/jets/cfn/template_mappers/api_gateway_mapper.rb
460
- - lib/jets/cfn/template_mappers/child_mapper.rb
461
- - lib/jets/cfn/template_mappers/controller_mapper.rb
462
- - lib/jets/cfn/template_mappers/function_mapper.rb
463
- - lib/jets/cfn/template_mappers/gateway_resource_mapper.rb
464
- - lib/jets/cfn/template_mappers/iam_policy.rb
465
- - lib/jets/cfn/template_mappers/iam_policy/application_policy_mapper.rb
466
- - lib/jets/cfn/template_mappers/iam_policy/base_policy_mapper.rb
467
- - lib/jets/cfn/template_mappers/iam_policy/class_policy_mapper.rb
468
- - lib/jets/cfn/template_mappers/iam_policy/function_policy_mapper.rb
469
- - lib/jets/cfn/template_mappers/job_mapper.rb
470
- - lib/jets/cfn/template_mappers/lambda_function_mapper.rb
471
- - lib/jets/cfn/template_mappers/rule_mapper.rb
472
455
  - lib/jets/cli.rb
473
456
  - lib/jets/commands.rb
474
457
  - lib/jets/commands/base.rb
@@ -626,15 +609,28 @@ files:
626
609
  - lib/jets/rails_overrides/rendering_helper.rb
627
610
  - lib/jets/rails_overrides/url_helper.rb
628
611
  - lib/jets/resource.rb
629
- - lib/jets/resource/attributes.rb
630
- - lib/jets/resource/creator.rb
612
+ - lib/jets/resource/api_gateway.rb
613
+ - lib/jets/resource/api_gateway/cors.rb
614
+ - lib/jets/resource/api_gateway/deployment.rb
615
+ - lib/jets/resource/api_gateway/method.rb
616
+ - lib/jets/resource/api_gateway/resource.rb
617
+ - lib/jets/resource/api_gateway/rest_api.rb
618
+ - lib/jets/resource/base.rb
619
+ - lib/jets/resource/child_stack.rb
620
+ - lib/jets/resource/child_stack/api_deployment.rb
621
+ - lib/jets/resource/child_stack/api_gateway.rb
622
+ - lib/jets/resource/child_stack/app_class.rb
623
+ - lib/jets/resource/function.rb
624
+ - lib/jets/resource/iam.rb
625
+ - lib/jets/resource/iam/application_role.rb
626
+ - lib/jets/resource/iam/base_role_definition.rb
627
+ - lib/jets/resource/iam/class_role.rb
628
+ - lib/jets/resource/iam/function_role.rb
629
+ - lib/jets/resource/iam/managed_policy.rb
630
+ - lib/jets/resource/iam/policy_document.rb
631
631
  - lib/jets/resource/permission.rb
632
632
  - lib/jets/resource/replacer.rb
633
- - lib/jets/resource/replacer/base.rb
634
- - lib/jets/resource/replacer/config_rule.rb
635
- - lib/jets/resource/route.rb
636
- - lib/jets/resource/route/attributes.rb
637
- - lib/jets/resource/route/cors.rb
633
+ - lib/jets/resource/s3.rb
638
634
  - lib/jets/route.rb
639
635
  - lib/jets/router.rb
640
636
  - lib/jets/ruby_server.rb
@@ -679,7 +675,6 @@ files:
679
675
  - vendor/dynomite/lib/dynomite/migration/templates/create_table.rb
680
676
  - vendor/dynomite/lib/dynomite/migration/templates/update_table.rb
681
677
  - vendor/dynomite/lib/dynomite/version.rb
682
- - vendor/dynomite/pkg/dynomite-1.0.7.gem
683
678
  - vendor/dynomite/spec/fixtures/app_root/config/dynamodb.yml
684
679
  - vendor/dynomite/spec/lib/dynomite/item_spec.rb
685
680
  - vendor/dynomite/spec/lib/dynomite/migration/dsl/global_secondary_index_spec.rb
@@ -721,7 +716,6 @@ files:
721
716
  - vendor/lambdagem/lib/lambdagem/upload.rb
722
717
  - vendor/lambdagem/lib/lambdagem/util.rb
723
718
  - vendor/lambdagem/lib/lambdagem/version.rb
724
- - vendor/lambdagem/pkg/lambdagem-0.5.1.gem
725
719
  - vendor/lambdagem/spec/lib/build_spec.rb
726
720
  - vendor/lambdagem/spec/lib/cli_spec.rb
727
721
  - vendor/lambdagem/spec/lib/upload_spec.rb
@@ -1,25 +0,0 @@
1
- require 'active_support/core_ext/hash'
2
- require 'yaml'
3
-
4
- class Jets::Cfn
5
- # TODO: Refactor builder classes. They all work slightly differently.
6
- class TemplateBuilders
7
- autoload :Interface, "jets/cfn/template_builders/interface"
8
- autoload :ParentBuilder, "jets/cfn/template_builders/parent_builder"
9
-
10
- # These build the app/controllers, app/jobs, and app/functions
11
- autoload :BaseChildBuilder, "jets/cfn/template_builders/base_child_builder"
12
- autoload :ControllerBuilder, "jets/cfn/template_builders/controller_builder"
13
- autoload :JobBuilder, "jets/cfn/template_builders/job_builder"
14
- autoload :FunctionBuilder, "jets/cfn/template_builders/function_builder"
15
- autoload :RuleBuilder, "jets/cfn/template_builders/rule_builder"
16
-
17
- autoload :ApiGatewayBuilder, "jets/cfn/template_builders/api_gateway_builder"
18
- autoload :ApiGatewayDeploymentBuilder, "jets/cfn/template_builders/api_gateway_deployment_builder"
19
-
20
- # separate beasts:
21
- autoload :FunctionProperties, "jets/cfn/template_builders/function_properties" # sort of a builder
22
- autoload :IamPolicy, "jets/cfn/template_builders/iam_policy" # resource only
23
- autoload :ManagedIamPolicy, "jets/cfn/template_builders/managed_iam_policy" # resource only
24
- end
25
- end
@@ -1,38 +0,0 @@
1
- class Jets::Cfn::TemplateBuilders
2
- class ApiGatewayDeploymentBuilder
3
- include Interface
4
- include Jets::AwsServices
5
-
6
- def initialize(options={})
7
- @options = options
8
- @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
9
- end
10
-
11
- # compose is an interface method
12
- def compose
13
- return if @options[:stack_type] == :minimal
14
-
15
- puts "Building API Gateway Deployment template."
16
- add_parameter("RestApi", Description: "RestApi")
17
-
18
- map = Jets::Cfn::TemplateMappers::ApiGatewayDeploymentMapper.new(path=nil,s3_bucket=nil)
19
- add_resource(map.logical_id, "AWS::ApiGateway::Deployment",
20
- Description: "Version #{map.timestamp} deployed by jets",
21
- RestApiId: "!Ref RestApi",
22
- StageName: map.stage_name,
23
- )
24
-
25
- add_output("RestApiUrl", Value: "!Sub 'https://${RestApi}.execute-api.${AWS::Region}.amazonaws.com/#{map.stage_name}/'")
26
- end
27
-
28
- # template_path is an interface method
29
- def template_path
30
- Jets::Naming.api_gateway_deployment_template_path
31
- end
32
-
33
- # do not bother writing a template if routes are empty
34
- def write
35
- super unless Jets::Router.routes.empty?
36
- end
37
- end
38
- end
@@ -1,72 +0,0 @@
1
- class Jets::Cfn::TemplateBuilders
2
- class BaseChildBuilder
3
- include Interface
4
-
5
- # The app_klass is can be a controller, job or anonymous function class.
6
- # IE: PostsController, HardJob
7
- def initialize(app_klass)
8
- @app_klass = app_klass
9
- @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
10
- end
11
-
12
- # template_path is an interface method for Interface module
13
- def template_path
14
- Jets::Naming.template_path(@app_klass)
15
- end
16
-
17
- def add_common_parameters
18
- add_parameter("IamRole", Description: "Iam Role that Lambda function uses.")
19
- add_parameter("S3Bucket", Description: "S3 Bucket for source code.")
20
- end
21
-
22
- def add_functions
23
- add_class_iam_policy
24
- @app_klass.tasks.each do |task|
25
- add_function(task)
26
- add_function_iam_policy(task)
27
- end
28
- end
29
-
30
- def add_function(task)
31
- # Examples:
32
- # FunctionProperties::RubyBuilder
33
- # FunctionProperties::PythonBuilder
34
- builder_class = "Jets::Cfn::TemplateBuilders::FunctionProperties::#{task.lang.to_s.classify}Builder".constantize
35
- builder = builder_class.new(task)
36
- logical_id = builder.map.logical_id
37
- add_resource(logical_id, "AWS::Lambda::Function", builder.properties)
38
- end
39
-
40
- def add_class_iam_policy
41
- return unless @app_klass.build_class_iam?
42
-
43
- map = Jets::Cfn::TemplateMappers::IamPolicy::ClassPolicyMapper.new(@app_klass)
44
- logical_id = map.logical_id
45
- properties = map.properties
46
- add_resource(logical_id, "AWS::IAM::Role", properties)
47
- end
48
-
49
- def add_function_iam_policy(task)
50
- return unless task.build_function_iam?
51
-
52
- map = Jets::Cfn::TemplateMappers::IamPolicy::FunctionPolicyMapper.new(task)
53
- logical_id = map.logical_id
54
- properties = map.properties
55
- add_resource(logical_id, "AWS::IAM::Role", properties)
56
- end
57
-
58
- def add_associated_resources
59
- @app_klass.tasks.each do |task|
60
- task.resources.each do |definition|
61
- creator = Jets::Resource::Creator.new(definition, task)
62
- add_associated_resource(creator.resource)
63
- add_associated_resource(creator.resource.permission.attributes)
64
- end
65
- end
66
- end
67
-
68
- def add_associated_resource(resource)
69
- add_resource(resource.logical_id, resource.type, resource.properties)
70
- end
71
- end
72
- end
@@ -1,6 +0,0 @@
1
- module Jets::Cfn::TemplateBuilders::FunctionProperties
2
- autoload :BaseBuilder, 'jets/cfn/template_builders/function_properties/base_builder'
3
- autoload :RubyBuilder, 'jets/cfn/template_builders/function_properties/ruby_builder'
4
- autoload :PythonBuilder, 'jets/cfn/template_builders/function_properties/python_builder'
5
- autoload :NodeBuilder, 'jets/cfn/template_builders/function_properties/node_builder'
6
- end
@@ -1,128 +0,0 @@
1
- # Jets::Cfn::TemplateBuilders does not stick to the TemplateBuilders::Interface.
2
- # It builds the properties of a function. Usage:
3
- #
4
- # builder = FunctionProperties::PythonBuilder.new(task)
5
- # buider.properties
6
- # buider.map.logical_id # to access Function's logical id
7
- #
8
- module Jets::Cfn::TemplateBuilders::FunctionProperties
9
- class BaseBuilder
10
- def initialize(task)
11
- @task = task
12
- end
13
-
14
- def map
15
- @map ||= Jets::Cfn::TemplateMappers::LambdaFunctionMapper.new(@task)
16
- end
17
-
18
- def properties
19
- props = env_file_properties
20
- .deep_merge(global_properties)
21
- .deep_merge(class_properties)
22
- .deep_merge(function_properties)
23
- finalize_properties!(props)
24
- end
25
-
26
- # Add properties managed by Jets.
27
- def finalize_properties!(props)
28
- handler = full_handler(props)
29
- runtime = get_runtime(props)
30
- props.merge!(
31
- "FunctionName" => map.function_name,
32
- "Handler" => handler,
33
- "Runtime" => runtime,
34
- )
35
- end
36
-
37
- def get_runtime(props)
38
- props["Runtime"] || default_runtime
39
- end
40
-
41
- # Ensure that the handler path is normalized.
42
- def full_handler(props)
43
- if props["Handler"]
44
- map.handler_value(props["Handler"])
45
- else
46
- default_handler
47
- end
48
- end
49
-
50
- # Global properties example:
51
- # jets defaults are in jets/default/application.rb.
52
- # Your application's default config/application.rb then get used. Example:
53
- #
54
- # Jets.application.configure do
55
- # config.function = ActiveSupport::OrderedOptions.new
56
- # config.function.timeout = 10
57
- # config.function.runtime = "nodejs8.10"
58
- # config.function.memory_size = 1536
59
- # end
60
- def global_properties
61
- baseline = {
62
- Code: {
63
- S3Bucket: {Ref: "S3Bucket"}, # from child stack
64
- S3Key: map.code_s3_key
65
- },
66
- Role: { Ref: "IamRole" },
67
- Environment: { Variables: map.environment },
68
- }.deep_stringify_keys
69
-
70
- app_config_props = Jets.application.config.function.to_h
71
- app_config_props = Jets::Pascalize.pascalize(app_config_props.deep_stringify_keys)
72
-
73
- baseline.deep_merge(app_config_props)
74
- end
75
-
76
- # Class properties example:
77
- #
78
- # class PostsController < ApplicationController
79
- # class_timeout 22
80
- # ...
81
- # end
82
- #
83
- # Also handles iam policy override at the class level. Example:
84
- #
85
- # class_iam_policy("logs:*")
86
- #
87
- def class_properties
88
- # klass is PostsController, HardJob, GameRule, Hello or HelloFunction
89
- klass = Jets::Klass.from_task(@task)
90
- class_properties = klass.class_properties
91
- if klass.build_class_iam?
92
- map = Jets::Cfn::TemplateMappers::IamPolicy::ClassPolicyMapper.new(klass)
93
- class_properties[:Role] = "!GetAtt #{map.logical_id}.Arn"
94
- end
95
- Jets::Pascalize.pascalize(class_properties.deep_stringify_keys)
96
- end
97
-
98
- # Function properties example:
99
- #
100
- # class PostsController < ApplicationController
101
- # timeout 18
102
- # def index
103
- # ...
104
- # end
105
- #
106
- # Also handles iam policy override at the function level. Example:
107
- #
108
- # iam_policy("ec2:*")
109
- # def new
110
- # render json: params.merge(action: "new")
111
- # end
112
- #
113
- def function_properties
114
- properties = @task.properties
115
- if @task.build_function_iam?
116
- map = Jets::Cfn::TemplateMappers::IamPolicy::FunctionPolicyMapper.new(@task)
117
- properties[:Role] = "!GetAtt #{map.logical_id}.Arn"
118
- end
119
- Jets::Pascalize.pascalize(properties.deep_stringify_keys)
120
- end
121
-
122
- def env_file_properties
123
- env_vars = Jets::Dotenv.load!(true)
124
- Jets::Pascalize.pascalize(environment: { variables: env_vars })
125
- end
126
- end
127
- end
128
-