hanami-cli 2.2.1 → 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.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +9 -0
  3. data/CHANGELOG.md +33 -0
  4. data/Gemfile +3 -1
  5. data/hanami-cli.gemspec +2 -0
  6. data/lib/hanami/cli/command.rb +5 -11
  7. data/lib/hanami/cli/commands/app/command.rb +5 -5
  8. data/lib/hanami/cli/commands/app/console.rb +1 -0
  9. data/lib/hanami/cli/commands/app/db/command.rb +0 -1
  10. data/lib/hanami/cli/commands/app/db/drop.rb +2 -2
  11. data/lib/hanami/cli/commands/app/db/rollback.rb +204 -0
  12. data/lib/hanami/cli/commands/app/db/utils/mysql.rb +3 -2
  13. data/lib/hanami/cli/commands/app/db/utils/postgres.rb +3 -1
  14. data/lib/hanami/cli/commands/app/generate/action.rb +32 -40
  15. data/lib/hanami/cli/commands/app/generate/command.rb +54 -17
  16. data/lib/hanami/cli/commands/app/generate/component.rb +4 -19
  17. data/lib/hanami/cli/commands/app/generate/part.rb +4 -21
  18. data/lib/hanami/cli/commands/app/generate/slice.rb +2 -2
  19. data/lib/hanami/cli/commands/app/generate/view.rb +5 -24
  20. data/lib/hanami/cli/commands/app/server.rb +0 -1
  21. data/lib/hanami/cli/commands/app.rb +1 -0
  22. data/lib/hanami/cli/commands/gem/new.rb +34 -3
  23. data/lib/hanami/cli/errors.rb +26 -0
  24. data/lib/hanami/cli/files.rb +20 -6
  25. data/lib/hanami/cli/generators/app/action.rb +78 -101
  26. data/lib/hanami/cli/generators/app/component.rb +11 -33
  27. data/lib/hanami/cli/generators/app/migration.rb +1 -1
  28. data/lib/hanami/cli/generators/app/operation.rb +4 -5
  29. data/lib/hanami/cli/generators/app/part.rb +42 -65
  30. data/lib/hanami/cli/generators/app/relation.rb +4 -5
  31. data/lib/hanami/cli/generators/app/repo.rb +3 -5
  32. data/lib/hanami/cli/generators/app/ruby_class_file.rb +32 -0
  33. data/lib/hanami/cli/generators/app/ruby_file.rb +128 -0
  34. data/lib/hanami/cli/generators/app/ruby_module_file.rb +28 -0
  35. data/lib/hanami/cli/generators/app/slice.rb +130 -37
  36. data/lib/hanami/cli/generators/app/struct.rb +3 -4
  37. data/lib/hanami/cli/generators/app/view.rb +40 -45
  38. data/lib/hanami/cli/generators/context.rb +6 -0
  39. data/lib/hanami/cli/generators/gem/app/assets.js +14 -13
  40. data/lib/hanami/cli/generators/gem/app/dev +1 -1
  41. data/lib/hanami/cli/generators/gem/app/gemfile.erb +5 -0
  42. data/lib/hanami/cli/generators/gem/app/gitignore.erb +3 -1
  43. data/lib/hanami/cli/generators/gem/app/rakefile.erb +3 -0
  44. data/lib/hanami/cli/generators/gem/app/readme.erb +14 -0
  45. data/lib/hanami/cli/generators/gem/app.rb +40 -37
  46. data/lib/hanami/cli/ruby_file_generator.rb +17 -8
  47. data/lib/hanami/cli/server.rb +15 -1
  48. data/lib/hanami/cli/version.rb +1 -1
  49. data/lib/hanami/console/context.rb +5 -0
  50. metadata +35 -41
  51. data/lib/hanami/cli/generators/app/action/action.erb +0 -17
  52. data/lib/hanami/cli/generators/app/action/slice_action.erb +0 -17
  53. data/lib/hanami/cli/generators/app/action/slice_template.html.erb +0 -1
  54. data/lib/hanami/cli/generators/app/action/slice_view.erb +0 -10
  55. data/lib/hanami/cli/generators/app/action/template.erb +0 -0
  56. data/lib/hanami/cli/generators/app/action/template.html.erb +0 -1
  57. data/lib/hanami/cli/generators/app/action/view.erb +0 -10
  58. data/lib/hanami/cli/generators/app/action_context.rb +0 -90
  59. data/lib/hanami/cli/generators/app/component/component.erb +0 -8
  60. data/lib/hanami/cli/generators/app/component/slice_component.erb +0 -8
  61. data/lib/hanami/cli/generators/app/component_context.rb +0 -82
  62. data/lib/hanami/cli/generators/app/part/app_base_part.erb +0 -9
  63. data/lib/hanami/cli/generators/app/part/app_part.erb +0 -13
  64. data/lib/hanami/cli/generators/app/part/slice_base_part.erb +0 -9
  65. data/lib/hanami/cli/generators/app/part/slice_part.erb +0 -13
  66. data/lib/hanami/cli/generators/app/part_context.rb +0 -82
  67. data/lib/hanami/cli/generators/app/ruby_file_writer.rb +0 -151
  68. data/lib/hanami/cli/generators/app/slice/action.erb +0 -7
  69. data/lib/hanami/cli/generators/app/slice/app_css.erb +0 -5
  70. data/lib/hanami/cli/generators/app/slice/app_js.erb +0 -1
  71. data/lib/hanami/cli/generators/app/slice/app_layout.erb +0 -18
  72. data/lib/hanami/cli/generators/app/slice/helpers.erb +0 -10
  73. data/lib/hanami/cli/generators/app/slice/keep.erb +0 -0
  74. data/lib/hanami/cli/generators/app/slice/operation.erb +0 -7
  75. data/lib/hanami/cli/generators/app/slice/relation.erb +0 -8
  76. data/lib/hanami/cli/generators/app/slice/repo.erb +0 -8
  77. data/lib/hanami/cli/generators/app/slice/routes.erb +0 -3
  78. data/lib/hanami/cli/generators/app/slice/struct.erb +0 -8
  79. data/lib/hanami/cli/generators/app/slice/view.erb +0 -7
  80. data/lib/hanami/cli/generators/app/slice_context.rb +0 -72
  81. data/lib/hanami/cli/generators/app/view/app_template.html.erb +0 -1
  82. data/lib/hanami/cli/generators/app/view/app_view.erb +0 -10
  83. data/lib/hanami/cli/generators/app/view/slice_template.html.erb +0 -1
  84. data/lib/hanami/cli/generators/app/view/slice_view.erb +0 -10
  85. data/lib/hanami/cli/generators/app/view_context.rb +0 -88
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "erb"
4
3
  require "dry/files"
