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
Methods included from Middleware
#build_stack, #call, #config_middleware, #default_stack, #endpoint, #middlewares
Instance Method Details
#aws ⇒ Object
210
211
212
|
# File 'lib/jets/application.rb', line 210
def aws
Jets::AwsInfo.new
end
|
#config ⇒ Object
51
52
53
|
# File 'lib/jets/application.rb', line 51
def config
@config ||= ActiveSupport::OrderedOptions.new
end
|
#configs! ⇒ Object
20
21
22
23
24
25
|
# File 'lib/jets/application.rb', line 20
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
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/jets/application.rb', line 90
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
111
112
113
114
115
116
|
# File 'lib/jets/application.rb', line 111
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
118
119
120
121
122
|
# File 'lib/jets/application.rb', line 118
def exclude_autoload_path?(path)
path =~ %r{app/javascript} ||
path =~ %r{app/views} ||
path =~ %r{/functions}
end
|
#finish! ⇒ Object
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/jets/application.rb', line 36
def finish!
deprecated_configs_message
load_inflections
load_routes
Jets::Controller::Rendering::RackRenderer.setup!
require 'action_mailer'
end
|
#internal_autoload_paths ⇒ Object
124
125
126
127
128
129
130
131
132
133
|
# File 'lib/jets/application.rb', line 124
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
77
78
79
80
|
# File 'lib/jets/application.rb', line 77
def load_config_application
app_config = "#{Jets.root}/config/application.rb"
load app_config
end
|
#load_db_config ⇒ Object
177
178
179
180
181
182
183
184
185
186
187
|
# File 'lib/jets/application.rb', line 177
def load_db_config
config.database = {}
Jets::Dotenv.load!
database_yml = "#{Jets.root}/config/database.yml"
if File.exist?(database_yml)
text = Jets::Erb.result(database_yml)
db_config = YAML.load(text)
config.database = db_config
end
end
|
#load_default_config ⇒ Object
70
71
72
73
74
75
|
# File 'lib/jets/application.rb', line 70
def load_default_config
@config = default_config
set_computed_configs!
load_config_application
Jets.config.project_name = parse_project_name
end
|
#load_environments_config ⇒ Object
82
83
84
85
86
87
88
|
# File 'lib/jets/application.rb', line 82
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
47
48
49
|
# File 'lib/jets/application.rb', line 47
def load_inflections
Jets::Inflections.load!
end
|
#load_routes(refresh: false) ⇒ Object
198
199
200
201
202
203
204
205
206
207
208
|
# File 'lib/jets/application.rb', line 198
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
|
#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.
168
169
170
171
172
173
174
175
|
# File 'lib/jets/application.rb', line 168
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.
62
63
64
65
66
67
68
|
# File 'lib/jets/application.rb', line 62
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.
30
31
32
33
34
|
# File 'lib/jets/application.rb', line 30
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.
194
195
196
|
# File 'lib/jets/application.rb', line 194
def routes
@router ||= Jets::Router.new
end
|
#set_computed_configs! ⇒ Object
147
148
149
150
151
152
153
154
155
156
157
158
|
# File 'lib/jets/application.rb', line 147
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
160
161
162
163
|
# File 'lib/jets/application.rb', line 160
def set_iam_policy
config.iam_policy ||= self.class.default_iam_policy
config.managed_policy_definitions ||= []
end
|
#setup! ⇒ Object
14
15
16
17
18
|
# File 'lib/jets/application.rb', line 14
def setup!
load_default_config
autoload_paths = config.autoload_paths + config.
setup_auto_load_paths(autoload_paths)
end
|
#setup_auto_load_paths(autoload_paths = default_autoload_paths) ⇒ Object
101
102
103
104
105
106
107
108
109
|
# File 'lib/jets/application.rb', line 101
def setup_auto_load_paths(autoload_paths=default_autoload_paths)
loader = Jets::Autoloaders.main
autoload_paths.each do |path|
next unless File.exist?(path)
loader.push_dir(path)
end
loader.enable_reloading if Jets.env.development?
loader.setup
end
|