jets 2.3.19 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +0 -3
  3. data/.python-version +1 -1
  4. data/.ruby-version +1 -1
  5. data/CHANGELOG.md +28 -2
  6. data/README.md +2 -2
  7. data/backers.md +1 -0
  8. data/jets.gemspec +11 -10
  9. data/lib/jets.rb +9 -13
  10. data/lib/jets/application.rb +9 -2
  11. data/lib/jets/application/defaults.rb +17 -15
  12. data/lib/jets/autoloaders.rb +15 -1
  13. data/lib/jets/booter.rb +3 -3
  14. data/lib/jets/builders/code_builder.rb +16 -15
  15. data/lib/jets/builders/gem_replacer.rb +3 -16
  16. data/lib/jets/builders/lambda_layer.rb +4 -5
  17. data/lib/jets/builders/ruby_packager.rb +18 -42
  18. data/lib/jets/builders/tidy.rb +1 -2
  19. data/lib/jets/bundle.rb +6 -0
  20. data/lib/jets/cfn/builders/api_gateway_builder.rb +61 -7
  21. data/lib/jets/cfn/ship.rb +2 -1
  22. data/lib/jets/cli.rb +6 -1
  23. data/lib/jets/commands/base.rb +1 -1
  24. data/lib/jets/commands/call.rb +14 -1
  25. data/lib/jets/commands/clean.rb +1 -1
  26. data/lib/jets/commands/clean/base.rb +1 -1
  27. data/lib/jets/commands/configure.rb +51 -0
  28. data/lib/jets/commands/delete.rb +2 -2
  29. data/lib/jets/commands/gems.rb +2 -10
  30. data/lib/jets/commands/help/call.md +8 -0
  31. data/lib/jets/commands/help/gems/check.md +3 -5
  32. data/lib/jets/commands/main.rb +9 -1
  33. data/lib/jets/commands/new.rb +9 -1
  34. data/lib/jets/commands/sequence.rb +6 -0
  35. data/lib/jets/commands/templates/skeleton/Gemfile.tt +1 -1
  36. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +1 -1
  37. data/lib/jets/commands/templates/skeleton/public/index.html.tt +1 -1
  38. data/lib/jets/commands/url.rb +1 -0
  39. data/lib/jets/controller/base.rb +14 -4
  40. data/lib/jets/controller/middleware/main.rb +2 -1
  41. data/lib/jets/controller/params.rb +26 -4
  42. data/lib/jets/controller/rack/env.rb +18 -1
  43. data/lib/jets/controller/rendering.rb +5 -2
  44. data/lib/jets/controller/rendering/rack_renderer.rb +7 -1
  45. data/lib/jets/core.rb +12 -4
  46. data/lib/jets/dotenv/ssm.rb +18 -4
  47. data/lib/jets/generator.rb +2 -3
  48. data/lib/jets/internal/app/functions/jets/base_path.rb +10 -149
  49. data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +81 -0
  50. data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +14 -24
  51. data/lib/jets/resource/api_gateway/base_path/function.rb +6 -1
  52. data/lib/jets/resource/api_gateway/deployment.rb +2 -0
  53. data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +34 -0
  54. data/lib/jets/resource/api_gateway/rest_api/logical_id/message.rb +49 -0
  55. data/lib/jets/resource/child_stack/api_deployment.rb +2 -0
  56. data/lib/jets/resource/lambda/function.rb +1 -1
  57. data/lib/jets/router/dsl.rb +7 -1
  58. data/lib/jets/router/method_creator/code.rb +1 -1
  59. data/lib/jets/router/scope.rb +7 -3
  60. data/lib/jets/spec_helpers/controllers.rb +10 -3
  61. data/lib/jets/spec_helpers/controllers/request.rb +12 -5
  62. data/lib/jets/stack/main/dsl/lambda.rb +1 -1
  63. data/lib/jets/turbo.rb +1 -0
  64. data/lib/jets/version.rb +1 -1
  65. metadata +51 -58
  66. data/vendor/cfn-status/CHANGELOG.md +0 -14
  67. data/vendor/cfn-status/Gemfile +0 -4
  68. data/vendor/cfn-status/LICENSE.txt +0 -21
  69. data/vendor/cfn-status/README.md +0 -56
  70. data/vendor/cfn-status/Rakefile +0 -6
  71. data/vendor/cfn-status/bin/console +0 -14
  72. data/vendor/cfn-status/bin/setup +0 -8
  73. data/vendor/cfn-status/cfn-status.gemspec +0 -30
  74. data/vendor/cfn-status/lib/cfn-status.rb +0 -1
  75. data/vendor/cfn-status/lib/cfn_status.rb +0 -245
  76. data/vendor/cfn-status/lib/cfn_status/aws_service.rb +0 -51
  77. data/vendor/cfn-status/lib/cfn_status/version.rb +0 -3
  78. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-1.json +0 -1103
  79. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-2.json +0 -1104
  80. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-3.json +0 -1103
  81. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-1.json +0 -1103
  82. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-2.json +0 -1104
  83. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-3.json +0 -1103
  84. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-complete.json +0 -1080
  85. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-in-progress.json +0 -1080
  86. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-update-rollback-complete.json +0 -1086
  87. data/vendor/cfn-status/spec/lib/cfn_status_spec.rb +0 -153
  88. data/vendor/cfn-status/spec/spec_helper.rb +0 -14