4
+ require_relative "../constants"
5
5
  require_relative "../../errors"
6
6
 
7
7
  module Hanami
@@ -11,57 +11,62 @@ module Hanami
11
11
  # @since 2.0.0
12
12
  # @api private
13
13
  class View
14
+ DEFAULT_FORMAT = "html"
15
+ private_constant :DEFAULT_FORMAT
16
+
17
+ TEMPLATES_FOLDER = "templates"
18
+ private_constant :TEMPLATES_FOLDER
19
+
14
20
  # @since 2.0.0
15
21
  # @api private
16
- def initialize(fs:, inflector:)
22
+ def initialize(fs:, inflector:, out: $stdout)
17
23
  @fs = fs
18
24
  @inflector = inflector
25
+ @out = out
19
26
  end
20
27
 
21
28
  # @since 2.0.0
22
29
  # @api private
23
- def call(app, key, format, slice)
24
- context = ViewContext.new(inflector, app, slice, key)
25
-
26
- if slice
27
- generate_for_slice(context, format, slice)
28
- else
29
- generate_for_app(context, format, slice)
30
+ def call(key:, namespace:, base_path:)
31
+ view_class_file(key:, namespace:, base_path:).then do |view_class|
32
+ view_class.create
33
+ view_class_name = view_class.fully_qualified_name
34
+ create_template_file(key:, base_path:, view_class_name:)
30
35
  end
