hanami-cli 2.0.0.beta2 → 2.0.0.beta3
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/.rubocop.yml +2 -0
- data/CHANGELOG.md +17 -0
- data/Gemfile +0 -1
- data/hanami-cli.gemspec +1 -1
- data/lib/hanami/cli/commands/app/command.rb +4 -2
- data/lib/hanami/cli/commands/app/db/create.rb +1 -0
- data/lib/hanami/cli/commands/app/generate/action.rb +0 -3
- data/lib/hanami/cli/commands/app/routes.rb +1 -1
- data/lib/hanami/cli/commands/db/utils/database.rb +8 -1
- data/lib/hanami/cli/commands/db/utils/postgres.rb +5 -0
- data/lib/hanami/cli/commands.rb +2 -3
- data/lib/hanami/cli/generators/app/action/action.erb +2 -2
- data/lib/hanami/cli/generators/app/action/slice_action.erb +2 -2
- data/lib/hanami/cli/generators/app/action/template.html.erb +1 -1
- data/lib/hanami/cli/generators/app/action/view.erb +2 -2
- data/lib/hanami/cli/generators/app/action.rb +16 -10
- data/lib/hanami/cli/generators/app/action_context.rb +3 -3
- data/lib/hanami/cli/generators/app/slice/action.erb +2 -2
- data/lib/hanami/cli/generators/app/slice/entities.erb +1 -1
- data/lib/hanami/cli/generators/app/slice/repository.erb +2 -2
- data/lib/hanami/cli/generators/app/slice/slice.erb +1 -1
- data/lib/hanami/cli/generators/app/slice/view.erb +2 -2
- data/lib/hanami/cli/generators/app/slice.rb +3 -1
- data/lib/hanami/cli/generators/app/slice_context.rb +2 -2
- data/lib/hanami/cli/generators/context.rb +2 -2
- data/lib/hanami/cli/generators/gem/app/action.erb +1 -1
- data/lib/hanami/cli/generators/gem/app/app.erb +1 -1
- data/lib/hanami/cli/generators/gem/app/gemfile.erb +4 -0
- data/lib/hanami/cli/generators/gem/app/puma.erb +15 -0
- data/lib/hanami/cli/generators/gem/app/readme.erb +1 -1
- data/lib/hanami/cli/generators/gem/app/routes.erb +2 -4
- data/lib/hanami/cli/generators/gem/app/settings.erb +1 -1
- data/lib/hanami/cli/generators/gem/app/types.erb +1 -1
- data/lib/hanami/cli/generators/gem/app/validator.erb +1 -1
- data/lib/hanami/cli/generators/gem/app.rb +1 -0
- data/lib/hanami/cli/version.rb +1 -1
- data/lib/hanami/console/context.rb +3 -2
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2652fcd9f660db53b10864142c4a96a0acf3991330b5a5d1b3f0270b5dcbc8ff
|
4
|
+
data.tar.gz: 983957c43ad1d96d7e77db6924346a6021928229eca699d0aafc28c7fcc41cd8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ad2064d1634dfae55848d8e318a7e6b4a0022c56e50b7ed83634e0bc29b5bcd18ba8a8adad14d764125e219827955cbbeef2dc8cc7b788da5543e7f263f5c56
|
7
|
+
data.tar.gz: e911ef639b84a76e24a7b30ed7d778a0f4deb43fee8bd406cc52d44188f1ddc0de16622db87f406f42f6551c8fccc67e8fbe9ae4c6b7b8947610df06dfd21d32
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,23 @@
|
|
2
2
|
|
3
3
|
Hanami Command Line Interface
|
4
4
|
|
5
|
+
## v2.0.0.beta3 - 2022-09-21
|
6
|
+
|
7
|
+
### Added
|
8
|
+
|
9
|
+
- [Luca Guidi] New applications to support Puma server out of the box. Add the `puma` gem to `Gemfile` and generate `config/puma.rb`.
|
10
|
+
- [Luca Guidi] New applications to support code reloading for `hanami server` via `hanami-reloader`. This gem is added to app's `Gemfile`.
|
11
|
+
- [Marc Busqué] Introduce code reloading for `hanami console` via `#reload` method to be invoked within the console context.
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
|
15
|
+
- [Luca Guidi] Respect plural when generating code via `hanami new` and `hanami generate`. Example: `hanami new code_insights` => `CodeInsights` instead of `CodeInsight`
|
16
|
+
- [Luca Guidi] Ensure `hanami generate action` to not crash when invoked with non-RESTful action names. Example: `hanami generate action talent.apply`
|
17
|
+
|
18
|
+
### Changed
|
19
|
+
|
20
|
+
- [Piotr Solnica] `hanami generate action` to add routes to `config/routes.rb` without the `define` block context. See https://github.com/hanami/hanami/pull/1208
|
21
|
+
|
5
22
|
## v2.0.0.beta2 - 2022-08-16
|
6
23
|
|
7
24
|
### Added
|
data/Gemfile
CHANGED
@@ -8,7 +8,6 @@ unless ENV["CI"]
|
|
8
8
|
gem "yard", require: false
|
9
9
|
end
|
10
10
|
|
11
|
-
gem "dry-files", require: false, github: "dry-rb/dry-files", branch: :main
|
12
11
|
gem "hanami", require: false, github: "hanami/hanami", branch: :main
|
13
12
|
gem "hanami-router", github: "hanami/router", branch: :main
|
14
13
|
|
data/hanami-cli.gemspec
CHANGED
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.add_dependency "bundler", "~> 2.1"
|
34
34
|
spec.add_dependency "rake", "~> 13.0"
|
35
35
|
spec.add_dependency "dry-cli", "~> 0.7"
|
36
|
-
spec.add_dependency "dry-files", "~> 0.
|
36
|
+
spec.add_dependency "dry-files", "~> 0.3", ">= 0.3.0"
|
37
37
|
spec.add_dependency "dry-inflector", "~> 0.2"
|
38
38
|
|
39
39
|
spec.add_development_dependency "rspec", "~> 3.9"
|
@@ -8,15 +8,17 @@ module Hanami
|
|
8
8
|
module Commands
|
9
9
|
module App
|
10
10
|
class Command < Hanami::CLI::Command
|
11
|
+
ACTION_SEPARATOR = "."
|
12
|
+
|
11
13
|
module Environment
|
12
|
-
def call(**opts)
|
14
|
+
def call(*args, **opts)
|
13
15
|
env = opts[:env]
|
14
16
|
|
15
17
|
hanami_env = env ? env.to_s : ENV.fetch("HANAMI_ENV", "development")
|
16
18
|
|
17
19
|
ENV["HANAMI_ENV"] = hanami_env
|
18
20
|
|
19
|
-
super(**opts)
|
21
|
+
super(*args, **opts)
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "hanami"
|
4
|
-
require "hanami/router/inspector"
|
5
4
|
|
6
5
|
module Hanami
|
7
6
|
module CLI
|
@@ -40,6 +39,7 @@ module Hanami
|
|
40
39
|
|
41
40
|
# @api private
|
42
41
|
def call(format: DEFAULT_FORMAT, **)
|
42
|
+
require "hanami/router/inspector"
|
43
43
|
require "hanami/prepare"
|
44
44
|
inspector = Hanami::Router::Inspector.new(formatter: resolve_formatter(format))
|
45
45
|
app.router(inspector: inspector)
|
@@ -30,7 +30,14 @@ module Hanami
|
|
30
30
|
}.freeze
|
31
31
|
|
32
32
|
def self.[](app)
|
33
|
-
|
33
|
+
database_url =
|
34
|
+
if app.key?(:settings) && app[:settings].respond_to?(:database_url)
|
35
|
+
app[:settings].database_url
|
36
|
+
else
|
37
|
+
ENV.fetch("DATABASE_URL")
|
38
|
+
end
|
39
|
+
|
40
|
+
config = DatabaseConfig.new(database_url)
|
34
41
|
|
35
42
|
resolver = SCHEME_MAP.fetch(config.db_type) do
|
36
43
|
raise "#{config.db_type} is not a supported db scheme"
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "shellwords"
|
4
|
+
require "open3"
|
4
5
|
require_relative "database"
|
5
6
|
|
6
7
|
module Hanami
|
@@ -10,6 +11,10 @@ module Hanami
|
|
10
11
|
module Utils
|
11
12
|
class Postgres < Database
|
12
13
|
def create_command
|
14
|
+
existing_stdout, status = Open3.capture2(cli_env_vars, "psql -t -c '\\l #{escaped_name}'")
|
15
|
+
|
16
|
+
return true if status.success? && existing_stdout.include?(escaped_name)
|
17
|
+
|
13
18
|
system(cli_env_vars, "createdb #{escaped_name}")
|
14
19
|
end
|
15
20
|
|
data/lib/hanami/cli/commands.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "hanami"
|
4
|
-
|
5
3
|
module Hanami
|
6
4
|
module CLI
|
7
5
|
# Returns true if the CLI is being called from inside an Hanami app.
|
@@ -12,7 +10,8 @@ module Hanami
|
|
12
10
|
# @api public
|
13
11
|
# @since 2.0.0
|
14
12
|
def self.within_hanami_app?
|
15
|
-
|
13
|
+
File.exist?("config/app.rb") ||
|
14
|
+
File.exist?("app.rb")
|
16
15
|
end
|
17
16
|
|
18
17
|
module Commands
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module <%=
|
3
|
+
module <%= camelized_app_name %>
|
4
4
|
module Actions
|
5
5
|
<%= module_controller_declaration %>
|
6
|
-
<%= module_controller_offset %>class <%=
|
6
|
+
<%= module_controller_offset %>class <%= camelized_action_name %> < <%= camelized_app_name %>::Action
|
7
7
|
<%= module_controller_offset %> def handle(*, response)
|
8
8
|
<%= module_controller_offset %> response.body = self.class.name
|
9
9
|
<%= module_controller_offset %> end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module <%=
|
3
|
+
module <%= camelized_slice_name %>
|
4
4
|
module Actions
|
5
5
|
<%= module_controller_declaration %>
|
6
|
-
<%= module_controller_offset %>class <%=
|
6
|
+
<%= module_controller_offset %>class <%= camelized_action_name %> < <%= camelized_slice_name %>::Action
|
7
7
|
<%= module_controller_offset %> def handle(*, response)
|
8
8
|
<%= module_controller_offset %> response.body = self.class.name
|
9
9
|
<%= module_controller_offset %> end
|
@@ -1,2 +1,2 @@
|
|
1
|
-
<h1><%=
|
1
|
+
<h1><%= camelized_slice_name %>::Views::<%= camelized_controller_name %>::<%= camelized_action_name %></h1>
|
2
2
|
<h2><%= template_path %></h2>
|
@@ -3,10 +3,10 @@
|
|
3
3
|
|
4
4
|
require "<%= underscored_slice_name %>/view"
|
5
5
|
|
6
|
-
module <%=
|
6
|
+
module <%= camelized_slice_name %>
|
7
7
|
module Views
|
8
8
|
<%= module_controller_declaration %>
|
9
|
-
<%= module_controller_offset %>class <%=
|
9
|
+
<%= module_controller_offset %>class <%= camelized_action_name %> < <%= camelized_slice_name %>::View
|
10
10
|
<%= module_controller_offset %>end
|
11
11
|
<%= module_controller_end %>
|
12
12
|
end
|
@@ -42,16 +42,19 @@ module Hanami
|
|
42
42
|
private_constant :ROUTE_RESTFUL_HTTP_METHODS
|
43
43
|
|
44
44
|
ROUTE_RESTFUL_URL_SUFFIXES = {
|
45
|
-
"index" =>
|
46
|
-
"new" => "
|
47
|
-
"create" =>
|
48
|
-
"edit" => "
|
49
|
-
"update" => "
|
50
|
-
"show" => "
|
51
|
-
"destroy" => "
|
45
|
+
"index" => [],
|
46
|
+
"new" => ["new"],
|
47
|
+
"create" => [],
|
48
|
+
"edit" => [":id", "edit"],
|
49
|
+
"update" => [":id"],
|
50
|
+
"show" => [":id"],
|
51
|
+
"destroy" => [":id"]
|
52
52
|
}.freeze
|
53
53
|
private_constant :ROUTE_RESTFUL_URL_SUFFIXES
|
54
54
|
|
55
|
+
PATH_SEPARATOR = "/"
|
56
|
+
private_constant :PATH_SEPARATOR
|
57
|
+
|
55
58
|
attr_reader :fs
|
56
59
|
|
57
60
|
attr_reader :inflector
|
@@ -81,9 +84,9 @@ module Hanami
|
|
81
84
|
end
|
82
85
|
|
83
86
|
def generate_for_app(controller, action, url, http, _format, _skip_view, context)
|
84
|
-
fs.
|
87
|
+
fs.inject_line_at_class_bottom(
|
85
88
|
fs.join("config", "routes.rb"),
|
86
|
-
|
89
|
+
"class Routes",
|
87
90
|
route(controller, action, url, http)
|
88
91
|
)
|
89
92
|
|
@@ -120,7 +123,10 @@ module Hanami
|
|
120
123
|
alias_method :t, :template
|
121
124
|
|
122
125
|
def route_url(controller, action, url)
|
123
|
-
|
126
|
+
action = ROUTE_RESTFUL_URL_SUFFIXES.fetch(action) { [action] }
|
127
|
+
url ||= "#{PATH_SEPARATOR}#{(controller + action).join(PATH_SEPARATOR)}"
|
128
|
+
|
129
|
+
CLI::URL.call(url)
|
124
130
|
end
|
125
131
|
|
126
132
|
def route_http(action, http)
|
@@ -14,14 +14,14 @@ module Hanami
|
|
14
14
|
super(inflector, app, slice, nil)
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
17
|
+
def camelized_controller_name
|
18
18
|
controller.map do |token|
|
19
19
|
inflector.camelize(token)
|
20
20
|
end.join(NAMESPACE_SEPARATOR)
|
21
21
|
end
|
22
22
|
|
23
|
-
def
|
24
|
-
inflector.
|
23
|
+
def camelized_action_name
|
24
|
+
inflector.camelize(action)
|
25
25
|
end
|
26
26
|
|
27
27
|
def underscored_controller_name
|
@@ -3,8 +3,8 @@
|
|
3
3
|
require "<%= underscored_app_name %>/repository"
|
4
4
|
require_relative "entities"
|
5
5
|
|
6
|
-
module <%=
|
7
|
-
class Repository < <%=
|
6
|
+
module <%= camelized_slice_name %>
|
7
|
+
class Repository < <%= camelized_app_name %>::Repository
|
8
8
|
struct_namespace Entities
|
9
9
|
end
|
10
10
|
end
|
@@ -15,7 +15,9 @@ module Hanami
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def call(app, slice, slice_url_prefix, context: SliceContext.new(inflector, app, slice, slice_url_prefix))
|
18
|
-
fs.
|
18
|
+
fs.inject_line_at_class_bottom(
|
19
|
+
fs.join("config", "routes.rb"), "class Routes", t("routes.erb", context).chomp
|
20
|
+
)
|
19
21
|
|
20
22
|
fs.mkdir(directory = "slices/#{slice}")
|
21
23
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
max_threads_count = ENV.fetch("HANAMI_MAX_THREADS", 5)
|
4
|
+
min_threads_count = ENV.fetch("HANAMI_MIN_THREADS") { max_threads_count }
|
5
|
+
threads min_threads_count, max_threads_count
|
6
|
+
|
7
|
+
port ENV.fetch("HANAMI_PORT", 2300)
|
8
|
+
environment ENV.fetch("HANAMI_ENV", "development")
|
9
|
+
workers ENV.fetch("HANAMI_WEB_CONCURRENCY", 2)
|
10
|
+
|
11
|
+
on_worker_boot do
|
12
|
+
Hanami.shutdown
|
13
|
+
end
|
14
|
+
|
15
|
+
preload_app!
|
@@ -1 +1 @@
|
|
1
|
-
# <%=
|
1
|
+
# <%= camelized_app_name %>
|
@@ -40,6 +40,7 @@ module Hanami
|
|
40
40
|
fs.write("config/app.rb", t("app.erb", context))
|
41
41
|
fs.write("config/settings.rb", t("settings.erb", context))
|
42
42
|
fs.write("config/routes.rb", t("routes.erb", context))
|
43
|
+
fs.write("config/puma.rb", t("puma.erb", context))
|
43
44
|
|
44
45
|
fs.write("lib/tasks/.keep", t("keep.erb", context))
|
45
46
|
fs.write("lib/#{app}/types.rb", t("types.erb", context))
|
data/lib/hanami/cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanami-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.beta3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -58,20 +58,20 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0.
|
61
|
+
version: '0.3'
|
62
62
|
- - ">="
|
63
63
|
- !ruby/object:Gem::Version
|
64
|
-
version: 0.
|
64
|
+
version: 0.3.0
|
65
65
|
type: :runtime
|
66
66
|
prerelease: false
|
67
67
|
version_requirements: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
69
|
- - "~>"
|
70
70
|
- !ruby/object:Gem::Version
|
71
|
-
version: '0.
|
71
|
+
version: '0.3'
|
72
72
|
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: 0.
|
74
|
+
version: 0.3.0
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: dry-inflector
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -212,6 +212,7 @@ files:
|
|
212
212
|
- lib/hanami/cli/generators/gem/app/env.erb
|
213
213
|
- lib/hanami/cli/generators/gem/app/gemfile.erb
|
214
214
|
- lib/hanami/cli/generators/gem/app/keep.erb
|
215
|
+
- lib/hanami/cli/generators/gem/app/puma.erb
|
215
216
|
- lib/hanami/cli/generators/gem/app/rakefile.erb
|
216
217
|
- lib/hanami/cli/generators/gem/app/readme.erb
|
217
218
|
- lib/hanami/cli/generators/gem/app/routes.erb
|
@@ -255,7 +256,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
255
256
|
- !ruby/object:Gem::Version
|
256
257
|
version: 1.3.1
|
257
258
|
requirements: []
|
258
|
-
rubygems_version: 3.3.
|
259
|
+
rubygems_version: 3.3.3
|
259
260
|
signing_key:
|
260
261
|
specification_version: 4
|
261
262
|
summary: Hanami CLI
|