Module: Jets::Core

Extended by:
Memoist
Included in:
Jets
Defined in:
lib/jets/core.rb

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

Instance Method Details

#applicationObject



4
5
6
# File 'lib/jets/core.rb', line 4

def application
  Jets::Application.instance
end

#awsObject



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(options={})
  Jets::Booter.boot!(options)
end

#build_rootObject



39
40
41
# File 'lib/jets/core.rb', line 39

def build_root
  "/tmp/jets/#{config.project_name}".freeze
end

#call_countObject



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

#configObject



8
9
10
# File 'lib/jets/core.rb', line 8

def config
  application.config
end

#custom_domain?Boolean

Returns:

  • (Boolean)


175
176
177
# File 'lib/jets/core.rb', line 175

def custom_domain?
  Jets.config.domain.hosted_zone_name
end

#default_gems_sourceObject



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_appObject

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_jetsObject

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.expand_path(".", 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

#envObject



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_countObject



130
131
132
# File 'lib/jets/core.rb', line 130

def increase_call_count
  @@call_count += 1
end

#increase_prewarm_countObject



139
140
141
# File 'lib/jets/core.rb', line 139

def increase_prewarm_count
  @@prewarm_count += 1
end

#load_tasksObject



54
55
56
# File 'lib/jets/core.rb', line 54

def load_tasks
  Jets::Commands::RakeTasks.load!
end

#loggerObject



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

#onceObject



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_runtimeObject



219
220
221
# File 'lib/jets/core.rb', line 219

def override_lambda_ruby_runtime
  require "jets/overrides/lambda"
end

#poly_only?Boolean

Returns:

  • (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_countObject



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_namespaceObject



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

Returns:

  • (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

#rootObject

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.

Returns:

  • (Boolean)


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(options={})
  rack = Jets::RackServer.new(options)
  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

#versionObject



58
59
60
# File 'lib/jets/core.rb', line 58

def version
  Jets::VERSION
end

#webpacker?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/jets/core.rb', line 49

def webpacker?
  Gem.loaded_specs.keys.include?("webpacker")
end