31
36
  end
32
37
 
33
38
  private
34
39
 
35
- attr_reader :fs
36
-
37
- attr_reader :inflector
38
-
39
- # rubocop:disable Metrics/AbcSize
40
-
41
- def generate_for_slice(context, format, slice)
42
- slice_directory = fs.join("slices", slice)
43
- raise MissingSliceError.new(slice) unless fs.directory?(slice_directory)
44
-
45
- fs.mkdir(directory = fs.join(slice_directory, "views", context.namespaces))
46
- fs.write(fs.join(directory, "#{context.name}.rb"), t("slice_view.erb", context))
47
-
48
- fs.mkdir(directory = fs.join(slice_directory, "templates", context.namespaces))
49
- fs.write(fs.join(directory, "#{context.name}.#{format}.erb"),
50
- t(template_with_format_ext("slice_template", format), context))
40
+ attr_reader :fs, :inflector, :out
41
+
42
+ def view_class_file(key:, namespace:, base_path:)
43
+ RubyClassFile.new(
44
+ fs: fs,
45
+ inflector: inflector,
46
+ namespace: namespace,
47
+ key: inflector.underscore(key),
48
+ base_path: base_path,
49
+ parent_class_name: "#{inflector.camelize(namespace)}::View",
50
+ extra_namespace: "Views",
51
+ )
51
52
  end
52
53
 
53
- def generate_for_app(context, format, _slice)
54
- fs.mkdir(directory = fs.join("app", "views", context.namespaces))
55
- fs.write(fs.join(directory, "#{context.name}.rb"), t("app_view.erb", context))
56
-
57
- fs.mkdir(directory = fs.join("app", "templates", context.namespaces))
58
- fs.write(fs.join(directory, "#{context.name}.#{format}.erb"),
59
- t(template_with_format_ext("app_template", format), context))
54
+ def create_template_file(key:, base_path:, view_class_name:)
55
+ key_parts = key.split(KEY_SEPARATOR)
56
+ class_name_from_key = key_parts.pop # takes last segment as the class name
57
+ module_names_from_key = key_parts # the rest of the segments are the module names
58
+
59
+ file_path = fs.join(
60
+ base_path,
61
+ TEMPLATES_FOLDER,
62
+ module_names_from_key,
63
+ template_file_name(class_name_from_key, DEFAULT_FORMAT),
64
+ )
65
+ body = "<h1>#{view_class_name}</h1>\n"
66
+ fs.create(file_path, body)
60
67
  end
61
68
 
62
- # rubocop:enable Metrics/AbcSize
63
-
64
- def template_with_format_ext(name, format)
69
+ def template_file_name(name, format)
65
70
  ext =
66
71
  case format.to_sym
67
72
  when :html
@@ -72,16 +77,6 @@ module Hanami
72
77
 
73
78
  "#{name}#{ext}"
74
79
  end
75
-
76
- def template(path, context)
77
- require "erb"
78
-
79
- ERB.new(
80
- File.read(__dir__ + "/view/#{path}")
81
- ).result(context.ctx)
82
- end
83
-
84
- alias_method :t, :template
85
80
  end
86
81
  end
87
82
  end
@@ -86,6 +86,12 @@ module Hanami
86
86
  !options.fetch(:skip_db, false)
87
87
  end
88
88
 
89
+ # @since 2.2.0
90
+ # @api private
91
+ def generate_view?
92
+ !options.fetch(:skip_view, false)
93
+ end
94
+
89
95
  # @since 2.2.0
90
96
  # @api private
91
97
  def generate_sqlite?
@@ -1,16 +1,17 @@
1
1
  import * as assets from "hanami-assets";
2
2
 
3
- await assets.run();
4
-
5
- // To provide additional esbuild (https://esbuild.github.io) options, use the following:
6
- //
7
- // Read more at: https://guides.hanamirb.org/assets/customization/
8
- //
9
- // await assets.run({
10
- // esbuildOptionsFn: (args, esbuildOptions) => {
11
- // // Add to esbuildOptions here. Use `args.watch` as a condition for different options for
12
- // // compile vs watch.
3
+ // Assets are managed by esbuild (https://esbuild.github.io), and can be
4
+ // customized below.
13
5
  //
