jets 6.0.0.beta1 → 6.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 557cd5532ad372ba0ea9be975103f5dfb77a63b3472d0582f98570cd75a114e7
4
- data.tar.gz: 773a6bf556945018ae87c73f3c37ee3294be02f463209db3e2c8712ae9757e4f
3
+ metadata.gz: 8ea57049f7d7ee0153aac387f0feb438ee5a9e9816f8aeab7e21a9a6d4e33d69
4
+ data.tar.gz: 2a6e9de21b85674322a8adcfb234204272aefe2e30ae6babc77244ab9f4d8635
5
5
  SHA512:
6
- metadata.gz: eb08a46c81660e3d0c503427d2fbd4426b4d37a3a7dc27e855a34930bc3f5be6e812ddd9507dca82383e95b6d2aea360b3f92c8f10b03d95b9cd22b8cffd57cf
7
- data.tar.gz: 043127d02de6be061b8a3c1ad158bb206edf63ac4e4253685884987bbfac1421d1ef53974afa0ee8ba8c5912061b80df3b222538fe1f3dd0fd1aa17d07b18e40
6
+ metadata.gz: 2584bc53863cef64744101705db2b65a312d4f332745b8d0ca8a41558b5f3e0dacae87ec1169dcdc4c2bfa1af75de7156c24015b212fd6e3eccc522a2b5f0da5
7
+ data.tar.gz: 1fcfc2dc86ff24cec62eb34b0559229a47ebbc868e49fc2f1e9d39c7cd8836c70e1cff4adf8fbb3eee9af96610fdabea7dc21d342eda96ff0b0afa8405e2b7ff
data/CHANGELOG.md CHANGED
@@ -3,7 +3,7 @@
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
- ## [6.0.0] - Unrelease
6
+ ## [6.0.0] - 2024-05-23
7
7
 
8
8
  * Rails Support
9
9
  * Hooks Support
@@ -14,16 +14,13 @@ module Jets
14
14
  memoize :loader
15
15
 
16
16
  def configure(root = Jets.root)
17
- all_loaders = Zeitwerk::Registry.loaders
18
- already_configured_dirs = all_loaders.map(&:dirs).flatten
19
-
20
17
  full_path = proc { |path| "#{root}/#{path}" }
21
18
  autoload_paths = config.autoload_paths.map(&full_path)
22
19
  extension_paths = config.extension_paths.map(&full_path)
23
20
  load_paths = autoload_paths + extension_paths
24
21
 
25
22
  load_paths.each do |path|
26
- next if already_configured_dirs.include?(path)
23
+ next if already_configured_dir?(path)
27
24
  next unless File.directory?(path)
28
25
  loader.push_dir(path)
29
26
  end
@@ -34,6 +31,23 @@ module Jets
34
31
  end
35
32
  end
36
33
 
34
+ def already_configured_dir?(path)
35
+ all_loaders = Zeitwerk::Registry.loaders
36
+ already_configured_dirs = all_loaders.map(&:dirs).flatten
37
+
38
+ # Normalize the path to avoid trailing slashes issues
39
+ normalized_path = File.expand_path(path)
40
+
41
+ # Check the path and its parent directories
42
+ while normalized_path != "/"
43
+ return true if already_configured_dirs.include?(normalized_path)
44
+ normalized_path = File.dirname(normalized_path)
45
+ end
46
+
47
+ # Check the root directory explicitly
48
+ already_configured_dirs.include?("/")
49
+ end
50
+
37
51
  # Call at end
38
52
  def setup
39
53
  loader.on_load do |cpath, value, abspath|
@@ -8,7 +8,11 @@ class Jets::CLI
8
8
 
9
9
  def are_you_sure?
10
10
  stack_name = Jets.project.namespace
11
- message = "Will delete #{stack_name.color(:green)}"
11
+ message = <<~EOL
12
+ Will delete #{stack_name.color(:green)}
13
+
14
+ Uses remote runner to delete the stack and resources.
15
+ EOL
12
16
  unless stack_exists?(stack_name)
