jets 2.3.14 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) 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 +58 -0
  6. data/README.md +2 -2
  7. data/backers.md +2 -0
  8. data/jets.gemspec +11 -10
  9. data/lib/jets.rb +9 -11
  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 +18 -17
  15. data/lib/jets/builders/gem_replacer.rb +3 -4
  16. data/lib/jets/builders/lambda_layer.rb +4 -5
  17. data/lib/jets/builders/ruby_packager.rb +17 -19
  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/cfn/upload.rb +18 -2
  23. data/lib/jets/cli.rb +6 -1
  24. data/lib/jets/commands/base.rb +1 -1
  25. data/lib/jets/commands/call.rb +15 -2
  26. data/lib/jets/commands/call/base_guesser.rb +4 -2
  27. data/lib/jets/commands/clean.rb +1 -1
  28. data/lib/jets/commands/clean/base.rb +1 -1
  29. data/lib/jets/commands/configure.rb +51 -0
  30. data/lib/jets/commands/delete.rb +2 -2
  31. data/lib/jets/commands/gems.rb +2 -10
  32. data/lib/jets/commands/help/call.md +8 -0
  33. data/lib/jets/commands/help/gems/check.md +3 -5
  34. data/lib/jets/commands/import/base.rb +1 -1
  35. data/lib/jets/commands/main.rb +10 -2
  36. data/lib/jets/commands/new.rb +10 -2
  37. data/lib/jets/commands/sequence.rb +6 -0
  38. data/lib/jets/commands/templates/skeleton/Gemfile.tt +2 -2
  39. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +1 -1
  40. data/lib/jets/commands/templates/skeleton/public/index.html.tt +1 -1
  41. data/lib/jets/commands/url.rb +1 -0
  42. data/lib/jets/controller/authorization.rb +10 -1
  43. data/lib/jets/controller/base.rb +14 -4
  44. data/lib/jets/controller/middleware/main.rb +2 -1
  45. data/lib/jets/controller/params.rb +26 -4
  46. data/lib/jets/controller/rack/env.rb +18 -1
  47. data/lib/jets/controller/rendering.rb +5 -2
  48. data/lib/jets/controller/rendering/rack_renderer.rb +7 -1
  49. data/lib/jets/core.rb +12 -4
  50. data/lib/jets/core_ext/bundler.rb +7 -0
  51. data/lib/jets/dotenv/ssm.rb +18 -4
  52. data/lib/jets/generator.rb +2 -3
  53. data/lib/jets/internal/app/functions/jets/base_path.rb +10 -149
  54. data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +81 -0
  55. data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +14 -24
  56. data/lib/jets/job/base.rb +1 -1
  57. data/lib/jets/rack_server.rb +1 -1
  58. data/lib/jets/resource/api_gateway/base_path/function.rb +6 -1
  59. data/lib/jets/resource/api_gateway/deployment.rb +2 -0
  60. data/lib/jets/resource/api_gateway/method.rb +3 -1
  61. data/lib/jets/resource/api_gateway/method/authorization.rb +9 -0
  62. data/lib/jets/resource/api_gateway/resource.rb +1 -1
  63. data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +34 -0
  64. data/lib/jets/resource/api_gateway/rest_api/logical_id/message.rb +49 -0
  65. data/lib/jets/resource/child_stack/api_deployment.rb +2 -0
  66. data/lib/jets/resource/lambda/function.rb +4 -4
  67. data/lib/jets/router/dsl.rb +7 -1
  68. data/lib/jets/router/method_creator/code.rb +1 -1
  69. data/lib/jets/router/route/authorizer.rb +4 -0
  70. data/lib/jets/router/scope.rb +7 -3
  71. data/lib/jets/spec_helpers/controllers.rb +10 -3
  72. data/lib/jets/spec_helpers/controllers/request.rb +12 -5
  73. data/lib/jets/stack/main/dsl/lambda.rb +1 -1
  74. data/lib/jets/turbo.rb +1 -0
  75. data/lib/jets/turbo/rails.rb +1 -1
  76. data/lib/jets/version.rb +1 -1
  77. metadata +57 -63
  78. data/vendor/cfn-status/CHANGELOG.md +0 -14
  79. data/vendor/cfn-status/Gemfile +0 -4
  80. data/vendor/cfn-status/LICENSE.txt +0 -21
  81. data/vendor/cfn-status/README.md +0 -56
  82. data/vendor/cfn-status/Rakefile +0 -6
  83. data/vendor/cfn-status/bin/console +0 -14
  84. data/vendor/cfn-status/bin/setup +0 -8
  85. data/vendor/cfn-status/cfn-status.gemspec +0 -30
  86. data/vendor/cfn-status/lib/cfn-status.rb +0 -1
  87. data/vendor/cfn-status/lib/cfn_status.rb +0 -245
  88. data/vendor/cfn-status/lib/cfn_status/aws_service.rb +0 -51
  89. data/vendor/cfn-status/lib/cfn_status/version.rb +0 -3
  90. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-1.json +0 -1103
  91. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-2.json +0 -1104
  92. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-3.json +0 -1103
  93. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-1.json +0 -1103
  94. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-2.json +0 -1104
  95. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-3.json +0 -1103
  96. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-complete.json +0 -1080
  97. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-in-progress.json +0 -1080
  98. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-update-rollback-complete.json +0 -1086
  99. data/vendor/cfn-status/spec/lib/cfn_status_spec.rb +0 -153
  100. data/vendor/cfn-status/spec/spec_helper.rb +0 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ddbf1726e80a44319389bf13b4b22323517ae715d552fc503fe3b48dbc89160b