@@ -0,0 +1,81 @@
1
+ require 'aws-sdk-apigateway'
2
+ require 'aws-sdk-cloudformation'
3
+
4
+ class BasePathMapping
5
+ def initialize(event, stage_name)
6
+ @event, @stage_name = event, stage_name
7
+ end
8
+
9
+ # Cannot use update_base_path_mapping to update the base_mapping because it doesnt
10
+ # allow us to change the rest_api_id. So we delete and create.
11
+ def update
12
+ delete(true)
13
+ create
14
+ end
15
+
16
+ # Dont delete the newly created base path mapping unless this is an operation
17
+ # where we're fully deleting the stack
18
+ def should_delete?
19
+ deleting_parent?
20
+ end
21
+
22
+ def delete(fail_silently=false)
23
+ apigateway.delete_base_path_mapping(
24
+ domain_name: domain_name, # required
25
+ base_path: base_path.empty? ? '(none)' : base_path,
26
+ )
27
+ # https://github.com/tongueroo/jets/issues/255
28
+ # Used to return: Aws::APIGateway::Errors::NotFoundException
29
+ # Now returns: Aws::APIGateway::Errors::InternalFailure
30
+ # So we'll use a more generic error
31
+ rescue Aws::APIGateway::Errors::ServiceError => e
32
+ raise(e) unless fail_silently
33
+ end
34
+
35
+ def create
36
+ apigateway.create_base_path_mapping(
37
+ domain_name: domain_name, # required
38
+ base_path: base_path,
39
+ rest_api_id: rest_api_id, # required
40
+ stage: @stage_name,
41
+ )
42
+ end
43
+
44
+ def deployment_stack
45
+ @deployment_stack ||= cfn.describe_stacks(stack_name: @event['StackId']).stacks.first
46
+ end
47
+
48
+ def rest_api_id
49
+ @rest_api_id ||= parameter_value('RestApi')
50
+ end
51
+
52
+ def domain_name
53
+ @domain_name ||= parameter_value('DomainName')
54
+ end
55
+
56
+ def base_path
57
+ @base_path ||= parameter_value('BasePath') || ''
58
+ end
59
+
60
+ def parameter_value(parameter_key)
61
+ param = deployment_stack[:parameters].find { |p| p.parameter_key == parameter_key }
62
+ param&.parameter_value # possible for this to be nil when removing the config: IE: config.domain.name = nil
63
+ end
64
+
65
+ def deleting_parent?
66
+ stack = cfn.describe_stacks(stack_name: parent_stack_name).stacks.first
67
+ stack.stack_status == 'DELETE_IN_PROGRESS'
68
+ end
69
+
70
+ def parent_stack_name
71
+ deployment_stack[:root_id]
72
+ end
73
+
74
+ def apigateway
75
+ @apigateway ||= Aws::APIGateway::Client.new
76
+ end
77
+
78
+ def cfn
79
+ @cfn ||= Aws::CloudFormation::Client.new
80
+ end
81
+ end
@@ -1,33 +1,23 @@
1
- require "active_support/all"
2
- require "aws-sdk-s3"
3
- require "cfnresponse"
4
- include Cfnresponse
1
+ require 'bundler/setup'
2
+ require 'active_support/core_ext/hash'
3
+ require 'cfn_response'
5
4
 