13
17
  message << <<~EOL
14
18
 
@@ -14,7 +14,7 @@ class Jets::CLI
14
14
  resources = cfn.describe_stack_resources(stack_name: stack_name).stack_resources
15
15
  resources.each do |r|
16
16
  if r.resource_type == "AWS::Lambda::Function"
17
- functions << r.physical_resource_id
17
+ functions << r.physical_resource_id if r.physical_resource_id # race condition. can be nil for a brief moment while provisioning
18
18
  end
19
19
  end
20
20
  end
@@ -11,13 +11,13 @@ module Jets::CLI::Group
11
11
  end
12
12
 
13
13
  def init_project_name
14
- Jets.project.name # inferred from the folder name
14
+ # inferred from the folder name
15
+ Dir.pwd.split("/").last.gsub(/[^a-zA-Z0-9_]/, "-").squeeze("-")
15
16
  end
16
17
 
17
18
  def framework
18
- Jets::CLI::Init::Detect.new.framework
19
+ Jets::Framework.name
19
20
  end
20
- memoize :framework
21
21
 
22
22
  def package_type
23
23
  (framework == "rails") ? "image" : "zip"
@@ -1,7 +1,36 @@
1
1
  Jets.deploy.configure do
2
+ # CloudFront Lambda URL https://docs.rubyonjets.com/docs/routing/lambda/cloudfront/distribution/
3
+ # config.lambda.url.cloudfront.enable = true
4
+ # config.lambda.url.cloudfront.cert.arn = acm_cert_arn(domain: "domain.com", region: "us-east-1")
5
+ # config.lambda.url.cloudfront.route53.enable = true
6
+
7
+ # CloudFront Assets
8
+ # config.assets.cloudfront.enable = true
9
+ # config.assets.cloudfront.cert.arn = acm_cert_arn(domain: "domain.com", region: "us-east-1")
10
+ # config.assets.cloudfront.route53.enable = true
11
+
12
+ # Release phase https://docs.rubyonjets.com/docs/hooks/remote/release/
13
+ # config.release.phase.command = "bundle exec rails db:migrate"
14
+
15
+ # Scaling https://docs.rubyonjets.com/docs/config/concurrency/
16
+ # config.lambda.controller.provisioned_concurrency = 1 # costs money, no cold start
17
+ # config.lambda.controller.reserved_concurrency = 25 # free and limits scaling
18
+
19
+ # IAM https://docs.rubyonjets.com/docs/iam/app/iam-policies/
20
+ # config.lambda.iam.policy = ["sns"]
21
+ # config.lambda.iam.managed_policy = ["AmazonS3FullAccess"]
22
+
23
+ # Docker https://docs.rubyonjets.com/docs/docker/dockerfile/managed/
24
+ # config.dockerfile.packages.apt.build_stage = ["default-libmysqlclient-dev"]
25
+ # config.dockerfile.packages.apt.deployment_stage = ["default-mysql-client"]
26
+
2
27
  <% unless framework == "rails" -%>
3
28
  # https://docs.rubyonjets.com/docs/config/package-type/
29
+ <% if %w[rack sinatra].include?(framework) -%>
30
+ # config.package_type = "zip" # default: image IE: image or zip
31
+ <% else -%>
4
32
  # config.package_type = "image" # default: image IE: image or zip
33
+ <% end -%>
5
34
 
6
35
  <% end -%>
7
36
  <% if framework == "rails" -%>
@@ -9,35 +38,4 @@ Jets.deploy.configure do
9
38
  # config.job.enable = true
10
39
 
11
40
  <% end -%>
