hanami-cli 2.2.0 → 2.3.0.beta1
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/.github/workflows/ci.yml +9 -0
- data/CHANGELOG.md +43 -0
- data/Gemfile +3 -1
- data/hanami-cli.gemspec +2 -0
- data/lib/hanami/cli/command.rb +5 -11
- data/lib/hanami/cli/commands/app/command.rb +5 -5
- data/lib/hanami/cli/commands/app/console.rb +1 -0
- data/lib/hanami/cli/commands/app/db/command.rb +0 -1
- data/lib/hanami/cli/commands/app/db/drop.rb +2 -2
- data/lib/hanami/cli/commands/app/db/rollback.rb +204 -0
- data/lib/hanami/cli/commands/app/db/utils/mysql.rb +3 -2
- data/lib/hanami/cli/commands/app/db/utils/postgres.rb +3 -1
- data/lib/hanami/cli/commands/app/generate/action.rb +32 -40
- data/lib/hanami/cli/commands/app/generate/command.rb +54 -17
- data/lib/hanami/cli/commands/app/generate/component.rb +4 -19
- data/lib/hanami/cli/commands/app/generate/part.rb +4 -21
- data/lib/hanami/cli/commands/app/generate/slice.rb +2 -2
- data/lib/hanami/cli/commands/app/generate/view.rb +5 -24
- data/lib/hanami/cli/commands/app/install.rb +12 -0
- data/lib/hanami/cli/commands/app/server.rb +0 -1
- data/lib/hanami/cli/commands/app.rb +1 -0
- data/lib/hanami/cli/commands/gem/new.rb +37 -7
- data/lib/hanami/cli/errors.rb +26 -0
- data/lib/hanami/cli/files.rb +20 -6
- data/lib/hanami/cli/generators/app/action.rb +78 -101
- data/lib/hanami/cli/generators/app/component.rb +11 -33
- data/lib/hanami/cli/generators/app/migration.rb +1 -1
- data/lib/hanami/cli/generators/app/operation.rb +4 -5
- data/lib/hanami/cli/generators/app/part.rb +42 -65
- data/lib/hanami/cli/generators/app/relation.rb +4 -5
- data/lib/hanami/cli/generators/app/repo.rb +3 -5
- data/lib/hanami/cli/generators/app/ruby_class_file.rb +32 -0
- data/lib/hanami/cli/generators/app/ruby_file.rb +128 -0
- data/lib/hanami/cli/generators/app/ruby_module_file.rb +28 -0
- data/lib/hanami/cli/generators/app/slice.rb +130 -37
- data/lib/hanami/cli/generators/app/struct.rb +3 -4
- data/lib/hanami/cli/generators/app/view.rb +40 -45
- data/lib/hanami/cli/generators/context.rb +6 -0
- data/lib/hanami/cli/generators/gem/app/assets.js +14 -13
- data/lib/hanami/cli/generators/gem/app/dev +1 -1
- data/lib/hanami/cli/generators/gem/app/gemfile.erb +5 -0
- data/lib/hanami/cli/generators/gem/app/gitignore.erb +3 -1
- data/lib/hanami/cli/generators/gem/app/rakefile.erb +3 -0
- data/lib/hanami/cli/generators/gem/app/readme.erb +14 -0
- data/lib/hanami/cli/generators/gem/app.rb +40 -37
- data/lib/hanami/cli/ruby_file_generator.rb +17 -8
- data/lib/hanami/cli/server.rb +15 -1
- data/lib/hanami/cli/version.rb +1 -1
- data/lib/hanami/console/context.rb +5 -0
- metadata +35 -41
- data/lib/hanami/cli/generators/app/action/action.erb +0 -17
- data/lib/hanami/cli/generators/app/action/slice_action.erb +0 -17
- data/lib/hanami/cli/generators/app/action/slice_template.html.erb +0 -1
- data/lib/hanami/cli/generators/app/action/slice_view.erb +0 -10
- data/lib/hanami/cli/generators/app/action/template.erb +0 -0
- data/lib/hanami/cli/generators/app/action/template.html.erb +0 -1
- data/lib/hanami/cli/generators/app/action/view.erb +0 -10
- data/lib/hanami/cli/generators/app/action_context.rb +0 -90
- data/lib/hanami/cli/generators/app/component/component.erb +0 -8
- data/lib/hanami/cli/generators/app/component/slice_component.erb +0 -8
- data/lib/hanami/cli/generators/app/component_context.rb +0 -82
- data/lib/hanami/cli/generators/app/part/app_base_part.erb +0 -9
- data/lib/hanami/cli/generators/app/part/app_part.erb +0 -13
- data/lib/hanami/cli/generators/app/part/slice_base_part.erb +0 -9
- data/lib/hanami/cli/generators/app/part/slice_part.erb +0 -13
- data/lib/hanami/cli/generators/app/part_context.rb +0 -82
- data/lib/hanami/cli/generators/app/ruby_file_writer.rb +0 -151
- data/lib/hanami/cli/generators/app/slice/action.erb +0 -7
- data/lib/hanami/cli/generators/app/slice/app_css.erb +0 -5
- data/lib/hanami/cli/generators/app/slice/app_js.erb +0 -1
- data/lib/hanami/cli/generators/app/slice/app_layout.erb +0 -18
- data/lib/hanami/cli/generators/app/slice/helpers.erb +0 -10
- data/lib/hanami/cli/generators/app/slice/keep.erb +0 -0
- data/lib/hanami/cli/generators/app/slice/operation.erb +0 -7
- data/lib/hanami/cli/generators/app/slice/relation.erb +0 -8
- data/lib/hanami/cli/generators/app/slice/repo.erb +0 -8
- data/lib/hanami/cli/generators/app/slice/routes.erb +0 -3
- data/lib/hanami/cli/generators/app/slice/struct.erb +0 -8
- data/lib/hanami/cli/generators/app/slice/view.erb +0 -7
- data/lib/hanami/cli/generators/app/slice_context.rb +0 -72
- data/lib/hanami/cli/generators/app/view/app_template.html.erb +0 -1
- data/lib/hanami/cli/generators/app/view/app_view.erb +0 -10
- data/lib/hanami/cli/generators/app/view/slice_template.html.erb +0 -1
- data/lib/hanami/cli/generators/app/view/slice_view.erb +0 -10
- data/lib/hanami/cli/generators/app/view_context.rb +0 -88
@@ -1,151 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "erb"
|
4
|
-
require "dry/files"
|
5
|
-
require_relative "../constants"
|
6
|
-
require_relative "../../errors"
|
7
|
-
|
8
|
-
module Hanami
|
9
|
-
module CLI
|
10
|
-
module Generators
|
11
|
-
module App
|
12
|
-
# @since 2.2.0
|
13
|
-
# @api private
|
14
|
-
class RubyFileWriter
|
15
|
-
# @since 2.2.0
|
16
|
-
# @api private
|
17
|
-
def initialize(fs:, inflector:)
|
18
|
-
@fs = fs
|
19
|
-
@inflector = inflector
|
20
|
-
end
|
21
|
-
|
22
|
-
# @since 2.2.0
|
23
|
-
# @api private
|
24
|
-
def call(key:, namespace:, base_path:, relative_parent_class:, extra_namespace: nil, body: [])
|
25
|
-
ClassFile.new(
|
26
|
-
fs: fs,
|
27
|
-
inflector: inflector,
|
28
|
-
key: key,
|
29
|
-
namespace: namespace,
|
30
|
-
base_path: base_path,
|
31
|
-
relative_parent_class: relative_parent_class,
|
32
|
-
extra_namespace: extra_namespace,
|
33
|
-
body: body,
|
34
|
-
).write
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
# @since 2.2.0
|
40
|
-
# @api private
|
41
|
-
attr_reader :fs, :inflector
|
42
|
-
end
|
43
|
-
|
44
|
-
class ClassFile
|
45
|
-
def initialize(
|
46
|
-
fs:,
|
47
|
-
inflector:,
|
48
|
-
key:,
|
49
|
-
namespace:,
|
50
|
-
base_path:,
|
51
|
-
relative_parent_class:,
|
52
|
-
extra_namespace: nil,
|
53
|
-
body: []
|
54
|
-
)
|
55
|
-
@fs = fs
|
56
|
-
@inflector = inflector
|
57
|
-
@key = key
|
58
|
-
@namespace = namespace
|
59
|
-
@base_path = base_path
|
60
|
-
@extra_namespace = extra_namespace&.downcase
|
61
|
-
@relative_parent_class = relative_parent_class
|
62
|
-
@body = body
|
63
|
-
end
|
64
|
-
|
65
|
-
def write
|
66
|
-
fs.write(path, file_contents)
|
67
|
-
end
|
68
|
-
|
69
|
-
private
|
70
|
-
|
71
|
-
# @since 2.2.0
|
72
|
-
# @api private
|
73
|
-
attr_reader(
|
74
|
-
:fs,
|
75
|
-
:inflector,
|
76
|
-
:key,
|
77
|
-
:namespace,
|
78
|
-
:base_path,
|
79
|
-
:extra_namespace,
|
80
|
-
:relative_parent_class,
|
81
|
-
:body,
|
82
|
-
)
|
83
|
-
|
84
|
-
# @since 2.2.0
|
85
|
-
# @api private
|
86
|
-
def file_contents
|
87
|
-
class_definition(
|
88
|
-
class_name: class_name,
|
89
|
-
local_namespaces: local_namespaces,
|
90
|
-
)
|
91
|
-
end
|
92
|
-
|
93
|
-
# @since 2.2.0
|
94
|
-
# @api private
|
95
|
-
def class_name
|
96
|
-
key.split(KEY_SEPARATOR)[-1]
|
97
|
-
end
|
98
|
-
|
99
|
-
# @since 2.2.0
|
100
|
-
# @api private
|
101
|
-
def local_namespaces
|
102
|
-
Array(extra_namespace) + key.split(KEY_SEPARATOR)[..-2]
|
103
|
-
end
|
104
|
-
|
105
|
-
# @since 2.2.0
|
106
|
-
# @api private
|
107
|
-
def directory
|
108
|
-
@directory ||= if local_namespaces.any?
|
109
|
-
fs.join(base_path, local_namespaces)
|
110
|
-
else
|
111
|
-
base_path
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
# @since 2.2.0
|
116
|
-
# @api private
|
117
|
-
def path
|
118
|
-
fs.join(directory, "#{class_name}.rb")
|
119
|
-
end
|
120
|
-
|
121
|
-
# @since 2.2.0
|
122
|
-
# @api private
|
123
|
-
def class_definition(class_name:, local_namespaces:)
|
124
|
-
container_module = normalize(namespace)
|
125
|
-
|
126
|
-
modules = local_namespaces
|
127
|
-
.map { normalize(_1) }
|
128
|
-
.compact
|
129
|
-
.prepend(container_module)
|
130
|
-
|
131
|
-
parent_class = [container_module, relative_parent_class].join("::")
|
132
|
-
|
133
|
-
RubyFileGenerator.class(
|
134
|
-
normalize(class_name),
|
135
|
-
parent_class: parent_class,
|
136
|
-
modules: modules,
|
137
|
-
header: ["# frozen_string_literal: true"],
|
138
|
-
body: body
|
139
|
-
)
|
140
|
-
end
|
141
|
-
|
142
|
-
# @since 2.2.0
|
143
|
-
# @api private
|
144
|
-
def normalize(name)
|
145
|
-
inflector.camelize(name).gsub(/[^\p{Alnum}]/, "")
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
import "../css/app.css";
|
@@ -1,18 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html lang="en">
|
3
|
-
<head>
|
4
|
-
<meta charset="UTF-8">
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
-
<title><%= humanized_app_name %> - <%= humanized_slice_name %></title>
|
7
|
-
<%- if bundled_assets? -%>
|
8
|
-
<%%= favicon_tag %>
|
9
|
-
<%= stylesheet_erb_tag %>
|
10
|
-
<%- end -%>
|
11
|
-
</head>
|
12
|
-
<body>
|
13
|
-
<%%= yield %>
|
14
|
-
<%- if bundled_assets? -%>
|
15
|
-
<%= javascript_erb_tag %>
|
16
|
-
<%- end -%>
|
17
|
-
</body>
|
18
|
-
</html>
|
File without changes
|
@@ -1,72 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "../context"
|
4
|
-
require_relative "../constants"
|
5
|
-
|
6
|
-
module Hanami
|
7
|
-
module CLI
|
8
|
-
module Generators
|
9
|
-
module App
|
10
|
-
# @since 2.0.0
|
11
|
-
# @api private
|
12
|
-
class SliceContext < Generators::Context
|
13
|
-
# @since 2.0.0
|
14
|
-
# @api private
|
15
|
-
def initialize(inflector, app, slice, url, **options)
|
16
|
-
@slice = slice
|
17
|
-
@url = url
|
18
|
-
super(inflector, app, **options)
|
19
|
-
end
|
20
|
-
|
21
|
-
# @since 2.0.0
|
22
|
-
# @api private
|
23
|
-
def camelized_slice_name
|
24
|
-
inflector.camelize(slice)
|
25
|
-
end
|
26
|
-
|
27
|
-
# @since 2.0.0
|
28
|
-
# @api private
|
29
|
-
def underscored_slice_name
|
30
|
-
inflector.underscore(slice)
|
31
|
-
end
|
32
|
-
|
33
|
-
# @since 2.1.0
|
34
|
-
# @api private
|
35
|
-
def humanized_slice_name
|
36
|
-
inflector.humanize(slice)
|
37
|
-
end
|
38
|
-
|
39
|
-
# @since 2.1.0
|
40
|
-
# @api private
|
41
|
-
def stylesheet_erb_tag
|
42
|
-
%(<%= stylesheet_tag "app" %>)
|
43
|
-
end
|
44
|
-
|
45
|
-
# @since 2.1.0
|
46
|
-
# @api private
|
47
|
-
def javascript_erb_tag
|
48
|
-
%(<%= javascript_tag "app" %>)
|
49
|
-
end
|
50
|
-
|
51
|
-
# @since 2.2.0
|
52
|
-
# @api private
|
53
|
-
def generate_db?
|
54
|
-
!options.fetch(:skip_db, false)
|
55
|
-
end
|
56
|
-
|
57
|
-
# @since 2.2.0
|
58
|
-
# @api private
|
59
|
-
def generate_route?
|
60
|
-
!options.fetch(:skip_route, false)
|
61
|
-
end
|
62
|
-
|
63
|
-
private
|
64
|
-
|
65
|
-
attr_reader :slice
|
66
|
-
|
67
|
-
attr_reader :url
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
<h1><%= camelized_app_name %>::Views::<%= camelized_namespace %>::<%= camelized_name %></h1>
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module <%= camelized_app_name %>
|
4
|
-
module Views
|
5
|
-
<%= module_namespace_declaration %>
|
6
|
-
<%= module_namespace_offset %>class <%= camelized_name %> < <%= camelized_app_name %>::View
|
7
|
-
<%= module_namespace_offset %>end
|
8
|
-
<%= module_namespace_end %>
|
9
|
-
end
|
10
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
<h1><%= camelized_slice_name %>::Views::<%= camelized_namespace %>::<%= camelized_name %></h1>
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module <%= camelized_slice_name %>
|
4
|
-
module Views
|
5
|
-
<%= module_namespace_declaration %>
|
6
|
-
<%= module_namespace_offset %>class <%= camelized_name %> < <%= camelized_slice_name %>::View
|
7
|
-
<%= module_namespace_offset %>end
|
8
|
-
<%= module_namespace_end %>
|
9
|
-
end
|
10
|
-
end
|
@@ -1,88 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "slice_context"
|
4
|
-
require "dry/files/path"
|
5
|
-
require_relative "../constants"
|
6
|
-
|
7
|
-
module Hanami
|
8
|
-
module CLI
|
9
|
-
module Generators
|
10
|
-
# @since 2.1.0
|
11
|
-
# @api private
|
12
|
-
module App
|
13
|
-
# @since 2.1.0
|
14
|
-
# @api private
|
15
|
-
class ViewContext < SliceContext
|
16
|
-
# @since 2.1.0
|
17
|
-
# @api private
|
18
|
-
attr_reader :key
|
19
|
-
|
20
|
-
# @since 2.1.0
|
21
|
-
# @api private
|
22
|
-
def initialize(inflector, app, slice, key)
|
23
|
-
@key = key
|
24
|
-
super(inflector, app, slice, nil)
|
25
|
-
end
|
26
|
-
|
27
|
-
# @since 2.1.0
|
28
|
-
# @api private
|
29
|
-
def namespaces
|
30
|
-
@namespaces ||= key.split(KEY_SEPARATOR)[..-2]
|
31
|
-
end
|
32
|
-
|
33
|
-
# @since 2.1.0
|
34
|
-
# @api private
|
35
|
-
def name
|
36
|
-
@name ||= key.split(KEY_SEPARATOR)[-1]
|
37
|
-
end
|
38
|
-
|
39
|
-
# @since 2.1.0
|
40
|
-
# @api private
|
41
|
-
def camelized_namespace
|
42
|
-
namespaces.map { inflector.camelize(_1) }.join(NAMESPACE_SEPARATOR)
|
43
|
-
end
|
44
|
-
|
45
|
-
# @since 2.1.0
|
46
|
-
# @api private
|
47
|
-
def camelized_name
|
48
|
-
inflector.camelize(name)
|
49
|
-
end
|
50
|
-
|
51
|
-
# @since 2.1.0
|
52
|
-
# @api private
|
53
|
-
def underscored_namespace
|
54
|
-
namespaces.map { inflector.underscore(_1) }
|
55
|
-
end
|
56
|
-
|
57
|
-
# @since 2.1.0
|
58
|
-
# @api private
|
59
|
-
def underscored_name
|
60
|
-
inflector.underscore(name)
|
61
|
-
end
|
62
|
-
|
63
|
-
# @since 2.1.0
|
64
|
-
# @api private
|
65
|
-
def module_namespace_declaration
|
66
|
-
namespaces.each_with_index.map { |token, i|
|
67
|
-
"#{NESTED_OFFSET}#{INDENTATION * i}module #{inflector.camelize(token)}"
|
68
|
-
}.join($/)
|
69
|
-
end
|
70
|
-
|
71
|
-
# @since 2.1.0
|
72
|
-
# @api private
|
73
|
-
def module_namespace_end
|
74
|
-
namespaces.each_with_index.map { |_, i|
|
75
|
-
"#{NESTED_OFFSET}#{INDENTATION * i}end"
|
76
|
-
}.reverse.join($/)
|
77
|
-
end
|
78
|
-
|
79
|
-
# @since 2.1.0
|
80
|
-
# @api private
|
81
|
-
def module_namespace_offset
|
82
|
-
"#{NESTED_OFFSET}#{INDENTATION * namespaces.count}"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|