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,101 @@
|
|
1
|
+
module Hanami
|
2
|
+
# An application name.
|
3
|
+
#
|
4
|
+
# @since 0.2.1
|
5
|
+
class ApplicationName
|
6
|
+
|
7
|
+
# A list of words that are prohibited from forming the application name
|
8
|
+
#
|
9
|
+
# @since 0.2.1
|
10
|
+
RESERVED_WORDS = %w(hanami).freeze
|
11
|
+
|
12
|
+
# Initialize and check against reserved words
|
13
|
+
#
|
14
|
+
# An application name needs to be translated in quite a few ways:
|
15
|
+
# First, it must be checked against a list of reserved words and rejected
|
16
|
+
# if it is invalid. Secondly, assuming it is not invalid, it must be able
|
17
|
+
# to be output roughly as given, but with the following changes:
|
18
|
+
#
|
19
|
+
# 1. downcased,
|
20
|
+
# 2. with surrounding spaces removed,
|
21
|
+
# 3. with internal whitespace rendered as underscores
|
22
|
+
# 4. with underscores de-duplicated
|
23
|
+
#
|
24
|
+
# which is the default output. It must also be transformable into an
|
25
|
+
# environment variable.
|
26
|
+
#
|
27
|
+
# @return [Hanami::ApplicationName] a new instance of the application name
|
28
|
+
#
|
29
|
+
# @since 0.2.1
|
30
|
+
def initialize(name)
|
31
|
+
@name = sanitize(name)
|
32
|
+
ensure_validity!
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns the cleaned application name.
|
36
|
+
#
|
37
|
+
# @return [String] the santized name
|
38
|
+
#
|
39
|
+
# @example
|
40
|
+
# ApplicationName.new("my-App ").to_s # => "my-app"
|
41
|
+
#
|
42
|
+
# @since 0.2.1
|
43
|
+
def to_s
|
44
|
+
@name
|
45
|
+
end
|
46
|
+
|
47
|
+
# Returns the application name uppercased with non-alphanumeric characters
|
48
|
+
# as underscores.
|
49
|
+
#
|
50
|
+
# @return [String] the upcased name
|
51
|
+
#
|
52
|
+
# @example
|
53
|
+
# ApplicationName.new("my-app").to_env_s => "MY_APP"
|
54
|
+
#
|
55
|
+
# @since 0.2.1
|
56
|
+
def to_env_s
|
57
|
+
@name.upcase.gsub(/\W/, '_')
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns true if a potential application name matches one of the reserved
|
61
|
+
# words.
|
62
|
+
#
|
63
|
+
# @param name [String] the application name
|
64
|
+
# @return [TrueClass, FalseClass] the result of the check
|
65
|
+
#
|
66
|
+
# @example
|
67
|
+
# Hanami::ApplicationName.invalid?("hanami") # => true
|
68
|
+
#
|
69
|
+
# @since 0.2.1
|
70
|
+
def self.invalid?(name)
|
71
|
+
RESERVED_WORDS.include?(name)
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
# Raises RuntimeError with explanation if the provided name is invalid.
|
77
|
+
#
|
78
|
+
# @api private
|
79
|
+
# @since 0.2.1
|
80
|
+
def ensure_validity!
|
81
|
+
if self.class.invalid?(@name)
|
82
|
+
raise RuntimeError,
|
83
|
+
"application name must not be any one of the following: " +
|
84
|
+
RESERVED_WORDS.join(", ")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# Cleans a string to be a functioning application name.
|
89
|
+
#
|
90
|
+
# @api private
|
91
|
+
# @since 0.2.1
|
92
|
+
def sanitize(name)
|
93
|
+
name
|
94
|
+
.downcase
|
95
|
+
.strip
|
96
|
+
.gsub(/\s/, '_')
|
97
|
+
.gsub(/_{2,}/, '_')
|
98
|
+
.gsub(/-/, '_')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
data/lib/hanami/cli.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'hanami/commands/console'
|
3
|
+
require 'hanami/commands/new/app'
|
4
|
+
require 'hanami/commands/new/container'
|
5
|
+
|
6
|
+
module Hanami
|
7
|
+
class Cli < Thor
|
8
|
+
# include Thor::Actions
|
9
|
+
|
10
|
+
desc 'version', 'prints Hanami version'
|
11
|
+
long_desc <<-EOS
|
12
|
+
`hanami version` prints the version of the bundled hanami gem.
|
13
|
+
EOS
|
14
|
+
def version
|
15
|
+
require 'hanami/version'
|
16
|
+
puts "v#{ Hanami::VERSION }"
|
17
|
+
end
|
18
|
+
|
19
|
+
desc 'server', 'starts a hanami server'
|
20
|
+
long_desc <<-EOS
|
21
|
+
`hanami server` starts a server for the current hanami project.
|
22
|
+
|
23
|
+
$ > hanami server
|
24
|
+
|
25
|
+
$ > hanami server -p 4500
|
26
|
+
EOS
|
27
|
+
method_option :port, aliases: '-p', desc: 'The port to run the server on, '
|
28
|
+
method_option :server, desc: 'choose a specific Rack::Handler, e.g. webrick, thin etc'
|
29
|
+
method_option :rackup, desc: 'a rackup configuration file path to load (config.ru)'
|
30
|
+
method_option :host, desc: 'the host address to bind to'
|
31
|
+
method_option :debug, desc: 'turn on debug output'
|
32
|
+
method_option :warn, desc: 'turn on warnings'
|
33
|
+
method_option :daemonize, desc: 'if true, the server will daemonize itself (fork, detach, etc)'
|
34
|
+
method_option :pid, desc: 'path to write a pid file after daemonize'
|
35
|
+
method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
|
36
|
+
method_option :code_reloading, desc: 'code reloading', type: :boolean, default: true
|
37
|
+
method_option :help, desc: 'displays the usage message'
|
38
|
+
def server
|
39
|
+
if options[:help]
|
40
|
+
invoke :help, ['server']
|
41
|
+
else
|
42
|
+
require 'hanami/commands/server'
|
43
|
+
Hanami::Commands::Server.new(options).start
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
desc 'console', 'starts a hanami console'
|
48
|
+
long_desc <<-EOS
|
49
|
+
`hanami console` starts the interactive hanami console.
|
50
|
+
|
51
|
+
$ > hanami console --engine=pry
|
52
|
+
EOS
|
53
|
+
method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
|
54
|
+
method_option :engine, desc: "choose a specific console engine: (#{Hanami::Commands::Console::ENGINES.keys.join('/')})"
|
55
|
+
method_option :help, desc: 'displays the usage method'
|
56
|
+
def console
|
57
|
+
if options[:help]
|
58
|
+
invoke :help, ['console']
|
59
|
+
else
|
60
|
+
Hanami::Commands::Console.new(options).start
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
desc 'new APPLICATION_NAME', 'generate a new hanami project'
|
65
|
+
long_desc <<-EOS
|
66
|
+
`hanami new` creates a new hanami project.
|
67
|
+
You can specify various options such as the database to be used as well as the path and architecture.
|
68
|
+
|
69
|
+
$ > hanami new fancy_app --application_name=admin
|
70
|
+
|
71
|
+
$ > hanami new fancy_app --arch=app
|
72
|
+
|
73
|
+
$ > hanami new fancy_app --hanami-head=true
|
74
|
+
EOS
|
75
|
+
method_option :database, aliases: ['-d', '--db'], desc: "application database (#{Hanami::Generators::DatabaseConfig::SUPPORTED_ENGINES.keys.join('/')})", default: Hanami::Generators::DatabaseConfig::DEFAULT_ENGINE
|
76
|
+
method_option :architecture, aliases: ['-a', '--arch'], desc: 'project architecture (container/app)', default: Hanami::Commands::New::Abstract::DEFAULT_ARCHITECTURE
|
77
|
+
method_option :application_name, desc: 'application name, only for container', default: Hanami::Commands::New::Container::DEFAULT_APPLICATION_NAME
|
78
|
+
method_option :application_base_url, desc: 'application base url', default: Hanami::Commands::New::Abstract::DEFAULT_APPLICATION_BASE_URL
|
79
|
+
method_option :test, desc: "project test framework (#{Hanami::Generators::TestFramework::VALID_FRAMEWORKS.join('/')})", default: Hanami::Hanamirc::DEFAULT_TEST_SUITE
|
80
|
+
method_option :hanami_head, desc: 'use Hanami HEAD (true/false)', type: :boolean, default: false
|
81
|
+
method_option :help, desc: 'displays the usage method'
|
82
|
+
def new(application_name)
|
83
|
+
if options[:help]
|
84
|
+
invoke :help, ['new']
|
85
|
+
elsif options[:architecture] == 'app'
|
86
|
+
Hanami::Commands::New::App.new(options, application_name).start
|
87
|
+
else
|
88
|
+
Hanami::Commands::New::Container.new(options, application_name).start
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
desc 'routes', 'prints the routes'
|
93
|
+
long_desc <<-EOS
|
94
|
+
`hanami routes` outputs all the registered routes to the console.
|
95
|
+
EOS
|
96
|
+
method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
|
97
|
+
method_option :help, desc: 'displays the usage method'
|
98
|
+
def routes
|
99
|
+
if options[:help]
|
100
|
+
invoke :help, ['routes']
|
101
|
+
else
|
102
|
+
require 'hanami/commands/routes'
|
103
|
+
Hanami::Commands::Routes.new(options).start
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
require 'hanami/cli_sub_commands/db'
|
108
|
+
register Hanami::CliSubCommands::DB, 'db', 'db [SUBCOMMAND]', 'manage set of DB operations'
|
109
|
+
|
110
|
+
require 'hanami/cli_sub_commands/generate'
|
111
|
+
register Hanami::CliSubCommands::Generate, 'generate', 'generate [SUBCOMMAND]', 'generate hanami classes'
|
112
|
+
|
113
|
+
require 'hanami/cli_sub_commands/destroy'
|
114
|
+
register Hanami::CliSubCommands::Destroy, 'destroy', 'destroy [SUBCOMMAND]', 'destroy hanami classes'
|
115
|
+
|
116
|
+
require 'hanami/cli_sub_commands/assets'
|
117
|
+
register Hanami::CliSubCommands::Assets, 'assets', 'assets [SUBCOMMAND]', 'manage assets'
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Hanami
|
2
|
+
class CliSubCommands
|
3
|
+
# A set of subcommands related to assets
|
4
|
+
#
|
5
|
+
# It is run with:
|
6
|
+
#
|
7
|
+
# `bundle exec hanami assets`
|
8
|
+
#
|
9
|
+
# @since 0.6.0
|
10
|
+
# @api private
|
11
|
+
class Assets < Thor
|
12
|
+
namespace :assets
|
13
|
+
|
14
|
+
desc 'precompile', 'precompile assets for deployment'
|
15
|
+
def precompile
|
16
|
+
require 'hanami/commands/assets/precompile'
|
17
|
+
Hanami::Commands::Assets::Precompile.new(options, environment).start
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
# @since 0.6.0
|
23
|
+
# @api private
|
24
|
+
def environment
|
25
|
+
Hanami::Environment.new(options)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
module Hanami
|
2
|
+
class CliSubCommands
|
3
|
+
# A set of subcommands related to DB
|
4
|
+
#
|
5
|
+
# It is run with:
|
6
|
+
#
|
7
|
+
# `bundle exec hanami db`
|
8
|
+
#
|
9
|
+
# @since 0.6.0
|
10
|
+
# @api private
|
11
|
+
class DB < Thor
|
12
|
+
namespace :db
|
13
|
+
|
14
|
+
desc 'console', 'start DB console'
|
15
|
+
method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
|
16
|
+
def console(name = nil)
|
17
|
+
if options[:help]
|
18
|
+
invoke :help, ['console']
|
19
|
+
else
|
20
|
+
require 'hanami/commands/db/console'
|
21
|
+
Hanami::Commands::DB::Console.new(options, name).start
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
desc 'create', 'create database for current environment'
|
26
|
+
method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
|
27
|
+
def create
|
28
|
+
if options[:help]
|
29
|
+
invoke :help, ['create']
|
30
|
+
else
|
31
|
+
assert_allowed_environment!
|
32
|
+
require 'hanami/commands/db/create'
|
33
|
+
Hanami::Commands::DB::Create.new(options).start
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
desc 'drop', 'drop database for current environment'
|
38
|
+
method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
|
39
|
+
def drop
|
40
|
+
if options[:help]
|
41
|
+
invoke :help, ['drop']
|
42
|
+
else
|
43
|
+
assert_allowed_environment!
|
44
|
+
require 'hanami/commands/db/drop'
|
45
|
+
Hanami::Commands::DB::Drop.new(options).start
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
desc 'migrate', 'migrate database for current environment'
|
50
|
+
method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
|
51
|
+
def migrate(version = nil)
|
52
|
+
if options[:help]
|
53
|
+
invoke :help, ['migrate']
|
54
|
+
else
|
55
|
+
require 'hanami/commands/db/migrate'
|
56
|
+
Hanami::Commands::DB::Migrate.new(options, version).start
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
desc 'apply', 'migrate, dump schema, delete migrations (experimental)'
|
61
|
+
method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
|
62
|
+
def apply
|
63
|
+
if options[:help]
|
64
|
+
invoke :help, ['apply']
|
65
|
+
else
|
66
|
+
assert_development_environment!
|
67
|
+
require 'hanami/commands/db/apply'
|
68
|
+
Hanami::Commands::DB::Apply.new(options).start
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
desc 'prepare', 'create and migrate database'
|
73
|
+
method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
|
74
|
+
def prepare
|
75
|
+
if options[:help]
|
76
|
+
invoke :help, ['prepare']
|
77
|
+
else
|
78
|
+
assert_allowed_environment!
|
79
|
+
require 'hanami/commands/db/prepare'
|
80
|
+
Hanami::Commands::DB::Prepare.new(options).start
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# @since 0.6.0
|
85
|
+
# @api private
|
86
|
+
desc 'version', 'current database version'
|
87
|
+
method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
|
88
|
+
def version
|
89
|
+
if options[:help]
|
90
|
+
invoke :help, ['version']
|
91
|
+
else
|
92
|
+
require 'hanami/commands/db/version'
|
93
|
+
Hanami::Commands::DB::Version.new(options).start
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
# @since 0.6.0
|
100
|
+
# @api private
|
101
|
+
def environment
|
102
|
+
Hanami::Environment.new(options)
|
103
|
+
end
|
104
|
+
|
105
|
+
# @since 0.6.0
|
106
|
+
# @api private
|
107
|
+
def assert_allowed_environment!
|
108
|
+
if environment.environment?(:production)
|
109
|
+
puts "Can't run this command in production mode"
|
110
|
+
exit 1
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
# @since 0.6.0
|
115
|
+
# @api private
|
116
|
+
def assert_development_environment!
|
117
|
+
unless environment.environment?(:development)
|
118
|
+
puts "This command can be ran only in development mode"
|
119
|
+
exit 1
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'hanami/routing/route'
|
2
|
+
require 'hanami/commands/generate/action'
|
3
|
+
|
4
|
+
module Hanami
|
5
|
+
class CliSubCommands
|
6
|
+
class Destroy < Thor
|
7
|
+
include Thor::Actions
|
8
|
+
namespace :destroy
|
9
|
+
|
10
|
+
desc 'action APPLICATION_NAME CONTROLLER_NAME#ACTION_NAME', 'destroy a hanami action'
|
11
|
+
long_desc <<-EOS
|
12
|
+
`hanami destroy action` will destroy an an action, view and template along with specs and a route.
|
13
|
+
|
14
|
+
For Application architecture the application name is 'app'. For Container architecture the default application is called 'web'.
|
15
|
+
|
16
|
+
> $ hanami destroy action app cars#index
|
17
|
+
|
18
|
+
> $ hanami destroy action other-app cars#index
|
19
|
+
|
20
|
+
> $ hanami destroy action web cars#create --method=post
|
21
|
+
EOS
|
22
|
+
|
23
|
+
method_option :method, desc: "The HTTP method used when the route was generated. Must be one of (#{Hanami::Routing::Route::VALID_HTTP_VERBS.join('/')})", default: Hanami::Commands::Generate::Action::DEFAULT_HTTP_METHOD
|
24
|
+
method_option :url, desc: 'Relative URL for action, will be used for the route', default: nil
|
25
|
+
method_option :template, desc: 'Extension used when the template was generated. Default is defined through your .hanamirc file.'
|
26
|
+
|
27
|
+
def actions(application_name, controller_and_action_name)
|
28
|
+
if options[:help]
|
29
|
+
invoke :help, ['action']
|
30
|
+
else
|
31
|
+
Hanami::Commands::Generate::Action.new(options, application_name, controller_and_action_name).destroy.start
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
desc 'migration NAME', 'destroy a migration'
|
36
|
+
long_desc <<-EOS
|
37
|
+
`hanami destroy migration` will destroy a migration file.
|
38
|
+
|
39
|
+
> $ hanami destroy migration create_books
|
40
|
+
EOS
|
41
|
+
|
42
|
+
def migration(name)
|
43
|
+
if options[:help]
|
44
|
+
invoke :help, ['migration']
|
45
|
+
else
|
46
|
+
require 'hanami/commands/generate/migration'
|
47
|
+
Hanami::Commands::Generate::Migration.new(options, name).destroy.start
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
desc 'model NAME', 'destroy an entity'
|
52
|
+
long_desc <<-EOS
|
53
|
+
`hanami destroy model` will destroy an entity along with repository
|
54
|
+
and corresponding tests
|
55
|
+
|
56
|
+
> $ hanami generate model car
|
57
|
+
EOS
|
58
|
+
|
59
|
+
def model(name)
|
60
|
+
if options[:help]
|
61
|
+
invoke :help, ['model']
|
62
|
+
else
|
63
|
+
require 'hanami/commands/generate/model'
|
64
|
+
Hanami::Commands::Generate::Model.new(options, name).destroy.start
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
desc 'application NAME', 'destroy an application'
|
69
|
+
long_desc <<-EOS
|
70
|
+
`hanami destroy application` will destroy an application, along with templates and specs.
|
71
|
+
|
72
|
+
> $ hanami destroy application api
|
73
|
+
EOS
|
74
|
+
def application(name)
|
75
|
+
if options[:help]
|
76
|
+
invoke :help, ['app']
|
77
|
+
else
|
78
|
+
require 'hanami/commands/generate/app'
|
79
|
+
Hanami::Commands::Generate::App.new(options, name).destroy.start
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
desc 'mailer NAME', 'destroy a mailer'
|
84
|
+
long_desc <<-EOS
|
85
|
+
`hanami destroy mailer` will destroy a mailer, along with templates and specs.
|
86
|
+
|
87
|
+
> $ hanami destroy mailer forgot_password
|
88
|
+
EOS
|
89
|
+
|
90
|
+
def mailer(name)
|
91
|
+
if options[:help]
|
92
|
+
invoke :help, ['mailer']
|
93
|
+
else
|
94
|
+
require 'hanami/commands/generate/mailer'
|
95
|
+
|
96
|
+
options[:behavior] = :revoke
|
97
|
+
Hanami::Commands::Generate::Mailer.new(options, name).destroy.start
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|