4
- data.tar.gz: 4671ee27bbb47bb3c413de748cc0c01ef3bdf14289f4cf28d0690f9019e7f269
3
+ metadata.gz: 64340de503207710a82a13ca132501a65e030dd295edf2aff5fec1499c6e4d43
4
+ data.tar.gz: 615dea597ff7fefafb59352aa3a68ef0c0b4b1338c7c9df1c36121e54c68fb7f
5
5
  SHA512:
6
- metadata.gz: ad4a8ceb595f021253d2f93bb3ec70c06a58d574478d3be3503756926ee1d3ca85e39f633aadba9499c8d741d86bccd44cd249a3d063a109e6c77397bbfad74c
7
- data.tar.gz: f00bcab89a774abea67c64a3b9aaf96a1b64ac0778303ac11a38043c343a7fd3cf9b2966bb92e1ee39603dc76d5b5eacdad157dcd0908e3c1bdc681d0bd892bc
6
+ metadata.gz: 208dc2bbe537c0b99bd09927185d8e75dee87a76dc1320b6755e2e53136a85c66940ff3e6f0c74d5e806d3d49b49125d351ec27d8ceb7207d17b55cb593c1cbe
7
+ data.tar.gz: 8e2f0b5ea3c84f907cc72e4eae4779da20d31d11affe6987ad55d2e92861b320104deeec00aefe5121bf5043f73b5ab2c3e5653b86297faaac00b88181651157
@@ -1,3 +0,0 @@
1
- [submodule "vendor/cfn-status"]
2
- path = vendor/cfn-status
3
- url = https://github.com/tongueroo/cfn-status.git
@@ -1 +1 @@
1
- 3.6.6
1
+ 3.8.6
@@ -1 +1 @@
1
- 2.5.7
1
+ 2.7.2
@@ -3,6 +3,64 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/).
5
5
 