12
- # Docker https://docs.rubyonjets.com/docs/docker/dockerfile/managed/
13
- # config.dockerfile.packages.apt.build_stage = ["default-libmysqlclient-dev"]
14
- # config.dockerfile.packages.apt.deployment_stage = ["default-mysql-client"]
15
-
16
- # CloudFront Lambda URL https://docs.rubyonjets.com/docs/routing/lambda/cloudfront/distribution/
17
- # config.lambda.url.cloudfront.enable = true
18
- # config.lambda.url.cloudfront.cert.arn = acm_cert_arn("domain.com", region: "us-east-1")
19
- # config.lambda.url.cloudfront.route53.enable = true
20
-
21
- # WAF https://docs.rubyonjets.com/docs/routing/lambda/cloudfront/waf/
22
- # config.lambda.url.cloudfront.web_acl_id = web_acl_arn(ssm_env, scope: "CLOUDFRONT")
23
- # config.waf.rules = ["AWSManagedRulesSQLiRuleSet"]
24
-
25
- # Scaling https://docs.rubyonjets.com/docs/config/provisioned-concurrency/
26
- # config.lambda.controller.provisioned_concurrency = 1 # costs money, no cold start
27
- # config.lambda.controller.reserved_concurrency = 10 # free and limits scaling
28
-
29
- # Release phase https://docs.rubyonjets.com/docs/hooks/remote/release/
30
- # config.release.phase.command = "bundle exec rails db:migrate"
31
-
32
- # CI https://docs.rubyonjets.com/docs/ci/getting-started/
33
- # use jets ci:init to add these settings automatically
34
- # config.ci.source = {
35
- # Type: "GITHUB",
36
- # Location: "https://github.com/ORG/REPO"
37
- # }
38
- # config.ci.source_version = "main"
39
- # config.ci.env.vars = {
40
- # BUNDLE_GITHUB__COM: "SSM:/#{ssm_env}/BUNDLE_GITHUB__COM",
41
- # JETS_API_KEY: "SSM:/#{ssm_env}/JETS_API_KEY"
42
- # }
43
41
  end
@@ -5,7 +5,7 @@
5
5
  <% if framework == "rails" -%>
6
6
  RAILS_ENV=production
7
7
  RAILS_LOG_TO_STDOUT=1
8
- # SECRET_KEY_BASE=SSM # SSM:/<%= init_project_name %>/dev/SECRET_KEY_BASE remember to set a secret key base
8
+ # SECRET_KEY_BASE=SSM # => SSM:/<%= init_project_name %>/dev/SECRET_KEY_BASE remember to set a secret key base
9
9
  <% end -%>
10
10
 
11
11
  # Examples:
@@ -14,5 +14,7 @@ RAILS_LOG_TO_STDOUT=1
14
14
  # KEY2=SSM:/abs/path/to/KEY2
15
15
  # Conventions https://docs.rubyonjets/docs/env/ssm/conventions/
16
16
  # SSM path under /<%= init_project_name %>/dev/ are autoloaded.
17
- # You can also control this behavior and then manually declare the SSM parameter.
18
- # DATABASE_URL=SSM # SSM:/<%= init_project_name %>/dev/DATABASE_URL
17
+ # For example, DATABASE_URL does not need to be declared here.
18
+ # It can be conventionally autoloaded.
19
+ # Below is an example of how to manually declare but it's not needed.
20
+ # DATABASE_URL=SSM # => SSM:/<%= init_project_name %>/dev/DATABASE_URL
data/lib/jets/cli/init.rb CHANGED
@@ -16,7 +16,7 @@ class Jets::CLI
16
16
  private
17
17
 
18
18
  def sure_message
19
- detected_message = "Detected #{framework} framework.\n" if framework
19
+ detected_message = "Detected #{framework.titleize} framework.\n" if framework
20
20
  <<~EOL
21
21
  #{detected_message}This will initialize the project for Jets.
22
22
 
@@ -26,6 +26,39 @@ class Jets::CLI
26
26
  EOL
27
27
  end
28
28
 