14
- // return esbuildOptions;
15
- // }
16
- // });
6
+ // Learn more at https://guides.hanamirb.org/assets/customization/.
7
+
8
+ await assets.run({
9
+ esbuildOptionsFn: (args, esbuildOptions) => {
10
+ // Customize your `esbuildOptions` here.
11
+ //
12
+ // Use the `args.watch` boolean as a condition to apply diffierent options
13
+ // when running `hanami assets watch` vs `hanami assets compile`.
14
+
15
+ return esbuildOptions;
16
+ },
17
+ });
@@ -5,4 +5,4 @@ if ! gem list foreman -i --silent; then
5
5
  gem install foreman
6
6
  fi
7
7
 
8
- exec foreman start -f Procfile.dev "$@"
8
+ exec foreman start -f Procfile.dev --env=/dev/null "$@"
@@ -3,6 +3,9 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  <%= hanami_gem("hanami") %>
6
+ <%- if hanami_head? -%>
7
+ <%= hanami_gem("cli") %>
8
+ <%- end -%>
6
9
  <%- if generate_assets? -%>
7
10
  <%= hanami_gem("assets") %>
8
11
  <%- end -%>
@@ -12,7 +15,9 @@ source "https://rubygems.org"
12
15
  <%- end -%>
13
16
  <%= hanami_gem("router") %>
14
17
  <%= hanami_gem("validations") %>
18
+ <%- if generate_view? -%>
15
19
  <%= hanami_gem("view") %>
20
+ <%- end -%>
16
21
 
17
22
  gem "dry-types", "~> 1.7"
18
23
  gem "dry-operation"
@@ -1,7 +1,9 @@
1
1
  .env*.local
