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
235
236
237
|
# File 'lib/jets/application.rb', line 235
def aws
Jets::AwsInfo.new
end
|
#config ⇒ Object
53
54
55
|
# File 'lib/jets/application.rb', line 53
def config
@config ||= ActiveSupport::OrderedOptions.new end
|
#configs! ⇒ Object
21
22
23
24
25
26
27
|
# File 'lib/jets/application.rb', line 21
def configs!
load_environments_config
load_db_config
set_iam_policy set_time_zone
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
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/jets/application.rb', line 93
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
129
130
131
132
133
134
|
# File 'lib/jets/application.rb', line 129
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
136
137
138
139
140
|
# File 'lib/jets/application.rb', line 136
def exclude_autoload_path?(path)
path =~ %r{app/javascript} ||
path =~ %r{app/views} ||
path =~ %r{/functions} end
|
#finish! ⇒ Object
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/jets/application.rb', line 38
def finish!
deprecated_configs_message
load_inflections
load_routes
Jets::Controller::Rendering::RackRenderer.setup! require 'action_mailer'
end
|
#internal_autoload_paths ⇒ Object
142
143
144
145
146
147
148
149
150
151
|
# File 'lib/jets/application.rb', line 142
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
80
81
82
83
|
# File 'lib/jets/application.rb', line 80
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
201
202
203
204
205
206
207
208
209
210
211
212
|
# File 'lib/jets/application.rb', line 201
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
72
73
74
75
76
77
78
|
# File 'lib/jets/application.rb', line 72
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
85
86
87
88
89
90
91
|
# File 'lib/jets/application.rb', line 85
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
223
224
225
226
227
228
229
230
231
232
233
|
# File 'lib/jets/application.rb', line 223
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
104
105
106
|
# File 'lib/jets/application.rb', line 104
def main_loader
Jets::Autoloaders.main
end
|
#main_loader_setup ⇒ Object
124
125
126
127
|
# File 'lib/jets/application.rb', line 124
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.
192
193
194
195
196
197
198
199
|
# File 'lib/jets/application.rb', line 192
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.
64
65
66
67
68
69
70
|
# File 'lib/jets/application.rb', line 64
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.*=/ && l !~ /^\s+#/ }
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.
32
33
34
35
36
|
# File 'lib/jets/application.rb', line 32
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.
219
220
221
|
# File 'lib/jets/application.rb', line 219
def routes
@router ||= Jets::Router.new
end
|
#set_computed_configs! ⇒ Object
165
166
167
168
169
170
171
172
173
174
175
176
|
# File 'lib/jets/application.rb', line 165
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
178
179
180
181
182
183
|
# File 'lib/jets/application.rb', line 178
def set_iam_policy
config.iam_policy ||= []
config.default_iam_policy ||= self.class.default_iam_policy
config.iam_policy = config.default_iam_policy | config.iam_policy
config.managed_policy_definitions ||= [] end
|
#set_time_zone ⇒ Object
185
186
187
|
# File 'lib/jets/application.rb', line 185
def set_time_zone
Time.zone_default = Time.find_zone!(config.time_zone)
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
108
109
110
111
112
113
114
|
# File 'lib/jets/application.rb', line 108
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
117
118
119
120
121
122
|
# File 'lib/jets/application.rb', line 117
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
|