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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0563f150b8f7f4d4d829600edba47e56e22d12a6
|
4
|
+
data.tar.gz: da1e14370a1c34df67516438b1f8b480f0c85f86
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 88b3c5a16d520bb93a27d262fd5c77d786095c6d5969c0b1f2d412a8f58c229ebd76225b4c05ecc7bc3d077b3ac411ae92f26d91564e826f6918aef2d9e8a257
|
7
|
+
data.tar.gz: c317261106b08f792784b56ed52e3834926c0a814ac64290345025bd0f0480a3d43b29f1136c10da0410d77d83dd5feaac1bc61e13d1f618da75ecc34439532a
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,19 @@
|
|
1
1
|
# Hanami
|
2
2
|
The web, with simplicity.
|
3
3
|
|
4
|
+
## v1.1.0.beta1 - 2017-08-11
|
5
|
+
### Added
|
6
|
+
- [Ben Johnson] Allow to use custom logger as `Hanami.logger` (eg. `Hanami.configure { logger Timber::Logger.new($stdout) }`)
|
7
|
+
- [akhramov] Generate spec file for application layout when generating a new app
|
8
|
+
- [Anton Davydov] Generate `README.md` file for new projects
|
9
|
+
- [Anton Davydov] Selectively boot apps via `HANAMI_APPS=web bundle exec hanami server`
|
10
|
+
- [Marion Duprey & Gabriel Gizotti] Log payload (params) for non-GET HTTP requests
|
11
|
+
- [Marion Duprey & Gabriel Gizotti] Filter sensitive data in logs
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
- [jarosluv] Ensure to remove the correct migration file when executing `hanami db destroy model`
|
15
|
+
- [sovetnik] Fix require path for Minitest spec helper
|
16
|
+
|
4
17
|
## v1.0.0 - 2017-04-06
|
5
18
|
|
6
19
|
## v1.0.0.rc1 - 2017-03-31
|
@@ -19,6 +32,7 @@ The web, with simplicity.
|
|
19
32
|
- [Tobias Sandelius] Don't mount `Hanami::CommonLogger` middleware if logging is disabled for the project.
|
20
33
|
- [Anton Davydov] Don't configure mailers, if it's mailing is disabled for the project.
|
21
34
|
- [Marcello Rocha] Ensure code reloading don't misconfigure mailer settings
|
35
|
+
- [Jimmy Börjesson] Make `apps/web/application.rb` code to wrap around the 80th column
|
22
36
|
|
23
37
|
### Changed
|
24
38
|
- [Luca Guidi] Removed deprecated `ApplicationConfiguration#default_format`. Use `#default_request_format` instead.
|
data/FEATURES.md
CHANGED
@@ -3,6 +3,18 @@
|
|
3
3
|
|
4
4
|
## Features
|
5
5
|
|
6
|
+
## v1.1.0 (unreleased)
|
7
|
+
|
8
|
+
- One-To-Many association (aka `belongs_to`)
|
9
|
+
- One-To-One association (aka `has_one`)
|
10
|
+
- Many-To-Many association (aka `has_many :through`)
|
11
|
+
- Allow third-party developers to register commands for CLI (eg `hanami generate webpack`)
|
12
|
+
- Introduced new extra behaviors for entity manual schema: `:schema` (default), `:strict`, `:weak`, and `:permissive`
|
13
|
+
- Custom logger for `Hanami.logger`
|
14
|
+
- Selectively boot apps via `HANAMI_APPS=web` env var
|
15
|
+
- Log payload (params) for non-GET HTTP requests
|
16
|
+
- Filter sensitive data in logs
|
17
|
+
|
6
18
|
### v1.0.0 - 2017-04-06
|
7
19
|
|
8
20
|
- Logger rotation
|
data/README.md
CHANGED
@@ -25,6 +25,7 @@ which provides the glue that ties all the parts together:
|
|
25
25
|
* [**Hanami::Helpers**](https://github.com/hanami/helpers) - View helpers for Ruby applications
|
26
26
|
* [**Hanami::Mailer**](https://github.com/hanami/mailer) - Mail for Ruby applications
|
27
27
|
* [**Hanami::Assets**](https://github.com/hanami/assets) - Assets management for Ruby
|
28
|
+
* [**Hanami::CLI**](https://github.com/hanami/cli) - Ruby command line interface
|
28
29
|
* [**Hanami::Utils**](https://github.com/hanami/utils) - Ruby core extensions and class utilities
|
29
30
|
|
30
31
|
These components are designed to be used independently or together in a Hanami application.
|
@@ -52,7 +53,9 @@ You can give back to Open Source, by supporting Hanami development via a [donati
|
|
52
53
|
|
53
54
|
### Supporters
|
54
55
|
|
56
|
+
* [Trung Lê](https://github.com/joneslee85)
|
55
57
|
* [James Carlson](https://github.com/jxxcarlson)
|
58
|
+
* [Creditas](https://www.creditas.com.br/)
|
56
59
|
|
57
60
|
## Contact
|
58
61
|
|
data/bin/hanami
CHANGED
data/hanami.gemspec
CHANGED
@@ -21,16 +21,16 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
23
23
|
|
24
|
-
spec.add_dependency 'hanami-utils', '
|
25
|
-
spec.add_dependency 'hanami-validations', '
|
26
|
-
spec.add_dependency 'hanami-router', '
|
27
|
-
spec.add_dependency 'hanami-controller', '
|
28
|
-
spec.add_dependency 'hanami-view', '
|
29
|
-
spec.add_dependency 'hanami-helpers', '
|
30
|
-
spec.add_dependency 'hanami-mailer', '
|
31
|
-
spec.add_dependency 'hanami-assets', '
|
24
|
+
spec.add_dependency 'hanami-utils', '1.1.0.beta1'
|
25
|
+
spec.add_dependency 'hanami-validations', '1.1.0.beta1'
|
26
|
+
spec.add_dependency 'hanami-router', '1.1.0.beta1'
|
27
|
+
spec.add_dependency 'hanami-controller', '1.1.0.beta1'
|
28
|
+
spec.add_dependency 'hanami-view', '1.1.0.beta1'
|
29
|
+
spec.add_dependency 'hanami-helpers', '1.1.0.beta1'
|
30
|
+
spec.add_dependency 'hanami-mailer', '1.1.0.beta1'
|
31
|
+
spec.add_dependency 'hanami-assets', '1.1.0.beta1'
|
32
|
+
spec.add_dependency 'hanami-cli', '0.1.0.beta1'
|
32
33
|
spec.add_dependency 'concurrent-ruby', '~> 1.0'
|
33
|
-
spec.add_dependency 'thor', '~> 0.19'
|
34
34
|
spec.add_dependency 'bundler', '~> 1.13'
|
35
35
|
|
36
36
|
spec.add_development_dependency 'rspec', '~> 3.5'
|
data/lib/hanami.rb
CHANGED
@@ -118,6 +118,33 @@ module Hanami
|
|
118
118
|
App.new(configuration, environment)
|
119
119
|
end
|
120
120
|
|
121
|
+
# Check if an application is allowed to load.
|
122
|
+
#
|
123
|
+
# The list of applications to be loaded can be set via the `HANAMI_APPS`
|
124
|
+
# env variable. If the HANAMI_APPS env variable is not set, it defaults
|
125
|
+
# to loading all applications.
|
126
|
+
#
|
127
|
+
# @return [TrueClass,FalseClass] the result of the check
|
128
|
+
#
|
129
|
+
# @since 1.1.0
|
130
|
+
#
|
131
|
+
# @example
|
132
|
+
#
|
133
|
+
# # Mount hanami app for specific app
|
134
|
+
# Hanami.configure do
|
135
|
+
# if Hanami.app?(:web)
|
136
|
+
# require_relative '../apps/web/application'
|
137
|
+
# mount Web::Application, at: '/'
|
138
|
+
# end
|
139
|
+
# end
|
140
|
+
#
|
141
|
+
def self.app?(app)
|
142
|
+
return true unless ENV.key?('HANAMI_APPS')
|
143
|
+
|
144
|
+
allowed_apps = ENV['HANAMI_APPS'].to_s.split(',')
|
145
|
+
allowed_apps.include?(app.to_s.downcase)
|
146
|
+
end
|
147
|
+
|
121
148
|
# Return root of the project (top level directory).
|
122
149
|
#
|
123
150
|
# @return [Pathname] root path
|
@@ -1012,10 +1012,6 @@ module Hanami
|
|
1012
1012
|
|
1013
1013
|
# Defines a relative pattern to find controllers.
|
1014
1014
|
#
|
1015
|
-
# Hanami supports multiple architectures (aka application structures), this
|
1016
|
-
# setting helps to understand the namespace where to find applications'
|
1017
|
-
# controllers and actions.
|
1018
|
-
#
|
1019
1015
|
# By default this equals to <tt>"Controllers::%{controller}::%{action}"</tt>
|
1020
1016
|
# That means controllers must be structured like this:
|
1021
1017
|
# <tt>Bookshelf::Controllers::Dashboard::Index</tt>, where <tt>Bookshelf</tt>
|
@@ -1143,10 +1139,6 @@ module Hanami
|
|
1143
1139
|
|
1144
1140
|
# Defines a relative pattern to find views:.
|
1145
1141
|
#
|
1146
|
-
# Hanami supports multiple architectures (aka application structures), this
|
1147
|
-
# setting helps to understand the namespace where to find applications'
|
1148
|
-
# views:.
|
1149
|
-
#
|
1150
1142
|
# By default this equals to <tt>"Views::%{controller}::%{action}"</tt>
|
1151
1143
|
# That means views must be structured like this:
|
1152
1144
|
# <tt>Bookshelf::Views::Dashboard::Index</tt>, where <tt>Bookshelf</tt> is
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'hanami/cli'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
module Hanami
|
5
|
+
# Hanami CLI
|
6
|
+
#
|
7
|
+
# @since 1.1.0
|
8
|
+
class CLI
|
9
|
+
# Register a command to expand Hanami CLI
|
10
|
+
#
|
11
|
+
# @param name [String] the command name
|
12
|
+
# @param command [NilClass,Hanami::CLI::Command,Hanami::CLI::Commands::Command]
|
13
|
+
# the optional command
|
14
|
+
# @param aliases [Array<String>] an optional list of aliases
|
15
|
+
#
|
16
|
+
# @since 1.1.0
|
17
|
+
#
|
18
|
+
# @example Third party gem
|
19
|
+
# require "hanami/cli/commands"
|
20
|
+
#
|
21
|
+
# module Hanami
|
22
|
+
# module Webpack
|
23
|
+
# module CLI
|
24
|
+
# module Commands
|
25
|
+
# class Generate < Hanami::CLI::Command
|
26
|
+
# desc "Generate Webpack config"
|
27
|
+
#
|
28
|
+
# def call(*)
|
29
|
+
# # ...
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
# end
|
34
|
+
# end
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# Hanami::CLI.register "generate webpack", Hanami::Webpack::CLI::Commands::Generate
|
38
|
+
#
|
39
|
+
# # $ bundle exec hanami generate
|
40
|
+
# # Commands:
|
41
|
+
# # hanami generate action APP ACTION # Generate an action for app
|
42
|
+
# # hanami generate app APP # Generate an app
|
43
|
+
# # hanami generate mailer MAILER # Generate a mailer
|
44
|
+
# # hanami generate migration MIGRATION # Generate a migration
|
45
|
+
# # hanami generate model MODEL # Generate a model
|
46
|
+
# # hanami generate secret [APP] # Generate session secret
|
47
|
+
# # hanami generate webpack # Generate Webpack configuration
|
48
|
+
def self.register(name, command = nil, aliases: [], &blk)
|
49
|
+
Commands.register(name, command, aliases: aliases, &blk)
|
50
|
+
end
|
51
|
+
|
52
|
+
# CLI commands registry
|
53
|
+
#
|
54
|
+
# @since 1.1.0
|
55
|
+
# @api private
|
56
|
+
module Commands
|
57
|
+
extend Hanami::CLI::Registry
|
58
|
+
|
59
|
+
# CLI command context
|
60
|
+
#
|
61
|
+
# @since 1.1.0
|
62
|
+
# @api private
|
63
|
+
class Context < OpenStruct
|
64
|
+
# @since 1.1.0
|
65
|
+
# @api private
|
66
|
+
def initialize(data)
|
67
|
+
data = data.each_with_object({}) do |(k, v), result|
|
68
|
+
v = Utils::String.new(v) if v.is_a?(::String)
|
69
|
+
result[k] = v
|
70
|
+
end
|
71
|
+
|
72
|
+
super(data)
|
73
|
+
freeze
|
74
|
+
end
|
75
|
+
|
76
|
+
# @since 1.1.0
|
77
|
+
# @api private
|
78
|
+
def with(data)
|
79
|
+
self.class.new(to_h.merge(data))
|
80
|
+
end
|
81
|
+
|
82
|
+
# @since 1.1.0
|
83
|
+
# @api private
|
84
|
+
def binding
|
85
|
+
super
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
require "hanami/cli/commands/command"
|
90
|
+
require "hanami/cli/commands/assets"
|
91
|
+
require "hanami/cli/commands/console"
|
92
|
+
require "hanami/cli/commands/db"
|
93
|
+
require "hanami/cli/commands/destroy"
|
94
|
+
require "hanami/cli/commands/generate"
|
95
|
+
require "hanami/cli/commands/new"
|
96
|
+
require "hanami/cli/commands/routes"
|
97
|
+
require "hanami/cli/commands/server"
|
98
|
+
require "hanami/cli/commands/version"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Hanami
|
2
|
+
# Hanami CLI
|
3
|
+
#
|
4
|
+
# @since 1.1.0
|
5
|
+
class CLI
|
6
|
+
module Commands
|
7
|
+
# @since 1.1.0
|
8
|
+
# @api private
|
9
|
+
module Assets
|
10
|
+
require "hanami/cli/commands/assets/precompile"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
register "assets precompile", Commands::Assets::Precompile
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Hanami
|
2
|
+
class CLI
|
3
|
+
module Commands
|
4
|
+
module Assets
|
5
|
+
# @since 1.1.0
|
6
|
+
# @api private
|
7
|
+
class Precompile < Command
|
8
|
+
requires "apps.assets.configurations"
|
9
|
+
|
10
|
+
desc "Precompile assets for deployment"
|
11
|
+
|
12
|
+
example [
|
13
|
+
" # Basic usage",
|
14
|
+
"HANAMI_ENV=production # Precompile assets for production environment"
|
15
|
+
]
|
16
|
+
|
17
|
+
# @since 1.1.0
|
18
|
+
# @api private
|
19
|
+
def call(**options)
|
20
|
+
context = Context.new(options: options)
|
21
|
+
|
22
|
+
precompile_assets(context)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# @since 1.1.0
|
28
|
+
# @api private
|
29
|
+
def precompile_assets(*)
|
30
|
+
Hanami::Assets.precompile(configurations)
|
31
|
+
end
|
32
|
+
|
33
|
+
# @since 1.1.0
|
34
|
+
# @api private
|
35
|
+
def configurations
|
36
|
+
requirements['apps.assets.configurations']
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
require 'hanami'
|
2
|
+
require 'hanami/environment'
|
3
|
+
require 'hanami/components'
|
4
|
+
require 'hanami/cli/command'
|
5
|
+
require 'hanami/cli/commands/project'
|
6
|
+
require 'hanami/cli/commands/templates'
|
7
|
+
require 'concurrent'
|
8
|
+
require 'hanami/utils/files'
|
9
|
+
require 'erb'
|
10
|
+
|
11
|
+
module Hanami
|
12
|
+
# Hanami CLI
|
13
|
+
#
|
14
|
+
# @since 1.1.0
|
15
|
+
class CLI
|
16
|
+
module Commands
|
17
|
+
# Abstract command
|
18
|
+
#
|
19
|
+
# @since 1.1.0
|
20
|
+
class Command < Hanami::CLI::Command
|
21
|
+
# @since 1.1.0
|
22
|
+
# @api private
|
23
|
+
def self.inherited(component)
|
24
|
+
super
|
25
|
+
|
26
|
+
component.class_eval do
|
27
|
+
@_requirements = Concurrent::Array.new
|
28
|
+
extend ClassMethods
|
29
|
+
prepend InstanceMethods
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Class level interface
|
34
|
+
#
|
35
|
+
# @since 1.1.0
|
36
|
+
module ClassMethods
|
37
|
+
# Requires an internal Hanami component
|
38
|
+
#
|
39
|
+
# @param names [Array<String>] the name of one or more components
|
40
|
+
#
|
41
|
+
# @since 1.1.0
|
42
|
+
#
|
43
|
+
# @example
|
44
|
+
# require "hanami/cli/commands"
|
45
|
+
#
|
46
|
+
# module HanamiDatabaseHelpers
|
47
|
+
# class TruncateTables < Hanami::CLI::Commands::Command
|
48
|
+
# requires "model.configuration"
|
49
|
+
#
|
50
|
+
# def call(*)
|
51
|
+
# url = requirements["model.configuration"].url
|
52
|
+
# # ...
|
53
|
+
# end
|
54
|
+
# end
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
# Hanami::CLI.register "db truncate", HanamiDatabaseHelpers::TruncateTables
|
58
|
+
def requires(*names)
|
59
|
+
requirements.concat(names)
|
60
|
+
end
|
61
|
+
|
62
|
+
# @since 1.1.0
|
63
|
+
# @api private
|
64
|
+
def requirements
|
65
|
+
@_requirements
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# @since 1.1.0
|
70
|
+
# @api private
|
71
|
+
module InstanceMethods
|
72
|
+
# @since 1.1.0
|
73
|
+
# @api private
|
74
|
+
def call(**options)
|
75
|
+
if self.class.requirements.any?
|
76
|
+
environment = Hanami::Environment.new(options)
|
77
|
+
environment.require_project_environment
|
78
|
+
|
79
|
+
requirements.resolved('environment', environment)
|
80
|
+
requirements.resolve(self.class.requirements)
|
81
|
+
|
82
|
+
options = environment.to_options.merge(options)
|
83
|
+
end
|
84
|
+
|
85
|
+
super(options)
|
86
|
+
rescue StandardError => e
|
87
|
+
warn e.message
|
88
|
+
exit(1)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# @since 1.1.0
|
93
|
+
# @api private
|
94
|
+
def initialize(command_name:, out: $stdout, files: Utils::Files)
|
95
|
+
super(command_name: command_name)
|
96
|
+
|
97
|
+
@out = out
|
98
|
+
@files = files
|
99
|
+
@templates = Templates.new(self.class)
|
100
|
+
end
|
101
|
+
|
102
|
+
private
|
103
|
+
|
104
|
+
# Template renderer
|
105
|
+
#
|
106
|
+
# @since 1.1.0
|
107
|
+
# @api private
|
108
|
+
class Renderer
|
109
|
+
# @since 1.1.0
|
110
|
+
# @api private
|
111
|
+
TRIM_MODE = "-".freeze
|
112
|
+
|
113
|
+
# @since 1.1.0
|
114
|
+
# @api private
|
115
|
+
def initialize
|
116
|
+
freeze
|
117
|
+
end
|
118
|
+
|
119
|
+
# @since 1.1.0
|
120
|
+
# @api private
|
121
|
+
def call(template, context)
|
122
|
+
::ERB.new(template, nil, TRIM_MODE).result(context)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
# @since 1.1.0
|
127
|
+
# @api private
|
128
|
+
SAY_FORMATTER = "%<operation>12s %<path>s\n".freeze
|
129
|
+
|
130
|
+
# @since 1.1.0
|
131
|
+
# @api private
|
132
|
+
attr_reader :out
|
133
|
+
|
134
|
+
# @since 1.1.0
|
135
|
+
# @api private
|
136
|
+
attr_reader :files
|
137
|
+
|
138
|
+
# @since 1.1.0
|
139
|
+
# @api private
|
140
|
+
attr_reader :templates
|
141
|
+
|
142
|
+
# @since 1.1.0
|
143
|
+
# @api private
|
144
|
+
def render(path, context)
|
145
|
+
template = File.read(path)
|
146
|
+
renderer = Renderer.new
|
147
|
+
|
148
|
+
renderer.call(template, context.binding)
|
149
|
+
end
|
150
|
+
|
151
|
+
# @since 1.1.0
|
152
|
+
# @api private
|
153
|
+
def generate_file(source, destination, context)
|
154
|
+
files.write(
|
155
|
+
destination,
|
156
|
+
render(source, context)
|
157
|
+
)
|
158
|
+
end
|
159
|
+
|
160
|
+
# @since 1.1.0
|
161
|
+
# @api private
|
162
|
+
def say(operation, path)
|
163
|
+
out.puts(SAY_FORMATTER % { operation: operation, path: path }) # rubocop:disable Style/FormatString
|
164
|
+
end
|
165
|
+
|
166
|
+
# @since 1.1.0
|
167
|
+
# @api private
|
168
|
+
def project
|
169
|
+
Project
|
170
|
+
end
|
171
|
+
|
172
|
+
# @since 1.1.0
|
173
|
+
# @api private
|
174
|
+
def requirements
|
175
|
+
Hanami::Components
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|