hanami 0.0.0 → 0.7.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 +214 -0
- data/FEATURES.md +156 -0
- data/LICENSE.md +22 -0
- data/README.md +80 -15
- data/bin/hanami +5 -0
- data/hanami.gemspec +27 -12
- data/lib/hanami.rb +78 -2
- data/lib/hanami/action/csrf_protection.rb +167 -0
- data/lib/hanami/action/routing_helpers.rb +40 -0
- data/lib/hanami/application.rb +244 -0
- data/lib/hanami/application_name.rb +101 -0
- data/lib/hanami/cli.rb +119 -0
- data/lib/hanami/cli_sub_commands/assets.rb +29 -0
- data/lib/hanami/cli_sub_commands/db.rb +124 -0
- data/lib/hanami/cli_sub_commands/destroy.rb +102 -0
- data/lib/hanami/cli_sub_commands/generate.rb +127 -0
- data/lib/hanami/commands/assets/precompile.rb +35 -0
- data/lib/hanami/commands/console.rb +90 -0
- data/lib/hanami/commands/db/abstract.rb +19 -0
- data/lib/hanami/commands/db/apply.rb +14 -0
- data/lib/hanami/commands/db/console.rb +50 -0
- data/lib/hanami/commands/db/create.rb +14 -0
- data/lib/hanami/commands/db/drop.rb +14 -0
- data/lib/hanami/commands/db/migrate.rb +19 -0
- data/lib/hanami/commands/db/prepare.rb +14 -0
- data/lib/hanami/commands/db/version.rb +14 -0
- data/lib/hanami/commands/generate/abstract.rb +63 -0
- data/lib/hanami/commands/generate/action.rb +262 -0
- data/lib/hanami/commands/generate/app.rb +116 -0
- data/lib/hanami/commands/generate/mailer.rb +118 -0
- data/lib/hanami/commands/generate/migration.rb +63 -0
- data/lib/hanami/commands/generate/model.rb +96 -0
- data/lib/hanami/commands/new/abstract.rb +128 -0
- data/lib/hanami/commands/new/app.rb +116 -0
- data/lib/hanami/commands/new/container.rb +102 -0
- data/lib/hanami/commands/routes.rb +41 -0
- data/lib/hanami/commands/server.rb +79 -0
- data/lib/hanami/config/configure.rb +17 -0
- data/lib/hanami/config/cookies.rb +68 -0
- data/lib/hanami/config/framework_configuration.rb +42 -0
- data/lib/hanami/config/load_paths.rb +27 -0
- data/lib/hanami/config/mapper.rb +36 -0
- data/lib/hanami/config/mapping.rb +12 -0
- data/lib/hanami/config/routes.rb +16 -0
- data/lib/hanami/config/security.rb +58 -0
- data/lib/hanami/config/sessions.rb +97 -0
- data/lib/hanami/configuration.rb +1728 -0
- data/lib/hanami/container.rb +59 -0
- data/lib/hanami/environment.rb +485 -0
- data/lib/hanami/frameworks.rb +14 -0
- data/lib/hanami/generators/action/action.rb.tt +8 -0
- data/lib/hanami/generators/action/action_spec.minitest.tt +12 -0
- data/lib/hanami/generators/action/action_spec.rspec.tt +11 -0
- data/lib/hanami/generators/action/action_without_view.rb.tt +9 -0
- data/lib/hanami/generators/action/template.tt +0 -0
- data/lib/hanami/generators/action/view.rb.tt +5 -0
- data/lib/hanami/generators/action/view_spec.minitest.tt +13 -0
- data/lib/hanami/generators/action/view_spec.rspec.tt +12 -0
- data/lib/hanami/generators/app/.gitkeep.tt +1 -0
- data/lib/hanami/generators/app/application.rb.tt +273 -0
- data/lib/hanami/generators/app/config/initializers/.gitkeep +0 -0
- data/lib/hanami/generators/app/config/routes.rb.tt +2 -0
- data/lib/hanami/generators/app/favicon.ico +0 -0
- data/lib/hanami/generators/app/templates/application.html.erb.tt +10 -0
- data/lib/hanami/generators/app/views/application_layout.rb.tt +7 -0
- data/lib/hanami/generators/application/app/.env.development.tt +4 -0
- data/lib/hanami/generators/application/app/.env.test.tt +4 -0
- data/lib/hanami/generators/application/app/.env.tt +1 -0
- data/lib/hanami/generators/application/app/.gitignore +0 -0
- data/lib/hanami/generators/application/app/.gitkeep +1 -0
- data/lib/hanami/generators/application/app/Gemfile.tt +37 -0
- data/lib/hanami/generators/application/app/Rakefile.minitest.tt +11 -0
- data/lib/hanami/generators/application/app/Rakefile.rspec.tt +6 -0
- data/lib/hanami/generators/application/app/apps/.gitkeep.tt +1 -0
- data/lib/hanami/generators/application/app/capybara.rb.rspec.tt +8 -0
- data/lib/hanami/generators/application/app/config.ru.tt +3 -0
- data/lib/hanami/generators/application/app/config/application.rb.tt +270 -0
- data/lib/hanami/generators/application/app/config/environment.rb.tt +5 -0
- data/lib/hanami/generators/application/app/config/initializers/.gitkeep +0 -0
- data/lib/hanami/generators/application/app/config/routes.rb.tt +2 -0
- data/lib/hanami/generators/application/app/db/.gitkeep +1 -0
- data/lib/hanami/generators/application/app/favicon.ico +0 -0
- data/lib/hanami/generators/application/app/features_helper.rb.minitest.tt +11 -0
- data/lib/hanami/generators/application/app/features_helper.rb.rspec.tt +12 -0
- data/lib/hanami/generators/application/app/gitignore.tt +2 -0
- data/lib/hanami/generators/application/app/gitignore_with_db.tt +4 -0
- data/lib/hanami/generators/application/app/hanamirc.tt +3 -0
- data/lib/hanami/generators/application/app/lib/app_name.rb.tt +59 -0
- data/lib/hanami/generators/application/app/lib/chirp/entities/.gitkeep +1 -0
- data/lib/hanami/generators/application/app/lib/chirp/repositories/.gitkeep +1 -0
- data/lib/hanami/generators/application/app/lib/config/mapping.rb.tt +7 -0
- data/lib/hanami/generators/application/app/rspec.rspec.tt +2 -0
- data/lib/hanami/generators/application/app/schema.sql.tt +0 -0
- data/lib/hanami/generators/application/app/spec_helper.rb.minitest.tt +7 -0
- data/lib/hanami/generators/application/app/spec_helper.rb.rspec.tt +104 -0
- data/lib/hanami/generators/application/app/templates/application.html.erb.tt +10 -0
- data/lib/hanami/generators/application/app/views/application_layout.rb.tt +7 -0
- data/lib/hanami/generators/application/container/.env.development.tt +3 -0
- data/lib/hanami/generators/application/container/.env.test.tt +3 -0
- data/lib/hanami/generators/application/container/.env.tt +1 -0
- data/lib/hanami/generators/application/container/.gitignore +0 -0
- data/lib/hanami/generators/application/container/.gitkeep +1 -0
- data/lib/hanami/generators/application/container/Gemfile.tt +36 -0
- data/lib/hanami/generators/application/container/Rakefile.minitest.tt +11 -0
- data/lib/hanami/generators/application/container/Rakefile.rspec.tt +6 -0
- data/lib/hanami/generators/application/container/capybara.rb.rspec.tt +8 -0
- data/lib/hanami/generators/application/container/config.ru.tt +3 -0
- data/lib/hanami/generators/application/container/config/environment.rb.tt +7 -0
- data/lib/hanami/generators/application/container/config/initializers/.gitkeep +0 -0
- data/lib/hanami/generators/application/container/db/.gitkeep +1 -0
- data/lib/hanami/generators/application/container/features_helper.rb.minitest.tt +11 -0
- data/lib/hanami/generators/application/container/features_helper.rb.rspec.tt +12 -0
- data/lib/hanami/generators/application/container/gitignore.tt +2 -0
- data/lib/hanami/generators/application/container/gitignore_with_db.tt +4 -0
- data/lib/hanami/generators/application/container/hanamirc.tt +3 -0
- data/lib/hanami/generators/application/container/lib/app_name.rb.tt +60 -0
- data/lib/hanami/generators/application/container/lib/chirp/entities/.gitkeep +1 -0
- 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 +1 -0
- data/lib/hanami/generators/application/container/lib/config/mapping.rb.tt +7 -0
- data/lib/hanami/generators/application/container/rspec.rspec.tt +2 -0
- data/lib/hanami/generators/application/container/schema.sql.tt +0 -0
- data/lib/hanami/generators/application/container/spec_helper.rb.minitest.tt +7 -0
- data/lib/hanami/generators/application/container/spec_helper.rb.rspec.tt +104 -0
- data/lib/hanami/generators/database_config.rb +99 -0
- data/lib/hanami/generators/generatable.rb +51 -0
- data/lib/hanami/generators/generator.rb +35 -0
- data/lib/hanami/generators/mailer/mailer.rb.tt +7 -0
- data/lib/hanami/generators/mailer/mailer_spec.rb.tt +7 -0
- data/lib/hanami/generators/mailer/template.html.tt +0 -0
- data/lib/hanami/generators/mailer/template.txt.tt +0 -0
- data/lib/hanami/generators/migration/migration.rb.tt +4 -0
- data/lib/hanami/generators/model/entity.rb.tt +3 -0
- data/lib/hanami/generators/model/entity_spec.minitest.tt +5 -0
- data/lib/hanami/generators/model/entity_spec.rspec.tt +3 -0
- data/lib/hanami/generators/model/repository.rb.tt +3 -0
- data/lib/hanami/generators/model/repository_spec.minitest.tt +5 -0
- data/lib/hanami/generators/model/repository_spec.rspec.tt +3 -0
- data/lib/hanami/generators/test_framework.rb +42 -0
- data/lib/hanami/hanamirc.rb +152 -0
- data/lib/hanami/loader.rb +258 -0
- data/lib/hanami/mailer/glue.rb +68 -0
- data/lib/hanami/middleware.rb +143 -0
- data/lib/hanami/rake_helper.rb +68 -0
- data/lib/hanami/rake_tasks.rb +2 -0
- data/lib/hanami/rendering_policy.rb +77 -0
- data/lib/hanami/repositories/car_repository.rb +3 -0
- data/lib/hanami/repositories/name_repository.rb +3 -0
- data/lib/hanami/root.rb +7 -0
- data/lib/hanami/routes.rb +151 -0
- data/lib/hanami/routing/default.rb +25 -0
- data/lib/hanami/setup.rb +3 -0
- data/lib/hanami/static.rb +77 -0
- data/lib/hanami/templates/default.html.erb +9 -0
- data/lib/hanami/templates/welcome.html.erb +52 -0
- data/lib/hanami/version.rb +4 -1
- data/lib/hanami/views/default.rb +34 -0
- data/lib/hanami/views/default_template_finder.rb +20 -0
- data/lib/hanami/views/null_view.rb +17 -0
- data/lib/hanami/welcome.rb +40 -0
- metadata +357 -16
- data/.gitignore +0 -9
- data/Gemfile +0 -4
- data/Rakefile +0 -2
- data/bin/console +0 -14
- data/bin/setup +0 -8
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'hanami/commands/generate/abstract'
|
2
|
+
|
3
|
+
module Hanami
|
4
|
+
module Commands
|
5
|
+
class Generate
|
6
|
+
class Migration < Abstract
|
7
|
+
|
8
|
+
attr_reader :name, :underscored_name
|
9
|
+
|
10
|
+
# @since 0.6.0
|
11
|
+
# @api private
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# 20150612160502
|
15
|
+
TIMESTAMP_FORMAT = '%Y%m%d%H%M%S'.freeze
|
16
|
+
|
17
|
+
# @since 0.6.0
|
18
|
+
# @api private
|
19
|
+
#
|
20
|
+
# @example
|
21
|
+
# 20150612160502_create_books.rb
|
22
|
+
FILENAME_PATTERN = '%{timestamp}_%{name}.rb'.freeze
|
23
|
+
|
24
|
+
def initialize(options, name)
|
25
|
+
super(options)
|
26
|
+
|
27
|
+
@name = name
|
28
|
+
@underscored_name = Utils::String.new(@name).underscore
|
29
|
+
|
30
|
+
environment.require_application_environment
|
31
|
+
assert_migration_name!
|
32
|
+
end
|
33
|
+
|
34
|
+
def map_templates
|
35
|
+
add_mapping('migration.rb.tt', destination_path)
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def destination_path
|
41
|
+
existing_migration_path || new_migration_path
|
42
|
+
end
|
43
|
+
|
44
|
+
def existing_migration_path
|
45
|
+
Dir.glob("#{Hanami::Model.configuration.migrations}/[0-9]*_#{underscored_name}.rb").first
|
46
|
+
end
|
47
|
+
|
48
|
+
def new_migration_path
|
49
|
+
timestamp = Time.now.utc.strftime(TIMESTAMP_FORMAT)
|
50
|
+
filename = FILENAME_PATTERN % { timestamp: timestamp, name: underscored_name}
|
51
|
+
|
52
|
+
Hanami::Model.configuration.migrations.join(filename)
|
53
|
+
end
|
54
|
+
|
55
|
+
def assert_migration_name!
|
56
|
+
if name.nil? || name.strip.empty?
|
57
|
+
raise ArgumentError.new('Migration name nil or empty')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'hanami/commands/generate/abstract'
|
2
|
+
|
3
|
+
module Hanami
|
4
|
+
module Commands
|
5
|
+
class Generate
|
6
|
+
class Model < Abstract
|
7
|
+
|
8
|
+
attr_reader :model_name
|
9
|
+
|
10
|
+
def initialize(options, model_name)
|
11
|
+
super(options)
|
12
|
+
@model_name = Utils::String.new(model_name).classify
|
13
|
+
|
14
|
+
assert_model_name!
|
15
|
+
end
|
16
|
+
|
17
|
+
def map_templates
|
18
|
+
add_mapping('entity.rb.tt', entity_path)
|
19
|
+
add_mapping('repository.rb.tt', repository_path)
|
20
|
+
add_mapping("entity_spec.#{ test_framework.framework }.tt", entity_spec_path,)
|
21
|
+
add_mapping("repository_spec.#{ test_framework.framework }.tt", repository_spec_path)
|
22
|
+
end
|
23
|
+
|
24
|
+
def template_options
|
25
|
+
{
|
26
|
+
model_name: model_name
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# @since 0.6.0
|
33
|
+
# @api private
|
34
|
+
def assert_model_name!
|
35
|
+
model_name_not_blank
|
36
|
+
model_name_valid
|
37
|
+
end
|
38
|
+
|
39
|
+
# Validates that a model name was provided
|
40
|
+
#
|
41
|
+
# @since 0.6.0
|
42
|
+
# @api private
|
43
|
+
def model_name_not_blank
|
44
|
+
if model_name.nil? || model_name.strip.empty?
|
45
|
+
raise ArgumentError.new('Model name nil or empty.')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Validates that the provided model name doesn't start with numbers
|
50
|
+
#
|
51
|
+
# @since 0.6.0
|
52
|
+
# @api private
|
53
|
+
def model_name_valid
|
54
|
+
unless model_name.match(/^[a-z]/i)
|
55
|
+
raise ArgumentError.new("Invalid model name. The model name shouldn't begin with a number.")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def model_root
|
60
|
+
Pathname.new('lib').join(::File.basename(Dir.getwd))
|
61
|
+
end
|
62
|
+
|
63
|
+
# @since 0.5.0
|
64
|
+
# @api private
|
65
|
+
def entity_path
|
66
|
+
model_root.join('entities', "#{ model_name_underscored }.rb").to_s
|
67
|
+
end
|
68
|
+
|
69
|
+
# @since 0.5.0
|
70
|
+
# @api private
|
71
|
+
def repository_path
|
72
|
+
model_root.join('repositories', "#{ model_name_underscored }_repository.rb").to_s
|
73
|
+
end
|
74
|
+
|
75
|
+
# @since 0.5.0
|
76
|
+
# @api private
|
77
|
+
def entity_spec_path
|
78
|
+
target_path.join('spec', ::File.basename(Dir.getwd), 'entities', "#{ model_name_underscored }_spec.rb")
|
79
|
+
end
|
80
|
+
|
81
|
+
# @since 0.5.0
|
82
|
+
# @api private
|
83
|
+
def repository_spec_path
|
84
|
+
target_path.join('spec', ::File.basename(Dir.getwd), 'repositories',
|
85
|
+
"#{ model_name_underscored }_repository_spec.rb")
|
86
|
+
end
|
87
|
+
|
88
|
+
# @since 0.5.0
|
89
|
+
# @api private
|
90
|
+
def model_name_underscored
|
91
|
+
Utils::String.new(model_name).underscore
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require 'shellwords'
|
2
|
+
require 'hanami/application_name'
|
3
|
+
require 'hanami/generators/database_config'
|
4
|
+
require 'hanami/generators/generatable'
|
5
|
+
require 'hanami/generators/test_framework'
|
6
|
+
require 'hanami/utils/hash'
|
7
|
+
|
8
|
+
module Hanami
|
9
|
+
module Commands
|
10
|
+
class New
|
11
|
+
class Abstract
|
12
|
+
|
13
|
+
include Hanami::Generators::Generatable
|
14
|
+
|
15
|
+
DEFAULT_ARCHITECTURE = 'container'.freeze
|
16
|
+
DEFAULT_APPLICATION_BASE_URL = '/'.freeze
|
17
|
+
|
18
|
+
attr_reader :options, :target_path, :database_config
|
19
|
+
|
20
|
+
def initialize(options, name)
|
21
|
+
@options = Hanami::Utils::Hash.new(options).symbolize!
|
22
|
+
@name = name
|
23
|
+
@options[:database] ||= Hanami::Generators::DatabaseConfig::DEFAULT_ENGINE
|
24
|
+
|
25
|
+
assert_options!
|
26
|
+
assert_name!
|
27
|
+
assert_architecture!
|
28
|
+
|
29
|
+
@hanami_model_version = '~> 0.5'
|
30
|
+
@database_config = Hanami::Generators::DatabaseConfig.new(options[:database], app_name)
|
31
|
+
end
|
32
|
+
|
33
|
+
def start
|
34
|
+
FileUtils.mkdir_p(@name)
|
35
|
+
Dir.chdir(@name) do
|
36
|
+
@target_path = Pathname.pwd
|
37
|
+
|
38
|
+
super
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def test_framework
|
45
|
+
@test_framework ||= Hanami::Generators::TestFramework.new(hanamirc, options[:test])
|
46
|
+
end
|
47
|
+
|
48
|
+
def hanamirc
|
49
|
+
@hanamirc ||= Hanamirc.new(Pathname.new('.'))
|
50
|
+
end
|
51
|
+
|
52
|
+
def start_in_app_dir
|
53
|
+
raise NotImplementedError
|
54
|
+
end
|
55
|
+
|
56
|
+
def add_sql_templates
|
57
|
+
return if !database_config.sql?
|
58
|
+
|
59
|
+
add_mapping('schema.sql.tt', 'db/schema.sql')
|
60
|
+
end
|
61
|
+
|
62
|
+
def add_git_templates
|
63
|
+
return if git_dir_present?
|
64
|
+
|
65
|
+
source = database_config.filesystem? ? 'gitignore_with_db.tt' : 'gitignore.tt'
|
66
|
+
target = '.gitignore'
|
67
|
+
add_mapping(source, target)
|
68
|
+
end
|
69
|
+
|
70
|
+
def real_app_name
|
71
|
+
@name == '.' ? ::File.basename(Dir.getwd) : @name
|
72
|
+
end
|
73
|
+
|
74
|
+
def app_name
|
75
|
+
ApplicationName.new(real_app_name)
|
76
|
+
end
|
77
|
+
|
78
|
+
def target
|
79
|
+
Pathname.new('.')
|
80
|
+
end
|
81
|
+
|
82
|
+
def init_git
|
83
|
+
return if git_dir_present?
|
84
|
+
|
85
|
+
generator.run("git init #{Shellwords.escape(target)}", capture: true)
|
86
|
+
end
|
87
|
+
|
88
|
+
def git_dir_present?
|
89
|
+
File.directory?(target.join('.git'))
|
90
|
+
end
|
91
|
+
|
92
|
+
def hanami_model_version
|
93
|
+
@hanami_model_version
|
94
|
+
end
|
95
|
+
|
96
|
+
def hanami_head?
|
97
|
+
options.fetch(:hanami_head, false)
|
98
|
+
end
|
99
|
+
|
100
|
+
def architecture
|
101
|
+
options.fetch(:architecture, DEFAULT_ARCHITECTURE)
|
102
|
+
end
|
103
|
+
|
104
|
+
def assert_name!
|
105
|
+
if @name.nil? || @name.strip == '' || @name.include?(File::SEPARATOR)
|
106
|
+
raise ArgumentError.new("APPLICATION_NAME is requried and must not contain #{File::SEPARATOR}.")
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def assert_architecture!
|
111
|
+
if !['app', 'container'].include?(architecture)
|
112
|
+
raise ArgumentError.new("Architecture must be one of 'app', 'container' but was '#{architecture}'")
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def application_base_url
|
117
|
+
options[:application_base_url] || DEFAULT_APPLICATION_BASE_URL
|
118
|
+
end
|
119
|
+
|
120
|
+
def assert_options!
|
121
|
+
if options.nil?
|
122
|
+
raise ArgumentError.new('options must not be nil')
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'hanami/commands/new/abstract'
|
2
|
+
|
3
|
+
module Hanami
|
4
|
+
module Commands
|
5
|
+
class New
|
6
|
+
class App < Abstract
|
7
|
+
|
8
|
+
def initialize(options, name)
|
9
|
+
super(options, name)
|
10
|
+
end
|
11
|
+
|
12
|
+
def map_templates
|
13
|
+
add_application_templates
|
14
|
+
add_empty_directories
|
15
|
+
add_test_templates
|
16
|
+
add_sql_templates
|
17
|
+
add_git_templates
|
18
|
+
end
|
19
|
+
|
20
|
+
def template_options
|
21
|
+
{
|
22
|
+
app_name: app_name,
|
23
|
+
upcase_app_name: upcase_app_name,
|
24
|
+
classified_app_name: classified_app_name,
|
25
|
+
application_base_url: application_base_url,
|
26
|
+
hanami_head: hanami_head?,
|
27
|
+
test: test_framework.framework,
|
28
|
+
database: database_config.type,
|
29
|
+
database_config: database_config.to_hash,
|
30
|
+
hanami_model_version: hanami_model_version,
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
def post_process_templates
|
35
|
+
init_git
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def add_application_templates
|
41
|
+
add_mapping('hanamirc.tt', '.hanamirc')
|
42
|
+
add_mapping('.env.tt', '.env')
|
43
|
+
add_mapping('.env.development.tt', '.env.development')
|
44
|
+
add_mapping('.env.test.tt', '.env.test')
|
45
|
+
add_mapping('Gemfile.tt', 'Gemfile')
|
46
|
+
add_mapping('config.ru.tt', 'config.ru')
|
47
|
+
add_mapping('config/environment.rb.tt', 'config/environment.rb')
|
48
|
+
add_mapping('lib/app_name.rb.tt', "lib/#{ app_name }.rb")
|
49
|
+
add_mapping('lib/config/mapping.rb.tt', 'lib/config/mapping.rb')
|
50
|
+
add_mapping('config/application.rb.tt', 'config/application.rb')
|
51
|
+
add_mapping('config/routes.rb.tt', 'config/routes.rb')
|
52
|
+
add_mapping('views/application_layout.rb.tt', 'app/views/application_layout.rb')
|
53
|
+
add_mapping('templates/application.html.erb.tt', 'app/templates/application.html.erb')
|
54
|
+
add_mapping('favicon.ico', 'app/assets/favicon.ico')
|
55
|
+
end
|
56
|
+
|
57
|
+
def add_test_templates
|
58
|
+
if test_framework.rspec?
|
59
|
+
add_mapping('Rakefile.rspec.tt', 'Rakefile')
|
60
|
+
add_mapping('rspec.rspec.tt', '.rspec')
|
61
|
+
add_mapping('spec_helper.rb.rspec.tt', 'spec/spec_helper.rb')
|
62
|
+
add_mapping('features_helper.rb.rspec.tt', 'spec/features_helper.rb')
|
63
|
+
add_mapping('capybara.rb.rspec.tt', 'spec/support/capybara.rb')
|
64
|
+
else
|
65
|
+
add_mapping('Rakefile.minitest.tt', 'Rakefile')
|
66
|
+
add_mapping('spec_helper.rb.minitest.tt', 'spec/spec_helper.rb')
|
67
|
+
add_mapping('features_helper.rb.minitest.tt', 'spec/features_helper.rb')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def add_empty_directories
|
72
|
+
add_mapping('.gitkeep', 'config/initializers/.gitkeep')
|
73
|
+
add_mapping('.gitkeep', 'app/controllers/.gitkeep')
|
74
|
+
add_mapping('.gitkeep', 'app/views/.gitkeep')
|
75
|
+
add_mapping('.gitkeep', 'app/assets/images/.gitkeep')
|
76
|
+
add_mapping('.gitkeep', 'app/assets/javascripts/.gitkeep')
|
77
|
+
add_mapping('.gitkeep', 'app/assets/stylesheets/.gitkeep')
|
78
|
+
add_mapping('.gitkeep', "lib/#{ app_name }/entities/.gitkeep")
|
79
|
+
add_mapping('.gitkeep', "lib/#{ app_name }/repositories/.gitkeep")
|
80
|
+
add_mapping('.gitkeep', "lib/#{ app_name }/mailers/.gitkeep")
|
81
|
+
add_mapping('.gitkeep', "lib/#{ app_name }/mailers/templates/.gitkeep")
|
82
|
+
add_mapping('.gitkeep', 'public/.gitkeep')
|
83
|
+
|
84
|
+
add_mapping('.gitkeep', 'spec/features/.gitkeep')
|
85
|
+
add_mapping('.gitkeep', 'spec/controllers/.gitkeep')
|
86
|
+
add_mapping('.gitkeep', 'spec/views/.gitkeep')
|
87
|
+
add_mapping('.gitkeep', "spec/#{ app_name }/entities/.gitkeep")
|
88
|
+
add_mapping('.gitkeep', "spec/#{ app_name }/repositories/.gitkeep")
|
89
|
+
add_mapping('.gitkeep', "spec/#{ app_name }/mailers/.gitkeep")
|
90
|
+
add_mapping('.gitkeep', 'spec/support/.gitkeep')
|
91
|
+
|
92
|
+
if database_config.sql?
|
93
|
+
add_mapping('.gitkeep', 'db/migrations/.gitkeep')
|
94
|
+
else
|
95
|
+
add_mapping('.gitkeep', 'db/.gitkeep')
|
96
|
+
end
|
97
|
+
end
|
98
|
+
def template_source_path
|
99
|
+
Pathname.new(::File.dirname(__FILE__)).join('..', '..', 'generators', 'application', 'app').realpath
|
100
|
+
end
|
101
|
+
|
102
|
+
def upcase_app_name
|
103
|
+
app_name.to_env_s
|
104
|
+
end
|
105
|
+
|
106
|
+
def classified_app_name
|
107
|
+
Utils::String.new(app_name).classify.tr('::', '')
|
108
|
+
end
|
109
|
+
|
110
|
+
# def application_base_path
|
111
|
+
# [ 'apps', app_name ].join(::File::SEPARATOR)
|
112
|
+
# end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'hanami/commands/generate/app'
|
2
|
+
require 'hanami/commands/new/abstract'
|
3
|
+
|
4
|
+
module Hanami
|
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
|
+
hanami_head: hanami_head?,
|
23
|
+
test: test_framework.framework,
|
24
|
+
database: database_config.type,
|
25
|
+
database_config: database_config.to_hash,
|
26
|
+
hanami_model_version: hanami_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('hanamirc.tt', '.hanamirc')
|
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
|
+
Hanami::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
|