jets 2.3.16 → 3.0.2

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 (92) 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 +53 -0
  6. data/README.md +2 -2
  7. data/backers.md +2 -0
  8. data/jets.gemspec +11 -9
  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 +15 -4
  16. data/lib/jets/builders/lambda_layer.rb +4 -5
  17. data/lib/jets/builders/ruby_packager.rb +40 -20
  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/clean.rb +1 -1
  27. data/lib/jets/commands/clean/base.rb +1 -1
  28. data/lib/jets/commands/configure.rb +51 -0
  29. data/lib/jets/commands/delete.rb +2 -2
  30. data/lib/jets/commands/gems.rb +2 -10
  31. data/lib/jets/commands/help/call.md +8 -0
  32. data/lib/jets/commands/help/gems/check.md +3 -5
  33. data/lib/jets/commands/main.rb +9 -1
  34. data/lib/jets/commands/new.rb +9 -1
  35. data/lib/jets/commands/sequence.rb +6 -0
  36. data/lib/jets/commands/templates/skeleton/Gemfile.tt +2 -2
  37. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +1 -1
  38. data/lib/jets/commands/templates/skeleton/public/index.html.tt +1 -1
  39. data/lib/jets/commands/url.rb +1 -0
  40. data/lib/jets/controller/base.rb +14 -4
  41. data/lib/jets/controller/middleware/main.rb +2 -1
  42. data/lib/jets/controller/params.rb +26 -4
  43. data/lib/jets/controller/rack/env.rb +18 -1
  44. data/lib/jets/controller/rendering.rb +5 -2
  45. data/lib/jets/controller/rendering/rack_renderer.rb +7 -1
  46. data/lib/jets/core.rb +12 -4
  47. data/lib/jets/dotenv/ssm.rb +18 -4
  48. data/lib/jets/generator.rb +2 -3
  49. data/lib/jets/internal/app/functions/jets/base_path.rb +10 -149
  50. data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +81 -0
  51. data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +14 -24
  52. data/lib/jets/job/base.rb +1 -1
  53. data/lib/jets/resource/api_gateway/base_path/function.rb +6 -1
  54. data/lib/jets/resource/api_gateway/deployment.rb +2 -0
  55. data/lib/jets/resource/api_gateway/method.rb +1 -1
  56. data/lib/jets/resource/api_gateway/resource.rb +1 -1
  57. data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +34 -0
  58. data/lib/jets/resource/api_gateway/rest_api/logical_id/message.rb +49 -0
  59. data/lib/jets/resource/child_stack/api_deployment.rb +2 -0
  60. data/lib/jets/resource/lambda/function.rb +1 -1
  61. data/lib/jets/router/dsl.rb +7 -1
  62. data/lib/jets/router/method_creator/code.rb +1 -1
  63. data/lib/jets/router/scope.rb +7 -3
  64. data/lib/jets/spec_helpers/controllers.rb +10 -3
  65. data/lib/jets/spec_helpers/controllers/request.rb +12 -5
  66. data/lib/jets/stack/main/dsl/lambda.rb +1 -1
  67. data/lib/jets/turbo.rb +1 -0
  68. data/lib/jets/version.rb +1 -1
  69. metadata +62 -55
  70. data/vendor/cfn-status/CHANGELOG.md +0 -14
  71. data/vendor/cfn-status/Gemfile +0 -4
  72. data/vendor/cfn-status/LICENSE.txt +0 -21
  73. data/vendor/cfn-status/README.md +0 -56
  74. data/vendor/cfn-status/Rakefile +0 -6
  75. data/vendor/cfn-status/bin/console +0 -14
  76. data/vendor/cfn-status/bin/setup +0 -8
  77. data/vendor/cfn-status/cfn-status.gemspec +0 -30
  78. data/vendor/cfn-status/lib/cfn-status.rb +0 -1
  79. data/vendor/cfn-status/lib/cfn_status.rb +0 -245
  80. data/vendor/cfn-status/lib/cfn_status/aws_service.rb +0 -51
  81. data/vendor/cfn-status/lib/cfn_status/version.rb +0 -3
  82. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-1.json +0 -1103
  83. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-2.json +0 -1104
  84. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-3.json +0 -1103
  85. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-1.json +0 -1103
  86. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-2.json +0 -1104
  87. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-3.json +0 -1103
  88. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-complete.json +0 -1080
  89. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-in-progress.json +0 -1080
  90. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-update-rollback-complete.json +0 -1086
  91. data/vendor/cfn-status/spec/lib/cfn_status_spec.rb +0 -153
  92. 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: 044aba70f94ce9b1894daf0a763d0a36bfa5687c79beed5acfebc3f1f0db6086
4
- data.tar.gz: 28ce72323a8e5bb93db5598f2a2ba60b60921e3d969fb13f237384489902b734
3
+ metadata.gz: f937aab664b90c0d2f1ae347f54711c6ad5c2ed60109658203a34fb824af040c
4
+ data.tar.gz: 6ea84a0034df3635be2813ab457a5c7fb4d8bb7580f6bef7a50f913dc4f2e23b
5
5
  SHA512:
