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
@@ -1,154 +0,0 @@
|
|
1
|
-
require 'hanami/commands/generate/abstract'
|
2
|
-
require 'hanami/application_name'
|
3
|
-
require 'hanami/utils/blank'
|
4
|
-
require 'securerandom'
|
5
|
-
|
6
|
-
module Hanami
|
7
|
-
# @api private
|
8
|
-
module Commands
|
9
|
-
# @api private
|
10
|
-
class Generate
|
11
|
-
# @api private
|
12
|
-
class App < Abstract
|
13
|
-
|
14
|
-
# @api private
|
15
|
-
attr_reader :base_path
|
16
|
-
|
17
|
-
# @api private
|
18
|
-
def initialize(options, application_name)
|
19
|
-
@environment = Hanami::Environment.new(options)
|
20
|
-
@options = Hanami::Utils::Hash.new(options).symbolize!
|
21
|
-
assert_options!
|
22
|
-
|
23
|
-
@target_path = Hanami.root
|
24
|
-
assert_application_name!(application_name)
|
25
|
-
assert_architecture!
|
26
|
-
assert_application_base_url!
|
27
|
-
|
28
|
-
@application_name = ApplicationName.new(application_name)
|
29
|
-
@base_path = Pathname.pwd
|
30
|
-
end
|
31
|
-
|
32
|
-
# @api private
|
33
|
-
def map_templates
|
34
|
-
add_mapping('application.rb.tt', 'application.rb')
|
35
|
-
add_mapping('config/routes.rb.tt', 'config/routes.rb')
|
36
|
-
add_mapping('views/application_layout.rb.tt', 'views/application_layout.rb')
|
37
|
-
add_mapping("templates/application.html.#{ template_engine.name }.tt", "templates/application.html.#{ template_engine.name }")
|
38
|
-
add_mapping('favicon.ico', 'assets/favicon.ico')
|
39
|
-
|
40
|
-
add_mapping('.gitkeep', 'controllers/.gitkeep')
|
41
|
-
add_mapping('.gitkeep', 'assets/images/.gitkeep')
|
42
|
-
add_mapping('.gitkeep', 'assets/javascripts/.gitkeep')
|
43
|
-
add_mapping('.gitkeep', 'assets/stylesheets/.gitkeep')
|
44
|
-
add_mapping('.gitkeep', "../../spec/#{ app_name }/features/.gitkeep")
|
45
|
-
add_mapping('.gitkeep', "../../spec/#{ app_name }/controllers/.gitkeep")
|
46
|
-
add_mapping('.gitkeep', "../../spec/#{ app_name }/views/.gitkeep")
|
47
|
-
end
|
48
|
-
|
49
|
-
# @api private
|
50
|
-
def template_options
|
51
|
-
{
|
52
|
-
app_name: app_name,
|
53
|
-
upcase_app_name: upcase_app_name,
|
54
|
-
classified_app_name: classified_app_name,
|
55
|
-
app_base_url: application_base_url,
|
56
|
-
app_base_path: application_base_path,
|
57
|
-
template: template_engine.name
|
58
|
-
}
|
59
|
-
end
|
60
|
-
|
61
|
-
# @api private
|
62
|
-
def post_process_templates
|
63
|
-
add_require_app
|
64
|
-
add_mount_app
|
65
|
-
add_web_session_secret
|
66
|
-
end
|
67
|
-
|
68
|
-
private
|
69
|
-
|
70
|
-
# @api private
|
71
|
-
def application_base_url
|
72
|
-
options.fetch(:application_base_url, "/#{app_name}")
|
73
|
-
end
|
74
|
-
|
75
|
-
# @api private
|
76
|
-
def add_require_app
|
77
|
-
# Add "require_relative '../apps/web/application'"
|
78
|
-
generator.inject_into_file base_path.join('config/environment.rb'), after: /require_relative '\.\.\/lib\/.*'/ do
|
79
|
-
"\nrequire_relative '../apps/#{ app_name }/application'"
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
# @api private
|
84
|
-
def add_mount_app
|
85
|
-
generator.inject_into_file base_path.join('config/environment.rb'), after: /Hanami.configure do/ do |match|
|
86
|
-
"\n mount #{ classified_app_name }::Application, at: '#{ application_base_url }'"
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
# @api private
|
91
|
-
def add_web_session_secret
|
92
|
-
['development', 'test'].each do |environment|
|
93
|
-
# Add WEB_SESSIONS_SECRET="abc123" (random hex)
|
94
|
-
generator.append_to_file base_path.join(".env.#{ environment }") do
|
95
|
-
%(#{ upcase_app_name }_SESSIONS_SECRET="#{ SecureRandom.hex(32) }"\n)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
# @api private
|
101
|
-
def hanamirc
|
102
|
-
@hanamirc ||= Hanamirc.new(base_path)
|
103
|
-
end
|
104
|
-
|
105
|
-
# @api private
|
106
|
-
def target_path
|
107
|
-
base_path.join(application_base_path)
|
108
|
-
end
|
109
|
-
|
110
|
-
# @api private
|
111
|
-
def app_name
|
112
|
-
@application_name.to_s
|
113
|
-
end
|
114
|
-
|
115
|
-
# @api private
|
116
|
-
def upcase_app_name
|
117
|
-
@application_name.to_env_s
|
118
|
-
end
|
119
|
-
|
120
|
-
# @api private
|
121
|
-
def application_base_path
|
122
|
-
["apps", @application_name].join(::File::SEPARATOR)
|
123
|
-
end
|
124
|
-
|
125
|
-
# @api private
|
126
|
-
def classified_app_name
|
127
|
-
Utils::String.new(app_name).classify.tr('::', '')
|
128
|
-
end
|
129
|
-
|
130
|
-
# @api private
|
131
|
-
def assert_application_name!(value)
|
132
|
-
if argument_blank?(value)
|
133
|
-
raise ArgumentError.new('Application name is missing')
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
# @api private
|
138
|
-
def assert_architecture!
|
139
|
-
if !environment.container?
|
140
|
-
raise ArgumentError.new('App generator is only available for container architecture.')
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
# @api private
|
145
|
-
def assert_application_base_url!
|
146
|
-
if options.key?(:application_base_url) && Utils::Blank.blank?(options[:application_base_url])
|
147
|
-
warn "`' is not a valid URL"
|
148
|
-
exit(1)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
@@ -1,131 +0,0 @@
|
|
1
|
-
require "hanami/commands/generate/abstract"
|
2
|
-
|
3
|
-
module Hanami
|
4
|
-
# @api private
|
5
|
-
module Commands
|
6
|
-
# @api private
|
7
|
-
class Generate
|
8
|
-
# @since 0.5.0
|
9
|
-
# @api private
|
10
|
-
class Mailer < Abstract
|
11
|
-
# @api private
|
12
|
-
attr_reader :name
|
13
|
-
# @api private
|
14
|
-
attr_reader :name_underscored
|
15
|
-
# @api private
|
16
|
-
attr_reader :from
|
17
|
-
# @api private
|
18
|
-
attr_reader :to
|
19
|
-
# @api private
|
20
|
-
attr_reader :subject
|
21
|
-
|
22
|
-
# @since 0.5.0
|
23
|
-
# @api private
|
24
|
-
TXT_FORMAT = ".txt".freeze
|
25
|
-
|
26
|
-
# @since 0.5.0
|
27
|
-
# @api private
|
28
|
-
HTML_FORMAT = ".html".freeze
|
29
|
-
|
30
|
-
# @since 0.5.0
|
31
|
-
# @api private
|
32
|
-
DEFAULT_ENGINE = "erb".freeze
|
33
|
-
|
34
|
-
# @since 0.5.0
|
35
|
-
# @api private
|
36
|
-
DEFAULT_FROM = "'<from>'".freeze
|
37
|
-
|
38
|
-
# @since 0.5.0
|
39
|
-
# @api private
|
40
|
-
DEFAULT_TO = "'<to>'".freeze
|
41
|
-
|
42
|
-
# @since 0.5.0
|
43
|
-
# @api private
|
44
|
-
DEFAULT_SUBJECT = "'Hello'".freeze
|
45
|
-
|
46
|
-
# @since 0.5.0
|
47
|
-
# @api private
|
48
|
-
def initialize(options, name)
|
49
|
-
super(options)
|
50
|
-
|
51
|
-
@name_underscored = Utils::String.new(name).underscore
|
52
|
-
@name = Utils::String.new(name_underscored).classify
|
53
|
-
@from = options[:from] || DEFAULT_FROM
|
54
|
-
@to = options[:to] || DEFAULT_TO
|
55
|
-
@subject = options[:subject] || DEFAULT_SUBJECT
|
56
|
-
|
57
|
-
assert_name!
|
58
|
-
end
|
59
|
-
|
60
|
-
# @since 0.5.0
|
61
|
-
# @api private
|
62
|
-
def map_templates
|
63
|
-
add_mapping("mailer_spec.rb.#{test_framework.framework}.tt", mailer_spec_path)
|
64
|
-
add_mapping("mailer.rb.tt", mailer_path)
|
65
|
-
add_mapping("template.txt.tt", txt_template_path)
|
66
|
-
add_mapping("template.html.tt", html_template_path)
|
67
|
-
end
|
68
|
-
|
69
|
-
# @api private
|
70
|
-
def template_options
|
71
|
-
{
|
72
|
-
mailer: name,
|
73
|
-
from: from,
|
74
|
-
to: to,
|
75
|
-
subject: subject,
|
76
|
-
}
|
77
|
-
end
|
78
|
-
|
79
|
-
private
|
80
|
-
|
81
|
-
# @since 0.5.0
|
82
|
-
# @api private
|
83
|
-
def assert_name!
|
84
|
-
if argument_blank?(name)
|
85
|
-
raise ArgumentError.new('Mailer name is missing')
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
# @since 0.5.0
|
90
|
-
# @api private
|
91
|
-
def mailer_path
|
92
|
-
core_root.join('mailers', "#{ name_underscored }.rb").to_s
|
93
|
-
end
|
94
|
-
|
95
|
-
# @since 0.5.0
|
96
|
-
# @api private
|
97
|
-
def mailer_spec_path
|
98
|
-
spec_root.join(::File.basename(Dir.getwd), "mailers", "#{ name_underscored }_spec.rb")
|
99
|
-
end
|
100
|
-
|
101
|
-
# @since 0.5.0
|
102
|
-
# @api private
|
103
|
-
def txt_template_path
|
104
|
-
template_path(TXT_FORMAT)
|
105
|
-
end
|
106
|
-
|
107
|
-
# @since 0.5.0
|
108
|
-
# @api private
|
109
|
-
def html_template_path
|
110
|
-
template_path(HTML_FORMAT)
|
111
|
-
end
|
112
|
-
|
113
|
-
# @since 0.5.0
|
114
|
-
# @api private
|
115
|
-
def template_path(format)
|
116
|
-
core_root.join("mailers", "templates", "#{ name_underscored }#{ format }.#{ DEFAULT_ENGINE }")
|
117
|
-
end
|
118
|
-
|
119
|
-
# @api private
|
120
|
-
def spec_root
|
121
|
-
Pathname.new("spec")
|
122
|
-
end
|
123
|
-
|
124
|
-
# @api private
|
125
|
-
def core_root
|
126
|
-
Pathname.new("lib").join(project_name)
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require 'hanami/commands/generate/abstract'
|
2
|
-
require 'hanami/utils/file_list'
|
3
|
-
|
4
|
-
module Hanami
|
5
|
-
# @api private
|
6
|
-
module Commands
|
7
|
-
# @api private
|
8
|
-
class Generate
|
9
|
-
# @api private
|
10
|
-
class Migration < Abstract
|
11
|
-
# @api private
|
12
|
-
attr_reader :name
|
13
|
-
# @api private
|
14
|
-
attr_reader :underscored_name
|
15
|
-
|
16
|
-
# @since 0.6.0
|
17
|
-
# @api private
|
18
|
-
#
|
19
|
-
# @example
|
20
|
-
# 20150612160502
|
21
|
-
TIMESTAMP_FORMAT = '%Y%m%d%H%M%S'.freeze
|
22
|
-
|
23
|
-
# @since 0.6.0
|
24
|
-
# @api private
|
25
|
-
#
|
26
|
-
# @example
|
27
|
-
# 20150612160502_create_books.rb
|
28
|
-
FILENAME_PATTERN = '%{timestamp}_%{name}.rb'.freeze
|
29
|
-
|
30
|
-
# @api private
|
31
|
-
def initialize(options, name)
|
32
|
-
super(options)
|
33
|
-
|
34
|
-
@name = name
|
35
|
-
@underscored_name = Utils::String.new(@name).underscore
|
36
|
-
|
37
|
-
Components.resolve('model.configuration')
|
38
|
-
assert_migration_name!
|
39
|
-
end
|
40
|
-
|
41
|
-
# @api private
|
42
|
-
def map_templates
|
43
|
-
add_mapping('migration.rb.tt', destination_path)
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
# @api private
|
49
|
-
def destination_path
|
50
|
-
existing_migration_path || new_migration_path
|
51
|
-
end
|
52
|
-
|
53
|
-
# @api private
|
54
|
-
def existing_migration_path
|
55
|
-
Utils::FileList["#{Hanami::Model.configuration.migrations}/[0-9]*_#{underscored_name}.rb"].first
|
56
|
-
end
|
57
|
-
|
58
|
-
# @api private
|
59
|
-
def new_migration_path
|
60
|
-
timestamp = Time.now.utc.strftime(TIMESTAMP_FORMAT)
|
61
|
-
filename = FILENAME_PATTERN % { timestamp: timestamp, name: underscored_name}
|
62
|
-
|
63
|
-
Hanami::Model.configuration.migrations.join(filename)
|
64
|
-
end
|
65
|
-
|
66
|
-
# @api private
|
67
|
-
def assert_migration_name!
|
68
|
-
if argument_blank?(name)
|
69
|
-
raise ArgumentError.new('Migration name is missing')
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
@@ -1,132 +0,0 @@
|
|
1
|
-
require 'hanami/commands/generate/abstract'
|
2
|
-
require 'hanami/commands/generate/migration'
|
3
|
-
|
4
|
-
module Hanami
|
5
|
-
# @api private
|
6
|
-
module Commands
|
7
|
-
# @api private
|
8
|
-
class Generate
|
9
|
-
# @api private
|
10
|
-
class Model < Abstract
|
11
|
-
|
12
|
-
# @api private
|
13
|
-
attr_reader :input
|
14
|
-
# @api private
|
15
|
-
attr_reader :model_name
|
16
|
-
# @api private
|
17
|
-
attr_reader :table_name
|
18
|
-
|
19
|
-
# @api private
|
20
|
-
def initialize(options, model_name)
|
21
|
-
super(options)
|
22
|
-
@input = Utils::String.new(model_name).underscore
|
23
|
-
@model_name = Utils::String.new(@input).classify
|
24
|
-
@table_name = Utils::String.new(@input).pluralize
|
25
|
-
|
26
|
-
unless skip_migration?
|
27
|
-
Components.resolve('model.configuration')
|
28
|
-
end
|
29
|
-
|
30
|
-
assert_model_name!
|
31
|
-
end
|
32
|
-
|
33
|
-
# @api private
|
34
|
-
def map_templates
|
35
|
-
add_mapping('entity.rb.tt', entity_path)
|
36
|
-
add_mapping('repository.rb.tt', repository_path)
|
37
|
-
unless skip_migration?
|
38
|
-
add_mapping('migration.rb.tt', migration_path)
|
39
|
-
end
|
40
|
-
add_mapping("entity_spec.#{ test_framework.framework }.tt", entity_spec_path,)
|
41
|
-
add_mapping("repository_spec.#{ test_framework.framework }.tt", repository_spec_path)
|
42
|
-
end
|
43
|
-
|
44
|
-
# @api private
|
45
|
-
def template_options
|
46
|
-
{
|
47
|
-
model_name: model_name,
|
48
|
-
table_name: table_name
|
49
|
-
}
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
|
-
# @since 0.6.0
|
55
|
-
# @api private
|
56
|
-
def assert_model_name!
|
57
|
-
model_name_not_blank
|
58
|
-
model_name_valid
|
59
|
-
end
|
60
|
-
|
61
|
-
# Validates that a model name was provided
|
62
|
-
#
|
63
|
-
# @since 0.6.0
|
64
|
-
# @api private
|
65
|
-
def model_name_not_blank
|
66
|
-
if argument_blank?(model_name)
|
67
|
-
raise ArgumentError.new('Model name is missing')
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# Validates that the provided model name doesn't start with numbers
|
72
|
-
#
|
73
|
-
# @since 0.6.0
|
74
|
-
# @api private
|
75
|
-
def model_name_valid
|
76
|
-
unless model_name.match(/^[a-z]/i)
|
77
|
-
raise ArgumentError.new("Invalid model name. The model name shouldn't begin with a number.")
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
# @api private
|
82
|
-
def skip_migration?
|
83
|
-
options.fetch(:skip_migration, false)
|
84
|
-
end
|
85
|
-
|
86
|
-
# @api private
|
87
|
-
def model_root
|
88
|
-
Pathname.new('lib').join(project_name)
|
89
|
-
end
|
90
|
-
|
91
|
-
# @since 0.5.0
|
92
|
-
# @api private
|
93
|
-
def entity_path
|
94
|
-
model_root.join('entities', "#{ model_name_underscored }.rb").to_s
|
95
|
-
end
|
96
|
-
|
97
|
-
# @since 0.5.0
|
98
|
-
# @api private
|
99
|
-
def repository_path
|
100
|
-
model_root.join('repositories', "#{ model_name_underscored }_repository.rb").to_s
|
101
|
-
end
|
102
|
-
|
103
|
-
# @since 0.9.1
|
104
|
-
# @api private
|
105
|
-
def migration_path
|
106
|
-
timestamp = Time.now.utc.strftime(Migration::TIMESTAMP_FORMAT)
|
107
|
-
filename = Migration::FILENAME_PATTERN % { timestamp: timestamp, name: "create_#{table_name}"}
|
108
|
-
Hanami::Model.configuration.migrations.join(filename)
|
109
|
-
end
|
110
|
-
|
111
|
-
# @since 0.5.0
|
112
|
-
# @api private
|
113
|
-
def entity_spec_path
|
114
|
-
target_path.join('spec', project_name, 'entities', "#{ model_name_underscored }_spec.rb")
|
115
|
-
end
|
116
|
-
|
117
|
-
# @since 0.5.0
|
118
|
-
# @api private
|
119
|
-
def repository_spec_path
|
120
|
-
target_path.join('spec', project_name, 'repositories',
|
121
|
-
"#{ model_name_underscored }_repository_spec.rb")
|
122
|
-
end
|
123
|
-
|
124
|
-
# @since 0.5.0
|
125
|
-
# @api private
|
126
|
-
def model_name_underscored
|
127
|
-
input
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|