hanami 1.0.0.beta2 → 1.0.0.beta3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|