6
5
  def lambda_handler(event:, context:)
7
- # Print out debugging info immediately just in case
8
- puts "event: #{json_pretty(event)}"
9
- puts "context: #{json_pretty(context)}"
10
-
11
- if %w[Create Update].include?(event['RequestType'])
12
- properties = event["ResourceProperties"].dup
13
- # After deleting ServiceToken, the rest of the values is the bucket configuration properties.
14
- properties.delete("ServiceToken")
15
- configurator = BucketConfigurator.new
16
- configurator.put(properties)
6
+ cfn = CfnResponse.new(event, context)
7
+ cfn.response do
8
+ case event['RequestType']
9
+ when "Create", "Update"
10
+ properties = event["ResourceProperties"].dup
11
+ # After deleting ServiceToken, the rest of the values are the bucket configuration properties.
12
+ properties.delete("ServiceToken")
13
+ configurator = BucketConfigurator.new
14
+ configurator.put(properties)
15
+ end
17
16
  end
18
-
19
- send_response(event, context, "SUCCESS")
20
-
21
- # We rescue all exceptions and send an message to CloudFormation so we dont have to
22
- # wait for over an hour for the stack operation to timeout and rollback.
23
- rescue Exception => e
24
- puts e.message
25
- puts e.backtrace
26
- sleep 10 # a little time for logs to be sent to CloudWatch
27
- send_response(event, context, "FAILED")
28
17
  end
29
18
 
30
19
  ########################################################
20
+ require "aws-sdk-s3"
31
21
 
32
22
  class BucketConfigurator
33
23
  def put(props={})
@@ -14,15 +14,20 @@ module Jets::Resource::ApiGateway::BasePath
14
14
  },
15
15
  role: "!GetAtt BasePathRole.Arn",
16
16
  handler: handler,
17
- runtime: "ruby2.5",
17
+ runtime: Jets.ruby_runtime,
18
18
  timeout: 60,
19
19
  memory_size: 1536,
20
20
  environment: env_properties[:environment],
21
+ layers: layers,
21
22
  }
22
23
  }
23
24
  }
24
25
  end
25
26
 
27
+ def layers
28
+ ["!Ref GemLayer"]
29
+ end
30
+
26
31
  def function_name
27
32
  method = "jets-base-path"
28
33
  # need to add the deployment timestamp because or else function name collides between deploys
@@ -15,11 +15,13 @@ module Jets::Resource::ApiGateway
15
15
 
16
16
  def parameters
17
17
  p = {
18
+ "GemLayer" => "GemLayer",
18
19
  "IamRole" => "IamRole",
19
20
  "RestApi" => "RestApi",
20
21
  "S3Bucket" => "S3Bucket",
21
22
  }
22
23
  p[:DomainName] = "DomainName" if Jets.custom_domain?
24
+ p[:BasePath] = "BasePath" unless Jets.config.domain.base_path.nil?
23
25
  p
24
26
  end
25
27
 
