hanami-cli 2.1.1 → 2.2.0.beta2

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +29 -13
  3. data/.rubocop.yml +2 -0
  4. data/CHANGELOG.md +28 -0
  5. data/Gemfile +6 -1
  6. data/README.md +13 -7
  7. data/docker-compose.yml +14 -0
  8. data/hanami-cli.gemspec +2 -2
  9. data/lib/hanami/cli/command.rb +2 -2
  10. data/lib/hanami/cli/commands/app/command.rb +2 -16
  11. data/lib/hanami/cli/commands/app/db/command.rb +148 -0
  12. data/lib/hanami/cli/commands/app/db/create.rb +21 -11
  13. data/lib/hanami/cli/commands/app/db/drop.rb +21 -10
  14. data/lib/hanami/cli/commands/app/db/migrate.rb +50 -12
  15. data/lib/hanami/cli/commands/app/db/prepare.rb +68 -0
  16. data/lib/hanami/cli/commands/app/db/seed.rb +22 -21
  17. data/lib/hanami/cli/commands/app/db/structure/dump.rb +32 -7
  18. data/lib/hanami/cli/commands/app/db/structure/load.rb +54 -0
  19. data/lib/hanami/cli/commands/app/db/utils/database.rb +100 -75
  20. data/lib/hanami/cli/commands/app/db/utils/mysql.rb +59 -6
  21. data/lib/hanami/cli/commands/app/db/utils/postgres.rb +42 -21
  22. data/lib/hanami/cli/commands/app/db/utils/sqlite.rb +58 -10
  23. data/lib/hanami/cli/commands/app/db/version.rb +14 -8
  24. data/lib/hanami/cli/commands/app/generate/action.rb +4 -3
  25. data/lib/hanami/cli/commands/app/generate/command.rb +60 -0
  26. data/lib/hanami/cli/commands/app/generate/component.rb +49 -0
  27. data/lib/hanami/cli/commands/app/generate/migration.rb +47 -0
  28. data/lib/hanami/cli/commands/app/generate/operation.rb +26 -0
  29. data/lib/hanami/cli/commands/app/generate/part.rb +1 -1
  30. data/lib/hanami/cli/commands/app/generate/relation.rb +29 -0
  31. data/lib/hanami/cli/commands/app/generate/repo.rb +42 -0
  32. data/lib/hanami/cli/commands/app/generate/slice.rb +20 -3
  33. data/lib/hanami/cli/commands/app/generate/struct.rb +27 -0
  34. data/lib/hanami/cli/commands/app/install.rb +1 -1
  35. data/lib/hanami/cli/commands/app/middleware.rb +1 -1
  36. data/lib/hanami/cli/commands/app/server.rb +2 -2
  37. data/lib/hanami/cli/commands/app.rb +21 -2
  38. data/lib/hanami/cli/commands/gem/new.rb +78 -14
  39. data/lib/hanami/cli/errors.rb +28 -0
  40. data/lib/hanami/cli/files.rb +22 -0
  41. data/lib/hanami/cli/generators/app/action_context.rb +5 -13
  42. data/lib/hanami/cli/generators/app/component/component.erb +8 -0
  43. data/lib/hanami/cli/generators/app/component/slice_component.erb +8 -0
  44. data/lib/hanami/cli/generators/app/component.rb +61 -0
  45. data/lib/hanami/cli/generators/app/component_context.rb +82 -0
  46. data/lib/hanami/cli/generators/app/migration.rb +66 -0
  47. data/lib/hanami/cli/generators/app/operation.rb +49 -0
  48. data/lib/hanami/cli/generators/app/part_context.rb +5 -21
  49. data/lib/hanami/cli/generators/app/relation.rb +45 -0
  50. data/lib/hanami/cli/generators/app/repo.rb +41 -0
  51. data/lib/hanami/cli/generators/app/ruby_file_writer.rb +151 -0
  52. data/lib/hanami/cli/generators/app/slice/{entities.erb → operation.erb} +1 -3
  53. data/lib/hanami/cli/generators/app/slice/relation.erb +8 -0
  54. data/lib/hanami/cli/generators/app/slice/{slice.erb → repo.erb} +3 -1
  55. data/lib/hanami/cli/generators/app/slice/struct.erb +8 -0
  56. data/lib/hanami/cli/generators/app/slice.rb +14 -6
  57. data/lib/hanami/cli/generators/app/slice_context.rb +9 -2
  58. data/lib/hanami/cli/generators/app/struct.rb +40 -0
  59. data/lib/hanami/cli/generators/app/view_context.rb +4 -16
  60. data/lib/hanami/cli/generators/constants.rb +39 -0
  61. data/lib/hanami/cli/generators/context.rb +48 -0
  62. data/lib/hanami/cli/generators/gem/app/action.erb +3 -0
  63. data/lib/hanami/cli/generators/gem/app/env.erb +4 -0
  64. data/lib/hanami/cli/generators/gem/app/gemfile.erb +11 -0
  65. data/lib/hanami/cli/generators/gem/app/gitignore.erb +4 -1
  66. data/lib/hanami/cli/generators/gem/app/operation.erb +13 -0
  67. data/lib/hanami/cli/generators/gem/app/relation.erb +10 -0
  68. data/lib/hanami/cli/generators/gem/app/repo.erb +10 -0
  69. data/lib/hanami/cli/generators/gem/app/struct.erb +10 -0
  70. data/lib/hanami/cli/generators/gem/app.rb +19 -0
  71. data/lib/hanami/cli/ruby_file_generator.rb +123 -0
  72. data/lib/hanami/cli/version.rb +1 -1
  73. metadata +39 -17
  74. data/lib/hanami/cli/commands/app/db/create_migration.rb +0 -32
  75. data/lib/hanami/cli/commands/app/db/reset.rb +0 -28
  76. data/lib/hanami/cli/commands/app/db/rollback.rb +0 -81
  77. data/lib/hanami/cli/commands/app/db/sample_data.rb +0 -42
  78. data/lib/hanami/cli/commands/app/db/setup.rb +0 -26
  79. data/lib/hanami/cli/commands/app/db/utils/database_config.rb +0 -60
  80. data/lib/hanami/cli/generators/app/slice/repository.erb +0 -10
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.1.1
4
+ version: 2.2.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-19 00:00:00.000000000 Z
11
+ date: 2024-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -31,9 +31,9 @@ dependencies:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.0'
34
- - - "<"
34
+ - - ">="
35
35
  - !ruby/object:Gem::Version
