lib/jets/core.rb in jets-5.0.13 vs lib/jets/core.rb in jets-6.0.2

- old
+ new

@@ -1,223 +1,68 @@ module Jets::Core extend Memoist - mattr_accessor :cache - - delegate :aws, :autoloaders, :config, to: :application - - @application = @app_class = nil - - attr_writer :application - attr_accessor :app_class - def application - @application ||= (app_class.instance if app_class) - end - - def backtrace_cleaner - @backtrace_cleaner ||= Jets::BacktraceCleaner.new - end - - # The Configuration instance used to configure the Rails environment - def configuration - application.config - end - def root - root = ENV['JETS_ROOT'].to_s - root = Dir.pwd if root == '' + root = ENV["JETS_ROOT"].to_s + root = Dir.pwd if root == "" Pathname.new(root) end + memoize :root def env - env = ENV['JETS_ENV'] || 'development' - ENV['RAILS_ENV'] = ENV['RACK_ENV'] = env + env = ENV["JETS_ENV"] || "dev" ActiveSupport::StringInquirer.new(env) end memoize :env - @@extra_warning_shown = false def extra - # Keep for backwards compatibility - unless ENV['JETS_ENV_EXTRA'].blank? - puts "DEPRECATION WARNING: JETS_ENV_EXTRA is deprecated. Use JETS_EXTRA instead.".color(:yellow) unless @@extra_warning_shown - @@extra_warning_shown = true - extra = ENV['JETS_ENV_EXTRA'] - end - extra = ENV['JETS_EXTRA'] unless ENV['JETS_EXTRA'].blank? - extra + ENV["JETS_EXTRA"] unless ENV["JETS_EXTRA"].blank? end - def project_name - path = "config/project_name" - if ENV['JETS_PROJECT_NAME'] && !ENV['JETS_PROJECT_NAME'].blank? - ENV['JETS_PROJECT_NAME'] - elsif File.exist?(path) - IO.read(path).strip - elsif parsed_project_name - parsed_project_name - else - Dir.pwd.split("/").last # conventionally infer app name from current directory - end + def project + Config::Project.instance end - def project_namespace - [project_name, short_env, extra].compact.join('-').gsub('_','-') + def bootstrap + Config::Bootstrap.instance end - def table_namespace - [project_name, short_env].compact.join('-') + def shim + Jets::Shim end - ENV_MAP = { - development: 'dev', - production: 'prod', - staging: 'stag', - } - def short_env - ENV_MAP[Jets.env.to_sym] || Jets.env + # Load project and app config files + def boot + Jets::Core::Booter.boot! end - # Double evaling config/application.rb causes subtle issues: - # * double loading of shared resources: Jets::Stack.subclasses will have the same - # class twice when config is called when declaring a function - # * forces us to rescue all exceptions, which is a big hammer - # - # Lets parse for the project name instead for now. - # - # Keep for backwards compatibility - def parsed_project_name - lines = IO.readlines("#{Jets.root}/config/application.rb") - project_name_line = lines.find { |l| l =~ /config\.project_name.*=/ && l !~ /^\s+#/ } - if project_name_line - parsed = project_name_line.gsub(/.*=/,'').strip - # The +? makes it non-greedy - # See: https://ruby-doc.org/core-2.5.1/Regexp.html#class-Regexp-label-Repetition - md = parsed.match(/['"](.+?)['"]/) - md ? md[1] : raise("Unable to parse project name from config/application.rb: #{project_name_line}") - end + # delegate :aws, :autoloaders, :config, to: :application + def aws + Jets::AwsServices::AwsInfo.new end - memoize :parsed_project_name + memoize :aws - # Load all application base classes and project classes - def boot - Jets::Booter.boot! + # Frameworks can set Jets.logger to use their own logger. + cattr_accessor :logger + def logger + @logger ||= Jets.bootstrap.config.logger end def build_root - "/tmp/jets/#{Jets.project_name}".freeze + root = ENV["JETS_BUILD_ROOT"] || "/tmp/jets" + "#{root}/#{Jets.project.namespace}".freeze end memoize :build_root - def logger - @logger + def s3_bucket + Jets::Cfn::Resource::S3::JetsBucket.name end - def logger=(logger) - @logger = logger - end - def deprecator # :nodoc: @deprecator ||= ActiveSupport::Deprecation.new end - def webpacker? - Gem.loaded_specs.keys.any?{|k| k.start_with?("webpacker")} - end - memoize :webpacker? - - def version - Jets::VERSION - end - - # NOTE: In development this will always be 1 because the app gets reloaded. - # On AWS Lambda, this will be ever increasing until the container gets replaced. - @@call_count = 0 - def increase_call_count - @@call_count += 1 - end - - def call_count - @@call_count - end - - @@prewarm_count = 0 - def increase_prewarm_count - @@prewarm_count += 1 - end - - def prewarm_count - @@prewarm_count - end - - def poly_only? - return true if ENV['JETS_POLY_ONLY'] # bypass to allow rapid development of handlers - Jets::Cfn::Builder.poly_only? - end - - def custom_domain? - Jets.config.domain.hosted_zone_name - end - - def s3_events? - !Jets::Job::Base._s3_events.empty? - end - - def process(event, context, handler) - if event['_prewarm'] - Jets.increase_prewarm_count - Jets.logger.info("Prewarm request") - {prewarmed_at: Time.now.to_s} - else - Jets::Processors::MainProcessor.new(event, context, handler).run - end - end - - def once - boot - override_lambda_ruby_runtime - # require "jets/overrides/puma" # leaving around as a comment in case needed in the future - tmp_load! - end - - def tmp_load! - Jets::TmpLoader.load! - end - - def override_lambda_ruby_runtime - require "jets/overrides/lambda" - end - - def ruby_folder - RUBY_VERSION.split('.')[0..1].join('.') + '.0' - end - - # used to configure internal lambda functions - # current ruby runtime that user is running - # IE: ruby2.5 ruby2.7 - def ruby_runtime - version = RUBY_VERSION.split('.')[0..1].join('.') - "ruby#{version}" - end - - def one_lambda_per_controller? - Jets.config.cfn.build.controllers == "one_lambda_per_controller" - end - - def one_lambda_for_all_controllers? - Jets.config.cfn.build.controllers == "one_lambda_for_all_controllers" - end - - def gem_layer? - !Jets.poly_only? || Jets.one_lambda_for_all_controllers? - end - - # Do not memoize here. The JetsBucket.name does it's own special memoization. - def s3_bucket - Jets::Cfn::Resource::S3::JetsBucket.name - end - def report_exception(exception) # See Jets::ExceptionReporting decorate_exception_with_exception_reported! if exception.respond_to?(:with_exception_reported?) && exception.with_exception_reported? return end @@ -237,28 +82,7 @@ # end # Jets.error.report(error) def error application && application.executor.error_reporter # ActiveSupport.error_reporter - end - - # Returns a Pathname object of the public folder of the current - # \Jets project, otherwise it returns +nil+ if there is no project: - # - # Jets.public_path - # # => #<Pathname:/Users/someuser/some/path/project/public> - def public_path - application && Pathname.new(application.paths["public"].first) - end - - def autoloaders - application.autoloaders - end - - # It's useful to eager load and find out any error within the jets code immediately. - # Leaving in place because think the layer of protection is good. - # Eager load outside of a jets project can error. IE: `jets -h` - # Eager load inside a jets project is fine. - def eager_load_gem? - File.exist?("config/application.rb") || ENV['JETS_TEST'] || defined?(ENGINE_ROOT) # jets project end end