@@ -8,12 +8,46 @@ class Jets::Resource::ApiGateway::RestApi
8
8
  return default unless stack_exists?(parent_stack_name) && api_gateway_exists?
9
9
 
10
10
  if changed?
11
+ auto_replace_prompt
11
12
  new_id
12
13
  else
13
14
  current
14
15
  end
15
16
  end
16
17
 
18
+ def auto_replace_prompt
19
+ return if ENV['JETS_API_AUTO_REPLACE']
20
+ return unless ARGV[0] == "deploy"
21
+ case Jets.config.api.auto_replace
22
+ when nil
23
+ puts message.routes_changed
24
+ puts message.custom_domain
25
+ print "Would you like to continue the deployment? (y/N) "
26
+ answer = get_answer
27
+ exit 1 unless answer =~ /^y/
28
+ when false
29
+ puts message.routes_changed
30
+ puts message.auto_replace_disabled
31
+ exit 1
32
+ end
33
+ end
34
+
35
+ def message
36
+ Message.new
37
+ end
38
+ memoize :message
39
+
40
+ TIMEOUT_PERIOD = 120
41
+ def get_answer
42
+ Timeout::timeout(TIMEOUT_PERIOD) do
43
+ $stdin.gets
44
+ end
45
+ rescue Timeout::Error => e
46
+ puts "#{e.class}: #{e.message}".color(:red)
47
+ puts "Deployment timeout after #{TIMEOUT_PERIOD}s. Waited too long answer. Exiting."
48
+ exit 1
49
+ end
50
+
17
51
  def changed?
18
52
  change_detection = ChangeDetection.new
19
53
  change_detection.changed?
@@ -0,0 +1,49 @@
1
+ class Jets::Resource::ApiGateway::RestApi::LogicalId
2
+ class Message
3
+ def routes_changed
4
+ <<~EOL
5
+ Routes Change Detection: Jets has detected that a new brand API Gateway is required to be deployed.
6
+ IMPORTANT: This will result in the API Gateway endpoint changing.
7
+ EOL
8
+ end
9
+
10
+ def custom_domain
11
+ api = Jets::Resource::ApiGateway::DomainName.new
12
+ domain_name = api.domain_name
13
+ if domain_name
14
+ <<~EOL
15
+ It looks like you have already set up a custom domain.
16
+ The domain name: #{domain_name}
17
+
18
+ So you should be good to go as the custom domain will be updated with the new API Gateway endpoint.
19
+ To avoid this prompt in the future, you can configure:
20
+
21
+ config/application.rb
22
+
23
+ config.api.auto_replace = true
24
+
25
+ More info: custom domain docs: https://rubyonjets.com/docs/routing/custom-domain/
26
+ EOL
27
+ else
28
+ "Please set up a custom domain https://rubyonjets.com/docs/routing/custom-domain/"
29
+ end
30
+ end
31
+
32
+ def auto_replace_disabled
33
+ <<~EOL
34
+ It looks like `config.api.auto_replace = false`. IE:
35
+
36
+ config/application.rb
37
+
38
+ config.api.auto_replace = false
39
+
40
+ The deploy will not continue. See:
41
+
42
+ * https://rubyonjets.com/docs/app-config/reference/
43
+ * https://rubyonjets.com/docs/routing/custom-domain/
44
+
45
+ EOL
46
+ end
47
+ end
48
+ end
49
+
@@ -20,11 +20,13 @@ module Jets::Resource::ChildStack
20
20
 
21
21
  def parameters
22
22
  p = {
23
+ GemLayer: "!Ref GemLayer",
23
24
  IamRole: "!GetAtt IamRole.Arn",
24
25
  RestApi: "!GetAtt ApiGateway.Outputs.RestApi",
25
26
  S3Bucket: "!Ref S3Bucket",
26
27
  }
27
28
  p[:DomainName] = "!GetAtt ApiGateway.Outputs.DomainName" if Jets.custom_domain?