36
- version: '2'
36
+ version: 1.1.0
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -41,9 +41,9 @@ dependencies:
41
41
  - - "~>"
42
42
  - !ruby/object:Gem::Version
43
43
  version: '1.0'
44
- - - "<"
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: '2'
46
+ version: 1.1.0
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: dry-files
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -183,6 +183,7 @@ files:
183
183
  - Rakefile
184
184
  - bin/console
185
185
  - bin/setup
186
+ - docker-compose.yml
186
187
  - exe/hanami
187
188
  - hanami-cli.gemspec
188
189
  - lib/hanami-cli.rb
@@ -197,18 +198,15 @@ files:
197
198
  - lib/hanami/cli/commands/app/assets/watch.rb
198
199
  - lib/hanami/cli/commands/app/command.rb
199
200
  - lib/hanami/cli/commands/app/console.rb
201
+ - lib/hanami/cli/commands/app/db/command.rb
200
202
  - lib/hanami/cli/commands/app/db/create.rb
201
- - lib/hanami/cli/commands/app/db/create_migration.rb
202
203
  - lib/hanami/cli/commands/app/db/drop.rb
203
204
  - lib/hanami/cli/commands/app/db/migrate.rb
204
- - lib/hanami/cli/commands/app/db/reset.rb
205
- - lib/hanami/cli/commands/app/db/rollback.rb
206
- - lib/hanami/cli/commands/app/db/sample_data.rb
205
+ - lib/hanami/cli/commands/app/db/prepare.rb
207
206
  - lib/hanami/cli/commands/app/db/seed.rb
208
- - lib/hanami/cli/commands/app/db/setup.rb
209
207
  - lib/hanami/cli/commands/app/db/structure/dump.rb
208
+ - lib/hanami/cli/commands/app/db/structure/load.rb
210
209
  - lib/hanami/cli/commands/app/db/utils/database.rb
