Module: Jets::Core
Constant Summary collapse
- @@application =
Calling application triggers load of configs. Jets’ the default config/application.rb is loaded, then the project’s config/application.rb is loaded.
nil
- @@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
For some reason memoize doesnt work with application, think there’s some circular dependency issue.
- #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
- #increase_call_count ⇒ Object
- #increase_prewarm_count ⇒ Object
- #load_tasks ⇒ Object
- #logger ⇒ Object
- #prewarm_count ⇒ 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.
- #version ⇒ Object
- #webpacker? ⇒ Boolean
Instance Method Details
#application ⇒ Object
11 12 13 14 15 16 17 |
# File 'lib/jets/core.rb', line 11 def application return @@application if @@application @@application = Jets::Application.new @@application.setup! @@application end |
#aws ⇒ Object
25 26 27 |
# File 'lib/jets/core.rb', line 25 def aws application.aws end |
#boot(options = {}) ⇒ Object
Load all application base classes and project classes
30 31 32 |
# File 'lib/jets/core.rb', line 30 def boot(={}) Jets::Booter.boot!() end |
#build_root ⇒ Object
61 62 63 |
# File 'lib/jets/core.rb', line 61 def build_root "/tmp/jets/#{config.project_name}".freeze end |
#call_count ⇒ Object
150 151 152 |
# File 'lib/jets/core.rb', line 150 def call_count @@call_count end |
#class_mappings(class_name) ⇒ Object
121 122 123 124 125 126 |
# File 'lib/jets/core.rb', line 121 def class_mappings(class_name) map = { "Jets::Io" => "Jets::IO", } map[class_name] || class_name end |
#config ⇒ Object
For some reason memoize doesnt work with application, think there’s some circular dependency issue. Figure this out later.
21 22 23 |
# File 'lib/jets/core.rb', line 21 def config application.config end |
#eager_load! ⇒ Object
84 85 86 87 |
# File 'lib/jets/core.rb', line 84 def eager_load! eager_load_jets eager_load_app end |
#eager_load_app ⇒ Object
Eager load user’s application
129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/jets/core.rb', line 129 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/} class_name = path .sub(/\.rb$/,'') # remove .rb .sub(/^\.\//,'') # remove ./ .sub(/app\/\w+\//,'') # remove app/controllers or app/jobs etc .classify puts "eager_load! loading path: #{path} class_name: #{class_name}" if ENV['DEBUG'] 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
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/jets/core.rb', line 90 def eager_load_jets lib_jets = File.(".", File.dirname(__FILE__)) Dir.glob("#{lib_jets}/**/*.rb").select do |path| # puts "path #{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
54 55 56 57 58 |
# File 'lib/jets/core.rb', line 54 def env env = ENV['JETS_ENV'] || 'development' ENV['RAILS_ENV'] = ENV['RACK_ENV'] = env ActiveSupport::StringInquirer.new(env) end |
#increase_call_count ⇒ Object
146 147 148 |
# File 'lib/jets/core.rb', line 146 def increase_call_count @@call_count += 1 end |
#increase_prewarm_count ⇒ Object
155 156 157 |
# File 'lib/jets/core.rb', line 155 def increase_prewarm_count @@prewarm_count += 1 end |
#load_tasks ⇒ Object
76 77 78 |
# File 'lib/jets/core.rb', line 76 def load_tasks Jets::Commands::RakeTasks.load! end |
#logger ⇒ Object
66 67 68 |
# File 'lib/jets/core.rb', line 66 def logger Jets::Logger.new($stderr) end |
#prewarm_count ⇒ Object
159 160 161 |
# File 'lib/jets/core.rb', line 159 def prewarm_count @@prewarm_count 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 ‘./’ @@root = nil def root
return @@root if @@root
@@root = ENV['JETS_ROOT'].to_s
@@root = '.' if @@root == ''
@@root = "#{@@root}/" unless @@root.ends_with?('/')
@@root = Pathname.new(@@root)
end
46 47 48 49 50 51 |
# File 'lib/jets/core.rb', line 46 def root 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.
110 111 112 113 114 115 116 117 118 119 |
# File 'lib/jets/core.rb', line 110 def skip_eager_load_paths?(path) path =~ %r{/templates/} || path =~ %r{/version} || path =~ %r{/rails_overrides} || path =~ %r{/default/application} || path =~ %r{/internal/app} || path =~ %r{/webpacker} || path =~ %r{/cli} || path =~ %r{/core_ext} end |
#webpacker? ⇒ Boolean
71 72 73 |
# File 'lib/jets/core.rb', line 71 def webpacker? Gem.loaded_specs.keys.include?("webpacker") end |