29
+ p[:BasePath] = Jets.config.domain.base_path unless Jets.config.domain.base_path.nil?
28
30
  p
29
31
  end
30
32
 
@@ -147,7 +147,7 @@ module Jets::Resource::Lambda
147
147
  map = {
148
148
  node: "nodejs8.10",
149
149
  python: "python3.6",
150
- ruby: "ruby2.5",
150
+ ruby: Jets.ruby_runtime,
151
151
  }
152
152
  map[@task.lang]
153
153
  end
@@ -5,7 +5,7 @@ class Jets::Router
5
5
  # Methods supported by API Gateway
6
6
  %w[any delete get head options patch post put].each do |method_name|
7
7
  define_method method_name do |path, options={}|
8
- create_route(options.merge(path: path, method: __method__))
8
+ create_route(options.merge(path: escape_path(path), method: __method__))
9
9
  end
10
10
  end
11
11
 
@@ -62,6 +62,7 @@ class Jets::Router
62
62
  {
63
63
  as: options.delete(:as) || item, # delete as or it messes with create_route
64
64
  prefix: prefix,
65
+ param: options[:param],
65
66
  # module: options.delete(:module) || item, # NOTE: resources does not automatically set module, but namespace does
66
67
  }
67
68
  end
@@ -134,5 +135,10 @@ class Jets::Router
134
135
  MethodCreator.new(options, @scope).create_root_helper
135
136
  @routes << Route.new(options, @scope)
136
137
  end
138
+ private
139
+
140
+ def escape_path(path)
141
+ path.to_s.split('/').map { |s| s =~ /\A[:\*]/ ? s : CGI.escape(s) }.join('/')
142
+ end
137
143
  end
138
144
  end
@@ -67,7 +67,7 @@ class Jets::Router::MethodCreator
67
67
  return if @as == :disabled
68
68
  path_method_call = "#{full_meth_name(:path)}#{meth_args}"
69
69
  # Note: It is important lazily get the value of ENV['JETS_HOST'] within the method.
70
- # Since it is not set until the requrest goes through the main middleware.
70
+ # Since it is not set until the request goes through the main middleware.
71
71
  <<~EOL
72
72
  def #{full_meth_name(:url)}#{meth_args}
73
73
  "\#{ENV['JETS_HOST']}\#{#{path_method_call}}"
@@ -35,9 +35,13 @@ module Jets
35
35
 
36
36
  case current.from
37
37
  when :resources
38
- variable = prefix.to_s.split('/').last
39
- variable = ":#{variable.singularize}_id"
40
- result.unshift(variable)
38
+ path_param = if current.options[:param]
39
+ ":#{current.options[:param]}"
40
+ else
41
+ resource_name = prefix.to_s.split('/').last
42
+ resource_name = ":#{resource_name.singularize}_id"
43
+ end
44
+ result.unshift(path_param)
41
45
  result.unshift(prefix)
42
46
  else # resource, namespace or general scope
43
47
  result.unshift(prefix)
@@ -25,10 +25,17 @@ module Jets::SpecHelpers
25
25
  request.path = path
26
26
  request.headers.deep_merge!(params.delete(:headers) || {})
27
27
 
28
- request.params.body_params = params.delete(:params) || params || {}
29
-
30
28
  request.params.query_params = params.delete(:query)
31
- request.params.query_params ||= params if request.method == :get
29
+
30
+ if request.method == :get
31
+ request.params.body_params = {}
32
+ request.params.query_params ||= params.delete(:params)
33
+ request.params.query_params ||= params
34
+ else
35
+ request.params.body_params = params.delete(:params)
36
+ request.params.body_params ||= params
37
+ end
38
+
32
39
  request.params.query_params ||= {}
33
40
 
34
41
  request.params.path_params = params
@@ -10,7 +10,7 @@ module Jets::SpecHelpers::Controllers
10
10
  def event
11
11
  json = {}
