hanami 0.0.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +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
|