lotusrb 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +57 -14
- data/FEATURES.md +21 -0
- data/LICENSE.md +1 -1
- data/README.md +8 -7
- data/bin/lotus +1 -0
- data/lib/lotus.rb +6 -0
- data/lib/lotus/action/csrf_protection.rb +1 -1
- data/lib/lotus/application.rb +4 -4
- data/lib/lotus/application_name.rb +8 -6
- data/lib/lotus/cli.rb +75 -66
- data/lib/lotus/cli_sub_commands/assets.rb +29 -0
- data/lib/lotus/{commands → cli_sub_commands}/db.rb +24 -29
- data/lib/lotus/cli_sub_commands/destroy.rb +102 -0
- data/lib/lotus/cli_sub_commands/generate.rb +127 -0
- data/lib/lotus/commands/assets/precompile.rb +35 -0
- data/lib/lotus/commands/console.rb +28 -8
- data/lib/lotus/commands/db/abstract.rb +6 -2
- data/lib/lotus/commands/db/console.rb +5 -5
- data/lib/lotus/commands/generate/abstract.rb +63 -0
- data/lib/lotus/commands/generate/action.rb +262 -0
- data/lib/lotus/commands/generate/app.rb +116 -0
- data/lib/lotus/commands/generate/mailer.rb +118 -0
- data/lib/lotus/commands/generate/migration.rb +63 -0
- data/lib/lotus/commands/generate/model.rb +96 -0
- data/lib/lotus/commands/new/abstract.rb +128 -0
- data/lib/lotus/commands/new/app.rb +116 -0
- data/lib/lotus/commands/new/container.rb +102 -0
- data/lib/lotus/commands/routes.rb +19 -2
- data/lib/lotus/commands/server.rb +16 -2
- data/lib/lotus/config/framework_configuration.rb +13 -1
- data/lib/lotus/configuration.rb +24 -76
- data/lib/lotus/container.rb +15 -2
- data/lib/lotus/environment.rb +43 -4
- data/lib/lotus/frameworks.rb +1 -0
- data/lib/lotus/generators/action/action_spec.minitest.tt +1 -1
- data/lib/lotus/generators/action/action_spec.rspec.tt +1 -1
- data/lib/lotus/generators/action/view_spec.minitest.tt +1 -1
- data/lib/lotus/generators/action/view_spec.rspec.tt +1 -1
- data/lib/lotus/generators/{slice → app}/.gitkeep.tt +0 -0
- data/lib/lotus/generators/{slice → app}/application.rb.tt +61 -23
- data/lib/lotus/generators/app/config/initializers/.gitkeep +0 -0
- data/lib/lotus/generators/{slice → app}/config/routes.rb.tt +0 -0
- data/lib/lotus/generators/app/favicon.ico +0 -0
- data/lib/lotus/generators/{slice → app}/templates/application.html.erb.tt +2 -1
- data/lib/lotus/generators/app/views/application_layout.rb.tt +7 -0
- data/lib/lotus/generators/application/app/.env.development.tt +1 -0
- data/lib/lotus/generators/application/app/.env.test.tt +1 -0
- data/lib/lotus/generators/application/app/Gemfile.tt +1 -0
- data/lib/lotus/generators/application/app/Rakefile.minitest.tt +1 -0
- data/lib/lotus/generators/application/app/Rakefile.rspec.tt +1 -0
- data/lib/lotus/generators/application/app/config/application.rb.tt +56 -18
- data/lib/lotus/generators/application/app/config/initializers/.gitkeep +0 -0
- data/lib/lotus/generators/application/app/favicon.ico +0 -0
- data/lib/lotus/generators/application/app/gitignore.tt +2 -0
- data/lib/lotus/generators/application/app/lotusrc.tt +3 -3
- data/lib/lotus/generators/application/app/spec_helper.rb.rspec.tt +5 -1
- data/lib/lotus/generators/application/app/templates/application.html.erb.tt +1 -0
- data/lib/lotus/generators/application/container/.env.development.tt +1 -0
- data/lib/lotus/generators/application/container/.env.test.tt +1 -0
- data/lib/lotus/generators/application/container/Gemfile.tt +1 -1
- data/lib/lotus/generators/application/container/Rakefile.minitest.tt +1 -0
- data/lib/lotus/generators/application/container/Rakefile.rspec.tt +1 -0
- data/lib/lotus/generators/application/container/config/initializers/.gitkeep +0 -0
- data/lib/lotus/generators/application/container/gitignore.tt +2 -0
- data/lib/lotus/generators/application/container/lib/chirp/mailers/.gitkeep +0 -0
- data/lib/lotus/generators/application/container/lib/chirp/mailers/templates/.gitkeep +0 -0
- data/lib/lotus/generators/application/container/lotusrc.tt +3 -3
- data/lib/lotus/generators/application/container/spec_helper.rb.rspec.tt +5 -1
- data/lib/lotus/generators/database_config.rb +17 -4
- data/lib/lotus/generators/generatable.rb +51 -0
- data/lib/lotus/generators/generator.rb +35 -0
- data/lib/lotus/generators/test_framework.rb +42 -0
- data/lib/lotus/loader.rb +43 -0
- data/lib/lotus/lotusrc.rb +50 -49
- data/lib/lotus/middleware.rb +28 -10
- data/lib/lotus/rake_helper.rb +68 -0
- data/lib/lotus/rake_tasks.rb +2 -0
- data/lib/lotus/rendering_policy.rb +2 -2
- data/lib/lotus/repositories/car_repository.rb +3 -0
- data/lib/lotus/repositories/name_repository.rb +3 -0
- data/lib/lotus/setup.rb +1 -3
- data/lib/lotus/static.rb +77 -0
- data/lib/lotus/templates/welcome.html.erb +7 -4
- data/lib/lotus/version.rb +1 -1
- data/lib/lotus/views/default.rb +2 -1
- data/lib/lotus/views/default_template_finder.rb +4 -3
- data/lotusrb.gemspec +11 -9
- metadata +79 -60
- data/lib/lotus/commands/generate.rb +0 -97
- data/lib/lotus/commands/new.rb +0 -43
- data/lib/lotus/config/assets.rb +0 -81
- data/lib/lotus/generators/abstract.rb +0 -31
- data/lib/lotus/generators/action.rb +0 -235
- data/lib/lotus/generators/app.rb +0 -39
- data/lib/lotus/generators/app/.gitkeep +0 -1
- data/lib/lotus/generators/application/app.rb +0 -129
- data/lib/lotus/generators/application/container.rb +0 -111
- data/lib/lotus/generators/mailer.rb +0 -112
- data/lib/lotus/generators/migration.rb +0 -58
- data/lib/lotus/generators/model.rb +0 -90
- data/lib/lotus/generators/slice.rb +0 -94
- data/lib/lotus/generators/slice/views/application_layout.rb.tt +0 -7
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'lotus/commands/generate/app'
|
2
|
+
require 'lotus/commands/new/abstract'
|
3
|
+
|
4
|
+
module Lotus
|
5
|
+
module Commands
|
6
|
+
class New
|
7
|
+
class Container < Abstract
|
8
|
+
|
9
|
+
DEFAULT_APPLICATION_NAME = 'web'.freeze
|
10
|
+
|
11
|
+
def map_templates
|
12
|
+
add_application_templates
|
13
|
+
add_empty_directories
|
14
|
+
add_test_templates
|
15
|
+
add_sql_templates
|
16
|
+
add_git_templates
|
17
|
+
end
|
18
|
+
|
19
|
+
def template_options
|
20
|
+
{
|
21
|
+
app_name: app_name,
|
22
|
+
lotus_head: lotus_head?,
|
23
|
+
test: test_framework.framework,
|
24
|
+
database: database_config.type,
|
25
|
+
database_config: database_config.to_hash,
|
26
|
+
lotus_model_version: lotus_model_version,
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
def post_process_templates
|
31
|
+
init_git
|
32
|
+
generate_app
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def add_application_templates
|
38
|
+
add_mapping('lotusrc.tt', '.lotusrc')
|
39
|
+
add_mapping('.env.tt', '.env')
|
40
|
+
add_mapping('.env.development.tt', '.env.development')
|
41
|
+
add_mapping('.env.test.tt', '.env.test')
|
42
|
+
add_mapping('Gemfile.tt', 'Gemfile')
|
43
|
+
add_mapping('config.ru.tt', 'config.ru')
|
44
|
+
add_mapping('config/environment.rb.tt', 'config/environment.rb')
|
45
|
+
add_mapping('lib/app_name.rb.tt', "lib/#{ app_name }.rb")
|
46
|
+
add_mapping('lib/config/mapping.rb.tt', 'lib/config/mapping.rb')
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_test_templates
|
50
|
+
if test_framework.rspec?
|
51
|
+
add_mapping('Rakefile.rspec.tt', 'Rakefile')
|
52
|
+
add_mapping('rspec.rspec.tt', '.rspec')
|
53
|
+
add_mapping('spec_helper.rb.rspec.tt', 'spec/spec_helper.rb')
|
54
|
+
add_mapping('features_helper.rb.rspec.tt', 'spec/features_helper.rb')
|
55
|
+
add_mapping('capybara.rb.rspec.tt', 'spec/support/capybara.rb')
|
56
|
+
else # minitest (default)
|
57
|
+
add_mapping('Rakefile.minitest.tt', 'Rakefile')
|
58
|
+
add_mapping('spec_helper.rb.minitest.tt', 'spec/spec_helper.rb')
|
59
|
+
add_mapping('features_helper.rb.minitest.tt', 'spec/features_helper.rb')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_empty_directories
|
64
|
+
add_mapping('.gitkeep', 'public/.gitkeep')
|
65
|
+
add_mapping('.gitkeep', 'config/initializers/.gitkeep')
|
66
|
+
add_mapping('.gitkeep', "lib/#{ app_name }/entities/.gitkeep")
|
67
|
+
add_mapping('.gitkeep', "lib/#{ app_name }/repositories/.gitkeep")
|
68
|
+
add_mapping('.gitkeep', "lib/#{ app_name }/mailers/.gitkeep")
|
69
|
+
add_mapping('.gitkeep', "lib/#{ app_name }/mailers/templates/.gitkeep")
|
70
|
+
add_mapping('.gitkeep', "spec/#{ app_name }/entities/.gitkeep")
|
71
|
+
add_mapping('.gitkeep', "spec/#{ app_name }/repositories/.gitkeep")
|
72
|
+
add_mapping('.gitkeep', "spec/#{ app_name }/mailers/.gitkeep")
|
73
|
+
add_mapping('.gitkeep', 'spec/support/.gitkeep')
|
74
|
+
|
75
|
+
if database_config.sql?
|
76
|
+
add_mapping('.gitkeep', 'db/migrations/.gitkeep')
|
77
|
+
else
|
78
|
+
add_mapping('.gitkeep', 'db/.gitkeep')
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def generate_app
|
83
|
+
Lotus::Commands::Generate::App.new(app_options, app_slice_name).start
|
84
|
+
end
|
85
|
+
|
86
|
+
def app_options
|
87
|
+
{
|
88
|
+
application_base_url: application_base_url
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
92
|
+
def app_slice_name
|
93
|
+
options.fetch(:application_name, DEFAULT_APPLICATION_NAME)
|
94
|
+
end
|
95
|
+
|
96
|
+
def template_source_path
|
97
|
+
Pathname.new(::File.dirname(__FILE__)).join('..', '..', 'generators', 'application', 'container').realpath
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -1,17 +1,34 @@
|
|
1
1
|
module Lotus
|
2
2
|
module Commands
|
3
|
+
# Display application/container routes.
|
4
|
+
#
|
5
|
+
# It is run with:
|
6
|
+
#
|
7
|
+
# `bundle exec lotus routes`
|
8
|
+
#
|
9
|
+
# @since 0.1.0
|
10
|
+
# @api private
|
3
11
|
class Routes
|
4
|
-
|
5
|
-
|
12
|
+
# @param options [Hash] Environment's options
|
13
|
+
#
|
14
|
+
# @since 0.1.0
|
15
|
+
# @see Lotus::Environment#initialize
|
16
|
+
def initialize(options)
|
17
|
+
@environment = Lotus::Environment.new(options)
|
6
18
|
@environment.require_application_environment
|
7
19
|
end
|
8
20
|
|
21
|
+
# Display to STDOUT application routes
|
22
|
+
#
|
23
|
+
# @since 0.1.0
|
9
24
|
def start
|
10
25
|
puts app.routes.inspector.to_s
|
11
26
|
end
|
12
27
|
|
13
28
|
private
|
14
29
|
|
30
|
+
# @since 0.1.0
|
31
|
+
# @api private
|
15
32
|
def app
|
16
33
|
if @environment.container?
|
17
34
|
Lotus::Container.new
|
@@ -19,8 +19,12 @@ module Lotus
|
|
19
19
|
class Server < ::Rack::Server
|
20
20
|
attr_reader :options
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
# @param options [Hash] Environment's options
|
23
|
+
#
|
24
|
+
# @since 0.1.0
|
25
|
+
# @see Lotus::Environment#initialize
|
26
|
+
def initialize(options)
|
27
|
+
@_env = Lotus::Environment.new(options)
|
24
28
|
@options = _extract_options(@_env)
|
25
29
|
|
26
30
|
if code_reloading?
|
@@ -31,6 +35,8 @@ module Lotus
|
|
31
35
|
|
32
36
|
# Primarily this removes the ::Rack::Chunked middleware
|
33
37
|
# which is the cause of Safari content-length bugs.
|
38
|
+
#
|
39
|
+
# @since 0.1.0
|
34
40
|
def middleware
|
35
41
|
mw = Hash.new { |e, m| e[m] = [] }
|
36
42
|
mw["deployment"].concat([::Rack::ContentLength, ::Rack::CommonLogger])
|
@@ -38,6 +44,9 @@ module Lotus
|
|
38
44
|
mw
|
39
45
|
end
|
40
46
|
|
47
|
+
# Kickstart shotgun preloader if code reloading is supported
|
48
|
+
#
|
49
|
+
# @since 0.1.0
|
41
50
|
def start
|
42
51
|
if code_reloading?
|
43
52
|
Shotgun.enable_copy_on_write
|
@@ -48,6 +57,9 @@ module Lotus
|
|
48
57
|
end
|
49
58
|
|
50
59
|
private
|
60
|
+
|
61
|
+
# @since 0.1.0
|
62
|
+
# @api private
|
51
63
|
def _extract_options(env)
|
52
64
|
env.to_options.merge(
|
53
65
|
config: env.rackup.to_s,
|
@@ -57,6 +69,8 @@ module Lotus
|
|
57
69
|
)
|
58
70
|
end
|
59
71
|
|
72
|
+
# @since 0.1.0
|
73
|
+
# @api private
|
60
74
|
def code_reloading?
|
61
75
|
@_env.code_reloading?
|
62
76
|
end
|
@@ -8,18 +8,30 @@ module Lotus
|
|
8
8
|
class FrameworkConfiguration < BasicObject
|
9
9
|
# @since 0.2.0
|
10
10
|
# @api private
|
11
|
-
def initialize
|
11
|
+
def initialize(&blk)
|
12
|
+
@blocks = [blk || ::Proc.new { }]
|
12
13
|
@settings = []
|
13
14
|
end
|
14
15
|
|
15
16
|
# @since 0.2.0
|
16
17
|
# @api private
|
17
18
|
def __apply(configuration)
|
19
|
+
@blocks.compact.each do |blk|
|
20
|
+
configuration.instance_eval(&blk)
|
21
|
+
end
|
22
|
+
|
18
23
|
@settings.each do |(m, args, blk)|
|
19
24
|
configuration.public_send(m, *args, &blk)
|
20
25
|
end
|
21
26
|
end
|
22
27
|
|
28
|
+
# @since 0.6.0
|
29
|
+
# @api private
|
30
|
+
def __add(&blk)
|
31
|
+
@blocks << blk
|
32
|
+
self
|
33
|
+
end
|
34
|
+
|
23
35
|
# @since 0.2.0
|
24
36
|
# @api private
|
25
37
|
def method_missing(m, *args, &blk)
|
data/lib/lotus/configuration.rb
CHANGED
@@ -3,7 +3,6 @@ require 'lotus/utils/deprecation'
|
|
3
3
|
require 'lotus/environment'
|
4
4
|
require 'lotus/config/framework_configuration'
|
5
5
|
require 'lotus/config/load_paths'
|
6
|
-
require 'lotus/config/assets'
|
7
6
|
require 'lotus/config/routes'
|
8
7
|
require 'lotus/config/mapping'
|
9
8
|
require 'lotus/config/sessions'
|
@@ -389,8 +388,6 @@ module Lotus
|
|
389
388
|
#
|
390
389
|
# @since 0.1.0
|
391
390
|
#
|
392
|
-
# @see Lotus::Configuration#serve_assets
|
393
|
-
#
|
394
391
|
# @example Getting the value
|
395
392
|
# require 'lotus'
|
396
393
|
#
|
@@ -408,69 +405,22 @@ module Lotus
|
|
408
405
|
# module Bookshelf
|
409
406
|
# class Application < Lotus::Application
|
410
407
|
# configure do
|
411
|
-
#
|
412
|
-
#
|
413
|
-
#
|
414
|
-
#
|
408
|
+
# assets do
|
409
|
+
# sources << [
|
410
|
+
# 'vendor/assets'
|
411
|
+
# ]
|
412
|
+
# end
|
415
413
|
# end
|
416
414
|
# end
|
417
415
|
# end
|
418
416
|
#
|
419
417
|
# Bookshelf::Application.configuration.assets
|
420
418
|
# # => #<Lotus::Config::Assets @root=#<Pathname:/root/path/assets>, @paths=["public"]>
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
end
|
425
|
-
|
426
|
-
# Configure serving of assets
|
427
|
-
# Enable static assets (disabled by default).
|
428
|
-
#
|
429
|
-
# This is part of a DSL, for this reason when this method is called with
|
430
|
-
# an argument, it will set the corresponding instance variable. When
|
431
|
-
# called without, it will return the already set value, or the default.
|
432
|
-
#
|
433
|
-
# @since 0.2.0
|
434
|
-
#
|
435
|
-
# @overload serve_assets(value)
|
436
|
-
# Sets the given value.
|
437
|
-
# @param value [TrueClass, FalseClass]
|
438
|
-
#
|
439
|
-
# @overload serve_assets
|
440
|
-
# Gets the value.
|
441
|
-
# @return [TrueClass, FalseClass]
|
442
|
-
#
|
443
|
-
# @see Lotus::Configuration#assets
|
444
|
-
#
|
445
|
-
# @example Getting serve assets configuration by default
|
446
|
-
# require 'lotus'
|
447
|
-
#
|
448
|
-
# module Bookshelf
|
449
|
-
# class Application < Lotus::Application
|
450
|
-
# end
|
451
|
-
# end
|
452
|
-
#
|
453
|
-
# Bookshelf::Application.configuration.serve_assets
|
454
|
-
# # => false
|
455
|
-
#
|
456
|
-
# @example Enabling static assets
|
457
|
-
# require 'lotus'
|
458
|
-
#
|
459
|
-
# module Bookshelf
|
460
|
-
# class Application < Lotus::Application
|
461
|
-
# configure do
|
462
|
-
# serve_assets true
|
463
|
-
# end
|
464
|
-
# end
|
465
|
-
# end
|
466
|
-
#
|
467
|
-
# Bookshelf::Application.configuration.serve_assets
|
468
|
-
# # => true
|
469
|
-
def serve_assets(value = nil)
|
470
|
-
if value.nil?
|
471
|
-
@serve_assets || false
|
419
|
+
def assets(&blk)
|
420
|
+
if @assets
|
421
|
+
@assets.__add(&blk)
|
472
422
|
else
|
473
|
-
@
|
423
|
+
@assets ||= Config::FrameworkConfiguration.new(&blk)
|
474
424
|
end
|
475
425
|
end
|
476
426
|
|
@@ -1277,14 +1227,12 @@ module Lotus
|
|
1277
1227
|
# end
|
1278
1228
|
# end
|
1279
1229
|
#
|
1280
|
-
# module Controllers
|
1281
|
-
#
|
1282
|
-
# include Bookshelf::
|
1230
|
+
# module Controllers::Dashboard
|
1231
|
+
# class Index
|
1232
|
+
# include Bookshelf::Action
|
1283
1233
|
#
|
1284
|
-
#
|
1285
|
-
#
|
1286
|
-
# # ...
|
1287
|
-
# end
|
1234
|
+
# def call(params)
|
1235
|
+
# # ...
|
1288
1236
|
# end
|
1289
1237
|
# end
|
1290
1238
|
# end
|
@@ -1312,9 +1260,9 @@ module Lotus
|
|
1312
1260
|
# end
|
1313
1261
|
#
|
1314
1262
|
# module DashboardController
|
1315
|
-
#
|
1263
|
+
# class Index
|
1264
|
+
# include Bookshelf::Action
|
1316
1265
|
#
|
1317
|
-
# action 'Index' do
|
1318
1266
|
# def call(params)
|
1319
1267
|
# end
|
1320
1268
|
# end
|
@@ -1345,9 +1293,9 @@ module Lotus
|
|
1345
1293
|
# end
|
1346
1294
|
#
|
1347
1295
|
# module DashboardController
|
1348
|
-
#
|
1296
|
+
# class Index
|
1297
|
+
# incude Bookshelf::Action
|
1349
1298
|
#
|
1350
|
-
# action 'Index' do
|
1351
1299
|
# def call(params)
|
1352
1300
|
# end
|
1353
1301
|
# end
|
@@ -1530,9 +1478,9 @@ module Lotus
|
|
1530
1478
|
# end
|
1531
1479
|
#
|
1532
1480
|
# module Controllers::Error
|
1533
|
-
#
|
1481
|
+
# class Index
|
1482
|
+
# include Bookshelf::Action
|
1534
1483
|
#
|
1535
|
-
# action 'Index' do
|
1536
1484
|
# def call(params)
|
1537
1485
|
# raise ArgumentError
|
1538
1486
|
# end
|
@@ -1559,9 +1507,9 @@ module Lotus
|
|
1559
1507
|
# end
|
1560
1508
|
#
|
1561
1509
|
# module Controllers::Error
|
1562
|
-
#
|
1510
|
+
# class Index
|
1511
|
+
# include Bookshelf::Action
|
1563
1512
|
#
|
1564
|
-
# action 'Index' do
|
1565
1513
|
# def call(params)
|
1566
1514
|
# raise ArgumentError
|
1567
1515
|
# end
|
@@ -1731,9 +1679,9 @@ module Lotus
|
|
1731
1679
|
# end
|
1732
1680
|
#
|
1733
1681
|
# module Controllers::Error
|
1734
|
-
#
|
1682
|
+
# class Index
|
1683
|
+
# include Bookshelf::Action
|
1735
1684
|
#
|
1736
|
-
# action 'Index' do
|
1737
1685
|
# def call(params)
|
1738
1686
|
# Bookshelf::Logger.info "Logging to STDOUT"
|
1739
1687
|
# end
|
data/lib/lotus/container.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'thread'
|
2
|
+
require 'rack/builder'
|
2
3
|
require 'lotus/router'
|
3
4
|
|
4
5
|
module Lotus
|
@@ -28,12 +29,12 @@ module Lotus
|
|
28
29
|
def initialize
|
29
30
|
Mutex.new.synchronize do
|
30
31
|
assert_configuration_presence!
|
31
|
-
|
32
|
+
prepare_middleware_stack!
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
35
36
|
def call(env)
|
36
|
-
@
|
37
|
+
@builder.call(env)
|
37
38
|
end
|
38
39
|
|
39
40
|
private
|
@@ -42,5 +43,17 @@ module Lotus
|
|
42
43
|
raise ArgumentError.new("#{ self.class } doesn't have any application mounted.")
|
43
44
|
end
|
44
45
|
end
|
46
|
+
|
47
|
+
def prepare_middleware_stack!
|
48
|
+
@builder = ::Rack::Builder.new
|
49
|
+
@routes = Router.new(&@@configuration)
|
50
|
+
|
51
|
+
if Lotus.environment.serve_static_assets?
|
52
|
+
require 'lotus/static'
|
53
|
+
@builder.use Lotus::Static
|
54
|
+
end
|
55
|
+
|
56
|
+
@builder.run @routes
|
57
|
+
end
|
45
58
|
end
|
46
59
|
end
|
data/lib/lotus/environment.rb
CHANGED
@@ -29,6 +29,18 @@ module Lotus
|
|
29
29
|
# @api private
|
30
30
|
DEFAULT_ENV = 'development'.freeze
|
31
31
|
|
32
|
+
# Production environment
|
33
|
+
#
|
34
|
+
# @since 0.6.0
|
35
|
+
# @api private
|
36
|
+
PRODUCTION_ENV = 'production'.freeze
|
37
|
+
|
38
|
+
# Rack production environment (aka deployment)
|
39
|
+
#
|
40
|
+
# @since 0.6.0
|
41
|
+
# @api private
|
42
|
+
RACK_ENV_DEPLOYMENT = 'deployment'.freeze
|
43
|
+
|
32
44
|
# Default `.env` file name
|
33
45
|
#
|
34
46
|
# @since 0.2.0
|
@@ -111,6 +123,14 @@ module Lotus
|
|
111
123
|
# @api private
|
112
124
|
APPLICATION_PATH = 'app'.freeze
|
113
125
|
|
126
|
+
# @since 0.4.0
|
127
|
+
# @api private
|
128
|
+
SERVE_STATIC_ASSETS = 'SERVE_STATIC_ASSETS'.freeze
|
129
|
+
|
130
|
+
# @since 0.4.0
|
131
|
+
# @api private
|
132
|
+
SERVE_STATIC_ASSETS_ENABLED = 'true'.freeze
|
133
|
+
|
114
134
|
# Initialize a Lotus environment
|
115
135
|
#
|
116
136
|
# It accepts an optional set of configurations from the CLI commands.
|
@@ -173,7 +193,7 @@ module Lotus
|
|
173
193
|
# # the one defined in the parent (eg `FOO` is overwritten). All the
|
174
194
|
# # other settings (eg `XYZ`) will be left untouched.
|
175
195
|
def initialize(options = {})
|
176
|
-
@options = Lotus::Lotusrc.new(root
|
196
|
+
@options = Lotus::Lotusrc.new(root).options
|
177
197
|
@options.merge! Utils::Hash.new(options.clone).symbolize!
|
178
198
|
@mutex = Mutex.new
|
179
199
|
@mutex.synchronize { set_env_vars! }
|
@@ -188,13 +208,15 @@ module Lotus
|
|
188
208
|
#
|
189
209
|
# If those are missing it falls back to the defalt one: `"development"`.
|
190
210
|
#
|
211
|
+
# Rack environment `"deployment"` is translated to Lotus `"production"`.
|
212
|
+
#
|
191
213
|
# @return [String] the current environment
|
192
214
|
#
|
193
215
|
# @since 0.1.0
|
194
216
|
#
|
195
217
|
# @see Lotus::Environment::DEFAULT_ENV
|
196
218
|
def environment
|
197
|
-
@environment ||= ENV[LOTUS_ENV] ||
|
219
|
+
@environment ||= ENV[LOTUS_ENV] || rack_env || DEFAULT_ENV
|
198
220
|
end
|
199
221
|
|
200
222
|
# @since 0.3.1
|
@@ -213,7 +235,7 @@ module Lotus
|
|
213
235
|
#
|
214
236
|
# @see http://bundler.io/v1.7/groups.html
|
215
237
|
def bundler_groups
|
216
|
-
[environment]
|
238
|
+
[:default, environment]
|
217
239
|
end
|
218
240
|
|
219
241
|
# Application's root
|
@@ -385,6 +407,12 @@ module Lotus
|
|
385
407
|
architecture == CONTAINER
|
386
408
|
end
|
387
409
|
|
410
|
+
# @since 0.6.0
|
411
|
+
# @api private
|
412
|
+
def serve_static_assets?
|
413
|
+
SERVE_STATIC_ASSETS_ENABLED == ENV[SERVE_STATIC_ASSETS]
|
414
|
+
end
|
415
|
+
|
388
416
|
# @since 0.4.0
|
389
417
|
# @api private
|
390
418
|
def apps_path
|
@@ -418,8 +446,8 @@ module Lotus
|
|
418
446
|
# @since 0.1.0
|
419
447
|
# @api private
|
420
448
|
def set_env_vars!
|
421
|
-
set_lotus_env_vars!
|
422
449
|
set_application_env_vars!
|
450
|
+
set_lotus_env_vars!
|
423
451
|
end
|
424
452
|
|
425
453
|
# @since 0.2.0
|
@@ -442,5 +470,16 @@ module Lotus
|
|
442
470
|
def default_host
|
443
471
|
environment == DEFAULT_ENV ? DEFAULT_HOST : LISTEN_ALL_HOST
|
444
472
|
end
|
473
|
+
|
474
|
+
# @since 0.6.0
|
475
|
+
# @api private
|
476
|
+
def rack_env
|
477
|
+
case ENV[RACK_ENV]
|
478
|
+
when RACK_ENV_DEPLOYMENT
|
479
|
+
PRODUCTION_ENV
|
480
|
+
else
|
481
|
+
ENV[RACK_ENV]
|
482
|
+
end
|
483
|
+
end
|
445
484
|
end
|
446
485
|
end
|