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,150 +0,0 @@
|
|
1
|
-
require 'hanami/routing/route'
|
2
|
-
require 'hanami/commands/generate/action'
|
3
|
-
require 'hanami/commands/generate/mailer'
|
4
|
-
|
5
|
-
module Hanami
|
6
|
-
class CliSubCommands
|
7
|
-
# A set of generator subcommands
|
8
|
-
#
|
9
|
-
# It is run with:
|
10
|
-
#
|
11
|
-
# `bundle exec hanami generate`
|
12
|
-
#
|
13
|
-
# @since 0.6.0
|
14
|
-
# @api private
|
15
|
-
class Generate < Thor
|
16
|
-
extend CliBase
|
17
|
-
include Thor::Actions
|
18
|
-
|
19
|
-
namespace :generate
|
20
|
-
|
21
|
-
desc 'action APPLICATION_NAME CONTROLLER_NAME#ACTION_NAME', 'Generate a hanami action'
|
22
|
-
long_desc <<-EOS
|
23
|
-
`hanami generate action` generates an an action, view and template along with specs and a route.
|
24
|
-
|
25
|
-
For Application architecture the application name is 'app'. For Container architecture the default application is called 'web'.
|
26
|
-
|
27
|
-
> $ hanami generate action app cars#index
|
28
|
-
|
29
|
-
> $ hanami generate action other-app cars#index
|
30
|
-
|
31
|
-
> $ hanami generate action web cars#create --method=post
|
32
|
-
EOS
|
33
|
-
method_option :method, desc: "The HTTP method to be used for the generated route. Default is #{Hanami::Commands::Generate::Action::DEFAULT_HTTP_METHOD}. Must be one of (#{Hanami::Routing::Route::VALID_HTTP_VERBS.join('/')})"
|
34
|
-
method_option :url, desc: 'Relative URL for action, will be used for the route', default: nil
|
35
|
-
method_option :test, desc: 'Defines the testing Framework to be used. Default is defined through your .hanamirc file.'
|
36
|
-
method_option :skip_view, desc: 'Skip the generation of the view. Also skips template generation.', default: false, type: :boolean
|
37
|
-
method_option :template, desc: 'Extension to be used for the generated template. Default is defined through your .hanamirc file.'
|
38
|
-
# @since 0.6.0
|
39
|
-
# @api private
|
40
|
-
def actions(application_name = nil, controller_and_action_name)
|
41
|
-
if Hanami::Environment.new(options).container? && application_name.nil?
|
42
|
-
msg = "ERROR: \"hanami generate action\" was called with arguments [\"#{controller_and_action_name}\"]\n" \
|
43
|
-
"Usage: \"hanami generate action APPLICATION_NAME CONTROLLER_NAME#ACTION_NAME\""
|
44
|
-
fail Error, msg
|
45
|
-
end
|
46
|
-
|
47
|
-
if options[:help]
|
48
|
-
invoke :help, ['action']
|
49
|
-
else
|
50
|
-
Hanami::Commands::Generate::Action.new(options, application_name, controller_and_action_name).start
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
desc 'migration NAME', 'Generate a migration'
|
55
|
-
long_desc <<-EOS
|
56
|
-
`hanami generate migration` will generate an empty migration file.
|
57
|
-
|
58
|
-
> $ hanami generate migration do_something
|
59
|
-
EOS
|
60
|
-
# @api private
|
61
|
-
def migration(name)
|
62
|
-
if options[:help]
|
63
|
-
invoke :help, ['migration']
|
64
|
-
else
|
65
|
-
require 'hanami/commands/generate/migration'
|
66
|
-
Hanami::Commands::Generate::Migration.new(options, name).start
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
desc 'model NAME', 'Generate an entity'
|
71
|
-
long_desc <<-EOS
|
72
|
-
`hanami generate model` will generate an entity along with repository
|
73
|
-
and corresponding tests. The name of the model can contain slashes to
|
74
|
-
indicate module names.
|
75
|
-
|
76
|
-
> $ hanami generate model car
|
77
|
-
|
78
|
-
> $ hanami generate model vehicles/car
|
79
|
-
EOS
|
80
|
-
method_option :test, desc: 'Defines the testing Framework to be used. Default is defined through your .hanamirc file.'
|
81
|
-
method_option :skip_migration, desc: 'Skips the generation of a migration to create the model\'s table', default: false, type: :boolean
|
82
|
-
# @api private
|
83
|
-
def model(name)
|
84
|
-
if options[:help]
|
85
|
-
invoke :help, ['model']
|
86
|
-
else
|
87
|
-
require 'hanami/commands/generate/model'
|
88
|
-
Hanami::Commands::Generate::Model.new(options, name).start
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
desc 'mailer NAME', 'Generate a mailer'
|
93
|
-
long_desc <<-EOS
|
94
|
-
`hanami generate mailer` will generate an empty mailer, along with templates and specs.
|
95
|
-
|
96
|
-
> $ hanami generate mailer forgot_password
|
97
|
-
> $ hanami generate mailer forgot_password --to "'log@bookshelf.com'" --from "'support@bookshelf.com'" --subject "'New Password'"
|
98
|
-
EOS
|
99
|
-
method_option :to, desc: 'Sender email', default: Hanami::Commands::Generate::Mailer::DEFAULT_TO
|
100
|
-
method_option :from, desc: 'Sendee email', default: Hanami::Commands::Generate::Mailer::DEFAULT_FROM
|
101
|
-
method_option :subject, desc: 'Email subject', default: Hanami::Commands::Generate::Mailer::DEFAULT_SUBJECT
|
102
|
-
# @api private
|
103
|
-
def mailer(name)
|
104
|
-
if options[:help]
|
105
|
-
invoke :help, ['mailer']
|
106
|
-
else
|
107
|
-
Hanami::Commands::Generate::Mailer.new(options, name).start
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
desc 'app APPLICATION_NAME', 'Generate an app'
|
112
|
-
long_desc <<-EOS
|
113
|
-
`hanami generate app` creates a new app inside the 'apps' directory.
|
114
|
-
|
115
|
-
It can only be called for hanami applications with container architecture.
|
116
|
-
|
117
|
-
> $ hanami generate app admin
|
118
|
-
|
119
|
-
> $ hanami generate app reporting --application_base_url=/reports
|
120
|
-
EOS
|
121
|
-
method_option :application_base_url, desc: 'Base URL for the new app. If missing, then it is inferred from APPLICATION_NAME'
|
122
|
-
# @api private
|
123
|
-
def app(application_name)
|
124
|
-
if options[:help]
|
125
|
-
invoke :help, ['app']
|
126
|
-
else
|
127
|
-
require 'hanami/commands/generate/app'
|
128
|
-
Hanami::Commands::Generate::App.new(options, application_name).start
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
desc 'secret APPLICATION_NAME', 'Print a fresh secret token for production'
|
133
|
-
long_desc <<-EOS
|
134
|
-
`hanami generate secret` prints a new secret for a given app
|
135
|
-
|
136
|
-
> $ hanami generate secret web
|
137
|
-
|
138
|
-
EOS
|
139
|
-
# @api private
|
140
|
-
def secret(application_name = nil)
|
141
|
-
if options[:help]
|
142
|
-
invoke :help, ['secret']
|
143
|
-
else
|
144
|
-
require 'hanami/commands/generate/secret_token'
|
145
|
-
Hanami::Commands::Generate::SecretToken.new(application_name).start
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
data/lib/hanami/commands/apps.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'hanami/assets'
|
2
|
-
require 'hanami/commands/command'
|
3
|
-
|
4
|
-
module Hanami
|
5
|
-
module Commands
|
6
|
-
# @api private
|
7
|
-
class Assets
|
8
|
-
# @api private
|
9
|
-
class Precompile < Command
|
10
|
-
requires 'apps.assets.configurations'
|
11
|
-
|
12
|
-
# @api private
|
13
|
-
def start
|
14
|
-
Hanami::Assets.precompile(configurations)
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
# @api private
|
20
|
-
def configurations
|
21
|
-
requirements['apps.assets.configurations']
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require 'hanami'
|
2
|
-
require 'hanami/environment'
|
3
|
-
require 'hanami/components'
|
4
|
-
require 'concurrent'
|
5
|
-
|
6
|
-
module Hanami
|
7
|
-
module Commands
|
8
|
-
# Abstract command
|
9
|
-
#
|
10
|
-
# @since 0.9.0
|
11
|
-
class Command
|
12
|
-
# @since 0.9.0
|
13
|
-
# @api private
|
14
|
-
def self.inherited(component)
|
15
|
-
super
|
16
|
-
|
17
|
-
component.class_eval do
|
18
|
-
@_requirements = Concurrent::Array.new
|
19
|
-
extend ClassMethods
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
# Class level interface
|
24
|
-
#
|
25
|
-
# @since 0.9.0
|
26
|
-
# @api private
|
27
|
-
module ClassMethods
|
28
|
-
# @since 0.9.0
|
29
|
-
# @api private
|
30
|
-
def register_as(name)
|
31
|
-
Hanami::Components.register(name, self)
|
32
|
-
end
|
33
|
-
|
34
|
-
# @since 0.9.0
|
35
|
-
# @api private
|
36
|
-
def requires(*names)
|
37
|
-
requirements.concat(names)
|
38
|
-
end
|
39
|
-
|
40
|
-
# @since 0.9.0
|
41
|
-
# @api private
|
42
|
-
def requirements
|
43
|
-
@_requirements
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# @param options [Hash] Environment's options
|
48
|
-
#
|
49
|
-
# @since 0.9.0
|
50
|
-
# @api private
|
51
|
-
def initialize(options)
|
52
|
-
@environment = Hanami::Environment.new(options)
|
53
|
-
@environment.require_project_environment
|
54
|
-
@configuration = Hanami.configuration
|
55
|
-
|
56
|
-
requirements.resolved('environment', environment)
|
57
|
-
requirements.resolve(self.class.requirements)
|
58
|
-
end
|
59
|
-
|
60
|
-
private
|
61
|
-
|
62
|
-
# @since 0.9.0
|
63
|
-
# @api private
|
64
|
-
attr_reader :environment
|
65
|
-
|
66
|
-
# @since 0.9.0
|
67
|
-
# @api private
|
68
|
-
attr_reader :configuration
|
69
|
-
|
70
|
-
# @since 0.9.0
|
71
|
-
# @api private
|
72
|
-
def requirements
|
73
|
-
Hanami::Components
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,107 +0,0 @@
|
|
1
|
-
require 'hanami/commands/command'
|
2
|
-
|
3
|
-
module Hanami
|
4
|
-
# @api private
|
5
|
-
module Commands
|
6
|
-
# REPL that supports different engines.
|
7
|
-
#
|
8
|
-
# It is run with:
|
9
|
-
#
|
10
|
-
# `bundle exec hanami console`
|
11
|
-
#
|
12
|
-
# @since 0.1.0
|
13
|
-
# @api private
|
14
|
-
class Console < Command
|
15
|
-
requires 'all'
|
16
|
-
|
17
|
-
# Implements console code reloading
|
18
|
-
#
|
19
|
-
# @since 0.2.0
|
20
|
-
module CodeReloading
|
21
|
-
# @since 0.2.0
|
22
|
-
def reload!
|
23
|
-
puts 'Reloading...'
|
24
|
-
Kernel.exec "#{$PROGRAM_NAME} console"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# Supported engines
|
29
|
-
#
|
30
|
-
# @since 0.2.0
|
31
|
-
# @api private
|
32
|
-
ENGINES = {
|
33
|
-
'pry' => 'Pry',
|
34
|
-
'ripl' => 'Ripl',
|
35
|
-
'irb' => 'IRB'
|
36
|
-
}.freeze
|
37
|
-
|
38
|
-
# @api private
|
39
|
-
DEFAULT_ENGINE = ['irb'].freeze
|
40
|
-
|
41
|
-
# @since 0.1.0
|
42
|
-
# @api private
|
43
|
-
attr_reader :options
|
44
|
-
|
45
|
-
# @param options [Hash] Environment's options
|
46
|
-
#
|
47
|
-
# @since 0.1.0
|
48
|
-
# @api private
|
49
|
-
#
|
50
|
-
# @see Hanami::Environment#initialize
|
51
|
-
def initialize(options)
|
52
|
-
super(options)
|
53
|
-
|
54
|
-
@options = @environment.to_options
|
55
|
-
end
|
56
|
-
|
57
|
-
# @since 0.1.0
|
58
|
-
# @api private
|
59
|
-
def start
|
60
|
-
prepare
|
61
|
-
engine.start
|
62
|
-
end
|
63
|
-
|
64
|
-
# @since 0.1.0
|
65
|
-
# @api private
|
66
|
-
def engine
|
67
|
-
load_engine options.fetch(:engine) { engine_lookup }
|
68
|
-
end
|
69
|
-
|
70
|
-
private
|
71
|
-
|
72
|
-
# @since 0.9.0
|
73
|
-
# @api private
|
74
|
-
def prepare
|
75
|
-
# Clear out ARGV so Pry/IRB don't attempt to parse the rest
|
76
|
-
ARGV.shift until ARGV.empty?
|
77
|
-
|
78
|
-
# Add convenience methods to the main:Object binding
|
79
|
-
TOPLEVEL_BINDING.eval('self').__send__(:include, CodeReloading)
|
80
|
-
end
|
81
|
-
|
82
|
-
# @since 0.1.0
|
83
|
-
# @api private
|
84
|
-
def engine_lookup
|
85
|
-
(ENGINES.find { |_, klass| Object.const_defined?(klass) } || DEFAULT_ENGINE).first
|
86
|
-
end
|
87
|
-
|
88
|
-
# @since 0.1.0
|
89
|
-
# @api private
|
90
|
-
#
|
91
|
-
# rubocop:disable Lint/HandleExceptions
|
92
|
-
# rubocop:disable Lint/EnsureReturn
|
93
|
-
def load_engine(engine)
|
94
|
-
require engine
|
95
|
-
rescue LoadError
|
96
|
-
ensure
|
97
|
-
return Object.const_get(
|
98
|
-
ENGINES.fetch(engine) do
|
99
|
-
raise ArgumentError.new("Unknown console engine: `#{engine}'")
|
100
|
-
end
|
101
|
-
)
|
102
|
-
end
|
103
|
-
# rubocop:enable Lint/EnsureReturn
|
104
|
-
# rubocop:enable Lint/HandleExceptions
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'hanami/commands/command'
|
2
|
-
|
3
|
-
module Hanami
|
4
|
-
module Commands
|
5
|
-
# @api private
|
6
|
-
class DB
|
7
|
-
# @api private
|
8
|
-
class Apply < Command
|
9
|
-
requires 'model.sql'
|
10
|
-
|
11
|
-
# @api private
|
12
|
-
def start
|
13
|
-
require 'hanami/model/migrator'
|
14
|
-
Hanami::Model::Migrator.apply
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'hanami/utils/class'
|
2
|
-
require 'hanami/commands/command'
|
3
|
-
|
4
|
-
module Hanami
|
5
|
-
module Commands
|
6
|
-
# @api private
|
7
|
-
class DB
|
8
|
-
# @api private
|
9
|
-
class Console < Command
|
10
|
-
requires 'model.sql'
|
11
|
-
|
12
|
-
# @api private
|
13
|
-
def initialize(options, name)
|
14
|
-
super(options)
|
15
|
-
@name = name
|
16
|
-
end
|
17
|
-
|
18
|
-
# @api private
|
19
|
-
def start
|
20
|
-
exec console.connection_string
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
# @api private
|
26
|
-
attr_reader :name
|
27
|
-
|
28
|
-
# @api private
|
29
|
-
def configuration
|
30
|
-
Hanami::Components['model.configuration']
|
31
|
-
end
|
32
|
-
|
33
|
-
# @api private
|
34
|
-
def console
|
35
|
-
require 'hanami/model/sql/console'
|
36
|
-
Hanami::Model::Sql::Console.new(configuration.url)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'hanami/commands/command'
|
2
|
-
|
3
|
-
module Hanami
|
4
|
-
module Commands
|
5
|
-
# @api private
|
6
|
-
class DB
|
7
|
-
# @api private
|
8
|
-
class Create < Command
|
9
|
-
requires 'model.configuration'
|
10
|
-
|
11
|
-
# @api private
|
12
|
-
def start
|
13
|
-
require 'hanami/model/migrator'
|
14
|
-
Hanami::Model::Migrator.create
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|