12
12
  id_params = route.path.scan(%r{:([^/]+)}).flatten
13
- expanded_path = path.dup
13
+ expanded_path = escape_path(path)
14
14
  path_parameters = {}
15
15
 
16
16
  id_params.each do |id_param|
@@ -19,11 +19,12 @@ module Jets::SpecHelpers::Controllers
19
19
  path_param_value = path_params[id_param.to_sym]
20
20
  raise "Path param :#{id_param} value cannot be blank" if path_param_value.blank?
21
21
 
22
- expanded_path.gsub!(":#{id_param}", path_param_value.to_s)
23
- path_parameters.deep_merge!(id_param => path_param_value.to_s)
22
+ escaped_path_param_value = CGI.escape(path_param_value.to_s)
23
+ expanded_path.gsub!(":#{id_param}", escaped_path_param_value)
24
+ path_parameters.deep_merge!(id_param => escaped_path_param_value)
24
25
  end
25
26
 
26
- json['resource'] = path
27
+ json['resource'] = escape_path(path)
27
28
  json['path'] = expanded_path
28
29
  json['httpMethod'] = method.to_s.upcase
29
30
  json['pathParameters'] = path_parameters
@@ -46,7 +47,7 @@ module Jets::SpecHelpers::Controllers
46
47
 
47
48
  params.query_params.each do |key, value|
48
49
  json['queryStringParameters'] ||= {}
49
- json['queryStringParameters'][key.to_s] = value
50
+ json['queryStringParameters'][key.to_s] = value.deep_dup
50
51
  end
51
52
 
52
53
  json
@@ -84,5 +85,11 @@ module Jets::SpecHelpers::Controllers
84
85
 
85
86
  Response.new(response) # converts APIGW hash to prettier object
86
87
  end
88
+
89
+ private
90
+
91
+ def escape_path(path)
92
+ path.to_s.split('/').map { |s| s =~ /\A[:\*]/ ? s : CGI.escape(s) }.join('/')
93
+ end
87
94
  end
88
95
  end
@@ -41,7 +41,7 @@ module Jets::Stack::Main::Dsl
41
41
  defaults[:function_name] = function_name if function_name
42
42
 
43
43
  props = defaults.merge(props)
44
- props[:runtime] = "ruby2.5" if props[:runtime].to_s == "ruby"
44
+ props[:runtime] = Jets.ruby_runtime if props[:runtime].to_s == "ruby"
45
45
  props[:handler] = handler(props[:handler])
46
46
 
47
47
  logical_id = id.to_s.gsub('/','_')
data/lib/jets/turbo.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'fileutils'
2
+ require 'memoist'
2
3
 
3
4
  module Jets
4
5
  class Turbo
data/lib/jets/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jets
2
- VERSION = "2.3.19"
2
+ VERSION = "3.0.0"
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: 2.3.19
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-28 00:00:00.000000000 Z
11
+ date: 2021-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionmailer
@@ -16,70 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 6.0.0
19
+ version: 6.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 6.0.0
26
+ version: 6.1.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: actionpack
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 6.0.0
33
+ version: 6.1.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 6.0.0
40
+ version: 6.1.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: actionview
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 6.0.0
47
+ version: 6.1.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 6.0.0
54
+ version: 6.1.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: activerecord
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 6.0.0
61
+ version: 6.1.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 6.0.0
68
+ version: 6.1.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: activesupport
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 6.0.0
75
+ version: 6.1.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 6.0.0
82
+ version: 6.1.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: aws-mfa-secure
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -234,6 +234,20 @@ dependencies:
234
234
  - - ">="
235
235
  - !ruby/object:Gem::Version
236
236
  version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: cfn-status
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
237
251
  - !ruby/object:Gem::Dependency
238
252
  name: cfn_camelizer
239
253
  requirement: !ruby/object:Gem::Requirement
@@ -249,7 +263,7 @@ dependencies:
249
263
  - !ruby/object:Gem::Version