2
2
  log/*
3
3
  <%- if generate_assets? -%>
4
- public/
4
+ public/*
5
+ !public/404.html
6
+ !public/500.html
5
7
  node_modules/
6
8
  <%- end -%>
7
9
  <%- if generate_sqlite? -%>
@@ -1,3 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "hanami/rake_tasks"
4
+
5
+ # Add your custom rake tasks to the lib/tasks directory
6
+ Rake.add_rakelib "lib/tasks"
@@ -1 +1,15 @@
1
1
  # <%= camelized_app_name %>
2
+
3
+ Welcome to your Hanami app!
4
+
5
+ ## Getting Started
6
+
7
+ - Run the server with `bin/dev`
8
+ - View the app at [http://localhost:2300](http://localhost:2300)
9
+ - Run the tests with `bundle exec rake`
10
+
11
+ ## Useful Links
12
+
13
+ - [Hanami Home](http://hanamirb.org)
14
+ - [Hanami Guides](https://guides.hanamirb.org/)
15
+ - [Hanami API Doc](https://gemdocs.org/gems/hanami/latest)
@@ -34,62 +34,65 @@ module Hanami
34
34
  attr_reader :inflector
35
35
 
36
36
  def generate_app(app, context) # rubocop:disable Metrics/AbcSize
37
- fs.write(".gitignore", t("gitignore.erb", context))
38
- fs.write(".env", t("env.erb", context))
37
+ fs.create(".gitignore", t("gitignore.erb", context))
38
+ fs.create(".env", t("env.erb", context))
39
39
 
40
- fs.write("README.md", t("readme.erb", context))
41
- fs.write("Gemfile", t("gemfile.erb", context))
42
- fs.write("Rakefile", t("rakefile.erb", context))
43
- fs.write("Procfile.dev", t("procfile.erb", context))
44
- fs.write("config.ru", t("config_ru.erb", context))
40
+ fs.create("README.md", t("readme.erb", context))
41
+ fs.create("Gemfile", t("gemfile.erb", context))
42
+ fs.create("Rakefile", t("rakefile.erb", context))
43
+ fs.create("Procfile.dev", t("procfile.erb", context))
44
+ fs.create("config.ru", t("config_ru.erb", context))
45
45
 
46
- fs.write("bin/dev", file("dev"))
46
+ fs.create("bin/dev", file("dev"))
47
47
  fs.chmod("bin/dev", 0o755)
48
48
 
49
- fs.write("config/app.rb", t("app.erb", context))
50
- fs.write("config/settings.rb", t("settings.erb", context))
51
- fs.write("config/routes.rb", t("routes.erb", context))
52
- fs.write("config/puma.rb", t("puma.erb", context))
49
+ fs.create("config/app.rb", t("app.erb", context))
50
+ fs.create("config/settings.rb", t("settings.erb", context))
51
+ fs.create("config/routes.rb", t("routes.erb", context))
52
+ fs.create("config/puma.rb", t("puma.erb", context))
53
53
 
54
- fs.write("lib/tasks/.keep", t("keep.erb", context))
55
- fs.write("lib/#{app}/types.rb", t("types.erb", context))
54
+ fs.create("lib/tasks/.keep", t("keep.erb", context))
55
+ fs.create("lib/#{app}/types.rb", t("types.erb", context))
56
56
 
57
- fs.write("app/actions/.keep", t("keep.erb", context))
58
- fs.write("app/action.rb", t("action.erb", context))
59
- fs.write("app/view.rb", t("view.erb", context))
60
- fs.write("app/views/helpers.rb", t("helpers.erb", context))
61
- fs.write("app/templates/layouts/app.html.erb", t("app_layout.erb", context))
57
+ fs.create("app/actions/.keep", t("keep.erb", context))
58
+ fs.create("app/action.rb", t("action.erb", context))
59
+
60
+ if context.generate_view?
61
+ fs.create("app/view.rb", t("view.erb", context))
62
+ fs.create("app/views/helpers.rb", t("helpers.erb", context))
63
+ fs.create("app/templates/layouts/app.html.erb", t("app_layout.erb", context))
64
+
65
+ fs.create("public/404.html", file("404.html"))
66
+ fs.create("public/500.html", file("500.html"))
67
+ end
62
68
 
63
69
  if context.generate_assets?
64
- fs.write("package.json", t("package.json.erb", context))
65
- fs.write("config/assets.js", file("assets.js"))
66
- fs.write("app/assets/js/app.js", t("app_js.erb", context))
67
- fs.write("app/assets/css/app.css", t("app_css.erb", context))
68
- fs.write("app/assets/images/favicon.ico", file("favicon.ico"))
70
+ fs.create("package.json", t("package.json.erb", context))
71
+ fs.create("config/assets.js", file("assets.js"))
72
+ fs.create("app/assets/js/app.js", t("app_js.erb", context))
73
+ fs.create("app/assets/css/app.css", t("app_css.erb", context))
74
+ fs.create("app/assets/images/favicon.ico", file("favicon.ico"))
69
75
  end
70
76
 
71
77
  if context.generate_db?
72
- fs.write("app/db/relation.rb", t("relation.erb", context))
73
- fs.write("app/relations/.keep", t("keep.erb", context))
78
+ fs.create("app/db/relation.rb", t("relation.erb", context))
79
+ fs.create("app/relations/.keep", t("keep.erb", context))
74
80
 
75
- fs.write("app/db/repo.rb", t("repo.erb", context))
76
- fs.write("app/repos/.keep", t("keep.erb", context))
81
+ fs.create("app/db/repo.rb", t("repo.erb", context))
82
+ fs.create("app/repos/.keep", t("keep.erb", context))
77
83
 
78
- fs.write("app/db/struct.rb", t("struct.erb", context))
79
- fs.write("app/structs/.keep", t("keep.erb", context))
84
+ fs.create("app/db/struct.rb", t("struct.erb", context))
85
+ fs.create("app/structs/.keep", t("keep.erb", context))
80
86
 
81
- fs.write("config/db/seeds.rb", t("seeds.erb", context))
82
- fs.write("config/db/migrate/.keep", t("keep.erb", context))
87
+ fs.create("config/db/seeds.rb", t("seeds.erb", context))
88
+ fs.create("config/db/migrate/.keep", t("keep.erb", context))
83
89
 
84
90
  if context.generate_sqlite?
85
- fs.write("db/.keep", t("keep.erb", context))
91
+ fs.create("db/.keep", t("keep.erb", context))
86
92
  end
87
93
  end
88
94
 
89
- fs.write("app/operation.rb", t("operation.erb", context))
90
-
91
- fs.write("public/404.html", file("404.html"))
92
- fs.write("public/500.html", file("500.html"))
95
+ fs.create("app/operation.rb", t("operation.erb", context))
93
96
  end
94
97
 
95
98
  def template(path, context)
@@ -26,7 +26,7 @@ module Hanami
26
26
  INDENT = " "
27
27
 
28
28
  def self.class(class_name, **args)
29
- new(class_name: class_name, **args).to_s
29
+ new(class_name: class_name, **args).call
30
30
  end
31
31
 
32
32
  def self.module(*names, **args)
@@ -36,24 +36,33 @@ module Hanami
36
36
  names
37
37
  end
38
38
 
39
- new(modules: module_names, class_name: nil, parent_class: nil, **args).to_s
39
+ new(
40
+ modules: module_names,
41
+ class_name: nil,
42
+ parent_class_name: nil,
43
+ **args,
44
+ ).call
40
45
  end
41
46
 
42
47
  def initialize(
43
48
  class_name: nil,
44
- parent_class: nil,
49
+ parent_class_name: nil,
45
50
  modules: [],
46
51
  header: [],
47
52
  body: []
48
53
  )
49
54
  @class_name = class_name
50
- @parent_class = parent_class
55
+ @parent_class_name = parent_class_name
51
56
  @modules = modules
52
57
  @header = header.any? ? (header + [""]) : []
53
58
  @body = body
59
+
60
+ if parent_class_name && !class_name
61
+ raise ArgumentError, "class_name is required when parent_class_name is specified"
62
+ end
54
63
  end
55
64
 
56
- def to_s
65
+ def call
57
66
  definition = lines(modules).map { |line| "#{line}\n" }.join
58
67
  source_code = [header, definition].flatten.join("\n")
59
68
  ensure_parseable!(source_code)
@@ -64,7 +73,7 @@ module Hanami
64
73
 
65
74
  attr_reader(
66
75
  :class_name,
67
- :parent_class,
76
+ :parent_class_name,
68
77
  :modules,
69
78
  :header,
70
79
  :body
@@ -98,8 +107,8 @@ module Hanami
98
107
  end
99
108
 
100
109
  def class_definition
101
- if parent_class
102
- "class #{class_name} < #{parent_class}"
110
+ if parent_class_name
111
+ "class #{class_name} < #{parent_class_name}"
103
112
  else
104
113
  "class #{class_name}"
105
114
  end
@@ -1,5 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ begin
4
+ require "rackup"
5
+ rescue LoadError
6
+ # Rack 2 doesn't have rackup gem, use Rack::Server instead
7
+ end
8
+
3
9
  module Hanami
4
10
  module CLI
5
11
  # @since 2.0.0
@@ -24,9 +30,17 @@ module Hanami
24
30
  warn: :warn
25
31
  }.freeze
26
32
 
33
+ def self.rack_server_class
34
+ if defined?(Rackup::Server)
35
+ Rackup::Server
36
+ else
37
+ Rack::Server
38
+ end
39
+ end
40
+
27
41
  # @since 2.0.0
28
42
  # @api private
29
- def initialize(rack_server: Rack::Server)
43
+ def initialize(rack_server: self.class.rack_server_class)
30
44
  @rack_server = rack_server
31
45
  end
32
46
 
@@ -6,6 +6,6 @@ module Hanami
6
6
  #
7
7
  # @api public
8
8
  # @since 2.0.0
9
- VERSION = "2.2.1"
9
+ VERSION = "2.3.0.beta1"
10
10
  end
11
11
  end
@@ -50,6 +50,11 @@ module Hanami
50
50
  define_method(:respond_to_missing?) do |name, include_private|
51
51
  super(name, include_private) || hanami_app.respond_to?(name, include_private)
52
52
  end
53
+
54
+ # User-provided extension modules
55
+ app.config.console.extensions.each do |mod|
56
+ include mod
57
+ end
53
58
  end
54
59
  end
55
60
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.3.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-11-13 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
@@ -90,6 +89,20 @@ dependencies:
90
89
  - - "<"
91
90
  - !ruby/object:Gem::Version
92
91
  version: '2'
92
+ - !ruby/object:Gem::Dependency
93
+ name: irb
94
+ requirement: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
93
106
  - !ruby/object:Gem::Dependency
94
107
  name: rake
95
108
  requirement: !ruby/object:Gem::Requirement
@@ -118,6 +131,20 @@ dependencies:
118
131
  - - "~>"
119
132
  - !ruby/object:Gem::Version
120
133
  version: '2.6'
134
+ - !ruby/object:Gem::Dependency
135
+ name: rackup
136
+ requirement: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ type: :runtime
142
+ prerelease: false
143
+ version_requirements: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
121
148
  - !ruby/object:Gem::Dependency
122
149
  name: rspec
123
150
  requirement: !ruby/object:Gem::Requirement
@@ -203,6 +230,7 @@ files:
203
230
  - lib/hanami/cli/commands/app/db/drop.rb
204
231
  - lib/hanami/cli/commands/app/db/migrate.rb
205
232
  - lib/hanami/cli/commands/app/db/prepare.rb
233
+ - lib/hanami/cli/commands/app/db/rollback.rb
206
234
  - lib/hanami/cli/commands/app/db/seed.rb
207
235
  - lib/hanami/cli/commands/app/db/structure/dump.rb
208
236
  - lib/hanami/cli/commands/app/db/structure/load.rb
@@ -235,51 +263,19 @@ files:
235
263
  - lib/hanami/cli/errors.rb
236
264
  - lib/hanami/cli/files.rb
237
265
  - lib/hanami/cli/generators/app/action.rb
238
- - lib/hanami/cli/generators/app/action/action.erb
239
- - lib/hanami/cli/generators/app/action/slice_action.erb
240
- - lib/hanami/cli/generators/app/action/slice_template.html.erb
241
- - lib/hanami/cli/generators/app/action/slice_view.erb
242
- - lib/hanami/cli/generators/app/action/template.erb
243
- - lib/hanami/cli/generators/app/action/template.html.erb
244
- - lib/hanami/cli/generators/app/action/view.erb
245
- - lib/hanami/cli/generators/app/action_context.rb
246
266
  - lib/hanami/cli/generators/app/component.rb
247
- - lib/hanami/cli/generators/app/component/component.erb
248
- - lib/hanami/cli/generators/app/component/slice_component.erb
249
- - lib/hanami/cli/generators/app/component_context.rb
250
267
  - lib/hanami/cli/generators/app/migration.rb
251
268
  - lib/hanami/cli/generators/app/operation.rb
252
269
  - lib/hanami/cli/generators/app/part.rb
253
- - lib/hanami/cli/generators/app/part/app_base_part.erb
254
- - lib/hanami/cli/generators/app/part/app_part.erb
255
- - lib/hanami/cli/generators/app/part/slice_base_part.erb
256
- - lib/hanami/cli/generators/app/part/slice_part.erb
257
- - lib/hanami/cli/generators/app/part_context.rb
258
270
  - lib/hanami/cli/generators/app/relation.rb
259
271
  - lib/hanami/cli/generators/app/repo.rb
260
- - lib/hanami/cli/generators/app/ruby_file_writer.rb
272
+ - lib/hanami/cli/generators/app/ruby_class_file.rb
273
+ - lib/hanami/cli/generators/app/ruby_file.rb
274
+ - lib/hanami/cli/generators/app/ruby_module_file.rb
261
275
  - lib/hanami/cli/generators/app/slice.rb
262
- - lib/hanami/cli/generators/app/slice/action.erb
263
- - lib/hanami/cli/generators/app/slice/app_css.erb
264
- - lib/hanami/cli/generators/app/slice/app_js.erb
265
- - lib/hanami/cli/generators/app/slice/app_layout.erb
266
276
  - lib/hanami/cli/generators/app/slice/favicon.ico
267
- - lib/hanami/cli/generators/app/slice/helpers.erb
268
- - lib/hanami/cli/generators/app/slice/keep.erb
269
- - lib/hanami/cli/generators/app/slice/operation.erb
270
- - lib/hanami/cli/generators/app/slice/relation.erb
271
- - lib/hanami/cli/generators/app/slice/repo.erb
272
- - lib/hanami/cli/generators/app/slice/routes.erb
273
- - lib/hanami/cli/generators/app/slice/struct.erb
274
- - lib/hanami/cli/generators/app/slice/view.erb
275
- - lib/hanami/cli/generators/app/slice_context.rb
276
277
  - lib/hanami/cli/generators/app/struct.rb
277
278
  - lib/hanami/cli/generators/app/view.rb
278
- - lib/hanami/cli/generators/app/view/app_template.html.erb
279
- - lib/hanami/cli/generators/app/view/app_view.erb
280
- - lib/hanami/cli/generators/app/view/slice_template.html.erb
281
- - lib/hanami/cli/generators/app/view/slice_view.erb
282
- - lib/hanami/cli/generators/app/view_context.rb
283
279
  - lib/hanami/cli/generators/constants.rb
284
280
  - lib/hanami/cli/generators/context.rb
285
281
  - lib/hanami/cli/generators/gem/app.rb
@@ -339,7 +335,6 @@ metadata:
339
335
  source_code_uri: https://github.com/hanami/cli
340
336
  changelog_uri: https://github.com/hanami/cli/blob/master/CHANGELOG.md
341
337
  rubygems_mfa_required: 'true'
342
- post_install_message:
343
338
  rdoc_options: []
344
339
  require_paths:
345
340
  - lib
@@ -354,8 +349,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
354
349
  - !ruby/object:Gem::Version
355
350
  version: '0'
356
351
  requirements: []
357
- rubygems_version: 3.5.22
358
- signing_key:
352
+ rubygems_version: 3.6.9
359
353
  specification_version: 4
360
354
  summary: Hanami CLI
361
355
  test_files: []
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module <%= camelized_app_name %>
4
- module Actions
5
- <%= module_controller_declaration %>
6
- <%= module_controller_offset %>class <%= camelized_action_name %> < <%= camelized_app_name %>::Action
7
- <%- if bundled_views? -%>
8
- <%= module_controller_offset %> def handle(request, response)
9
- <%- else -%>
10
- <%= module_controller_offset %> def handle(request, response)
11
- <%= module_controller_offset %> response.body = self.class.name
12
- <%- end -%>
13
- <%= module_controller_offset %> end
14
- <%= module_controller_offset %>end
15
- <%= module_controller_end %>
16
- end
17
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module <%= camelized_slice_name %>
4
- module Actions
5
- <%= module_controller_declaration %>
6
- <%= module_controller_offset %>class <%= camelized_action_name %> < <%= camelized_slice_name %>::Action
7
- <%- if bundled_views? -%>
8
- <%= module_controller_offset %> def handle(request, response)
9
- <%- else -%>
10
- <%= module_controller_offset %> def handle(request, response)
11
- <%= module_controller_offset %> response.body = self.class.name
12
- <%- end -%>
13
- <%= module_controller_offset %> end
14
- <%= module_controller_offset %>end
15
- <%= module_controller_end %>
16
- end
17
- end
@@ -1 +0,0 @@
1
- <h1><%= camelized_slice_name %>::Views::<%= camelized_controller_name %>::<%= camelized_action_name %></h1>
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module <%= camelized_slice_name %>
4
- module Views
5
- <%= module_controller_declaration %>
6
- <%= module_controller_offset %>class <%= camelized_action_name %> < <%= camelized_slice_name %>::View
7
- <%= module_controller_offset %>end
8
- <%= module_controller_end %>
9
- end
10
- end
File without changes
@@ -1 +0,0 @@
1
- <h1><%= camelized_app_name %>::Views::<%= camelized_controller_name %>::<%= camelized_action_name %></h1>