6
+ ## [3.0.0]
7
+ * #328 i18n docs
8
+ * #391 Deploy Option: Auto Replace API Gateway
9
+ * #444 Ruby 2.7 Support
10
+ * #453 Update to Bootstrap4 official release
11
+ * #454 When the controller name is singular, the behavior of searching for the View file is different from expected.
12
+ * #457 Breaking change: Harden IAM policy and do allow list all buckets by default. Breaking change.
13
+ * #479 Create request completion log method
14
+ * #487 API Gateway Base Path
15
+ * #488 Add retry_limit and read_timeout options
16
+ * #491 Fix queryStringParameters handling for nested value in spec_helper
17
+ * #492 Add params keyword case with get method for spec helpers test
18
+ * #494 Update ruby_packager.rb
19
+ * #496 Add unicode test for spec_helpers test
20
+ * #499 default_iam_policy does not correctly include VPC related actions on resource creation
21
+ * Improve autoloader: Shouldnt have to to call `bundle exec` in front of jets anymore.
22
+ * `jets configure` command
23
+ * Big improvements to docs site, add search
24
+ * Use serverlessgems API
25
+ * Breaking: use do not pluralize controller names for views folder
26
+ * Shorten SSM secrets notation support
27
+ * Remove deprecations and warnings: bundle install, generate scaffold, webpacker, yarn license, etc
28
+ * Also setting the `config.iam_policy` appends to the default policy now.
29
+ * Upgrade to Rails 6.1 components
30
+ * Increase cloudformation output limit to 200
31
+ * Replace `--sure` with `-y` option
32
+ * Fix params helper in views
33
+ * Webpacker upgrade
34
+
35
+ ## [2.3.18]
36
+ - #514 Allow to define route that contains dot
37
+ - #515 set content type on upload by using extension so cloudfront will compress when serving
38
+ - #517 support nested query params in tests
39
+
40
+ ## [2.3.17]
41
+ - #472 Docs: Update cors-support.md
42
+ - #475 Docs: Update activerecord.md to include db:create step
43
+ - #476 Docs: Update authorizer-cognito.md
44
+ - #482 Docs: Fixed description for "jetpacker" gem in Gemfile
45
+ - #483 Docs: controllers Fix minor typo
46
+ - #489 Docs: call typo
47
+ - #490 Docs: authorizers typo
48
+ - #504 Docs: tutorial series
49
+ - #505 Docs: display more tutorial articles
50
+ - #509 Docs: Update lamdba permissions for minimal-iam-policy doc
51
+ - #512 Bug fix: fix on_lambda? check allow testing #512
52
+
53
+ ## [2.3.16]
54
+ - #466 fix application_config typo
55
+ - #467 Handle forbidden error from s3
56
+ - #468 authorization_scopes
57
+ - #469 Fixed typo from STMP to SMTP
58
+ - #470 remove json dependency
59
+ - #471 use `Bundler.with_unbundled_env` remove bundler deprecation
60
+
61
+ ## [2.3.15]
62
+ - #461 fix guesser lookup for long function names
63
+
6
64
  ## [2.3.14]
7
65
  - #432 filtered_parameters support
8
66
  - #447 improve nested routes support. order routes so that nested resources always work
data/README.md CHANGED
@@ -5,10 +5,10 @@
5
5
  Ruby and Lambda splat out a baby and that child's name is [Jets](http://rubyonjets.com/).
6
6
 