250
264
  version: 0.4.6
251
265
  - !ruby/object:Gem::Dependency
252
- name: cfnresponse
266
+ name: cfn_response
253
267
  requirement: !ruby/object:Gem::Requirement
254
268
  requirements:
255
269
  - - ">="
@@ -304,20 +318,6 @@ dependencies:
304
318
  - - ">="
305
319
  - !ruby/object:Gem::Version
306
320
  version: '0'
307
- - !ruby/object:Gem::Dependency
308
- name: jets-gems
309
- requirement: !ruby/object:Gem::Requirement
310
- requirements:
311
- - - "~>"
312
- - !ruby/object:Gem::Version
313
- version: 0.2.3
314
- type: :runtime
315
- prerelease: false
316
- version_requirements: !ruby/object:Gem::Requirement
317
- requirements:
318
- - - "~>"
319
- - !ruby/object:Gem::Version
320
- version: 0.2.3
321
321
  - !ruby/object:Gem::Dependency
322
322
  name: jets-html-sanitizer
323
323
  requirement: !ruby/object:Gem::Requirement
@@ -394,14 +394,14 @@ dependencies:
394
394
  requirements:
395
395
  - - "~>"
396
396
  - !ruby/object:Gem::Version
397
- version: 6.0.0
397
+ version: 6.1.0
398
398
  type: :runtime
399
399
  prerelease: false
400
400
  version_requirements: !ruby/object:Gem::Requirement
401
401
  requirements:
402
402
  - - "~>"
403
403
  - !ruby/object:Gem::Version
404
- version: 6.0.0
404
+ version: 6.1.0
405
405
  - !ruby/object:Gem::Dependency
406
406
  name: rainbow
407
407
  requirement: !ruby/object:Gem::Requirement
@@ -430,6 +430,20 @@ dependencies:
430
430
  - - ">="
431
431
  - !ruby/object:Gem::Version
432
432
  version: '0'
433
+ - !ruby/object:Gem::Dependency
434
+ name: serverlessgems
435
+ requirement: !ruby/object:Gem::Requirement
436
+ requirements:
437
+ - - ">="
438
+ - !ruby/object:Gem::Version
439
+ version: '0'
440
+ type: :runtime
441
+ prerelease: false
442
+ version_requirements: !ruby/object:Gem::Requirement
443
+ requirements:
444
+ - - ">="
445
+ - !ruby/object:Gem::Version
446
+ version: '0'
433
447
  - !ruby/object:Gem::Dependency
434
448
  name: shotgun
435
449
  requirement: !ruby/object:Gem::Requirement
@@ -487,7 +501,7 @@ dependencies:
487
501
  - !ruby/object:Gem::Version
488
502
  version: '0'
489
503
  - !ruby/object:Gem::Dependency
490
- name: byebug
504
+ name: bundler
491
505
  requirement: !ruby/object:Gem::Requirement
492
506
  requirements:
493
507
  - - ">="
@@ -501,7 +515,7 @@ dependencies:
501
515
  - !ruby/object:Gem::Version
502
516
  version: '0'
503
517
  - !ruby/object:Gem::Dependency
504
- name: bundler
518
+ name: byebug
505
519
  requirement: !ruby/object:Gem::Requirement
506
520
  requirements:
507
521
  - - ">="
@@ -529,7 +543,7 @@ dependencies:
529
543
  - !ruby/object:Gem::Version
530
544
  version: '0'
531
545
  - !ruby/object:Gem::Dependency
532
- name: rspec
546
+ name: render_me_pretty
533
547
  requirement: !ruby/object:Gem::Requirement
534
548
  requirements:
535
549
  - - ">="
@@ -543,7 +557,7 @@ dependencies:
543
557
  - !ruby/object:Gem::Version
544
558
  version: '0'
545
559
  - !ruby/object:Gem::Dependency