211
- - lib/hanami/cli/commands/app/db/utils/database_config.rb
212
210
  - lib/hanami/cli/commands/app/db/utils/mysql.rb
213
211
  - lib/hanami/cli/commands/app/db/utils/postgres.rb
214
212
  - lib/hanami/cli/commands/app/db/utils/sqlite.rb
@@ -216,8 +214,15 @@ files:
216
214
  - lib/hanami/cli/commands/app/dev.rb
217
215
  - lib/hanami/cli/commands/app/generate.rb
218
216
  - lib/hanami/cli/commands/app/generate/action.rb
217
+ - lib/hanami/cli/commands/app/generate/command.rb
218
+ - lib/hanami/cli/commands/app/generate/component.rb
219
+ - lib/hanami/cli/commands/app/generate/migration.rb
220
+ - lib/hanami/cli/commands/app/generate/operation.rb
219
221
  - lib/hanami/cli/commands/app/generate/part.rb
222
+ - lib/hanami/cli/commands/app/generate/relation.rb
223
+ - lib/hanami/cli/commands/app/generate/repo.rb
220
224
  - lib/hanami/cli/commands/app/generate/slice.rb
225
+ - lib/hanami/cli/commands/app/generate/struct.rb
221
226
  - lib/hanami/cli/commands/app/generate/view.rb
222
227
  - lib/hanami/cli/commands/app/install.rb
223
228
  - lib/hanami/cli/commands/app/middleware.rb
@@ -238,32 +243,44 @@ files:
238
243
  - lib/hanami/cli/generators/app/action/template.html.erb
239
244
  - lib/hanami/cli/generators/app/action/view.erb
240
245
  - lib/hanami/cli/generators/app/action_context.rb
246
+ - 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
+ - lib/hanami/cli/generators/app/migration.rb
251
+ - lib/hanami/cli/generators/app/operation.rb
241
252
  - lib/hanami/cli/generators/app/part.rb
242
253
  - lib/hanami/cli/generators/app/part/app_base_part.erb
243
254
  - lib/hanami/cli/generators/app/part/app_part.erb
244
255
  - lib/hanami/cli/generators/app/part/slice_base_part.erb
245
256
  - lib/hanami/cli/generators/app/part/slice_part.erb
246
257
  - lib/hanami/cli/generators/app/part_context.rb
258
+ - lib/hanami/cli/generators/app/relation.rb
259
+ - lib/hanami/cli/generators/app/repo.rb
260
+ - lib/hanami/cli/generators/app/ruby_file_writer.rb
247
261
  - lib/hanami/cli/generators/app/slice.rb
248
262
  - lib/hanami/cli/generators/app/slice/action.erb
249
263
  - lib/hanami/cli/generators/app/slice/app_css.erb
250
264
  - lib/hanami/cli/generators/app/slice/app_js.erb
251
265
  - lib/hanami/cli/generators/app/slice/app_layout.erb
252
- - lib/hanami/cli/generators/app/slice/entities.erb
253
266
  - lib/hanami/cli/generators/app/slice/favicon.ico
254
267
  - lib/hanami/cli/generators/app/slice/helpers.erb
255
268
  - lib/hanami/cli/generators/app/slice/keep.erb
256
- - lib/hanami/cli/generators/app/slice/repository.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
257
272
  - lib/hanami/cli/generators/app/slice/routes.erb
258
- - lib/hanami/cli/generators/app/slice/slice.erb
273
+ - lib/hanami/cli/generators/app/slice/struct.erb
259
274
  - lib/hanami/cli/generators/app/slice/view.erb
260
275
  - lib/hanami/cli/generators/app/slice_context.rb
276
+ - lib/hanami/cli/generators/app/struct.rb
261
277
  - lib/hanami/cli/generators/app/view.rb
262
278
  - lib/hanami/cli/generators/app/view/app_template.html.erb
263
279
  - lib/hanami/cli/generators/app/view/app_view.erb
264
280
  - lib/hanami/cli/generators/app/view/slice_template.html.erb
265
281
  - lib/hanami/cli/generators/app/view/slice_view.erb