7
7
  ![Build Status](https://codebuild.us-west-2.amazonaws.com/badges?uuid=eyJlbmNyeXB0ZWREYXRhIjoiZ08vK2hjOHczQUVoUDhSYnBNNUU4T0gxQWJuOTlLaXpwVGQ1NjJ3NnVDY1dSdFVXQ3d2VXVSQzRFcU1qd1JPMndFZlByRktIcTUrZm5GWlM5dHpjM1ZrPSIsIml2UGFyYW1ldGVyU3BlYyI6Imluc1Qrd25GanhUdHlidjUiLCJtYXRlcmlhbFNldFNlcmlhbCI6MX0%3D&branch=master)
8
- [![CircleCI](https://circleci.com/gh/tongueroo/jets.svg?style=svg)](https://circleci.com/gh/tongueroo/jets)
8
+ [![CircleCI](https://circleci.com/gh/boltops-tools/jets.svg?style=svg)](https://circleci.com/gh/boltops-tools/jets)
9
9
  [![Gem Version](https://badge.fury.io/rb/jets.svg)](https://badge.fury.io/rb/jets)
10
10
  [![Support](https://img.shields.io/badge/Support-Help-blue.svg)](http://rubyonjets.com/support/)
11
- [![Gitter Chat](https://badges.gitter.im/tongueroo/jets.png)](https://gitter.im/tongueroo/jets)
11
+ [![Gitter Chat](https://badges.gitter.im/boltops-tools/jets.png)](https://gitter.im/boltops-tools/jets)
12
12
 
13
13
  [![BoltOps Badge](https://img.boltops.com/boltops/badges/boltops-badge.png)](https://www.boltops.com)
14
14
 
data/backers.md CHANGED
@@ -15,4 +15,6 @@ Funds donated via Patreon go directly to support Tung Nguyen's full-time work on
15
15
  - Nate Clark
16
16
  - Hirokatsu Endo
17
17
  - Michael Choi
18
+ - Phan Lam
19
+ - Theron Welch
18
20
  <!--10 end-->
@@ -27,11 +27,11 @@ Gem::Specification.new do |spec|
27
27
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
28
28
  spec.require_paths = ["lib"]
29
29
 
30
- spec.add_dependency "actionmailer", "~> 6.0.0"
31
- spec.add_dependency "actionpack", "~> 6.0.0"
32
- spec.add_dependency "actionview", "~> 6.0.0"
33
- spec.add_dependency "activerecord", "~> 6.0.0"
34
- spec.add_dependency "activesupport", "~> 6.0.0"
30
+ spec.add_dependency "actionmailer", "~> 6.1.0"
31
+ spec.add_dependency "actionpack", "~> 6.1.0"
32
+ spec.add_dependency "actionview", "~> 6.1.0"
33
+ spec.add_dependency "activerecord", "~> 6.1.0"
34
+ spec.add_dependency "activesupport", "~> 6.1.0"
35
35
  spec.add_dependency "aws-mfa-secure", "~> 0.4.0"
36
36
  spec.add_dependency "aws-sdk-apigateway"
37
37
  spec.add_dependency "aws-sdk-cloudformation"
@@ -43,28 +43,29 @@ Gem::Specification.new do |spec|
43
43
  spec.add_dependency "aws-sdk-sns"
44
44
  spec.add_dependency "aws-sdk-sqs"
45
45
  spec.add_dependency "aws-sdk-ssm"
46
+ spec.add_dependency "cfn-status"
46
47
  spec.add_dependency "cfn_camelizer", "~> 0.4.6"
47
- spec.add_dependency "cfnresponse"
48
+ spec.add_dependency "cfn_response"
48
49
  spec.add_dependency "dotenv"
49
50
  spec.add_dependency "gems" # jets-gems dependency
50
51
  spec.add_dependency "hashie"
51
- spec.add_dependency "jets-gems"
52
52
  spec.add_dependency "jets-html-sanitizer"
53
- spec.add_dependency "json"
54
53
  spec.add_dependency "kramdown"
55
54
  spec.add_dependency "memoist"
56
55
  spec.add_dependency "mimemagic"
57
56
  spec.add_dependency "rack"
58
- spec.add_dependency "railties", "~> 6.0.0" # for ActiveRecord database_tasks.rb
57
+ spec.add_dependency "railties", "~> 6.1.0" # for ActiveRecord database_tasks.rb
59
58
  spec.add_dependency "rainbow"
60
59
  spec.add_dependency "recursive-open-struct"
60
+ spec.add_dependency "serverlessgems"
61
61
  spec.add_dependency "shotgun"
62
62
  spec.add_dependency "text-table"
63
63
  spec.add_dependency "thor"
64
64
  spec.add_dependency "zeitwerk"
65
65
 
66
- spec.add_development_dependency "byebug"
67
66
  spec.add_development_dependency "bundler"
67
+ spec.add_development_dependency "byebug"
68
68
  spec.add_development_dependency "rake"
69
+ spec.add_development_dependency "render_me_pretty"
69
70
  spec.add_development_dependency "rspec"
70
71
  end
@@ -1,6 +1,13 @@
1
1
  $stdout.sync = true unless ENV["JETS_STDOUT_SYNC"] == "0"
2
2
 
3
3
  $:.unshift(File.expand_path("../", __FILE__))
4
+
5
+ require "jets/core_ext/bundler"
6
+ require "jets/autoloaders"
7
+ Jets::Autoloaders.log! if ENV["JETS_AUTOLOAD_LOG"]
8
+ Jets::Autoloaders.once.setup # must be called before cli.setup
9
+ Jets::Autoloaders.cli.setup
10
+
4
11
  require "active_support"
5
12
  require "active_support/concern"
6
13
  require "active_support/core_ext"
@@ -8,22 +15,13 @@ require "active_support/dependencies"
8
15
  require "active_support/ordered_hash"
9
16
  require "active_support/ordered_options"
10
17
  require "cfn_camelizer"
18
+ require "cfn_status"
11
19
  require "fileutils"
12
- require "jets/gems"
13
20
  require "memoist"
14
21
  require "rainbow/ext/string"
15
-
16
- gem_root = File.dirname(__dir__)
17
- $:.unshift("#{gem_root}/lib")
18
- $:.unshift("#{gem_root}/vendor/cfn-status/lib")
19
- require "cfn_status"
20
-
21
- require "jets/autoloaders"
22
- Jets::Autoloaders.log! if ENV["JETS_AUTOLOAD_LOG"]
23
- Jets::Autoloaders.once.setup
22
+ require "serverlessgems"
24
23
 
25
24
  module Jets
26
- RUBY_VERSION = "2.5.3"
27
25
  MAX_FUNCTION_NAME_SIZE = 64
28
26
 
29
27
  class Error < StandardError; end
@@ -22,6 +22,7 @@ class Jets::Application
22
22
  load_environments_config
23
23
  load_db_config
24
24
  set_iam_policy # relies on dependent values, must be called afterwards
25
+ set_time_zone
25
26
  normalize_env_vars!
26
27
  end
27
28
 
@@ -64,7 +65,7 @@ class Jets::Application
64
65
  return ENV['JETS_PROJECT_NAME'] if ENV['JETS_PROJECT_NAME'] # override
65
66
 
66
67
  lines = IO.readlines("#{Jets.root}/config/application.rb")
67
- project_name_line = lines.find { |l| l =~ /config\.project_name.*=/ }
68
+ project_name_line = lines.find { |l| l =~ /config\.project_name.*=/ && l !~ /^\s+#/ }
68
69
  project_name_line.gsub(/.*=/,'').strip.gsub(/["']/,'') # project_name
69
70
  end
70
71
 
@@ -175,10 +176,16 @@ class Jets::Application
175
176
  end
176
177
 
177
178
  def set_iam_policy
178
- config.iam_policy ||= self.class.default_iam_policy
179
+ config.iam_policy ||= []
180
+ config.default_iam_policy ||= self.class.default_iam_policy
181
+ config.iam_policy = config.default_iam_policy | config.iam_policy
179
182
  config.managed_policy_definitions ||= [] # default empty
180
183
  end
181
184
 
185
+ def set_time_zone
186
+ Time.zone_default = Time.find_zone!(config.time_zone)
187
+ end
188
+
182
189
  # It is pretty easy to attempt to set environment variables without
183
190
  # the correct AWS Environment.Variables path struture.
184
191
  # Auto-fix it for convenience.
@@ -10,18 +10,12 @@ class Jets::Application
10
10
  effect: "Allow",
11
11
  resource: "arn:aws:logs:#{Jets.aws.region}:#{Jets.aws.account}:log-group:/aws/lambda/#{project_namespace}-*",
12
12
  }
13
- s3_bucket = Jets.aws.s3_bucket
14
13
  s3_readonly = {
15
- action: ["s3:Get*", "s3:List*"],
14
+ action: ["s3:Get*", "s3:List*", "s3:HeadBucket"],
16
15
  effect: "Allow",
17
- resource: "arn:aws:s3:::#{s3_bucket}*",
16
+ resource: "arn:aws:s3:::#{Jets.aws.s3_bucket}*",
18
17
  }
19
- s3_bucket = {
20
- action: ["s3:ListAllMyBuckets", "s3:HeadBucket"],
21
- effect: "Allow",
22
- resource: "arn:aws:s3:::*", # scoped to all buckets
23
- }
24
- policies = [logs, s3_readonly, s3_bucket]
18
+ policies = [logs, s3_readonly]
25
19
 
26
20
  cloudformation = {
27
21
  action: ["cloudformation:DescribeStacks", "cloudformation:DescribeStackResources"],
@@ -57,6 +51,7 @@ class Jets::Application
57
51
  config.autoload_paths = [] # allows for customization
58
52
  config.ignore_paths = [] # allows for customization
59
53
  config.logger = Jets::Logger.new($stderr)
54
+ config.time_zone = "UTC"
60
55
 
61
56
  # function properties defaults
62
57
  config.function = ActiveSupport::OrderedOptions.new
@@ -73,9 +68,9 @@ class Jets::Application
73
68
  config.prewarm.rack_ratio = 5
74
69
 
75
70
  config.gems = ActiveSupport::OrderedOptions.new
76
- config.gems.sources = [
77
- Jets.default_gems_source
78
- ]
71
+ config.gems.clean = false
72
+ config.gems.disable = false
73
+ config.gems.source = "https://api.serverlessgems.com/api/v1"
79
74
 
80
75
  config.inflections = ActiveSupport::OrderedOptions.new
81
76
  config.inflections.irregular = {}
@@ -95,12 +90,13 @@ class Jets::Application
95
90
  config.session.options = {}
96
91
 
97
92
  config.api = ActiveSupport::OrderedOptions.new
93
+ config.api.api_key_required = false # Turn off API key required
98
94
  config.api.authorization_type = "NONE"
99
- config.api.cors_authorization_type = nil # nil so ApiGateway::Cors#cors_authorization_type handles
95
+ config.api.auto_replace = nil # https://github.com/boltops-tools/jets/issues/391
100
96
  config.api.binary_media_types = ['multipart/form-data']
101
- config.api.endpoint_type = 'EDGE' # PRIVATE, EDGE, REGIONAL
97
+ config.api.cors_authorization_type = nil # nil so ApiGateway::Cors#cors_authorization_type handles
102
98
  config.api.endpoint_policy = nil # required when endpoint_type is EDGE
103
- config.api.api_key_required = false # Turn off API key required
99
+ config.api.endpoint_type = 'EDGE' # PRIVATE, EDGE, REGIONAL
104
100
 
105
101
  config.api.authorizers = ActiveSupport::OrderedOptions.new
106
102
  config.api.authorizers.default_token_source = "Auth" # method.request.header.Auth
@@ -151,6 +147,9 @@ class Jets::Application
151
147
  config.controllers.default_protect_from_forgery = nil
152
148
  config.controllers.filtered_parameters = []
153
149
 
150
+ config.app = ActiveSupport::OrderedOptions.new
151
+ config.app.domain = nil
152
+
154
153
  config.deploy = ActiveSupport::OrderedOptions.new
155
154
  config.deploy.stagger = ActiveSupport::OrderedOptions.new
156
155
  config.deploy.stagger.enabled = false
@@ -158,6 +157,9 @@ class Jets::Application
158
157
 
159
158
  config.hot_reload = Jets.env.development?
160
159
 
160
+ config.ruby = ActiveSupport::OrderedOptions.new
161
+ config.ruby.check = true
162
+
161
163
  config
162
164
  end
163
165
 
@@ -3,6 +3,8 @@ Jets::Bundle.setup
3
3
  require "zeitwerk"
4
4
 
5
5
  module Jets
6
+ module Commands ; end
7
+
6
8
  module Autoloaders
7
9
  class OnceInflector < Zeitwerk::Inflector
8
10
  def camelize(basename, _abspath)
@@ -21,6 +23,7 @@ module Jets
21
23
  def log!
22
24
  main.log!
23
25
  once.log!
26
+ cli.log!
24
27
  end
25
28
 
26
29
  def main
@@ -56,6 +59,17 @@ module Jets
56
59
  end
57
60
  memoize :once
58
61
 
62
+ def cli
63
+ Zeitwerk::Loader.new.tap do |loader|
64
+ loader.tag = "jets.cli"
65
+ loader.inflector = OnceInflector.new
66
+
67
+ loader.push_dir("#{__dir__}/commands", namespace: Jets::Commands)
68
+ loader.ignore("#{__dir__}/commands/templates*")
69
+ end
70
+ end
71
+ memoize :cli
72
+
59
73
  private
60
74
  def internal_app_paths
61
75
  %w[
@@ -84,7 +98,7 @@ module Jets
84
98
  builders/rackup_wrappers
85
99
  builders/reconfigure_rails
86
100
  builders/templates
87
- commands/templates
101
+ commands
88
102
  controller/middleware/webpacker_setup.rb
89
103
  core_ext
90
104
  internal
@@ -83,7 +83,7 @@ class Jets::Booter
83
83
  # using ActiveRecord rake tasks outside of Rails.
84
84
  ActiveRecord::Tasks::DatabaseTasks.database_configuration = db_configs
85
85
 
86
- if db_configs[Jets.env].blank?
86
+ if db_configs.configs_for(env_name: Jets.env).blank?
87
87
  abort("ERROR: config/database.yml exists but no environment section configured for #{Jets.env}")
88
88
  end
89
89
  ActiveRecord::Base.configurations = db_configs
@@ -96,9 +96,9 @@ class Jets::Booter
96
96
  # the same.
97
97
  def connect_db
98
98
  primary_hash_config = ActiveRecord::Base.configurations.configs_for(env_name: Jets.env).find { |hash_config|
99
- hash_config.spec_name == "primary"
99
+ hash_config.name == "primary"
100
100
  }
101
- primary_config = primary_hash_config.config # config is a normal Ruby Hash
101
+ primary_config = primary_hash_config.configuration_hash # configuration_hash is a normal Ruby Hash
102
102
  ActiveRecord::Base.establish_connection(primary_config)
103
103
  end
104
104
 
@@ -82,7 +82,7 @@ module Jets::Builders
82
82
  begin
83
83
  s3.head_object(bucket: s3_bucket, key: s3_key)
84
84
  true
85
- rescue Aws::S3::Errors::NotFound
85
+ rescue Aws::S3::Errors::NotFound, Aws::S3::Errors::Forbidden
86
86
  false
87
87
  end
88
88
  end
@@ -235,7 +235,7 @@ module Jets::Builders
235
235
 
236
236
  # Need to capture JETS_ROOT since can be changed by Turbo mode
237
237
  jets_root = Jets.root
238
- Bundler.with_clean_env do
238
+ Bundler.with_unbundled_env do
239
239
  # Switch gemfile for Afterburner mode
240
240
  gemfile = ENV['BUNDLE_GEMFILE']
241
241
  ENV['BUNDLE_GEMFILE'] = "#{jets_root}/rack/Gemfile"
@@ -373,28 +373,29 @@ module Jets::Builders
373
373
  end
374
374
  end
375
375
 
376
- def check_ruby_version
377
- unless ruby_version_supported?
378
- puts "You are using Ruby version #{RUBY_VERSION} which is not supported by Jets."
379
- ruby_variant = Jets::RUBY_VERSION.split('.')[0..1].join('.') + '.x'
380
- abort("Jets uses Ruby #{Jets::RUBY_VERSION}. You should use a variant of Ruby #{ruby_variant}".color(:red))
381
- end
382
- end
383
-
384
376
  def copy_ruby_version_file
385
377
  ruby_version_path = Jets.root.join(".ruby-version")
386
378
  return unless File.exists?(ruby_version_path)
387
379
  FileUtils.cp_r(ruby_version_path, build_area)
388
380
  end
389
381
 
390
- def ruby_version_supported?
391
- pattern = /(\d+)\.(\d+)\.(\d+)/
392
- md = RUBY_VERSION.match(pattern)
393
- ruby = {major: md[1], minor: md[2]}
394
- md = Jets::RUBY_VERSION.match(pattern)
395
- jets = {major: md[1], minor: md[2]}
382
+ SUPPORTED_RUBY_VERSIONS = %w[2.5 2.7]
383
+ def check_ruby_version
384
+ return unless ENV['JETS_RUBY_CHECK'] == '0' || Jets.config.ruby.check == false
385
+ return if ruby_version_supported?
386
+ puts <<~EOL.color(:red)
387
+ You are using Ruby version #{RUBY_VERSION} which is not supported by Jets.
388
+ Please use one of the Jets supported ruby versions: #{SUPPORTED_RUBY_VERSIONS.join(' ')}
389
+ If you would like to skip this check you can set: JETS_RUBY_CHECK=0
390
+ EOL
391
+ exit 1
392
+ end
396
393
 
397
- ruby[:major] == jets[:major] && ruby[:minor] == jets[:minor]
394
+ def ruby_version_supported?
395
+ md = RUBY_VERSION.match(/(\d+)\.(\d+)\.\d+/)
396
+ major, minor = md[1], md[2]
397
+ detected_ruby = [major, minor].join('.')
398
+ SUPPORTED_RUBY_VERSIONS.include?(detected_ruby)
398
399
  end
399
400
 
400
401
  # Group all the path settings together here
@@ -17,9 +17,8 @@ module Jets::Builders
17
17
  end
18
18
 
19
19
  # found gems will only have gems that were found
20
- found_gems.each do |gem_name, source|
21
- options = @options.merge(source_url: source)
22
- gem_extractor = Jets::Gems::Extract::Gem.new(gem_name, options)
20
+ found_gems.each do |gem_name|
21
+ gem_extractor = Jets::Gems::Extract::Gem.new(gem_name, @options)
23
22
  gem_extractor.run
24
23
  end
25
24
 
@@ -29,7 +28,7 @@ module Jets::Builders
29
28
  def sh(command)
30
29
  puts "=> #{command}".color(:green)
31
30
  success = system(command)
32
- abort("Command Failed") unless success
31
+ abort("Command Failed: #{command}") unless success
33
32
  success
34
33
  end
35
34