6
- metadata.gz: 17888c72f237bd56a10c61ecc783ba59ec2aa8ff5345750689ebc1fa7a6d0d221bf604c6879e71cf5787baa45c36cb0b9525a015e0b4159ad7e9a46b58f95d77
7
- data.tar.gz: 106ca34b5c04e3c774a27ec9431c0c7cef7b5311ae624e975ee061b31aaa7b3f536c6267d67e34d26ed1504a289b7de46d0746e54cead594c9482b62ab2f8dd8
6
+ metadata.gz: d0af6694a880f0179cf5a8c617fa4a6b43808bf7e4c70f070c88ad7e88f49822290342217c353ce37abf5d4885977d53983965a65813fbaf87267fe6c0f3e6ce
7
+ data.tar.gz: 10ce6d263675a3abbf5196f7abf72fbe0bea631bc441dbc716965021cc64e0059cfe36bcce6575be6078bc3ac64320e6e9e3eaa09bd1531726721256259dd2a8
@@ -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,59 @@
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.2] - 2021-01-12
7
+ - update serverlessgems gem
8
+
9
+ ## [3.0.1] - 2021-01-12
10
+ - [#524](https://github.com/boltops-tools/jets/pull/524) fix native gem detection
11
+
12
+ ## [3.0.0]
13
+ * #328 i18n docs
14
+ * #391 Deploy Option: Auto Replace API Gateway
15
+ * #444 Ruby 2.7 Support
16
+ * #453 Update to Bootstrap4 official release
17
+ * #454 When the controller name is singular, the behavior of searching for the View file is different from expected.
18
+ * #457 Breaking change: Harden IAM policy and do allow list all buckets by default. Breaking change.
19
+ * #479 Create request completion log method
20
+ * #487 API Gateway Base Path
21
+ * #488 Add retry_limit and read_timeout options
22
+ * #491 Fix queryStringParameters handling for nested value in spec_helper
23
+ * #492 Add params keyword case with get method for spec helpers test
24
+ * #494 Update ruby_packager.rb
25
+ * #496 Add unicode test for spec_helpers test
26
+ * #499 default_iam_policy does not correctly include VPC related actions on resource creation
27
+ * Improve autoloader: Shouldnt have to to call `bundle exec` in front of jets anymore.
28
+ * `jets configure` command
29
+ * Big improvements to docs site, add search
30
+ * Use serverlessgems API
31
+ * Breaking: use do not pluralize controller names for views folder
32
+ * Shorten SSM secrets notation support
33
+ * Remove deprecations and warnings: bundle install, generate scaffold, webpacker, yarn license, etc
34
+ * Also setting the `config.iam_policy` appends to the default policy now.
35
+ * Upgrade to Rails 6.1 components
36
+ * Increase cloudformation output limit to 200
37
+ * Replace `--sure` with `-y` option
38
+ * Fix params helper in views
39
+ * Webpacker upgrade
40
+
41
+ ## [2.3.18]
42
+ - #514 Allow to define route that contains dot
43
+ - #515 set content type on upload by using extension so cloudfront will compress when serving
44
+ - #517 support nested query params in tests
45
+
46
+ ## [2.3.17]
47
+ - #472 Docs: Update cors-support.md
48
+ - #475 Docs: Update activerecord.md to include db:create step
49
+ - #476 Docs: Update authorizer-cognito.md
50
+ - #482 Docs: Fixed description for "jetpacker" gem in Gemfile
51
+ - #483 Docs: controllers Fix minor typo
52
+ - #489 Docs: call typo
53
+ - #490 Docs: authorizers typo
54
+ - #504 Docs: tutorial series
55
+ - #505 Docs: display more tutorial articles
56
+ - #509 Docs: Update lamdba permissions for minimal-iam-policy doc
57
+ - #512 Bug fix: fix on_lambda? check allow testing #512
58
+
6
59
  ## [2.3.16]
7
60
  - #466 fix application_config typo
8
61
  - #467 Handle forbidden error from s3
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,27 +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
53
  spec.add_dependency "kramdown"
54
54
  spec.add_dependency "memoist"
55
55
  spec.add_dependency "mimemagic"
56
56
  spec.add_dependency "rack"
57
- 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
58
58
  spec.add_dependency "rainbow"
59
59
  spec.add_dependency "recursive-open-struct"
60
+ spec.add_dependency "serverlessgems", "~> 0.1.2"
60
61
  spec.add_dependency "shotgun"
61
62
  spec.add_dependency "text-table"
62
63
  spec.add_dependency "thor"
63
64
  spec.add_dependency "zeitwerk"
64
65
 
65
- spec.add_development_dependency "byebug"
66
66
  spec.add_development_dependency "bundler"
67
+ spec.add_development_dependency "byebug"
67
68
  spec.add_development_dependency "rake"
69
+ spec.add_development_dependency "render_me_pretty"
68
70
  spec.add_development_dependency "rspec"
69
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,24 +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/core_ext/bundler"
22
-
23
- require "jets/autoloaders"
24
- Jets::Autoloaders.log! if ENV["JETS_AUTOLOAD_LOG"]
25
- Jets::Autoloaders.once.setup
22
+ require "serverlessgems"
26
23
 
27
24
  module Jets
28
- RUBY_VERSION = "2.5.3"
29
25
  MAX_FUNCTION_NAME_SIZE = 64
30
26
 
31
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
 
@@ -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,19 +17,30 @@ 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
23
+ rename_gem(gem_name)
24
24
  end
25
25
 
26
26
  tidy
27
27
  end
28
28
 
29
+ def rename_gem(gem_name)
30
+ ruby_folder = "#{Jets.build_root}/stage/opt/ruby/gems/#{Jets::Gems.ruby_folder}"
31
+ gems_folder = "#{ruby_folder}/gems"
32
+ expr = "#{gems_folder}/#{gem_name}-x*-{darwin,linux}"
33
+ src = Dir.glob(expr).first
34
+ return unless src
35
+
36
+ dest = src.sub("-darwin", "-linux")
37
+ FileUtils.mv(src, dest) unless File.exist?(dest) # looks like rename_gem actually runs twice
38
+ end
39
+
29
40
  def sh(command)
30
41
  puts "=> #{command}".color(:green)
31
42
  success = system(command)
32
- abort("Command Failed") unless success
43
+ abort("Command Failed: #{command}") unless success
33
44
  success
34
45
  end
35
46