Module: Jets::Core
Constant Summary collapse
- @@call_count =
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.
0
- @@prewarm_count =
0
Instance Method Summary collapse
- #application ⇒ Object
- #aws ⇒ Object
-
#boot(options = {}) ⇒ Object
Load all application base classes and project classes.
- #build_root ⇒ Object
- #call_count ⇒ Object
- #class_mappings(class_name) ⇒ Object
- #config ⇒ Object
- #custom_domain? ⇒ Boolean
- #default_gems_source ⇒ Object
- #eager_load! ⇒ Object
-
#eager_load_app ⇒ Object
Eager load user’s application.
-
#eager_load_jets ⇒ Object
Eager load jet’s lib and classes.
- #env ⇒ Object
-
#handler(lambda_context, handler) ⇒ Object
Example: Jets.handler(self, “handlers/controllers/posts_controller.index”).
- #increase_call_count ⇒ Object
- #increase_prewarm_count ⇒ Object
- #load_tasks ⇒ Object
- #logger ⇒ Object
- #on_exception(exception) ⇒ Object
- #once ⇒ Object
- #override_lambda_ruby_runtime ⇒ Object
- #poly_only? ⇒ Boolean
- #prewarm_count ⇒ Object
- #process(event, context, handler) ⇒ Object
- #project_namespace ⇒ Object
- #rack? ⇒ Boolean
- #report_exception(exception) ⇒ Object
-
#root ⇒ Object
Ensures trailing slash Useful for appending a ‘./’ in front of a path or leaving it alone.
-
#skip_eager_load_paths?(path) ⇒ Boolean
Skip these paths because eager loading doesnt work for them.
-
#start_rack_server(options = {}) ⇒ Object
Megamode support.
- #tmp_load! ⇒ Object
- #version ⇒ Object
- #webpacker? ⇒ Boolean
Instance Method Details
#application ⇒ Object
4 5 6 |
# File 'lib/jets/core.rb', line 4 def application Jets::Application.instance end |
#aws ⇒ Object
12 13 14 |
# File 'lib/jets/core.rb', line 12 def aws application.aws end |
#boot(options = {}) ⇒ Object
Load all application base classes and project classes
17 18 19 |
# File 'lib/jets/core.rb', line 17 def boot(={}) Jets::Booter.boot!() end |
#build_root ⇒ Object
39 40 41 |
# File 'lib/jets/core.rb', line 39 def build_root "/tmp/jets/#{config.project_name}".freeze end |
#call_count ⇒ Object
134 135 136 |
# File 'lib/jets/core.rb', line 134 def call_count @@call_count end |
#class_mappings(class_name) ⇒ Object
103 104 105 106 107 108 |
# File 'lib/jets/core.rb', line 103 def class_mappings(class_name) map = { "Jets::Io" => "Jets::IO", } map[class_name] || class_name end |
#config ⇒ Object
8 9 10 |
# File 'lib/jets/core.rb', line 8 def config application.config end |
#custom_domain? ⇒ Boolean
175 176 177 |
# File 'lib/jets/core.rb', line 175 def custom_domain? Jets.config.domain.hosted_zone_name end |
#default_gems_source ⇒ Object
215 216 217 |
# File 'lib/jets/core.rb', line 215 def default_gems_source "https://gems2.lambdagems.com" end |
#eager_load! ⇒ Object
62 63 64 65 |
# File 'lib/jets/core.rb', line 62 def eager_load! eager_load_jets eager_load_app end |
#eager_load_app ⇒ Object
Eager load user’s application
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/jets/core.rb', line 111 def eager_load_app Dir.glob("#{Jets.root}app/**/*.rb").select do |path| next if !File.file?(path) or path =~ %r{/javascript/} or path =~ %r{/views/} next if path.include?('app/functions') || path.include?('app/shared/functions') || path.include?('app/internal/functions') class_name = path .sub(/\.rb$/,'') # remove .rb .sub(%{^\./},'') # remove ./ .sub(Jets.root.to_s,'') .sub(%r{app/shared/\w+/},'') # remove shared/resources or shared/extensions .sub(%r{app/\w+/},'') # remove app/controllers or app/jobs etc class_name = class_name.classify class_name.constantize # use constantize instead of require so dont have to worry about order. end end |
#eager_load_jets ⇒ Object
Eager load jet’s lib and classes
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/jets/core.rb', line 68 def eager_load_jets lib_jets = File.(".", File.dirname(__FILE__)) Dir.glob("#{lib_jets}/**/*.rb").select do |path| next if !File.file?(path) next if skip_eager_load_paths?(path) path = path.sub("#{lib_jets}/","jets/") class_name = path .sub(/\.rb$/,'') # remove .rb .sub(/^\.\//,'') # remove ./ .sub(/app\/\w+\//,'') # remove app/controllers or app/jobs etc .camelize # special class mappings class_name = class_mappings(class_name) class_name.constantize # use constantize instead of require so dont have to worry about order. end end |
#env ⇒ Object
32 33 34 35 36 |
# File 'lib/jets/core.rb', line 32 def env env = ENV['JETS_ENV'] || 'development' ENV['RAILS_ENV'] = ENV['RACK_ENV'] = env ActiveSupport::StringInquirer.new(env) end |
#handler(lambda_context, handler) ⇒ Object
Example: Jets.handler(self, “handlers/controllers/posts_controller.index”)
190 191 192 193 194 195 |
# File 'lib/jets/core.rb', line 190 def handler(lambda_context, handler) meth = handler.split('.').last lambda_context.send(:define_method, meth) do |event:, context:| Jets.process(event, context, handler) end end |
#increase_call_count ⇒ Object
130 131 132 |
# File 'lib/jets/core.rb', line 130 def increase_call_count @@call_count += 1 end |
#increase_prewarm_count ⇒ Object
139 140 141 |
# File 'lib/jets/core.rb', line 139 def increase_prewarm_count @@prewarm_count += 1 end |
#load_tasks ⇒ Object
54 55 56 |
# File 'lib/jets/core.rb', line 54 def load_tasks Jets::Commands::RakeTasks.load! end |
#logger ⇒ Object
44 45 46 |
# File 'lib/jets/core.rb', line 44 def logger Jets::Logger.new($stderr) end |
#on_exception(exception) ⇒ Object
166 167 168 169 170 171 172 173 |
# File 'lib/jets/core.rb', line 166 def on_exception(exception) Jets::Turbine.subclasses.each do |subclass| reporters = subclass.on_exceptions || [] reporters.each do |label, block| block.call(exception) end end end |
#once ⇒ Object
197 198 199 200 201 202 |
# File 'lib/jets/core.rb', line 197 def once boot override_lambda_ruby_runtime tmp_load! start_rack_server end |
#override_lambda_ruby_runtime ⇒ Object
219 220 221 |
# File 'lib/jets/core.rb', line 219 def override_lambda_ruby_runtime require "jets/overrides/lambda" end |
#poly_only? ⇒ Boolean
156 157 158 159 |
# File 'lib/jets/core.rb', line 156 def poly_only? return true if ENV['JETS_POLY_ONLY'] # bypass to allow rapid development of handlers Jets::Commands::Build.poly_only? end |
#prewarm_count ⇒ Object
143 144 145 |
# File 'lib/jets/core.rb', line 143 def prewarm_count @@prewarm_count end |
#process(event, context, handler) ⇒ Object
179 180 181 182 183 184 185 186 187 |
# File 'lib/jets/core.rb', line 179 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 |
#project_namespace ⇒ Object
147 148 149 |
# File 'lib/jets/core.rb', line 147 def project_namespace [config.project_name, config.short_env, config.env_extra].compact.join('-').gsub('_','-') end |
#rack? ⇒ Boolean
151 152 153 154 |
# File 'lib/jets/core.rb', line 151 def rack? path = "#{Jets.root}rack" File.exist?(path) || File.symlink?(path) end |
#report_exception(exception) ⇒ Object
161 162 163 164 |
# File 'lib/jets/core.rb', line 161 def report_exception(exception) puts "DEPRECATED: report_exception. Use on_exception instead.".colorize(:yellow) on_exception(exception) end |
#root ⇒ Object
Ensures trailing slash Useful for appending a ‘./’ in front of a path or leaving it alone. Returns: ‘/path/with/trailing/slash/’ or ‘./’
24 25 26 27 28 29 30 |
# File 'lib/jets/core.rb', line 24 def root # Do not memoize this method. Turbo mode can change it root = ENV['JETS_ROOT'].to_s root = '.' if root == '' root = "#{root}/" unless root.ends_with?('/') Pathname.new(root) end |
#skip_eager_load_paths?(path) ⇒ Boolean
Skip these paths because eager loading doesnt work for them.
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/jets/core.rb', line 87 def skip_eager_load_paths?(path) path =~ %r{/cli} || path =~ %r{/core_ext} || path =~ %r{/default/application} || path =~ %r{/functions} || path =~ %r{/internal/app} || path =~ %r{/jets/stack} || path =~ %r{/overrides} || path =~ %r{/rackup_wrappers} || path =~ %r{/reconfigure_rails} || path =~ %r{/templates/} || path =~ %r{/turbo/project/} || path =~ %r{/version} || path =~ %r{/webpacker} end |
#start_rack_server(options = {}) ⇒ Object
Megamode support
209 210 211 212 213 |
# File 'lib/jets/core.rb', line 209 def start_rack_server(={}) rack = Jets::RackServer.new() rack.start rack.wait_for_socket end |
#tmp_load! ⇒ Object
204 205 206 |
# File 'lib/jets/core.rb', line 204 def tmp_load! Jets::TmpLoader.load! end |
#webpacker? ⇒ Boolean
49 50 51 |
# File 'lib/jets/core.rb', line 49 def webpacker? Gem.loaded_specs.keys.include?("webpacker") end |