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
@@ -3,6 +3,7 @@ require 'hanami/commands/generate/action'
|
|
3
3
|
|
4
4
|
module Hanami
|
5
5
|
class CliSubCommands
|
6
|
+
# @api private
|
6
7
|
class Destroy < Thor
|
7
8
|
extend CliBase
|
8
9
|
include Thor::Actions
|
@@ -25,6 +26,7 @@ module Hanami
|
|
25
26
|
method_option :url, desc: 'Relative URL for action, will be used for the route', default: nil
|
26
27
|
method_option :template, desc: 'Extension used when the template was generated. Default is defined through your .hanamirc file.'
|
27
28
|
|
29
|
+
# @api private
|
28
30
|
def actions(application_name = nil, controller_and_action_name)
|
29
31
|
if Hanami::Environment.new(options).container? && application_name.nil?
|
30
32
|
msg = "ERROR: \"hanami destroy action\" was called with arguments [\"#{controller_and_action_name}\"]\n" \
|
@@ -46,6 +48,7 @@ module Hanami
|
|
46
48
|
> $ hanami destroy migration create_books
|
47
49
|
EOS
|
48
50
|
|
51
|
+
# @api private
|
49
52
|
def migration(name)
|
50
53
|
if options[:help]
|
51
54
|
invoke :help, ['migration']
|
@@ -63,6 +66,7 @@ module Hanami
|
|
63
66
|
> $ hanami destroy model car
|
64
67
|
EOS
|
65
68
|
|
69
|
+
# @api private
|
66
70
|
def model(name)
|
67
71
|
if options[:help]
|
68
72
|
invoke :help, ['model']
|
@@ -78,6 +82,7 @@ module Hanami
|
|
78
82
|
|
79
83
|
> $ hanami destroy application api
|
80
84
|
EOS
|
85
|
+
# @api private
|
81
86
|
def application(name)
|
82
87
|
if options[:help]
|
83
88
|
invoke :help, ['app']
|
@@ -94,6 +99,7 @@ module Hanami
|
|
94
99
|
> $ hanami destroy mailer forgot_password
|
95
100
|
EOS
|
96
101
|
|
102
|
+
# @api private
|
97
103
|
def mailer(name)
|
98
104
|
if options[:help]
|
99
105
|
invoke :help, ['mailer']
|
@@ -18,8 +18,6 @@ module Hanami
|
|
18
18
|
|
19
19
|
namespace :generate
|
20
20
|
|
21
|
-
# @since 0.6.0
|
22
|
-
# @api private
|
23
21
|
desc 'action APPLICATION_NAME CONTROLLER_NAME#ACTION_NAME', 'Generate a hanami action'
|
24
22
|
long_desc <<-EOS
|
25
23
|
`hanami generate action` generates an an action, view and template along with specs and a route.
|
@@ -37,6 +35,8 @@ module Hanami
|
|
37
35
|
method_option :test, desc: 'Defines the testing Framework to be used. Default is defined through your .hanamirc file.'
|
38
36
|
method_option :skip_view, desc: 'Skip the generation of the view. Also skips template generation.', default: false, type: :boolean
|
39
37
|
method_option :template, desc: 'Extension to be used for the generated template. Default is defined through your .hanamirc file.'
|
38
|
+
# @since 0.6.0
|
39
|
+
# @api private
|
40
40
|
def actions(application_name = nil, controller_and_action_name)
|
41
41
|
if Hanami::Environment.new(options).container? && application_name.nil?
|
42
42
|
msg = "ERROR: \"hanami generate action\" was called with arguments [\"#{controller_and_action_name}\"]\n" \
|
@@ -57,6 +57,7 @@ module Hanami
|
|
57
57
|
|
58
58
|
> $ hanami generate migration do_something
|
59
59
|
EOS
|
60
|
+
# @api private
|
60
61
|
def migration(name)
|
61
62
|
if options[:help]
|
62
63
|
invoke :help, ['migration']
|
@@ -78,6 +79,7 @@ module Hanami
|
|
78
79
|
EOS
|
79
80
|
method_option :test, desc: 'Defines the testing Framework to be used. Default is defined through your .hanamirc file.'
|
80
81
|
method_option :skip_migration, desc: 'Skips the generation of a migration to create the model\'s table', default: false, type: :boolean
|
82
|
+
# @api private
|
81
83
|
def model(name)
|
82
84
|
if options[:help]
|
83
85
|
invoke :help, ['model']
|
@@ -97,6 +99,7 @@ module Hanami
|
|
97
99
|
method_option :to, desc: 'Sender email', default: Hanami::Commands::Generate::Mailer::DEFAULT_TO
|
98
100
|
method_option :from, desc: 'Sendee email', default: Hanami::Commands::Generate::Mailer::DEFAULT_FROM
|
99
101
|
method_option :subject, desc: 'Email subject', default: Hanami::Commands::Generate::Mailer::DEFAULT_SUBJECT
|
102
|
+
# @api private
|
100
103
|
def mailer(name)
|
101
104
|
if options[:help]
|
102
105
|
invoke :help, ['mailer']
|
@@ -116,6 +119,7 @@ module Hanami
|
|
116
119
|
> $ hanami generate app reporting --application_base_url=/reports
|
117
120
|
EOS
|
118
121
|
method_option :application_base_url, desc: 'Base URL for the new app. If missing, then it is inferred from APPLICATION_NAME'
|
122
|
+
# @api private
|
119
123
|
def app(application_name)
|
120
124
|
if options[:help]
|
121
125
|
invoke :help, ['app']
|
@@ -132,6 +136,7 @@ module Hanami
|
|
132
136
|
> $ hanami generate secret web
|
133
137
|
|
134
138
|
EOS
|
139
|
+
# @api private
|
135
140
|
def secret(application_name = nil)
|
136
141
|
if options[:help]
|
137
142
|
invoke :help, ['secret']
|
@@ -3,16 +3,20 @@ require 'hanami/commands/command'
|
|
3
3
|
|
4
4
|
module Hanami
|
5
5
|
module Commands
|
6
|
+
# @api private
|
6
7
|
class Assets
|
8
|
+
# @api private
|
7
9
|
class Precompile < Command
|
8
10
|
requires 'apps.assets.configurations'
|
9
11
|
|
12
|
+
# @api private
|
10
13
|
def start
|
11
14
|
Hanami::Assets.precompile(configurations)
|
12
15
|
end
|
13
16
|
|
14
17
|
private
|
15
18
|
|
19
|
+
# @api private
|
16
20
|
def configurations
|
17
21
|
requirements['apps.assets.configurations']
|
18
22
|
end
|
@@ -9,6 +9,8 @@ module Hanami
|
|
9
9
|
#
|
10
10
|
# @since 0.9.0
|
11
11
|
class Command
|
12
|
+
# @since 0.9.0
|
13
|
+
# @api private
|
12
14
|
def self.inherited(component)
|
13
15
|
super
|
14
16
|
|
@@ -21,15 +23,22 @@ module Hanami
|
|
21
23
|
# Class level interface
|
22
24
|
#
|
23
25
|
# @since 0.9.0
|
26
|
+
# @api private
|
24
27
|
module ClassMethods
|
28
|
+
# @since 0.9.0
|
29
|
+
# @api private
|
25
30
|
def register_as(name)
|
26
31
|
Hanami::Components.register(name, self)
|
27
32
|
end
|
28
33
|
|
34
|
+
# @since 0.9.0
|
35
|
+
# @api private
|
29
36
|
def requires(*names)
|
30
37
|
requirements.concat(names)
|
31
38
|
end
|
32
39
|
|
40
|
+
# @since 0.9.0
|
41
|
+
# @api private
|
33
42
|
def requirements
|
34
43
|
@_requirements
|
35
44
|
end
|
@@ -38,6 +47,7 @@ module Hanami
|
|
38
47
|
# @param options [Hash] Environment's options
|
39
48
|
#
|
40
49
|
# @since 0.9.0
|
50
|
+
# @api private
|
41
51
|
def initialize(options)
|
42
52
|
@environment = Hanami::Environment.new(options)
|
43
53
|
@environment.require_project_environment
|
@@ -50,12 +60,15 @@ module Hanami
|
|
50
60
|
private
|
51
61
|
|
52
62
|
# @since 0.9.0
|
63
|
+
# @api private
|
53
64
|
attr_reader :environment
|
54
65
|
|
55
66
|
# @since 0.9.0
|
67
|
+
# @api private
|
56
68
|
attr_reader :configuration
|
57
69
|
|
58
70
|
# @since 0.9.0
|
71
|
+
# @api private
|
59
72
|
def requirements
|
60
73
|
Hanami::Components
|
61
74
|
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
|
# REPL that supports different engines.
|
6
7
|
#
|
@@ -34,14 +35,18 @@ module Hanami
|
|
34
35
|
'irb' => 'IRB'
|
35
36
|
}.freeze
|
36
37
|
|
38
|
+
# @api private
|
37
39
|
DEFAULT_ENGINE = ['irb'].freeze
|
38
40
|
|
39
41
|
# @since 0.1.0
|
42
|
+
# @api private
|
40
43
|
attr_reader :options
|
41
44
|
|
42
45
|
# @param options [Hash] Environment's options
|
43
46
|
#
|
44
47
|
# @since 0.1.0
|
48
|
+
# @api private
|
49
|
+
#
|
45
50
|
# @see Hanami::Environment#initialize
|
46
51
|
def initialize(options)
|
47
52
|
super(options)
|
@@ -50,6 +55,7 @@ module Hanami
|
|
50
55
|
end
|
51
56
|
|
52
57
|
# @since 0.1.0
|
58
|
+
# @api private
|
53
59
|
def start
|
54
60
|
prepare
|
55
61
|
engine.start
|
@@ -2,10 +2,13 @@ require 'hanami/commands/command'
|
|
2
2
|
|
3
3
|
module Hanami
|
4
4
|
module Commands
|
5
|
+
# @api private
|
5
6
|
class DB
|
7
|
+
# @api private
|
6
8
|
class Apply < Command
|
7
9
|
requires 'model.sql'
|
8
10
|
|
11
|
+
# @api private
|
9
12
|
def start
|
10
13
|
require 'hanami/model/migrator'
|
11
14
|
Hanami::Model::Migrator.apply
|
@@ -3,27 +3,34 @@ require 'hanami/commands/command'
|
|
3
3
|
|
4
4
|
module Hanami
|
5
5
|
module Commands
|
6
|
+
# @api private
|
6
7
|
class DB
|
8
|
+
# @api private
|
7
9
|
class Console < Command
|
8
10
|
requires 'model.sql'
|
9
11
|
|
12
|
+
# @api private
|
10
13
|
def initialize(options, name)
|
11
14
|
super(options)
|
12
15
|
@name = name
|
13
16
|
end
|
14
17
|
|
18
|
+
# @api private
|
15
19
|
def start
|
16
20
|
exec console.connection_string
|
17
21
|
end
|
18
22
|
|
19
23
|
private
|
20
24
|
|
25
|
+
# @api private
|
21
26
|
attr_reader :name
|
22
27
|
|
28
|
+
# @api private
|
23
29
|
def configuration
|
24
30
|
Hanami::Components['model.configuration']
|
25
31
|
end
|
26
32
|
|
33
|
+
# @api private
|
27
34
|
def console
|
28
35
|
require 'hanami/model/sql/console'
|
29
36
|
Hanami::Model::Sql::Console.new(configuration.url)
|
@@ -2,10 +2,13 @@ require 'hanami/commands/command'
|
|
2
2
|
|
3
3
|
module Hanami
|
4
4
|
module Commands
|
5
|
+
# @api private
|
5
6
|
class DB
|
7
|
+
# @api private
|
6
8
|
class Create < Command
|
7
9
|
requires 'model.configuration'
|
8
10
|
|
11
|
+
# @api private
|
9
12
|
def start
|
10
13
|
require 'hanami/model/migrator'
|
11
14
|
Hanami::Model::Migrator.create
|
@@ -2,10 +2,13 @@ require 'hanami/commands/command'
|
|
2
2
|
|
3
3
|
module Hanami
|
4
4
|
module Commands
|
5
|
+
# @api private
|
5
6
|
class DB
|
7
|
+
# @api private
|
6
8
|
class Drop < Command
|
7
9
|
requires 'model.configuration'
|
8
10
|
|
11
|
+
# @api private
|
9
12
|
def start
|
10
13
|
require 'hanami/model/migrator'
|
11
14
|
Hanami::Model::Migrator.drop
|
@@ -2,15 +2,19 @@ require 'hanami/commands/command'
|
|
2
2
|
|
3
3
|
module Hanami
|
4
4
|
module Commands
|
5
|
+
# @api private
|
5
6
|
class DB
|
7
|
+
# @api private
|
6
8
|
class Migrate < Command
|
7
9
|
requires 'model.sql'
|
8
10
|
|
11
|
+
# @api private
|
9
12
|
def initialize(options, version)
|
10
13
|
super(options)
|
11
14
|
@version = version
|
12
15
|
end
|
13
16
|
|
17
|
+
# @api private
|
14
18
|
def start
|
15
19
|
require 'hanami/model/migrator'
|
16
20
|
Hanami::Model::Migrator.migrate(version: version)
|
@@ -18,6 +22,7 @@ module Hanami
|
|
18
22
|
|
19
23
|
private
|
20
24
|
|
25
|
+
# @api private
|
21
26
|
attr_reader :version
|
22
27
|
end
|
23
28
|
end
|
@@ -2,10 +2,13 @@ require 'hanami/commands/command'
|
|
2
2
|
|
3
3
|
module Hanami
|
4
4
|
module Commands
|
5
|
+
# @api private
|
5
6
|
class DB
|
7
|
+
# @api private
|
6
8
|
class Prepare < Command
|
7
9
|
requires 'model.sql'
|
8
10
|
|
11
|
+
# @api private
|
9
12
|
def start
|
10
13
|
require 'hanami/model/migrator'
|
11
14
|
Hanami::Model::Migrator.prepare
|
@@ -2,10 +2,13 @@ require 'hanami/commands/command'
|
|
2
2
|
|
3
3
|
module Hanami
|
4
4
|
module Commands
|
5
|
+
# @api private
|
5
6
|
class DB
|
7
|
+
# @api private
|
6
8
|
class Version < Command
|
7
9
|
requires 'model.configuration'
|
8
10
|
|
11
|
+
# @api private
|
9
12
|
def start
|
10
13
|
require 'hanami/model/migrator'
|
11
14
|
puts Hanami::Model::Migrator.version
|
@@ -8,13 +8,19 @@ require 'hanami/utils/string'
|
|
8
8
|
|
9
9
|
module Hanami
|
10
10
|
module Commands
|
11
|
+
# @api private
|
11
12
|
class Generate
|
13
|
+
# @api private
|
12
14
|
class Abstract < Commands::Command
|
13
15
|
|
14
16
|
include Hanami::Generators::Generatable
|
15
17
|
|
16
|
-
|
18
|
+
# @api private
|
19
|
+
attr_reader :options
|
20
|
+
# @api private
|
21
|
+
attr_reader :target_path
|
17
22
|
|
23
|
+
# @api private
|
18
24
|
def initialize(options)
|
19
25
|
super
|
20
26
|
|
@@ -24,6 +30,7 @@ module Hanami
|
|
24
30
|
@target_path = Hanami.root
|
25
31
|
end
|
26
32
|
|
33
|
+
# @api private
|
27
34
|
def template_source_path
|
28
35
|
generator = self.class.name.split('::').last.downcase
|
29
36
|
Pathname.new(::File.dirname(__FILE__) + "/../../generators/#{generator}/").realpath
|
@@ -31,22 +38,27 @@ module Hanami
|
|
31
38
|
|
32
39
|
private
|
33
40
|
|
41
|
+
# @api private
|
34
42
|
def test_framework
|
35
43
|
@test_framework ||= Hanami::Generators::TestFramework.new(hanamirc, options[:test])
|
36
44
|
end
|
37
45
|
|
46
|
+
# @api private
|
38
47
|
def hanamirc_options
|
39
48
|
hanamirc.options
|
40
49
|
end
|
41
50
|
|
51
|
+
# @api private
|
42
52
|
def hanamirc
|
43
53
|
@hanamirc ||= Hanamirc.new(target_path)
|
44
54
|
end
|
45
55
|
|
56
|
+
# @api private
|
46
57
|
def template_engine
|
47
58
|
@template_engine ||= Hanami::Generators::TemplateEngine.new(hanamirc, options[:template])
|
48
59
|
end
|
49
60
|
|
61
|
+
# @api private
|
50
62
|
def assert_options!
|
51
63
|
if options.nil?
|
52
64
|
raise ArgumentError.new('options must not be nil')
|
@@ -4,7 +4,9 @@ require 'hanami/utils/blank'
|
|
4
4
|
|
5
5
|
module Hanami
|
6
6
|
module Commands
|
7
|
+
# @api private
|
7
8
|
class Generate
|
9
|
+
# @api private
|
8
10
|
class Action < Abstract
|
9
11
|
|
10
12
|
# @since 0.8.0
|
@@ -59,6 +61,7 @@ module Hanami
|
|
59
61
|
'Edit' => '/:id/edit',
|
60
62
|
}.freeze
|
61
63
|
|
64
|
+
# @api private
|
62
65
|
def initialize(options, application_name, controller_and_action_name)
|
63
66
|
super(options)
|
64
67
|
if !environment.container?
|
@@ -86,6 +89,7 @@ module Hanami
|
|
86
89
|
assert_http_method!
|
87
90
|
end
|
88
91
|
|
92
|
+
# @api private
|
89
93
|
def map_templates
|
90
94
|
add_mapping("action_spec.#{test_framework.framework}.tt", action_spec_path)
|
91
95
|
|
@@ -99,6 +103,7 @@ module Hanami
|
|
99
103
|
end
|
100
104
|
end
|
101
105
|
|
106
|
+
# @api private
|
102
107
|
def post_process_templates
|
103
108
|
generate_route
|
104
109
|
end
|
@@ -116,6 +121,7 @@ module Hanami
|
|
116
121
|
}
|
117
122
|
end
|
118
123
|
|
124
|
+
# @api private
|
119
125
|
def destroy
|
120
126
|
generator.gsub_file(routes_path, /^.*#{@controller_and_action_name}.*\n/, '', verbose: false)
|
121
127
|
super
|
@@ -132,6 +138,7 @@ module Hanami
|
|
132
138
|
generator.prepend_after_leading_comments(routes_path, "#{ http_method } '#{ route_url }', to: '#{ route_endpoint }'\n")
|
133
139
|
end
|
134
140
|
|
141
|
+
# @api private
|
135
142
|
def skip_view?
|
136
143
|
options.fetch(:skip_view, false)
|
137
144
|
end
|
@@ -219,6 +226,7 @@ module Hanami
|
|
219
226
|
end
|
220
227
|
end
|
221
228
|
|
229
|
+
# @api private
|
222
230
|
def routes_path
|
223
231
|
if environment.container?
|
224
232
|
application_path.join('config', 'routes.rb')
|
@@ -230,6 +238,7 @@ module Hanami
|
|
230
238
|
# The directory of the application
|
231
239
|
# ./app for 'app' architecture
|
232
240
|
# ./apps/APPLICATION_NAME for 'container'
|
241
|
+
# @api private
|
233
242
|
def application_path
|
234
243
|
if environment.container?
|
235
244
|
applications_path.join(application_name_as_snake_case)
|
@@ -239,42 +248,52 @@ module Hanami
|
|
239
248
|
end
|
240
249
|
|
241
250
|
# The parent dir of the application directory.
|
251
|
+
# @api private
|
242
252
|
def applications_path
|
243
253
|
Pathname.new('apps')
|
244
254
|
end
|
245
255
|
|
256
|
+
# @api private
|
246
257
|
def view_path
|
247
258
|
application_path.join('views', *@controller_directory, "#{@action_name}.rb")
|
248
259
|
end
|
249
260
|
|
261
|
+
# @api private
|
250
262
|
def view_spec_path
|
251
263
|
spec_root.join('views', *@controller_directory, "#{@action_name}_spec.rb")
|
252
264
|
end
|
253
265
|
|
266
|
+
# @api private
|
254
267
|
def template_path
|
255
268
|
application_path.join('templates', *@controller_directory, "#{@action_name}.html.#{template_engine.name}")
|
256
269
|
end
|
257
270
|
|
271
|
+
# @api private
|
258
272
|
def action_path
|
259
273
|
application_path.join('controllers', *@controller_directory, "#{@action_name}.rb")
|
260
274
|
end
|
261
275
|
|
276
|
+
# @api private
|
262
277
|
def action_spec_path
|
263
278
|
spec_root.join('controllers', *@controller_directory, "#{@action_name}_spec.rb")
|
264
279
|
end
|
265
280
|
|
281
|
+
# @api private
|
266
282
|
def spec_root
|
267
283
|
Pathname.new('spec').join(app_base_dir)
|
268
284
|
end
|
269
285
|
|
286
|
+
# @api private
|
270
287
|
def relative_action_path
|
271
288
|
relative_base_path.join(application_path, 'controllers', *@controller_directory, @action_name)
|
272
289
|
end
|
273
290
|
|
291
|
+
# @api private
|
274
292
|
def relative_view_path
|
275
293
|
relative_base_path.join(application_path, 'views', *@controller_directory, @action_name)
|
276
294
|
end
|
277
295
|
|
296
|
+
# @api private
|
278
297
|
def relative_base_path
|
279
298
|
nestings = [UP_DIRECTORY] * @controller_name.count(CONTROLLER_SEPARATOR)
|
280
299
|
nestings << UP_DIRECTORY if environment.container?
|
@@ -284,6 +303,7 @@ module Hanami
|
|
284
303
|
)
|
285
304
|
end
|
286
305
|
|
306
|
+
# @api private
|
287
307
|
def app_base_dir
|
288
308
|
if environment.container?
|
289
309
|
application_name_as_snake_case
|
@@ -292,6 +312,7 @@ module Hanami
|
|
292
312
|
end
|
293
313
|
end
|
294
314
|
|
315
|
+
# @api private
|
295
316
|
def application_name_as_snake_case
|
296
317
|
@application_name.gsub(/(.)([A-Z])/,'\1_\2').downcase
|
297
318
|
end
|