29
+ def configure_rails
30
+ # config/environments/production.rb adjustments
31
+ # Comment out public_file_server.enabled on new Rails 7.0 apps
32
+ # config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
33
+ comment_out_line("config.public_file_server.enabled = ENV", env: "production")
34
+ config_environment("config.public_file_server.enabled = false\n\n", env: "production")
35
+ # Comment out config.asset_host = "http://assets.example.com" on new Rails 7.0 apps
36
+ # config.asset_host = "http://assets.example.com"
37
+ comment_out_line('config.asset_host = "', env: "production")
38
+ asset_host = <<~EOL
39
+
40
+ # Assets https://docs.rubyonjets.com/docs/assets/cloudfront/
41
+ config.asset_host = ENV["JETS_ASSET_HOST"] unless ENV["JETS_ASSET_HOST"].blank?
42
+ EOL
43
+ config_environment(asset_host, env: "production")
44
+
45
+ jets_job = <<~EOL
46
+ # Jobs https://docs.rubyonjets.com/docs/jobs/enable/
47
+ # config.active_job.queue_adapter = :jets_job
48
+ EOL
49
+ config_environment(jets_job, env: "production")
50
+ end
51
+
52
+ def configure_hanami
53
+ after = " class App < Hanami::App\n"
54
+ data = <<~EOL
55
+ # https://guides.hanamirb.org/v2.1/assets/using-a-cdn/
56
+ # https://docs.rubyonjets.com/docs/assets/cloudfront/
57
+ config.assets.base_url = ENV["JETS_ASSET_HOST"] if ENV["JETS_ASSET_HOST"]
58
+ EOL
59
+ inject_into_file "config/app.rb", optimize_indentation(data, 4), after: after, verbose: true
60
+ end
61
+
29
62
  public
30
63
 
31
64
  def are_you_sure?
@@ -46,21 +79,12 @@ class Jets::CLI
46
79
  end
47
80
 
48
81
  def configure_environment
49
- return unless framework == "rails"
50
- # config/environments/production.rb adjustments
51
- # Comment out public_file_server.enabled on new Rails 7.0 apps
52
- # config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
53
- comment_out_line("config.public_file_server.enabled = ENV", env: "production")
54
- config_environment("config.public_file_server.enabled = false", env: "production")
55
- # Comment out config.asset_host = "http://assets.example.com" on new Rails 7.0 apps
56
- # config.asset_host = "http://assets.example.com"
57
- comment_out_line('config.asset_host = "', env: "production")
58
- config_environment('config.asset_host = ENV["JETS_ASSET_HOST"] unless ENV["JETS_ASSET_HOST"].blank?', env: "production")
59
- jets_job = <<~EOL
60
- # Docs: https://docs.rubyonjets.com/docs/jobs/enable/
61
- # config.active_job.queue_adapter = :jets_job
62
- EOL
63
- config_environment(jets_job, env: "production")
82
+ case framework
83
+ when "rails"
84
+ configure_rails
85
+ when "hanami"
86
+ configure_hanami
87
+ end
64
88
  end
65
89
  end
66
90
  end
data/lib/jets/cli/stop.rb CHANGED
@@ -8,8 +8,8 @@ class Jets::CLI
8
8
  if stopped
9
9
  log.info <<~EOL
10
10
  Deploy has been stopped: #{build_id}
11
- Note: If the deploy has already started the CloudFormation update,
12
- it will continue. Please check the logs.
11
+ If the deploy has already started the CloudFormation update it will continue.
12
+ Please check the logs.
13
13
 
14
14
  EOL
15
15
  show_console_log_url(build_id)
@@ -9,18 +9,18 @@ Jets.deploy.configure do
9
9
  # config.waf.rules = []
10
10
 
11
11
  # Jets WAF Managed Rules
12
- # config.waf.managed_rules.blanket_rate_limiter.enable = true # default: true
13
- # config.waf.managed_rules.blanket_rate_limiter.limit = 1000
14
- # config.waf.managed_rules.blanket_rate_limiter.evaluation_window_sec = 300
15
- # config.waf.managed_rules.blanket_rate_limiter.aggregate_key_type = "IP"
12
+ # config.waf.custom_rules.blanket_rate_limiter.enable = true # default: true
13
+ # config.waf.custom_rules.blanket_rate_limiter.limit = 1000
14
+ # config.waf.custom_rules.blanket_rate_limiter.evaluation_window_sec = 300
15
+ # config.waf.custom_rules.blanket_rate_limiter.aggregate_key_type = "IP"
16
16
 
