hanami 1.0.0 → 1.1.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/FEATURES.md +12 -0
- data/README.md +3 -0
- data/bin/hanami +3 -3
- data/hanami.gemspec +9 -9
- data/lib/hanami.rb +27 -0
- data/lib/hanami/action/routing_helpers.rb +1 -1
- data/lib/hanami/application_configuration.rb +0 -8
- data/lib/hanami/application_name.rb +1 -3
- data/lib/hanami/application_namespace.rb +1 -1
- data/lib/hanami/cli/commands.rb +101 -0
- data/lib/hanami/cli/commands/assets.rb +16 -0
- data/lib/hanami/cli/commands/assets/precompile.rb +42 -0
- data/lib/hanami/cli/commands/command.rb +180 -0
- data/lib/hanami/cli/commands/console.rb +95 -0
- data/lib/hanami/cli/commands/db.rb +30 -0
- data/lib/hanami/cli/commands/db/apply.rb +32 -0
- data/lib/hanami/cli/commands/db/console.rb +44 -0
- data/lib/hanami/cli/commands/db/create.rb +32 -0
- data/lib/hanami/cli/commands/db/drop.rb +32 -0
- data/lib/hanami/cli/commands/db/migrate.rb +39 -0
- data/lib/hanami/cli/commands/db/prepare.rb +32 -0
- data/lib/hanami/cli/commands/db/version.rb +32 -0
- data/lib/hanami/cli/commands/destroy.rb +26 -0
- data/lib/hanami/cli/commands/destroy/action.rb +131 -0
- data/lib/hanami/cli/commands/destroy/app.rb +159 -0
- data/lib/hanami/cli/commands/destroy/mailer.rb +74 -0
- data/lib/hanami/cli/commands/destroy/migration.rb +51 -0
- data/lib/hanami/cli/commands/destroy/model.rb +84 -0
- data/lib/hanami/cli/commands/generate.rb +28 -0
- data/lib/hanami/cli/commands/generate/action.rb +224 -0
- data/lib/hanami/cli/commands/generate/action/action.erb +8 -0
- data/lib/hanami/cli/commands/generate/action/action_spec.minitest.erb +11 -0
- data/lib/hanami/{generators/action/action_spec.rspec.tt → cli/commands/generate/action/action_spec.rspec.erb} +1 -3
- data/lib/hanami/cli/commands/generate/action/action_without_view.erb +9 -0
- data/lib/hanami/cli/commands/generate/action/view.erb +5 -0
- data/lib/hanami/cli/commands/generate/action/view_spec.minitest.erb +15 -0
- data/lib/hanami/{generators/action/view_spec.rspec.tt → cli/commands/generate/action/view_spec.rspec.erb} +2 -4
- data/lib/hanami/cli/commands/generate/app.rb +231 -0
- data/lib/hanami/{generators/app/application.rb.tt → cli/commands/generate/app/application.erb} +6 -6
- data/lib/hanami/{generators → cli/commands/generate}/app/favicon.ico +0 -0
- data/lib/hanami/{generators/action/template.tt → cli/commands/generate/app/gitkeep.erb} +0 -0
- data/lib/hanami/cli/commands/generate/app/layout.erb +7 -0
- data/lib/hanami/cli/commands/generate/app/layout_spec.minitest.erb +11 -0
- data/lib/hanami/cli/commands/generate/app/layout_spec.rspec.erb +11 -0
- data/lib/hanami/{generators/app/config/routes.rb.tt → cli/commands/generate/app/routes.erb} +0 -0
- data/lib/hanami/{generators/app/templates/application.html.erb.tt → cli/commands/generate/app/template.erb.erb} +1 -1
- data/lib/hanami/{generators/app/templates/application.html.haml.tt → cli/commands/generate/app/template.haml.erb} +1 -1
- data/lib/hanami/{generators/app/templates/application.html.slim.tt → cli/commands/generate/app/template.slim.erb} +1 -1
- data/lib/hanami/cli/commands/generate/mailer.rb +94 -0
- data/lib/hanami/cli/commands/generate/mailer/mailer.erb +7 -0
- data/lib/hanami/cli/commands/generate/mailer/mailer_spec.minitest.erb +7 -0
- data/lib/hanami/cli/commands/generate/mailer/mailer_spec.rspec.erb +5 -0
- data/lib/hanami/cli/commands/generate/migration.rb +41 -0
- data/lib/hanami/{generators/migration/migration.rb.tt → cli/commands/generate/migration/migration.erb} +0 -0
- data/lib/hanami/cli/commands/generate/model.rb +98 -0
- data/lib/hanami/cli/commands/generate/model/entity.erb +2 -0
- data/lib/hanami/cli/commands/generate/model/entity_spec.minitest.erb +5 -0
- data/lib/hanami/cli/commands/generate/model/entity_spec.rspec.erb +3 -0
- data/lib/hanami/{generators/model/migration.rb.tt → cli/commands/generate/model/migration.erb} +1 -1
- data/lib/hanami/cli/commands/generate/model/repository.erb +2 -0
- data/lib/hanami/cli/commands/generate/model/repository_spec.minitest.erb +5 -0
- data/lib/hanami/cli/commands/generate/model/repository_spec.rspec.erb +3 -0
- data/lib/hanami/cli/commands/generate/secret.rb +48 -0
- data/lib/hanami/cli/commands/new.rb +575 -0
- data/lib/hanami/{generators/application/container/.env.development.tt → cli/commands/new/.env.development.erb} +1 -1
- data/lib/hanami/{generators/application/container/.env.test.tt → cli/commands/new/.env.test.erb} +1 -1
- data/lib/hanami/{generators/app/config/initializers/.gitkeep → cli/commands/new/.gitkeep.erb} +0 -0
- data/lib/hanami/cli/commands/new/Gemfile.erb +57 -0
- data/lib/hanami/cli/commands/new/README.md.erb +35 -0
- data/lib/hanami/{generators/application/container/config.ru.tt → cli/commands/new/config.ru.erb} +0 -0
- data/lib/hanami/{generators/application/container/config/boot.rb.tt → cli/commands/new/config/boot.erb} +0 -0
- data/lib/hanami/{generators/application/container/config/environment.rb.tt → cli/commands/new/config/environment.erb} +8 -8
- data/lib/hanami/{generators/application/container/gitignore.tt → cli/commands/new/gitignore.erb} +0 -0
- data/lib/hanami/{generators/application/container/gitignore_with_sqlite.tt → cli/commands/new/gitignore_with_sqlite.erb} +0 -0
- data/lib/hanami/cli/commands/new/hanamirc.erb +3 -0
- data/lib/hanami/cli/commands/new/lib/project.erb +2 -0
- data/lib/hanami/{generators/application/container/Rakefile.minitest.tt → cli/commands/new/minitest/Rakefile.erb} +0 -0
- data/lib/hanami/{generators/application/container/features_helper.rb.minitest.tt → cli/commands/new/minitest/features_helper.erb} +0 -0
- data/lib/hanami/{generators/application/container/spec_helper.rb.minitest.tt → cli/commands/new/minitest/spec_helper.erb} +0 -0
- data/lib/hanami/{generators/application/container/Rakefile.rspec.tt → cli/commands/new/rspec/Rakefile.erb} +0 -0
- data/lib/hanami/{generators/application/container/capybara.rb.rspec.tt → cli/commands/new/rspec/capybara.erb} +0 -0
- data/lib/hanami/{generators/application/container/features_helper.rb.rspec.tt → cli/commands/new/rspec/features_helper.erb} +0 -0
- data/lib/hanami/{generators/application/container/rspec.rspec.tt → cli/commands/new/rspec/rspec.erb} +0 -0
- data/lib/hanami/{generators/application/container/spec_helper.rb.rspec.tt → cli/commands/new/rspec/spec_helper.erb} +0 -0
- data/lib/hanami/{generators/application/container/.gitignore → cli/commands/new/schema.sql.erb} +0 -0
- data/lib/hanami/cli/commands/project.rb +421 -0
- data/lib/hanami/cli/commands/routes.rb +21 -0
- data/lib/hanami/cli/commands/server.rb +39 -0
- data/lib/hanami/cli/commands/templates.rb +31 -0
- data/lib/hanami/cli/commands/version.rb +19 -0
- data/lib/hanami/common_logger.rb +14 -4
- data/lib/hanami/components.rb +39 -1
- data/lib/hanami/components/components.rb +36 -1
- data/lib/hanami/config/sessions.rb +1 -1
- data/lib/hanami/environment.rb +20 -50
- data/lib/hanami/hanamirc.rb +7 -30
- data/lib/hanami/middleware.rb +0 -26
- data/lib/hanami/static.rb +1 -1
- data/lib/hanami/templates/welcome.html.erb +1 -1
- data/lib/hanami/version.rb +1 -1
- data/lib/hanami/welcome.rb +1 -11
- metadata +125 -135
- data/lib/hanami/cli.rb +0 -154
- data/lib/hanami/cli_base.rb +0 -49
- data/lib/hanami/cli_sub_commands/assets.rb +0 -24
- data/lib/hanami/cli_sub_commands/db.rb +0 -138
- data/lib/hanami/cli_sub_commands/destroy.rb +0 -115
- data/lib/hanami/cli_sub_commands/generate.rb +0 -150
- data/lib/hanami/commands/apps.rb +0 -4
- data/lib/hanami/commands/assets/precompile.rb +0 -26
- data/lib/hanami/commands/command.rb +0 -77
- data/lib/hanami/commands/console.rb +0 -107
- data/lib/hanami/commands/db/apply.rb +0 -19
- data/lib/hanami/commands/db/console.rb +0 -41
- data/lib/hanami/commands/db/create.rb +0 -19
- data/lib/hanami/commands/db/drop.rb +0 -19
- data/lib/hanami/commands/db/migrate.rb +0 -30
- data/lib/hanami/commands/db/prepare.rb +0 -19
- data/lib/hanami/commands/db/version.rb +0 -19
- data/lib/hanami/commands/generate/abstract.rb +0 -76
- data/lib/hanami/commands/generate/action.rb +0 -322
- data/lib/hanami/commands/generate/app.rb +0 -154
- data/lib/hanami/commands/generate/mailer.rb +0 -131
- data/lib/hanami/commands/generate/migration.rb +0 -75
- data/lib/hanami/commands/generate/model.rb +0 -132
- data/lib/hanami/commands/generate/secret_token.rb +0 -37
- data/lib/hanami/commands/new/abstract.rb +0 -178
- data/lib/hanami/commands/new/app.rb +0 -129
- data/lib/hanami/commands/new/container.rb +0 -119
- data/lib/hanami/commands/routes.rb +0 -26
- data/lib/hanami/commands/server.rb +0 -32
- data/lib/hanami/generators/action/action.rb.tt +0 -8
- data/lib/hanami/generators/action/action_spec.minitest.tt +0 -12
- data/lib/hanami/generators/action/action_without_view.rb.tt +0 -9
- data/lib/hanami/generators/action/view.rb.tt +0 -5
- data/lib/hanami/generators/action/view_spec.minitest.tt +0 -16
- data/lib/hanami/generators/app/.gitkeep.tt +0 -1
- data/lib/hanami/generators/app/views/application_layout.rb.tt +0 -7
- data/lib/hanami/generators/application/container/.gitkeep +0 -1
- data/lib/hanami/generators/application/container/Gemfile.tt +0 -56
- data/lib/hanami/generators/application/container/config/initializers/.gitkeep +0 -0
- data/lib/hanami/generators/application/container/db/.gitkeep +0 -1
- data/lib/hanami/generators/application/container/hanamirc.tt +0 -4
- data/lib/hanami/generators/application/container/lib/chirp/entities/.gitkeep +0 -1
- data/lib/hanami/generators/application/container/lib/chirp/mailers/.gitkeep +0 -0
- data/lib/hanami/generators/application/container/lib/chirp/mailers/templates/.gitkeep +0 -0
- data/lib/hanami/generators/application/container/lib/chirp/repositories/.gitkeep +0 -1
- data/lib/hanami/generators/application/container/lib/project.rb.tt +0 -2
- data/lib/hanami/generators/application/container/schema.sql.tt +0 -0
- data/lib/hanami/generators/database_config.rb +0 -114
- data/lib/hanami/generators/generatable.rb +0 -69
- data/lib/hanami/generators/generator.rb +0 -52
- data/lib/hanami/generators/mailer/mailer.rb.tt +0 -7
- data/lib/hanami/generators/mailer/mailer_spec.rb.minitest.tt +0 -7
- data/lib/hanami/generators/mailer/mailer_spec.rb.rspec.tt +0 -5
- data/lib/hanami/generators/mailer/template.html.tt +0 -0
- data/lib/hanami/generators/mailer/template.txt.tt +0 -0
- data/lib/hanami/generators/model/entity.rb.tt +0 -2
- data/lib/hanami/generators/model/entity_spec.minitest.tt +0 -5
- data/lib/hanami/generators/model/entity_spec.rspec.tt +0 -3
- data/lib/hanami/generators/model/repository.rb.tt +0 -2
- data/lib/hanami/generators/model/repository_spec.minitest.tt +0 -5
- data/lib/hanami/generators/model/repository_spec.rspec.tt +0 -3
- data/lib/hanami/generators/template_engine.rb +0 -44
- data/lib/hanami/generators/test_framework.rb +0 -55
@@ -0,0 +1,21 @@
|
|
1
|
+
module Hanami
|
2
|
+
class CLI
|
3
|
+
module Commands
|
4
|
+
# @since 1.1.0
|
5
|
+
# @api private
|
6
|
+
class Routes < Command
|
7
|
+
requires "routes.inspector"
|
8
|
+
|
9
|
+
desc "Prints routes"
|
10
|
+
|
11
|
+
# @since 1.1.0
|
12
|
+
# @api private
|
13
|
+
def call(*)
|
14
|
+
puts requirements['routes.inspector'].inspect
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
register "routes", Commands::Routes
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Hanami
|
2
|
+
class CLI
|
3
|
+
module Commands
|
4
|
+
# @since 1.1.0
|
5
|
+
# @api private
|
6
|
+
class Server < Command
|
7
|
+
requires 'code_reloading'
|
8
|
+
|
9
|
+
desc "Start Hanami server (only for development)"
|
10
|
+
|
11
|
+
option :server, desc: "Force a server engine (eg, webrick, puma, thin, etc..)"
|
12
|
+
option :host, desc: "The host address to bind to"
|
13
|
+
option :port, desc: "The port to run the server on", aliases: ["-p"]
|
14
|
+
option :debug, desc: "Turn on debug output"
|
15
|
+
option :warn, desc: "Turn on warnings"
|
16
|
+
option :daemonize, desc: "Daemonize the server"
|
17
|
+
option :pid, desc: "Path to write a pid file after daemonize"
|
18
|
+
option :code_reloading, desc: "Code reloading", type: :boolean, default: true
|
19
|
+
|
20
|
+
example [
|
21
|
+
" # Basic usage (it uses the bundled server engine)",
|
22
|
+
"--server=webrick # Force `webrick` server engine",
|
23
|
+
"--host=0.0.0.0 # Bind to a host",
|
24
|
+
"--port=2306 # Bind to a port",
|
25
|
+
"--no-code-reloading # Disable code reloading"
|
26
|
+
]
|
27
|
+
|
28
|
+
# @since 1.1.0
|
29
|
+
# @api private
|
30
|
+
def call(*)
|
31
|
+
require "hanami/server"
|
32
|
+
Hanami::Server.new.start
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
register "server", Commands::Server, aliases: ["s"]
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Hanami
|
2
|
+
class CLI
|
3
|
+
module Commands
|
4
|
+
# @since 1.1.0
|
5
|
+
# @api private
|
6
|
+
class Templates
|
7
|
+
NAMESPACE = name.sub(Utils::String.demodulize(name), "").freeze
|
8
|
+
|
9
|
+
# @since 1.1.0
|
10
|
+
# @api private
|
11
|
+
def initialize(klass)
|
12
|
+
word = klass.name.sub(NAMESPACE, "").split("::").map(&:downcase)
|
13
|
+
@root = Pathname.new(File.join(__dir__, *word))
|
14
|
+
freeze
|
15
|
+
end
|
16
|
+
|
17
|
+
# @since 1.1.0
|
18
|
+
# @api private
|
19
|
+
def find(*names)
|
20
|
+
@root.join(*names)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
# @since 1.1.0
|
26
|
+
# @api private
|
27
|
+
attr_reader :root
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Hanami
|
2
|
+
class CLI
|
3
|
+
module Commands
|
4
|
+
# @since 1.1.0
|
5
|
+
# @api private
|
6
|
+
class Version < Command
|
7
|
+
desc "Print Hanami version"
|
8
|
+
|
9
|
+
# @since 1.1.0
|
10
|
+
# @api private
|
11
|
+
def call(*)
|
12
|
+
puts "v#{Hanami::VERSION}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
register "version", Commands::Version, aliases: ["v", "-v", "--version"]
|
18
|
+
end
|
19
|
+
end
|
data/lib/hanami/common_logger.rb
CHANGED
@@ -34,11 +34,15 @@ module Hanami
|
|
34
34
|
|
35
35
|
# @since 1.0.0
|
36
36
|
# @api private
|
37
|
-
|
37
|
+
RACK_ERRORS = 'rack.errors'.freeze
|
38
38
|
|
39
|
-
# @since
|
39
|
+
# @since x.x.x
|
40
40
|
# @api private
|
41
|
-
|
41
|
+
QUERY_HASH = 'rack.request.query_hash'.freeze
|
42
|
+
|
43
|
+
# @since x.x.x
|
44
|
+
# @api private
|
45
|
+
FORM_HASH = 'rack.request.form_hash'.freeze
|
42
46
|
|
43
47
|
# @since 1.0.0
|
44
48
|
# @api private
|
@@ -55,8 +59,8 @@ module Hanami
|
|
55
59
|
status: status.to_s[0..3],
|
56
60
|
ip: env[HTTP_X_FORWARDED_FOR] || env[REMOTE_ADDR],
|
57
61
|
path: env[SCRIPT_NAME] + env[PATH_INFO],
|
58
|
-
query: env[QUERY_STRING],
|
59
62
|
length: length,
|
63
|
+
params: extract_params(env),
|
60
64
|
elapsed: now - began_at
|
61
65
|
]
|
62
66
|
|
@@ -69,5 +73,11 @@ module Hanami
|
|
69
73
|
logger.info(msg)
|
70
74
|
end
|
71
75
|
end
|
76
|
+
|
77
|
+
# @since 1.1.0
|
78
|
+
# @api private
|
79
|
+
def extract_params(env)
|
80
|
+
(env[QUERY_HASH] || {}).merge(env[FORM_HASH] || {})
|
81
|
+
end
|
72
82
|
end
|
73
83
|
end
|
data/lib/hanami/components.rb
CHANGED
@@ -8,6 +8,29 @@ module Hanami
|
|
8
8
|
#
|
9
9
|
# The implementation is thread-safe
|
10
10
|
#
|
11
|
+
# @example
|
12
|
+
# Hanami::Components.resolved('repo') { UserRepository.new }
|
13
|
+
# Hanami::Components['repository.users'] # => #<UserRepository relations=[...]>
|
14
|
+
#
|
15
|
+
# Also you can use Hanami::Components with dry-auto_inject
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
# Hanami::Components.resolved('repo') { UserRepository.new }
|
19
|
+
# Hanami::Components['repository.users'] # => #<UserRepository relations=[...]>
|
20
|
+
#
|
21
|
+
# HanamiImport = Dry::AutoInject(Hanami::Components)
|
22
|
+
#
|
23
|
+
# class CreateUser
|
24
|
+
# include HanamiImport['repository.users']
|
25
|
+
#
|
26
|
+
# def call(payload)
|
27
|
+
# users.create(payload)
|
28
|
+
# end
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# CreateUser.new.call # => #<User:...>
|
32
|
+
# CreateUser.new(users: MockRepository.new).call # => #<MockUser:...>
|
33
|
+
#
|
11
34
|
# @since 0.9.0
|
12
35
|
# @api private
|
13
36
|
module Components
|
@@ -87,7 +110,13 @@ module Hanami
|
|
87
110
|
end
|
88
111
|
end
|
89
112
|
|
90
|
-
# Return the value of an already resolved component.
|
113
|
+
# Return the value of an already resolved component. Or raise error for not resolved component.
|
114
|
+
#
|
115
|
+
# @example
|
116
|
+
# Hanami::Components.resolved('repository.users') { UserRepository.new }
|
117
|
+
#
|
118
|
+
# Hanami::Components['repository.users'] # => #<UserRepository relations=[...]>
|
119
|
+
# Hanami::Components['repository.other'] # => error
|
91
120
|
#
|
92
121
|
# @param name [String] the component name
|
93
122
|
#
|
@@ -106,6 +135,15 @@ module Hanami
|
|
106
135
|
#
|
107
136
|
# NOTE: this MUST NOT be used unless you know what you're doing.
|
108
137
|
#
|
138
|
+
# @example
|
139
|
+
# Hanami::Components.resolved('repository.users') { UserRepository.new }
|
140
|
+
# Hanami::Components['repository.users'] # => #<UserRepository relations=[...]>
|
141
|
+
#
|
142
|
+
# Hanami::Components.release
|
143
|
+
# Hanami::Components['repository.users']
|
144
|
+
# # => ArgumentError: Component not resolved: `repo'.
|
145
|
+
# # => Resolved components are: ...
|
146
|
+
#
|
109
147
|
# @since 1.0.0
|
110
148
|
# @api private
|
111
149
|
def self.release
|
@@ -28,7 +28,13 @@ module Hanami
|
|
28
28
|
end
|
29
29
|
|
30
30
|
resolve do |configuration|
|
31
|
-
|
31
|
+
if configuration.logger.is_a?(Array)
|
32
|
+
if configuration.logger.first.is_a?(::Logger)
|
33
|
+
configuration.logger.first
|
34
|
+
else
|
35
|
+
Hanami::Logger.new(Hanami.environment.project_name, *configuration.logger)
|
36
|
+
end
|
37
|
+
end
|
32
38
|
end
|
33
39
|
end
|
34
40
|
|
@@ -111,6 +117,35 @@ module Hanami
|
|
111
117
|
end
|
112
118
|
end
|
113
119
|
|
120
|
+
# Tries to evaluate hanami-model configuration, if available for the project
|
121
|
+
# and it doesn't activate migrations logger
|
122
|
+
#
|
123
|
+
# @since 1.1.0
|
124
|
+
# @api private
|
125
|
+
#
|
126
|
+
# @example With hanami-model
|
127
|
+
# Hanami::Components.resolve('model.configuration.no_logger')
|
128
|
+
# Hanami::Components['model.configuration.no_logger'].class # => Hanami::Model::Configuration
|
129
|
+
#
|
130
|
+
# @example Without hanami-model
|
131
|
+
# Hanami::Components.resolve('model.configuration.no_logger')
|
132
|
+
# Hanami::Components['model.configuration.no_logger'].class # => NilClass
|
133
|
+
register 'model.configuration.no_logger' do
|
134
|
+
requires 'model.bundled'
|
135
|
+
|
136
|
+
prepare do
|
137
|
+
require 'stringio'
|
138
|
+
end
|
139
|
+
|
140
|
+
resolve do |configuration|
|
141
|
+
if Components['model.bundled']
|
142
|
+
Hanami::Model.configure(&configuration.model)
|
143
|
+
Hanami::Model.config.migrations_logger(StringIO.new)
|
144
|
+
Hanami::Model.configuration
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
114
149
|
# Tries to load SQL support for hanami, if available for the project
|
115
150
|
#
|
116
151
|
# @since 0.9.0
|
data/lib/hanami/environment.rb
CHANGED
@@ -110,19 +110,7 @@ module Hanami
|
|
110
110
|
|
111
111
|
# @since 0.4.0
|
112
112
|
# @api private
|
113
|
-
|
114
|
-
|
115
|
-
# @since 0.4.0
|
116
|
-
# @api private
|
117
|
-
CONTAINER_PATH = 'apps'.freeze
|
118
|
-
|
119
|
-
# @since 0.4.0
|
120
|
-
# @api private
|
121
|
-
APPLICATION = 'app'.freeze
|
122
|
-
|
123
|
-
# @since 0.4.0
|
124
|
-
# @api private
|
125
|
-
APPLICATION_PATH = 'app'.freeze
|
113
|
+
APPS_PATH = 'apps'.freeze
|
126
114
|
|
127
115
|
# @since 0.4.0
|
128
116
|
# @api private
|
@@ -140,12 +128,17 @@ module Hanami
|
|
140
128
|
# When initialized, it sets standard `ENV` variables for Rack and Hanami,
|
141
129
|
# such as `RACK_ENV` and `HANAMI_ENV`.
|
142
130
|
#
|
143
|
-
# It
|
131
|
+
# It evaluates configuration ONLY from `.env.<environment>` file
|
144
132
|
# located under the config directory. All the settings in those files will
|
145
133
|
# be exported as `ENV` variables.
|
146
134
|
#
|
147
|
-
#
|
148
|
-
#
|
135
|
+
# Master .env file is ignored to suggest clear separation of environment
|
136
|
+
# configurations and discourage putting sensitive information into source
|
137
|
+
# control.
|
138
|
+
#
|
139
|
+
# The format of those `.env.<environment>` files follows UNIX and UNIX-like
|
140
|
+
# operating system environment variable declaration format and compatible
|
141
|
+
# with `dotenv` and `foreman` gems.
|
149
142
|
#
|
150
143
|
# @param options [Hash] override default options for various environment
|
151
144
|
# attributes
|
@@ -164,10 +157,10 @@ module Hanami
|
|
164
157
|
# # % tree .
|
165
158
|
# # .
|
166
159
|
# # # ...
|
167
|
-
# # ├── .env
|
160
|
+
# # ├── .env.test
|
168
161
|
# # └── .env.development
|
169
162
|
#
|
170
|
-
# # % cat .env
|
163
|
+
# # % cat .env.test
|
171
164
|
# # FOO="bar"
|
172
165
|
# # XYZ="yes"
|
173
166
|
#
|
@@ -188,14 +181,11 @@ module Hanami
|
|
188
181
|
#
|
189
182
|
# # User defined ENV vars
|
190
183
|
# ENV['FOO'] # => "ok"
|
191
|
-
# ENV['XYZ'] # =>
|
192
|
-
#
|
193
|
-
# # Hanami::Environment evaluates `.env`
|
194
|
-
# #
|
195
|
-
# #
|
196
|
-
# # the one defined in the parent (eg `FOO` is overwritten). All the
|
197
|
-
# # other settings (eg `XYZ`) will be left untouched.
|
198
|
-
# # Variables declared on `.env` and `.env.development` will not override
|
184
|
+
# ENV['XYZ'] # => nil
|
185
|
+
#
|
186
|
+
# # Hanami::Environment evaluates `.env.development` because the current
|
187
|
+
# # environment is "development".
|
188
|
+
# # Variables declared on `.env.development` will not override
|
199
189
|
# # any variable declared on the shell when calling a `hanami` command.
|
200
190
|
# # Eg. In `FOO="not ok" bundle exec hanami c` `FOO` will not be overwritten
|
201
191
|
# # to `"ok"`.
|
@@ -203,7 +193,7 @@ module Hanami
|
|
203
193
|
opts = options.to_h.dup
|
204
194
|
@env = Hanami::Env.new(env: opts.delete(:env) || ENV)
|
205
195
|
@options = Hanami::Hanamirc.new(root).options
|
206
|
-
@options.merge! Utils::Hash.
|
196
|
+
@options.merge! Utils::Hash.symbolize(opts.clone)
|
207
197
|
LOCK.synchronize { set_env_vars! }
|
208
198
|
end
|
209
199
|
|
@@ -389,7 +379,7 @@ module Hanami
|
|
389
379
|
#
|
390
380
|
# @see Hanami::Environment::DEFAULT_ENVIRONMENT_CONFIG
|
391
381
|
def env_config
|
392
|
-
root.join(
|
382
|
+
root.join("config", "environment.rb")
|
393
383
|
end
|
394
384
|
|
395
385
|
alias project_environment_configuration env_config
|
@@ -430,21 +420,6 @@ module Hanami
|
|
430
420
|
@options.fetch(:code_reloading) { !!CODE_RELOADING[environment] }
|
431
421
|
end
|
432
422
|
|
433
|
-
# @since 0.4.0
|
434
|
-
# @api private
|
435
|
-
def architecture
|
436
|
-
@options.fetch(:architecture) do
|
437
|
-
puts "Cannot recognize Hanami architecture, please check `.hanamirc'"
|
438
|
-
exit 1
|
439
|
-
end
|
440
|
-
end
|
441
|
-
|
442
|
-
# @since 0.4.0
|
443
|
-
# @api private
|
444
|
-
def container?
|
445
|
-
architecture == CONTAINER
|
446
|
-
end
|
447
|
-
|
448
423
|
# @since 0.6.0
|
449
424
|
# @api private
|
450
425
|
def serve_static_assets?
|
@@ -468,17 +443,12 @@ module Hanami
|
|
468
443
|
# @since 0.4.0
|
469
444
|
# @api private
|
470
445
|
def apps_path
|
471
|
-
@options.fetch(:path)
|
472
|
-
case architecture
|
473
|
-
when CONTAINER then CONTAINER_PATH
|
474
|
-
when APPLICATION then APPLICATION_PATH
|
475
|
-
end
|
476
|
-
}
|
446
|
+
@options.fetch(:path, APPS_PATH)
|
477
447
|
end
|
478
448
|
|
479
449
|
# Serialize the most relevant settings into a Hash
|
480
450
|
#
|
481
|
-
# @return [
|
451
|
+
# @return [::Hash]
|
482
452
|
#
|
483
453
|
# @since 0.1.0
|
484
454
|
# @api private
|
data/lib/hanami/hanamirc.rb
CHANGED
@@ -15,28 +15,6 @@ module Hanami
|
|
15
15
|
# @see Hanami::Hanamirc#path_file
|
16
16
|
FILE_NAME = '.hanamirc'.freeze
|
17
17
|
|
18
|
-
# Architecture default value
|
19
|
-
#
|
20
|
-
# @since 0.3.0
|
21
|
-
# @api private
|
22
|
-
#
|
23
|
-
# @see Hanami::Hanamirc#options
|
24
|
-
DEFAULT_ARCHITECTURE = 'container'.freeze
|
25
|
-
|
26
|
-
# Application architecture value
|
27
|
-
#
|
28
|
-
# @since 0.6.0
|
29
|
-
# @api private
|
30
|
-
APP_ARCHITECTURE = 'app'.freeze
|
31
|
-
|
32
|
-
# Architecture key for writing the hanamirc file
|
33
|
-
#
|
34
|
-
# @since 0.3.0
|
35
|
-
# @api private
|
36
|
-
#
|
37
|
-
# @see Hanami::Hanamirc#default_options
|
38
|
-
ARCHITECTURE_KEY = 'architecture'.freeze
|
39
|
-
|
40
18
|
# Project name for writing the hanamirc file
|
41
19
|
#
|
42
20
|
# @since 0.8.0
|
@@ -94,16 +72,16 @@ module Hanami
|
|
94
72
|
|
95
73
|
# Read hanamirc file (if exists) and parse it's values or return default.
|
96
74
|
#
|
97
|
-
# @return [
|
75
|
+
# @return [::Hash] parsed values
|
98
76
|
#
|
99
77
|
# @example Default values if file doesn't exist
|
100
78
|
# Hanami::Hanamirc.new(Pathname.new(Dir.pwd)).options
|
101
|
-
# # => {
|
79
|
+
# # => { test: 'minitest', template: 'erb' }
|
102
80
|
#
|
103
81
|
# @example Custom values if file doesn't exist
|
104
|
-
# options = {
|
82
|
+
# options = { test: 'rspec', template: 'slim' }
|
105
83
|
# Hanami::Hanamirc.new(Pathname.new(Dir.pwd), options).options
|
106
|
-
# # => {
|
84
|
+
# # => { test: 'rspec', template: 'slim' }
|
107
85
|
def options
|
108
86
|
@options ||= symbolize(default_options.merge(file_options))
|
109
87
|
end
|
@@ -115,12 +93,11 @@ module Hanami
|
|
115
93
|
#
|
116
94
|
# @see Hanami::Hanamirc#options
|
117
95
|
def default_options
|
118
|
-
@default_options ||= Utils::Hash.
|
119
|
-
ARCHITECTURE_KEY => DEFAULT_ARCHITECTURE,
|
96
|
+
@default_options ||= Utils::Hash.symbolize({
|
120
97
|
PROJECT_NAME => project_name,
|
121
98
|
TEST_KEY => DEFAULT_TEST_SUITE,
|
122
99
|
TEMPLATE_KEY => DEFAULT_TEMPLATE
|
123
|
-
}).
|
100
|
+
}).freeze
|
124
101
|
end
|
125
102
|
|
126
103
|
# Check if hanamirc file exists
|
@@ -137,7 +114,7 @@ module Hanami
|
|
137
114
|
|
138
115
|
# @api private
|
139
116
|
def symbolize(hash)
|
140
|
-
Utils::Hash.
|
117
|
+
Utils::Hash.symbolize(hash)
|
141
118
|
end
|
142
119
|
|
143
120
|
# @api private
|