266
282
  - lib/hanami/cli/generators/app/view_context.rb
283
+ - lib/hanami/cli/generators/constants.rb
267
284
  - lib/hanami/cli/generators/context.rb
268
285
  - lib/hanami/cli/generators/gem/app.rb
269
286
  - lib/hanami/cli/generators/gem/app/404.html
@@ -282,13 +299,17 @@ files:
282
299
  - lib/hanami/cli/generators/gem/app/gitignore.erb
283
300
  - lib/hanami/cli/generators/gem/app/helpers.erb
284
301
  - lib/hanami/cli/generators/gem/app/keep.erb
302
+ - lib/hanami/cli/generators/gem/app/operation.erb
285
303
  - lib/hanami/cli/generators/gem/app/package.json.erb
286
304
  - lib/hanami/cli/generators/gem/app/procfile.erb
287
305
  - lib/hanami/cli/generators/gem/app/puma.erb
288
306
  - lib/hanami/cli/generators/gem/app/rakefile.erb
289
307
  - lib/hanami/cli/generators/gem/app/readme.erb
308
+ - lib/hanami/cli/generators/gem/app/relation.erb
309
+ - lib/hanami/cli/generators/gem/app/repo.erb
290
310
  - lib/hanami/cli/generators/gem/app/routes.erb
291
311
  - lib/hanami/cli/generators/gem/app/settings.erb
312
+ - lib/hanami/cli/generators/gem/app/struct.erb
292
313
  - lib/hanami/cli/generators/gem/app/types.erb
293
314
  - lib/hanami/cli/generators/gem/app/validator.erb
294
315
  - lib/hanami/cli/generators/gem/app/view.erb
@@ -300,6 +321,7 @@ files:
300
321
  - lib/hanami/cli/repl/core.rb
301
322
  - lib/hanami/cli/repl/irb.rb
302
323
  - lib/hanami/cli/repl/pry.rb
324
+ - lib/hanami/cli/ruby_file_generator.rb
303
325
  - lib/hanami/cli/server.rb
304
326
  - lib/hanami/cli/system_call.rb
305
327
  - lib/hanami/cli/url.rb
@@ -324,14 +346,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
324
346
  requirements:
325
347
  - - ">="
326
348
  - !ruby/object:Gem::Version
327
- version: '3.0'
349
+ version: '3.1'
328
350
  required_rubygems_version: !ruby/object:Gem::Requirement
329
351
  requirements:
330
352
  - - ">="
331
353
  - !ruby/object:Gem::Version
332
354
  version: '0'
333
355
  requirements: []
334
- rubygems_version: 3.5.3
356
+ rubygems_version: 3.5.16
335
357
  signing_key:
336
358
  specification_version: 4