17
- # config.waf.managed_rules.uri_rate_limiter.enable = true # default: false
18
- # config.waf.managed_rules.uri_rate_limiter.limit = 100
19
- # config.waf.managed_rules.uri_rate_limiter.logical_statement = "Or"
20
- # config.waf.managed_rules.uri_rate_limiter.paths = ["/login", "/signup"] # default: ["/"]
21
- # config.waf.managed_rules.uri_rate_limiter.evaluation_window_sec = 300
22
- # config.waf.managed_rules.uri_rate_limiter.aggregate_key_type = "IP"
23
- # config.waf.managed_rules.uri_rate_limiter.string_match_condition = "STARTS_WITH"
17
+ # config.waf.custom_rules.uri_rate_limiter.enable = true # default: false
18
+ # config.waf.custom_rules.uri_rate_limiter.limit = 100
19
+ # config.waf.custom_rules.uri_rate_limiter.logical_statement = "Or"
20
+ # config.waf.custom_rules.uri_rate_limiter.paths = ["/login", "/signup"] # default: ["/"]
21
+ # config.waf.custom_rules.uri_rate_limiter.evaluation_window_sec = 300
22
+ # config.waf.custom_rules.uri_rate_limiter.aggregate_key_type = "IP"
23
+ # config.waf.custom_rules.uri_rate_limiter.string_match_condition = "STARTS_WITH"
24
24
 
25
25
  # Docs: https://docs.rubyonjets.com/docs/routing/lambda/cloudfront/waf/
26
26
  end
@@ -62,12 +62,23 @@ module Jets::Core::Config
62
62
  Jets::Core::Booter.require_config(:project)
63
63
  return @name if @name
64
64
 
65
- if jets_info_project_name
66
- jets_info_project_name
67
- else
68
- # when not set, conventionally infer app name from current directory
69
- @name_inferred = true
70
- Dir.pwd.split("/").last.gsub(/[^a-zA-Z0-9_]/, "-").squeeze("-")
65
+ project_name = jets_info_project_name
66
+ unless project_name
67
+ puts "ERROR: Jets project name not set".color(:red)
68
+ abort <<~EOL
69
+ Please set config.name in config/jets/project.rb or the JETS_PROJECT environment variable
70
+ Example:
71
+
72
+ config/jets/project.rb
73
+
74
+ Jets.project.configure do
75
+ config.name = "demo"
76
+ end
77
+
78
+ Or set the JETS_PROJECT environment variable:
79
+
80
+ export JETS_PROJECT=demo
81
+ EOL
71
82
  end
72
83
  end
73
84
  memoize :name
@@ -0,0 +1,51 @@
1
+ module Jets
2
+ class Framework
3
+ class << self
4
+ extend Memoist
5
+ def env_var
6
+ "#{name.upcase}_ENV" if name # can be nil
7
+ end
8
+
9
+ def env
10
+ return unless env_var
11
+ ENV[env_var] || "production" # for Dockerfile default to production
12
+ end
13
+
14
+ def name
15
+ gems.each do |gem|
16
+ frameworks.each do |framework|
17
+ if gem == framework
18
+ # Special case for puma. If puma is detected, it means it is a rack app.
19
+ if framework == "puma"
20
+ return "rack"
21
+ else
22
+ return framework
23
+ end
24
+ end
25
+ end
26
+ end
27
+ nil
28
+ end
29
+ memoize :name
30
+
31
+ def frameworks
32
+ %w[
33
+ rails
34
+ sinatra
35
+ hanami
36
+ rack
37
+ puma
38
+ ]
39
+ end
40
+
41
+ def gems
42
+ return [] unless File.exist?("Gemfile")
43
+ Bundler.with_unbundled_env do
44
+ gemfile_content = File.read("Gemfile")
45
+ dsl = Bundler::Dsl.evaluate(Bundler.default_gemfile, gemfile_content, {})
46
+ dsl.dependencies.map(&:name)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -23,7 +23,7 @@ module Jets::Git
23
23
  end
