Class: Jets::Application
- Inherits:
-
Object
show all
- Extended by:
- Memoist
- Includes:
- Defaults, Middleware, Singleton
- Defined in:
- lib/jets/application.rb,
lib/jets/application/defaults.rb
Defined Under Namespace
Modules: Defaults
Constant Summary
collapse
- ENV_MAP =
Use the shorter name in stack names, but use the full name when it comes to checking for the env.
Example:
Jets.env: 'development'
Jets.config.project_namespace: 'demo-dev'
{
development: 'dev',
production: 'prod',
staging: 'stag',
}
Instance Method Summary
collapse
Methods included from Defaults
#default_autoload_paths, #default_config, #default_ignore_paths
Methods included from Middleware
#build_stack, #call, #config_middleware, #default_stack, #endpoint, #middlewares
Instance Method Details
#aws ⇒ Object
228
229
230
|
# File 'lib/jets/application.rb', line 228
def aws
Jets::AwsInfo.new
end
|
#config ⇒ Object
52
53
54
|
# File 'lib/jets/application.rb', line 52
def config
@config ||= ActiveSupport::OrderedOptions.new end
|
#configs! ⇒ Object
21
22
23
24
25
26
|
# File 'lib/jets/application.rb', line 21
def configs!
load_environments_config
load_db_config
set_iam_policy normalize_env_vars!
end
|
10
11
12
|
# File 'lib/jets/application.rb', line 10
def configure(&block)
instance_eval(&block) if block
end
|
#deprecated_configs_message ⇒ Object
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/jets/application.rb', line 92
def deprecated_configs_message
unless config.ruby.lazy_load.nil?
puts "Detected config.ruby.lazy_load = #{config.ruby.lazy_load.inspect}".color(:yellow)
puts "Deprecated: config.ruby.lazy_load".color(:yellow)
puts "Gems are now bundled with with Lambda Layer and there's no need to lazy load them."
puts "Please remove the config in your config/application.rb or config/environments files."
puts "You can have Jets automatically do this by running:"
puts " jets upgrade"
end
end
|
#each_app_autoload_path(expression) ⇒ Object
128
129
130
131
132
133
|
# File 'lib/jets/application.rb', line 128
def each_app_autoload_path(expression)
Dir.glob(expression).each do |p|
p.sub!('./','')
yield(p) unless exclude_autoload_path?(p)
end
end
|
#exclude_autoload_path?(path) ⇒ Boolean
135
136
137
138
139
|
# File 'lib/jets/application.rb', line 135
def exclude_autoload_path?(path)
path =~ %r{app/javascript} ||
path =~ %r{app/views} ||
path =~ %r{/functions} end
|
#finish! ⇒ Object
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/jets/application.rb', line 37
def finish!
deprecated_configs_message
load_inflections
load_routes
Jets::Controller::Rendering::RackRenderer.setup! require 'action_mailer'
end
|
#internal_autoload_paths ⇒ Object
141
142
143
144
145
146
147
148
149
150
|
# File 'lib/jets/application.rb', line 141
def internal_autoload_paths
internal = File.expand_path("../internal", __FILE__)
paths = %w[
app/controllers
app/helpers
app/jobs
app/models
]
paths.map { |path| "#{internal}/#{path}" }
end
|
#load_config_application ⇒ Object
79
80
81
82
|
# File 'lib/jets/application.rb', line 79
def load_config_application
app_config = "#{Jets.root}/config/application.rb"
load app_config end
|
#load_db_config(database_yml = "#{Jets.root}/config/database.yml") ⇒ Object
194
195
196
197
198
199
200
201
202
203
204
205
|
# File 'lib/jets/application.rb', line 194
def load_db_config(database_yml="#{Jets.root}/config/database.yml")
config.database = {}
Jets::Dotenv.load!
if File.exist?(database_yml)
require "active_record/database_configurations" text = Jets::Erb.result(database_yml)
db_configs = YAML.load(text)
configurations = ActiveRecord::DatabaseConfigurations.new(db_configs)
config.database = configurations
end
end
|
#load_default_config ⇒ Object
71
72
73
74
75
76
77
|
# File 'lib/jets/application.rb', line 71
def load_default_config
@config = default_config set_computed_configs! Jets::Dotenv.load! Jets.config.project_name = parse_project_name load_config_application end
|
#load_environments_config ⇒ Object
84
85
86
87
88
89
90
|
# File 'lib/jets/application.rb', line 84
def load_environments_config
env_file = "#{Jets.root}/config/environments/#{Jets.env}.rb"
if File.exist?(env_file)
code = IO.read(env_file)
instance_eval(code, env_file)
end
end
|
#load_inflections ⇒ Object
#load_routes(refresh: false) ⇒ Object
216
217
218
219
220
221
222
223
224
225
226
|
# File 'lib/jets/application.rb', line 216
def load_routes(refresh: false)
@router = nil if refresh
routes_file = "#{Jets.root}/config/routes.rb"
return unless File.exist?(routes_file)
if refresh
load routes_file else
require routes_file end
end
|
#main_loader ⇒ Object
103
104
105
|
# File 'lib/jets/application.rb', line 103
def main_loader
Jets::Autoloaders.main
end
|
#main_loader_setup ⇒ Object
123
124
125
126
|
# File 'lib/jets/application.rb', line 123
def main_loader_setup
main_loader.enable_reloading if Jets.env.development?
main_loader.setup end
|
#normalize_env_vars! ⇒ Object
It is pretty easy to attempt to set environment variables without the correct AWS Environment.Variables path struture. Auto-fix it for convenience.
185
186
187
188
189
190
191
192
|
# File 'lib/jets/application.rb', line 185
def normalize_env_vars!
environment = config.function.environment
if environment and !environment.to_h.key?(:variables)
config.function.environment = {
variables: environment.to_h
}
end
end
|
#parse_project_name ⇒ Object
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.
63
64
65
66
67
68
69
|
# File 'lib/jets/application.rb', line 63
def parse_project_name
return ENV['JETS_PROJECT_NAME'] if ENV['JETS_PROJECT_NAME']
lines = IO.readlines("#{Jets.root}/config/application.rb")
project_name_line = lines.find { |l| l =~ /config\.project_name.*=/ }
project_name_line.gsub(/.*=/,'').strip.gsub(/["']/,'') end
|
#reload_configs! ⇒ Object
After the mimimal template gets build, we need to reload it for the full stack creation. This allows us to reference IAM policies configs that depend on the creation of the s3 bucket.
31
32
33
34
35
|
# File 'lib/jets/application.rb', line 31
def reload_configs!
@config.iam_policy = nil
configs!
end
|
#routes ⇒ Object
Naming it routes because config/routes.rb requires
Jets.application.routes.draw do
for scaffolding to work.
212
213
214
|
# File 'lib/jets/application.rb', line 212
def routes
@router ||= Jets::Router.new
end
|
#set_computed_configs! ⇒ Object
164
165
166
167
168
169
170
171
172
173
174
175
|
# File 'lib/jets/application.rb', line 164
def set_computed_configs!
config. = ENV['JETS_ENV_EXTRA'] if ENV['JETS_ENV_EXTRA']
config.short_env = ENV_MAP[Jets.env.to_sym] || Jets.env
config.table_namespace = [config.project_name, config.short_env].compact.join('-')
config.project_namespace = Jets.project_namespace
end
|
#set_iam_policy ⇒ Object
177
178
179
180
|
# File 'lib/jets/application.rb', line 177
def set_iam_policy
config.iam_policy ||= self.class.default_iam_policy
config.managed_policy_definitions ||= [] end
|
#setup! ⇒ Object
14
15
16
17
18
19
|
# File 'lib/jets/application.rb', line 14
def setup!
load_default_config
setup_autoload_paths
setup_ignore_paths
main_loader_setup
end
|
#setup_autoload_paths ⇒ Object
107
108
109
110
111
112
113
|
# File 'lib/jets/application.rb', line 107
def setup_autoload_paths
autoload_paths = default_autoload_paths + config.autoload_paths
autoload_paths.each do |path|
next unless File.exist?(path)
main_loader.push_dir(path)
end
end
|
#setup_ignore_paths ⇒ Object
Allow use to add config.ignore_paths just in case there’s some case Jets hasn’t considered
116
117
118
119
120
121
|
# File 'lib/jets/application.rb', line 116
def setup_ignore_paths
ignore_paths = default_ignore_paths + config.ignore_paths
ignore_paths.each do |path|
main_loader.ignore("#{Jets.root}/#{path}")
end
end
|