337
359
  summary: Hanami CLI
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../../app/command"
4
- require_relative "structure/dump"
5
-
6
- module Hanami
7
- module CLI
8
- module Commands
9
- module App
10
- # @api private
11
- module DB
12
- # @api private
13
- class CreateMigration < App::Command
14
- desc "Create new migration file"
15
-
16
- argument :name, desc: "Migration file name"
17
-
18
- # @api private
19
- def call(name:, **)
20
- migrator = database.migrator
21
- version = migrator.generate_version
22
-
23
- measure "migration #{version}_#{name} created" do
24
- migrator.create_file(name, version)
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../../app/command"
4
- require_relative "create"
5
- require_relative "drop"
6
- require_relative "migrate"
7
-
8
- module Hanami
9
- module CLI
10
- module Commands
11
- module App
12
- module DB
13
- # @api private
14
- class Reset < App::Command
15
- desc "Drop, create, and migrate database"
16
-
17
- # @api private
18
- def call(**)
19
- run_command Drop
20
- run_command Create
21
- run_command Migrate
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,81 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../../app/command"
4
- require_relative "structure/dump"
5
-
6
- module Hanami
7
- module CLI
8
- module Commands
9
- module App
10
- module DB
11
- # @api private
12
- class Rollback < App::Command
13
- desc "Rollback database to a previous migration"
14
-
15
- option :target, desc: "Target migration number", aliases: ["-t"]
16
- option :dump, desc: "Dump structure after rolling back"
17
-
18
- # @api private
19
- def call(target: nil, dump: true, **)
20
- migration_code, migration_name = find_migration(target)
21
-
22
- if migration_name.nil?
23
- output = if target
24
- "==> migration file for target #{target} was not found"
25
- else
26
- "==> no migrations to rollback"
27
- end
28
-
29
- out.puts output
30
- return
31
- end
32
-
33
- measure "database #{database.name} rolled back to #{migration_name}" do
34
- database.run_migrations(target: Integer(migration_code))
35
-
36
- true
37
- end
38
-
39
- run_command Structure::Dump if dump
40
- end
41
-
42
- private
43
-
44
- def find_migration(code) # rubocop:disable Metrics/PerceivedComplexity
45
- applied_migrations = database.applied_migrations
46
-
47
- return if applied_migrations.empty?
48
-
49
- # Rollback to initial state if we have only one migration and
50
- # no target is specified. In this case the rollback target
51
- # will be the current migration timestamp minus 1
52
- if applied_migrations.one? && code.nil?
53
- migration = applied_migrations.first
54
-
55
- migration_code = Integer(migration.split("_").first) - 1
56
- migration_name = "initial state"
57
-
58
- return [migration_code, migration_name]
59
- end
60
-
61
- # Otherwise rollback to target or to previous migration
62
- migration =
63
- if code
64
- applied_migrations.detect { |m| m.split("_").first == code }
65
- else
66
- applied_migrations[-2]
67
- end
68
-
69
- return unless migration
70
-
71
- migration_code = code || migration.split("_").first
72
- migration_name = File.basename(migration, ".*")
73
-
74
- [migration_code, migration_name]
75
- end
76
- end
77
- end
78
- end
79
- end
80
- end
81
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../../app/command"
4
- require_relative "structure/dump"
5
-
6
- module Hanami
7
- module CLI
8
- module Commands
9
- module App
10
- module DB
11
- # @api private
12
- class SampleData < App::Command
13
- FILE_PATH = "db/sample_data.rb"
14
-
15
- desc "Load sample data"
16
-
17
- # @api private
18
- def call(**)
19
- if has_file?
20
- measure "sample data loaded from #{FILE_PATH}" do
21
- load full_file_path
22
- end
23
- else
24
- out.puts "=> #{FILE_PATH} not found"
25
- end
26
- end
27
-
28
- private
29
-
30
- def full_file_path
31
- File.join(app.root, FILE_PATH)
32
- end
33
-
34
- def has_file?
35
- File.exist?(full_file_path)
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../../app/command"
4
- require_relative "create"
5
- require_relative "migrate"
6
-
7
- module Hanami
8
- module CLI
9
- module Commands
10
- module App
11
- module DB
12
- # @api private
13
- class Setup < App::Command
14
- desc "Setup database"
15
-
16
- # @api private
17
- def call(**)
18
- run_command Create
19
- run_command Migrate
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "uri"
4
-
5
- module Hanami
6
- module CLI
7
- module Commands
8
- module App
9
- module DB
10
- # @api private
11
- module Utils
12
- # @api private
13
- class DatabaseConfig
14
- # @api private
15
- attr_reader :uri
16
-
17
- # @api private
18
- def initialize(database_url)
19
- @uri = URI(database_url)
20
- end
21
-
22
- # @api private
23
- def hostname
24
- uri.hostname
25
- end
26
- alias_method :host, :hostname
27
-
28
- # @api private
29
- def user
30
- uri.user
31
- end
32
- alias_method :username, :user
33
-
34
- # @api private
35
- def password
36
- uri.password
37
- end
38
- alias_method :pass, :password
39
-
40
- # @api private
41
- def port
42
- uri.port
43
- end
44
-
45
- # @api private
46
- def db_name
47
- @db_name ||= uri.path.gsub(/\A\//, "")
48
- end
49
-
50
- # @api private
51
- def db_type
52
- uri.scheme
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
59
- end
60
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "<%= underscored_app_name %>/repository"
4
- require_relative "entities"
5
-
6
- module <%= camelized_slice_name %>
7
- class Repository < <%= camelized_app_name %>::Repository
8
- struct_namespace Entities
9
- end
10
- end