24
24
 
25
25
  def git_url
26
- "#{host}/#{full_repo}"
26
+ "#{host}/#{full_repo}" if host && full_repo
27
27
  end
28
28
 
29
29
  def host
@@ -11,18 +11,22 @@ module Jets::Shim::Adapter
11
11
 
12
12
  class << self
13
13
  def handler(event, context = nil, target = nil)
14
- puts "The default fallback handler is being called because a handler for it could not be found"
15
- puts "For debugging, here is the"
14
+ puts <<~EOL
15
+ WARN: handler for it could not be found. The default fallback handler is being used.
16
+ The default fallback handler simply prints out the event payload for debugging, it will be printed below.
17
+ Usually the default handler is not what you want.
18
+ You might be using a test event payload for testing which does not represent a real event.
19
+ Please double check the event payload.
20
+ EOL
16
21
  if ENV["_HANDLER"] # on AWS Lambda
17
22
  puts "event: #{JSON.dump(event)}"
18
23
  else
19
24
  puts "event:"
20
25
  puts JSON.pretty_generate(event)
21
26
  end
22
- puts "Please double check the event payload.\n\n"
23
27
 
24
28
  if target
25
- puts "ERROR: event handler target not found: #{target}".color(:red)
29
+ puts "WARN: Event handler target not found: #{target}".color(:red)
26
30
  target_class, target_method = target.split(".")
27
31
  target_class = target_class.camelize
28
32
  target_method ||= "perform"
@@ -40,7 +44,8 @@ module Jets::Shim::Adapter
40
44
 
41
45
  else
42
46
  puts <<~EOL
43
- You can also configure a custom fallback handler in the config/jets/shim.rb file.
47
+ You can also configure a custom fallback handler with a config/jets/shim.rb file.
48
+ Though custom handlers rarely needed and you should double check the event payload.
44
49
  Example:
45
50
 
46
51
  config/jets/shim.rb
@@ -55,7 +60,7 @@ module Jets::Shim::Adapter
55
60
  end
56
61
  # Custom Jets error message
57
62
  {
58
- errorMessage: "event handler not found. Look at logs for details",
63
+ errorMessage: "Event handler not found. Look at logs for details",
59
64
  errorType: "JetsEventHandlerNotFound"
60
65
  }
61
66
  end
@@ -21,51 +21,46 @@ module Jets::Shim
21
21
  elsif @rack_app
22
22
  @rack_app
23
23
  else
24
- boot_path = @boot_path || infer_boot_path
25
- # Possible that boot_path is nil.
26
- # Case: Jets events app only.
27
- if boot_path
28
- require_boot_path(boot_path) if boot_path # in case boot_path is not set
29
- infer_rack_app(boot_path) # IE: Rails.application or App
30
- end
24
+ framework_app
31
25
  end
32
26
  end
33
27
  alias_method :app, :rack_app
34
28
  alias_method :app=, :rack_app=
35
29
 
36
- def infer_boot_path
37
- if rails?
38
- "config/environment"
39
- elsif File.exist?("app.rb")
40
- "app"
30
+ def framework_app
31
+ # Explicitly set boot_path takes precedence
32
+ # IE: my_app.rb => MyApp
33
+ if @boot_path && File.exist?(@boot_path)
34
+ app_class = @boot_path.sub(/\.rb$/, "").camelize.constantize
35
+ return app_class
41
36
  end
42
- end
43
37
 
44
- def require_boot_path(path)
45
- path = path.starts_with?(".") ? path : "./#{path}"
46
- path = path.ends_with?(".rb") ? path : "#{path}.rb"
47
- require path # IE: config/environment.rb (Rails) or app.rb (generic rack app)
48
- end
38
+ # Infer app.rb boot_path
39
+ # IE: app.rb => App
40
+ if File.exist?("app.rb")
41
+ require_boot_path("app")
42
+ return App
43
+ end
49
44
 