546
- name: cfn-status
560
+ name: rspec
547
561
  requirement: !ruby/object:Gem::Requirement
548
562
  requirements:
549
563
  - - ">="
@@ -668,6 +682,7 @@ files:
668
682
  - lib/jets/commands/clean/base.rb
669
683
  - lib/jets/commands/clean/build.rb
670
684
  - lib/jets/commands/clean/log.rb
685
+ - lib/jets/commands/configure.rb
671
686
  - lib/jets/commands/console.rb
672
687
  - lib/jets/commands/db.rb
673
688
  - lib/jets/commands/db/environment-task.rake
@@ -827,6 +842,7 @@ files:
827
842
  - lib/jets/internal/app/controllers/jets/public_controller.rb
828
843
  - lib/jets/internal/app/controllers/jets/rack_controller.rb
829
844
  - lib/jets/internal/app/functions/jets/base_path.rb
845
+ - lib/jets/internal/app/functions/jets/base_path_mapping.rb
830
846
  - lib/jets/internal/app/helpers/jets/mailers_helper.rb
831
847
  - lib/jets/internal/app/jobs/jets/preheat_job.rb
832
848
  - lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb
@@ -899,6 +915,7 @@ files:
899
915
  - lib/jets/resource/api_gateway/rest_api.rb
900
916
  - lib/jets/resource/api_gateway/rest_api/change_detection.rb
901
917
  - lib/jets/resource/api_gateway/rest_api/logical_id.rb
918
+ - lib/jets/resource/api_gateway/rest_api/logical_id/message.rb
902
919
  - lib/jets/resource/api_gateway/rest_api/routes.rb
903
920
  - lib/jets/resource/api_gateway/rest_api/routes/change.rb
904
921
  - lib/jets/resource/api_gateway/rest_api/routes/change/base.rb
@@ -1020,30 +1037,6 @@ files:
1020
1037
  - lib/jets/version.rb
1021
1038
  - readme/prerelease.md
1022
1039
  - readme/testing.md
1023
- - vendor/cfn-status/CHANGELOG.md
1024
- - vendor/cfn-status/Gemfile
1025
- - vendor/cfn-status/Gemfile.lock
1026
- - vendor/cfn-status/LICENSE.txt
1027
- - vendor/cfn-status/README.md
1028
- - vendor/cfn-status/Rakefile
1029
- - vendor/cfn-status/bin/console
1030
- - vendor/cfn-status/bin/setup
1031
- - vendor/cfn-status/cfn-status.gemspec
1032
- - vendor/cfn-status/lib/cfn-status.rb
1033
- - vendor/cfn-status/lib/cfn_status.rb
1034
- - vendor/cfn-status/lib/cfn_status/aws_service.rb
1035
- - vendor/cfn-status/lib/cfn_status/version.rb
1036
- - vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-1.json
1037
- - vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-2.json
1038
- - vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-3.json
1039
- - vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-1.json
1040
- - vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-2.json
1041
- - vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-3.json
1042
- - vendor/cfn-status/spec/fixtures/cfn/stack-events-complete.json
1043
- - vendor/cfn-status/spec/fixtures/cfn/stack-events-in-progress.json
1044
- - vendor/cfn-status/spec/fixtures/cfn/stack-events-update-rollback-complete.json
1045
- - vendor/cfn-status/spec/lib/cfn_status_spec.rb
1046
- - vendor/cfn-status/spec/spec_helper.rb
1047
1040
  homepage: https://rubyonjets.com
1048
1041
  licenses:
1049
1042
  - MIT
@@ -1103,7 +1096,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1103
1096
  - !ruby/object:Gem::Version
1104
1097
  version: '0'
1105
1098
  requirements: []
1106
- rubygems_version: 3.2.5
1099
+ rubygems_version: 3.1.4
1107
1100
  signing_key:
1108
1101
  specification_version: 4
1109
1102
  summary: Ruby Serverless Framework