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,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
|