50
- def infer_rack_app(boot_path)
51
- if rails?
45
+ # Infer rack app from config.ru
46
+ case framework
47
+ when "rails"
48
+ require_boot_path "config/environment"
52
49
  Rails.application
53
- else
54
- boot_path.sub!(/\.rb$/, "") # remove .rb extension
55
- boot_path.camelize.constantize
50
+ when "hanami"
51
+ require "hanami/boot"
52
+ Hanami.app
56
53
  end
57
54
  end
58
55
 
59
- def rails?
60
- framework?(:rails)
56
+ def require_boot_path(path)
57
+ path = path.starts_with?(".") ? path : "./#{path}"
58
+ path = path.ends_with?(".rb") ? path : "#{path}.rb"
59
+ require path # IE: config/environment.rb (Rails) or app.rb (generic rack app)
61
60
  end
62
61
 
63
- def framework?(name)
64
- if File.exist?("config.ru")
65
- # IE: Jets.application or Rails.application
66
- IO.readlines("config.ru").any? { |l| l.include?("#{name.to_s.camelize}.application") }
67
- end
62
+ def framework
63
+ Jets::Framework.name
68
64
  end
69
- memoize :framework?
70
65
  end
71
66
  end
data/lib/jets/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jets
2
- VERSION = "6.0.0.beta1"
2
+ VERSION = "6.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: 6.0.0.beta1
4
+ version: 6.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: 2024-05-20 00:00:00.000000000 Z
11
+ date: 2024-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-logs
@@ -756,7 +756,6 @@ files:
756
756
  - lib/jets/cli/help/status.md
757
757
  - lib/jets/cli/help/url.md
758
758
  - lib/jets/cli/init.rb
759
- - lib/jets/cli/init/detect.rb
760
759
  - lib/jets/cli/init/templates/config/jets/bootstrap.rb.tt
761
760
  - lib/jets/cli/init/templates/config/jets/deploy.rb.tt
762
761
  - lib/jets/cli/init/templates/config/jets/project.rb.tt
@@ -850,6 +849,7 @@ files:
850
849
  - lib/jets/event/helpers/sqs_event.rb
851
850
  - lib/jets/event/s3.rb
852
851
  - lib/jets/exception_reporting.rb
852
+ - lib/jets/framework.rb
853
853
  - lib/jets/git.rb
854
854
  - lib/jets/git/azure.rb
855
855
  - lib/jets/git/base.rb
@@ -981,11 +981,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
981
981
  version: 2.7.0
982
982
  required_rubygems_version: !ruby/object:Gem::Requirement
983
983
  requirements:
984
- - - ">"
984
+ - - ">="
985
985
  - !ruby/object:Gem::Version
986
- version: 1.3.1
986
+ version: '0'
987
987
  requirements: []
988
- rubygems_version: 3.4.19
988
+ rubygems_version: 3.5.10
989
989
  signing_key:
990
990
  specification_version: 4
991
991
  summary: Serverless Deployment Service
@@ -1,30 +0,0 @@
1
- class Jets::CLI::Init
2
- class Detect
3
- def framework
4
- gems.each do |gem|
5
- frameworks.each do |framework|
6
- return framework if gem == framework
7
- end
8
- end
9
- nil
10
- end
11
-
12
- def frameworks
13
- %w[
14
- rails
15
- sinatra
16
- hanami
17
- grape
18
- ]
19
- end
20
-
21
- def gems
22
- return [] unless File.exist?("Gemfile")
23
- Bundler.with_unbundled_env do
24
- gemfile_content = File.read("Gemfile")
25
- dsl = Bundler::Dsl.evaluate(Bundler.default_gemfile, gemfile_content, {})
26
- dsl.dependencies.map(&:name)
27
- end
28
- end
29
- end
30
- end