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,127 @@
|
|
|
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
|
+
include Thor::Actions
|
|
17
|
+
|
|
18
|
+
namespace :generate
|
|
19
|
+
|
|
20
|
+
# @since 0.6.0
|
|
21
|
+
# @api private
|
|
22
|
+
desc 'action APPLICATION_NAME CONTROLLER_NAME#ACTION_NAME', 'generate a hanami action'
|
|
23
|
+
long_desc <<-EOS
|
|
24
|
+
`hanami generate action` generates an an action, view and template along with specs and a route.
|
|
25
|
+
|
|
26
|
+
For Application architecture the application name is 'app'. For Container architecture the default application is called 'web'.
|
|
27
|
+
|
|
28
|
+
> $ hanami generate action app cars#index
|
|
29
|
+
|
|
30
|
+
> $ hanami generate action other-app cars#index
|
|
31
|
+
|
|
32
|
+
> $ hanami generate action web cars#create --method=post
|
|
33
|
+
EOS
|
|
34
|
+
method_option :method, desc: "The HTTP method to be used for the generated route. Must be one of (#{Hanami::Routing::Route::VALID_HTTP_VERBS.join('/')})", default: Hanami::Commands::Generate::Action::DEFAULT_HTTP_METHOD
|
|
35
|
+
method_option :url, desc: 'Relative URL for action, will be used for the route', default: nil
|
|
36
|
+
method_option :test, desc: 'Defines the testing Framework to be used. Default is defined through your .hanamirc file.'
|
|
37
|
+
method_option :skip_view, desc: 'Skip the generation of the view. Also skips template generation.', default: false, type: :boolean
|
|
38
|
+
method_option :template, desc: 'Extension to be used for the generated template. Default is defined through your .hanamirc file.'
|
|
39
|
+
def actions(application_name = nil, controller_and_action_name)
|
|
40
|
+
if Hanami::Environment.new(options).container? && application_name.nil?
|
|
41
|
+
msg = "ERROR: \"hanami generate action\" was called with arguments [\"#{controller_and_action_name}\"]\n" \
|
|
42
|
+
"Usage: \"hanami action APPLICATION_NAME CONTROLLER_NAME#ACTION_NAME\""
|
|
43
|
+
fail Error, msg
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
if options[:help]
|
|
47
|
+
invoke :help, ['action']
|
|
48
|
+
else
|
|
49
|
+
Hanami::Commands::Generate::Action.new(options, application_name, controller_and_action_name).start
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
desc 'migration NAME', 'generate a migration'
|
|
54
|
+
long_desc <<-EOS
|
|
55
|
+
`hanami generate migration` will generate an empty migration file.
|
|
56
|
+
|
|
57
|
+
> $ hanami generate migration do_something
|
|
58
|
+
EOS
|
|
59
|
+
def migration(name)
|
|
60
|
+
if options[:help]
|
|
61
|
+
invoke :help, ['migration']
|
|
62
|
+
else
|
|
63
|
+
require 'hanami/commands/generate/migration'
|
|
64
|
+
Hanami::Commands::Generate::Migration.new(options, name).start
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
desc 'model NAME', 'generate an entity'
|
|
69
|
+
long_desc <<-EOS
|
|
70
|
+
`hanami generate model` will generate an entity along with repository
|
|
71
|
+
and corresponding tests. The name of the model can contain slashes to
|
|
72
|
+
indicate module names.
|
|
73
|
+
|
|
74
|
+
> $ hanami generate model car
|
|
75
|
+
|
|
76
|
+
> $ hanami generate model vehicles/car
|
|
77
|
+
EOS
|
|
78
|
+
method_option :test, desc: 'Defines the testing Framework to be used. Default is defined through your .hanamirc file.'
|
|
79
|
+
def model(name)
|
|
80
|
+
if options[:help]
|
|
81
|
+
invoke :help, ['model']
|
|
82
|
+
else
|
|
83
|
+
require 'hanami/commands/generate/model'
|
|
84
|
+
Hanami::Commands::Generate::Model.new(options, name).start
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
desc 'mailer NAME', 'generate a mailer'
|
|
89
|
+
long_desc <<-EOS
|
|
90
|
+
`hanami generate mailer` will generate an empty mailer, along with templates and specs.
|
|
91
|
+
|
|
92
|
+
> $ hanami generate mailer forgot_password
|
|
93
|
+
> $ hanami generate mailer forgot_password --to "'log@bookshelf.com'" --from "'support@bookshelf.com'" --subject "'New Password'"
|
|
94
|
+
EOS
|
|
95
|
+
method_option :to, desc: 'sender email', default: Hanami::Commands::Generate::Mailer::DEFAULT_TO
|
|
96
|
+
method_option :from, desc: 'sendee email', default: Hanami::Commands::Generate::Mailer::DEFAULT_FROM
|
|
97
|
+
method_option :subject, desc: 'email subject', default: Hanami::Commands::Generate::Mailer::DEFAULT_SUBJECT
|
|
98
|
+
def mailer(name)
|
|
99
|
+
if options[:help]
|
|
100
|
+
invoke :help, ['mailer']
|
|
101
|
+
else
|
|
102
|
+
Hanami::Commands::Generate::Mailer.new(options, name).start
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
desc 'app APPLICATION_NAME', 'generate an app'
|
|
107
|
+
long_desc <<-EOS
|
|
108
|
+
`hanami generate app` creates a new app inside the 'apps' directory.
|
|
109
|
+
|
|
110
|
+
It can only be called for hanami applications with container architecture.
|
|
111
|
+
|
|
112
|
+
> $ hanami generate app admin
|
|
113
|
+
|
|
114
|
+
> $ hanami generate app reporting --application_base_url=/reports
|
|
115
|
+
EOS
|
|
116
|
+
method_option :application_base_url, desc: 'Base URL for the new app. If missing, then it is inferred from APPLICATION_NAME'
|
|
117
|
+
def app(application_name)
|
|
118
|
+
if options[:help]
|
|
119
|
+
invoke :help, ['app']
|
|
120
|
+
else
|
|
121
|
+
require 'hanami/commands/generate/app'
|
|
122
|
+
Hanami::Commands::Generate::App.new(options, application_name).start
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'hanami/assets'
|
|
2
|
+
|
|
3
|
+
module Hanami
|
|
4
|
+
module Commands
|
|
5
|
+
class Assets
|
|
6
|
+
class Precompile
|
|
7
|
+
def initialize(options, environment)
|
|
8
|
+
@options = options
|
|
9
|
+
@environment = environment
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def start
|
|
13
|
+
preload_applications
|
|
14
|
+
precompile
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def preload_applications
|
|
20
|
+
@environment.require_application_environment
|
|
21
|
+
|
|
22
|
+
if @environment.container?
|
|
23
|
+
Hanami::Container.new
|
|
24
|
+
else
|
|
25
|
+
Hanami::Application.preload!
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def precompile
|
|
30
|
+
Hanami::Assets.deploy
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
module Hanami
|
|
2
|
+
module Commands
|
|
3
|
+
# REPL that supports different engines.
|
|
4
|
+
#
|
|
5
|
+
# It is run with:
|
|
6
|
+
#
|
|
7
|
+
# `bundle exec hanami console`
|
|
8
|
+
#
|
|
9
|
+
# @since 0.1.0
|
|
10
|
+
# @api private
|
|
11
|
+
class Console
|
|
12
|
+
module Methods
|
|
13
|
+
def reload!
|
|
14
|
+
puts 'Reloading...'
|
|
15
|
+
Kernel.exec "#{$0} console"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
ENGINES = {
|
|
20
|
+
'pry' => 'Pry',
|
|
21
|
+
'ripl' => 'Ripl',
|
|
22
|
+
'irb' => 'IRB'
|
|
23
|
+
}.freeze
|
|
24
|
+
|
|
25
|
+
DEFAULT_ENGINE = 'irb'.freeze
|
|
26
|
+
|
|
27
|
+
# @since 0.1.0
|
|
28
|
+
attr_reader :options
|
|
29
|
+
|
|
30
|
+
# @param options [Hash] Environment's options
|
|
31
|
+
#
|
|
32
|
+
# @since 0.1.0
|
|
33
|
+
# @see Hanami::Environment#initialize
|
|
34
|
+
def initialize(options)
|
|
35
|
+
@environment = Hanami::Environment.new(options)
|
|
36
|
+
@options = @environment.to_options
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @since 0.1.0
|
|
40
|
+
def start
|
|
41
|
+
# Clear out ARGV so Pry/IRB don't attempt to parse the rest
|
|
42
|
+
ARGV.shift until ARGV.empty?
|
|
43
|
+
@environment.require_application_environment
|
|
44
|
+
|
|
45
|
+
# Add convenience methods to the main:Object binding
|
|
46
|
+
TOPLEVEL_BINDING.eval('self').send(:include, Methods)
|
|
47
|
+
|
|
48
|
+
load_application
|
|
49
|
+
engine.start
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# @since 0.1.0
|
|
53
|
+
# @api private
|
|
54
|
+
def engine
|
|
55
|
+
load_engine options.fetch(:engine) { engine_lookup }
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
# @since 0.1.0
|
|
61
|
+
# @api private
|
|
62
|
+
def engine_lookup
|
|
63
|
+
(ENGINES.find { |_, klass| Object.const_defined?(klass) } || DEFAULT_ENGINE).first
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# @since 0.1.0
|
|
67
|
+
# @api private
|
|
68
|
+
def load_engine(engine)
|
|
69
|
+
require engine
|
|
70
|
+
rescue LoadError
|
|
71
|
+
ensure
|
|
72
|
+
return Object.const_get(
|
|
73
|
+
ENGINES.fetch(engine) {
|
|
74
|
+
raise ArgumentError.new("Unknown console engine: #{ engine }")
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# @since 0.1.0
|
|
80
|
+
# @api private
|
|
81
|
+
def load_application
|
|
82
|
+
if @environment.container?
|
|
83
|
+
Hanami::Container.new
|
|
84
|
+
else
|
|
85
|
+
Hanami::Application.preload_applications!
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Hanami
|
|
2
|
+
module Commands
|
|
3
|
+
class DB
|
|
4
|
+
class Abstract
|
|
5
|
+
attr_reader :environment
|
|
6
|
+
|
|
7
|
+
def initialize(options)
|
|
8
|
+
@options = options
|
|
9
|
+
@environment = Hanami::Environment.new(options)
|
|
10
|
+
@environment.require_application_environment
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def start
|
|
14
|
+
raise NotImplementedError
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'hanami/utils/class'
|
|
2
|
+
require 'hanami/commands/db/abstract'
|
|
3
|
+
|
|
4
|
+
module Hanami
|
|
5
|
+
module Commands
|
|
6
|
+
class DB
|
|
7
|
+
class Console < Abstract
|
|
8
|
+
attr_reader :name, :env_options
|
|
9
|
+
|
|
10
|
+
def initialize(options, name)
|
|
11
|
+
super(options)
|
|
12
|
+
@name = name
|
|
13
|
+
@env_options = environment.to_options
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def start
|
|
17
|
+
exec connection_string
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
def config
|
|
23
|
+
if name
|
|
24
|
+
app_constant = Hanami::Utils::Class.load_from_pattern!(Hanami::Utils::String.new(name).classify)
|
|
25
|
+
Hanami::Utils::Class.load_from_pattern!("#{app_constant}::Application").load!
|
|
26
|
+
Hanami::Utils::Class.load_from_pattern!("#{app_constant}::Model").configuration
|
|
27
|
+
else
|
|
28
|
+
Hanami::Model.configuration
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def adapter_config
|
|
33
|
+
config.adapter_config
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def mapper
|
|
37
|
+
config.mapper
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def adapter_class
|
|
41
|
+
Hanami::Utils::Class.load_from_pattern!(adapter_config.class_name, Hanami::Model::Adapters)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def connection_string
|
|
45
|
+
adapter_class.new(mapper, adapter_config.uri).connection_string
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'hanami/commands/db/abstract'
|
|
2
|
+
|
|
3
|
+
module Hanami
|
|
4
|
+
module Commands
|
|
5
|
+
class DB
|
|
6
|
+
class Migrate < Abstract
|
|
7
|
+
def initialize(environment, version)
|
|
8
|
+
super(environment)
|
|
9
|
+
@version = version
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def start
|
|
13
|
+
require 'hanami/model/migrator'
|
|
14
|
+
Hanami::Model::Migrator.migrate(version: @version)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require 'hanami/environment'
|
|
2
|
+
require 'hanami/generators/generatable'
|
|
3
|
+
require 'hanami/generators/test_framework'
|
|
4
|
+
require 'hanami/version'
|
|
5
|
+
require 'hanami/utils/string'
|
|
6
|
+
|
|
7
|
+
module Hanami
|
|
8
|
+
module Commands
|
|
9
|
+
class Generate
|
|
10
|
+
class Abstract
|
|
11
|
+
|
|
12
|
+
include Hanami::Generators::Generatable
|
|
13
|
+
|
|
14
|
+
attr_reader :options, :target_path
|
|
15
|
+
|
|
16
|
+
def initialize(options)
|
|
17
|
+
@options = Hanami::Utils::Hash.new(options).symbolize!
|
|
18
|
+
assert_options!
|
|
19
|
+
|
|
20
|
+
@target_path = Pathname.pwd
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def template_source_path
|
|
24
|
+
generator = self.class.name.split('::').last.downcase
|
|
25
|
+
Pathname.new(::File.dirname(__FILE__) + "/../../generators/#{generator}/").realpath
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def test_framework
|
|
31
|
+
@test_framework ||= Hanami::Generators::TestFramework.new(hanamirc, options[:test])
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def hanamirc_options
|
|
35
|
+
hanamirc.options
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def hanamirc
|
|
39
|
+
@hanamirc ||= Hanamirc.new(target_path)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def environment
|
|
43
|
+
@environment ||= Hanami::Environment.new(options)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def template_engine
|
|
47
|
+
options.fetch(:template, default_template_engine)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def default_template_engine
|
|
51
|
+
hanamirc_options.fetch(:template)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def assert_options!
|
|
55
|
+
if options.nil?
|
|
56
|
+
raise ArgumentError.new('options must not be nil')
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|