hanami 1.0.0.beta2 → 1.0.0.beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/FEATURES.md +2 -0
- data/LICENSE.md +1 -1
- data/README.md +1 -1
- data/hanami.gemspec +8 -8
- data/lib/hanami.rb +0 -5
- data/lib/hanami/action/csrf_protection.rb +35 -0
- data/lib/hanami/app.rb +1 -1
- data/lib/hanami/application.rb +2 -0
- data/lib/hanami/application_configuration.rb +1 -12
- data/lib/hanami/application_name.rb +8 -2
- data/lib/hanami/application_namespace.rb +2 -0
- data/lib/hanami/assets/asset.rb +1 -0
- data/lib/hanami/cli.rb +7 -0
- data/lib/hanami/cli_base.rb +3 -0
- data/lib/hanami/cli_sub_commands/assets.rb +2 -0
- data/lib/hanami/cli_sub_commands/db.rb +15 -2
- data/lib/hanami/cli_sub_commands/destroy.rb +6 -0
- data/lib/hanami/cli_sub_commands/generate.rb +7 -2
- data/lib/hanami/commands/assets/precompile.rb +4 -0
- data/lib/hanami/commands/command.rb +13 -0
- data/lib/hanami/commands/console.rb +6 -0
- data/lib/hanami/commands/db/apply.rb +3 -0
- data/lib/hanami/commands/db/console.rb +7 -0
- data/lib/hanami/commands/db/create.rb +3 -0
- data/lib/hanami/commands/db/drop.rb +3 -0
- data/lib/hanami/commands/db/migrate.rb +5 -0
- data/lib/hanami/commands/db/prepare.rb +3 -0
- data/lib/hanami/commands/db/version.rb +3 -0
- data/lib/hanami/commands/generate/abstract.rb +13 -1
- data/lib/hanami/commands/generate/action.rb +21 -0
- data/lib/hanami/commands/generate/app.rb +21 -0
- data/lib/hanami/commands/generate/mailer.rb +16 -3
- data/lib/hanami/commands/generate/migration.rb +13 -2
- data/lib/hanami/commands/generate/model.rb +14 -1
- data/lib/hanami/commands/generate/secret_token.rb +6 -0
- data/lib/hanami/commands/new/abstract.rb +39 -4
- data/lib/hanami/commands/new/app.rb +15 -0
- data/lib/hanami/commands/new/container.rb +14 -0
- data/lib/hanami/commands/routes.rb +2 -0
- data/lib/hanami/commands/server.rb +4 -0
- data/lib/hanami/components/app/assets.rb +4 -0
- data/lib/hanami/components/app/controller.rb +4 -0
- data/lib/hanami/components/app/routes.rb +6 -0
- data/lib/hanami/components/app/view.rb +4 -0
- data/lib/hanami/components/component.rb +2 -0
- data/lib/hanami/components/components.rb +12 -5
- data/lib/hanami/components/routes_inspector.rb +2 -0
- data/lib/hanami/config/cookies.rb +1 -0
- data/lib/hanami/config/framework_configuration.rb +1 -0
- data/lib/hanami/config/load_paths.rb +4 -0
- data/lib/hanami/config/mapper.rb +11 -0
- data/lib/hanami/config/routes.rb +4 -0
- data/lib/hanami/config/security.rb +2 -0
- data/lib/hanami/config/sessions.rb +6 -0
- data/lib/hanami/configuration.rb +102 -0
- data/lib/hanami/environment.rb +13 -0
- data/lib/hanami/environment_application_configurations.rb +7 -0
- data/lib/hanami/generators/app/application.rb.tt +31 -23
- data/lib/hanami/generators/app/favicon.ico +0 -0
- data/lib/hanami/generators/database_config.rb +19 -1
- data/lib/hanami/generators/generatable.rb +13 -0
- data/lib/hanami/generators/generator.rb +8 -0
- data/lib/hanami/generators/template_engine.rb +9 -0
- data/lib/hanami/generators/test_framework.rb +12 -0
- data/lib/hanami/hanamirc.rb +2 -0
- data/lib/hanami/mailer/glue.rb +1 -0
- data/lib/hanami/middleware.rb +24 -0
- data/lib/hanami/rendering_policy.rb +15 -0
- data/lib/hanami/routes.rb +14 -12
- data/lib/hanami/routing/default.rb +7 -0
- data/lib/hanami/server.rb +6 -0
- data/lib/hanami/version.rb +1 -1
- data/lib/hanami/views/default.rb +3 -0
- data/lib/hanami/views/default_template_finder.rb +2 -0
- data/lib/hanami/views/null_view.rb +2 -0
- data/lib/hanami/welcome.rb +7 -0
- metadata +18 -19
- data/lib/hanami/root.rb +0 -7
@@ -1,14 +1,19 @@
|
|
1
1
|
require 'hanami/commands/new/abstract'
|
2
2
|
|
3
3
|
module Hanami
|
4
|
+
# @api private
|
4
5
|
module Commands
|
6
|
+
# @api private
|
5
7
|
class New
|
8
|
+
# @api private
|
6
9
|
class App < Abstract
|
7
10
|
|
11
|
+
# @api private
|
8
12
|
def initialize(options, name)
|
9
13
|
super(options, name)
|
10
14
|
end
|
11
15
|
|
16
|
+
# @api private
|
12
17
|
def map_templates
|
13
18
|
add_application_templates
|
14
19
|
add_empty_directories
|
@@ -17,6 +22,7 @@ module Hanami
|
|
17
22
|
add_git_templates
|
18
23
|
end
|
19
24
|
|
25
|
+
# @api private
|
20
26
|
def template_options
|
21
27
|
{
|
22
28
|
app_name: app_name,
|
@@ -33,12 +39,14 @@ module Hanami
|
|
33
39
|
}
|
34
40
|
end
|
35
41
|
|
42
|
+
# @api private
|
36
43
|
def post_process_templates
|
37
44
|
init_git
|
38
45
|
end
|
39
46
|
|
40
47
|
private
|
41
48
|
|
49
|
+
# @api private
|
42
50
|
def add_application_templates
|
43
51
|
add_mapping('hanamirc.tt', '.hanamirc')
|
44
52
|
add_mapping('.env.development.tt', '.env.development')
|
@@ -54,6 +62,7 @@ module Hanami
|
|
54
62
|
add_mapping('favicon.ico', 'app/assets/favicon.ico')
|
55
63
|
end
|
56
64
|
|
65
|
+
# @api private
|
57
66
|
def add_test_templates
|
58
67
|
if test_framework.rspec?
|
59
68
|
add_mapping('Rakefile.rspec.tt', 'Rakefile')
|
@@ -68,6 +77,7 @@ module Hanami
|
|
68
77
|
end
|
69
78
|
end
|
70
79
|
|
80
|
+
# @api private
|
71
81
|
def add_empty_directories
|
72
82
|
add_mapping('.gitkeep', 'config/initializers/.gitkeep')
|
73
83
|
add_mapping('.gitkeep', 'app/controllers/.gitkeep')
|
@@ -95,18 +105,23 @@ module Hanami
|
|
95
105
|
add_mapping('.gitkeep', 'db/.gitkeep')
|
96
106
|
end
|
97
107
|
end
|
108
|
+
|
109
|
+
# @api private
|
98
110
|
def template_source_path
|
99
111
|
Pathname.new(::File.dirname(__FILE__)).join('..', '..', 'generators', 'application', 'app').realpath
|
100
112
|
end
|
101
113
|
|
114
|
+
# @api private
|
102
115
|
def upcase_app_name
|
103
116
|
app_name.to_env_s
|
104
117
|
end
|
105
118
|
|
119
|
+
# @api private
|
106
120
|
def classified_app_name
|
107
121
|
Utils::String.new(app_name).classify.tr('::', '')
|
108
122
|
end
|
109
123
|
|
124
|
+
# @api private
|
110
125
|
alias app_name project_name
|
111
126
|
end
|
112
127
|
end
|
@@ -2,12 +2,17 @@ require 'hanami/commands/generate/app'
|
|
2
2
|
require 'hanami/commands/new/abstract'
|
3
3
|
|
4
4
|
module Hanami
|
5
|
+
# @api private
|
5
6
|
module Commands
|
7
|
+
# @api private
|
6
8
|
class New
|
9
|
+
# @api private
|
7
10
|
class Container < Abstract
|
8
11
|
|
12
|
+
# @api private
|
9
13
|
DEFAULT_APPLICATION_NAME = 'web'.freeze
|
10
14
|
|
15
|
+
# @api private
|
11
16
|
def map_templates
|
12
17
|
add_application_templates
|
13
18
|
add_empty_directories
|
@@ -16,6 +21,7 @@ module Hanami
|
|
16
21
|
add_git_templates
|
17
22
|
end
|
18
23
|
|
24
|
+
# @api private
|
19
25
|
def template_options
|
20
26
|
{
|
21
27
|
project_name: project_name,
|
@@ -30,6 +36,7 @@ module Hanami
|
|
30
36
|
}
|
31
37
|
end
|
32
38
|
|
39
|
+
# @api private
|
33
40
|
def post_process_templates
|
34
41
|
init_git
|
35
42
|
generate_app
|
@@ -37,6 +44,7 @@ module Hanami
|
|
37
44
|
|
38
45
|
private
|
39
46
|
|
47
|
+
# @api private
|
40
48
|
def add_application_templates
|
41
49
|
add_mapping('hanamirc.tt', '.hanamirc')
|
42
50
|
add_mapping('.env.development.tt', '.env.development')
|
@@ -48,6 +56,7 @@ module Hanami
|
|
48
56
|
add_mapping('lib/project.rb.tt', "lib/#{ project_name }.rb")
|
49
57
|
end
|
50
58
|
|
59
|
+
# @api private
|
51
60
|
def add_test_templates
|
52
61
|
if test_framework.rspec?
|
53
62
|
add_mapping('Rakefile.rspec.tt', 'Rakefile')
|
@@ -62,6 +71,7 @@ module Hanami
|
|
62
71
|
end
|
63
72
|
end
|
64
73
|
|
74
|
+
# @api private
|
65
75
|
def add_empty_directories
|
66
76
|
add_mapping('.gitkeep', 'public/.gitkeep')
|
67
77
|
add_mapping('.gitkeep', 'config/initializers/.gitkeep')
|
@@ -81,20 +91,24 @@ module Hanami
|
|
81
91
|
end
|
82
92
|
end
|
83
93
|
|
94
|
+
# @api private
|
84
95
|
def generate_app
|
85
96
|
Hanami::Commands::Generate::App.new(app_options, app_slice_name).start
|
86
97
|
end
|
87
98
|
|
99
|
+
# @api private
|
88
100
|
def app_options
|
89
101
|
{
|
90
102
|
application_base_url: application_base_url
|
91
103
|
}
|
92
104
|
end
|
93
105
|
|
106
|
+
# @api private
|
94
107
|
def app_slice_name
|
95
108
|
options.fetch(:application_name, DEFAULT_APPLICATION_NAME)
|
96
109
|
end
|
97
110
|
|
111
|
+
# @api private
|
98
112
|
def template_source_path
|
99
113
|
Pathname.new(::File.dirname(__FILE__)).join('..', '..', 'generators', 'application', 'container').realpath
|
100
114
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'hanami/commands/command'
|
2
2
|
|
3
3
|
module Hanami
|
4
|
+
# @api private
|
4
5
|
module Commands
|
5
6
|
# Display application/container routes.
|
6
7
|
#
|
@@ -16,6 +17,7 @@ module Hanami
|
|
16
17
|
# Display to STDOUT application routes
|
17
18
|
#
|
18
19
|
# @since 0.1.0
|
20
|
+
# @api private
|
19
21
|
def start
|
20
22
|
puts requirements['routes.inspector'].inspect
|
21
23
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'hanami/commands/command'
|
2
2
|
|
3
3
|
module Hanami
|
4
|
+
# @api private
|
4
5
|
module Commands
|
5
6
|
# Server command (`hanami server`)
|
6
7
|
#
|
@@ -9,6 +10,7 @@ module Hanami
|
|
9
10
|
class Server < Command
|
10
11
|
requires 'code_reloading'
|
11
12
|
|
13
|
+
# @api private
|
12
14
|
def initialize(options)
|
13
15
|
super(options)
|
14
16
|
|
@@ -16,12 +18,14 @@ module Hanami
|
|
16
18
|
@server = Hanami::Server.new
|
17
19
|
end
|
18
20
|
|
21
|
+
# @api private
|
19
22
|
def start
|
20
23
|
server.start
|
21
24
|
end
|
22
25
|
|
23
26
|
protected
|
24
27
|
|
28
|
+
# @api private
|
25
29
|
attr_reader :server
|
26
30
|
end
|
27
31
|
end
|
@@ -2,7 +2,11 @@ require 'hanami/action/session'
|
|
2
2
|
require 'hanami/action/routing_helpers'
|
3
3
|
|
4
4
|
module Hanami
|
5
|
+
# @since 0.9.0
|
6
|
+
# @api private
|
5
7
|
module Components
|
8
|
+
# @since 0.9.0
|
9
|
+
# @api private
|
6
10
|
module App
|
7
11
|
# hanami-controller configuration for a sigle Hanami application in the project.
|
8
12
|
#
|
@@ -2,7 +2,11 @@ require 'hanami/routes'
|
|
2
2
|
require 'hanami/routing/default'
|
3
3
|
|
4
4
|
module Hanami
|
5
|
+
# @since 0.9.0
|
6
|
+
# @api private
|
5
7
|
module Components
|
8
|
+
# @since 0.9.0
|
9
|
+
# @api private
|
6
10
|
module App
|
7
11
|
# hanami-router configuration for a sigle Hanami application in the project.
|
8
12
|
#
|
@@ -26,6 +30,8 @@ module Hanami
|
|
26
30
|
Components.resolved("#{app.app_name}.routes", routes)
|
27
31
|
end
|
28
32
|
|
33
|
+
# @since 0.9.0
|
34
|
+
# @api private
|
29
35
|
def self.application_routes(app) # rubocop:disable Metrics/MethodLength
|
30
36
|
config = app.configuration
|
31
37
|
namespace = app.namespace
|
@@ -13,7 +13,7 @@ module Hanami
|
|
13
13
|
# @since 0.9.0
|
14
14
|
# @api private
|
15
15
|
register 'all' do
|
16
|
-
requires 'logger', '
|
16
|
+
requires 'logger', 'code', 'mailer', 'model', 'apps', 'finalizers'
|
17
17
|
|
18
18
|
resolve { true }
|
19
19
|
end
|
@@ -50,11 +50,12 @@ module Hanami
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
+
# @api private
|
53
54
|
register 'code' do
|
54
55
|
run do
|
55
56
|
directory = Hanami.root.join('lib')
|
56
57
|
|
57
|
-
if
|
58
|
+
if Components['environment'].code_reloading?
|
58
59
|
Utils.reload!(directory)
|
59
60
|
else
|
60
61
|
Utils.require!(directory)
|
@@ -77,6 +78,10 @@ module Hanami
|
|
77
78
|
register 'model' do
|
78
79
|
requires 'logger', 'model.configuration', 'model.sql'
|
79
80
|
|
81
|
+
prepare do
|
82
|
+
Hanami::Model.disconnect if Components['model.configuration']
|
83
|
+
end
|
84
|
+
|
80
85
|
resolve do
|
81
86
|
if Components['model.configuration']
|
82
87
|
Hanami::Model.load!
|
@@ -177,9 +182,11 @@ module Hanami
|
|
177
182
|
end
|
178
183
|
|
179
184
|
resolve do |configuration|
|
180
|
-
|
181
|
-
|
182
|
-
|
185
|
+
unless configuration.mailer.nil?
|
186
|
+
Hanami::Mailer.configuration = Hanami::Mailer::Configuration.new if Hanami.code_reloading?
|
187
|
+
Hanami::Mailer.configure(&configuration.mailer)
|
188
|
+
Hanami::Mailer.configuration
|
189
|
+
end
|
183
190
|
end
|
184
191
|
end
|
185
192
|
|
@@ -1,17 +1,20 @@
|
|
1
1
|
require 'hanami/utils'
|
2
2
|
|
3
3
|
module Hanami
|
4
|
+
# @api private
|
4
5
|
module Config
|
5
6
|
# Define the load paths where the application should load
|
6
7
|
#
|
7
8
|
# @since 0.1.0
|
8
9
|
# @api private
|
9
10
|
class LoadPaths < Utils::LoadPaths
|
11
|
+
# @api private
|
10
12
|
def initialize(root)
|
11
13
|
super()
|
12
14
|
@root = root
|
13
15
|
end
|
14
16
|
|
17
|
+
# @api private
|
15
18
|
def load!
|
16
19
|
each do |path|
|
17
20
|
Utils.require!(path)
|
@@ -20,6 +23,7 @@ module Hanami
|
|
20
23
|
|
21
24
|
protected
|
22
25
|
|
26
|
+
# @api private
|
23
27
|
def realpath(path)
|
24
28
|
@root.join(path).realpath
|
25
29
|
end
|
data/lib/hanami/config/mapper.rb
CHANGED
@@ -1,19 +1,26 @@
|
|
1
1
|
require 'hanami/utils/kernel'
|
2
2
|
|
3
3
|
module Hanami
|
4
|
+
# @since 0.1.0
|
5
|
+
# @api private
|
4
6
|
module Config
|
5
7
|
# Block or file mapper
|
6
8
|
#
|
7
9
|
# @since 0.1.0
|
8
10
|
# @api private
|
9
11
|
class Mapper
|
12
|
+
# @api private
|
10
13
|
EXTNAME = '.rb'
|
11
14
|
|
15
|
+
# @since 0.1.0
|
16
|
+
# @api private
|
12
17
|
def initialize(root, path, &blk)
|
13
18
|
@path, @blk = path, blk
|
14
19
|
@path = root.join(path) if root && path
|
15
20
|
end
|
16
21
|
|
22
|
+
# @since 0.1.0
|
23
|
+
# @api private
|
17
24
|
def to_proc
|
18
25
|
return @blk if @blk
|
19
26
|
|
@@ -22,12 +29,16 @@ module Hanami
|
|
22
29
|
end
|
23
30
|
|
24
31
|
private
|
32
|
+
# @since 0.1.0
|
33
|
+
# @api private
|
25
34
|
def realpath
|
26
35
|
Utils::Kernel.Pathname("#{ @path }#{ EXTNAME }").realpath
|
27
36
|
rescue Errno::ENOENT
|
28
37
|
raise ArgumentError, error_message
|
29
38
|
end
|
30
39
|
|
40
|
+
# @since 0.1.0
|
41
|
+
# @api private
|
31
42
|
def error_message
|
32
43
|
'You must specify a block or a file.'
|
33
44
|
end
|
data/lib/hanami/config/routes.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'hanami/config/mapper'
|
2
2
|
|
3
3
|
module Hanami
|
4
|
+
# @since 0.1.0
|
5
|
+
# @api private
|
4
6
|
module Config
|
5
7
|
# Defines a route set
|
6
8
|
#
|
@@ -8,6 +10,8 @@ module Hanami
|
|
8
10
|
# @api private
|
9
11
|
class Routes < Mapper
|
10
12
|
private
|
13
|
+
# @since 0.1.0
|
14
|
+
# @api private
|
11
15
|
def error_message
|
12
16
|
'You must specify a block or a file for routes definitions.'
|
13
17
|
end
|