hanami-cli 2.0.0.alpha8.1 → 2.0.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 (88) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +49 -2
  3. data/Gemfile +2 -3
  4. data/README.md +13 -11
  5. data/hanami-cli.gemspec +3 -2
  6. data/lib/hanami/cli/bundler.rb +3 -7
  7. data/lib/hanami/cli/commands/app/command.rb +68 -0
  8. data/lib/hanami/cli/commands/{monolith → app}/console.rb +6 -6
  9. data/lib/hanami/cli/commands/{monolith → app}/db/create.rb +3 -3
  10. data/lib/hanami/cli/commands/{monolith → app}/db/create_migration.rb +3 -3
  11. data/lib/hanami/cli/commands/{monolith → app}/db/drop.rb +3 -3
  12. data/lib/hanami/cli/commands/{monolith → app}/db/migrate.rb +4 -4
  13. data/lib/hanami/cli/commands/{monolith → app}/db/reset.rb +3 -3
  14. data/lib/hanami/cli/commands/{monolith → app}/db/rollback.rb +4 -4
  15. data/lib/hanami/cli/commands/{monolith → app}/db/sample_data.rb +4 -4
  16. data/lib/hanami/cli/commands/{monolith → app}/db/seed.rb +4 -4
  17. data/lib/hanami/cli/commands/{monolith → app}/db/setup.rb +3 -3
  18. data/lib/hanami/cli/commands/{monolith → app}/db/structure/dump.rb +3 -3
  19. data/lib/hanami/cli/commands/{monolith → app}/db/version.rb +3 -3
  20. data/lib/hanami/cli/commands/{monolith → app}/generate/action.rb +3 -3
  21. data/lib/hanami/cli/commands/{monolith → app}/generate/slice.rb +4 -4
  22. data/lib/hanami/cli/commands/{monolith → app}/generate.rb +1 -1
  23. data/lib/hanami/cli/commands/{monolith → app}/install.rb +1 -1
  24. data/lib/hanami/cli/commands/app/routes.rb +82 -0
  25. data/lib/hanami/cli/commands/app/server.rb +58 -0
  26. data/lib/hanami/cli/commands/{monolith → app}/version.rb +1 -1
  27. data/lib/hanami/cli/commands/app.rb +46 -0
  28. data/lib/hanami/cli/commands/db/utils/database.rb +10 -10
  29. data/lib/hanami/cli/commands/gem/new.rb +29 -38
  30. data/lib/hanami/cli/commands/gem/version.rb +21 -1
  31. data/lib/hanami/cli/commands/gem.rb +2 -4
  32. data/lib/hanami/cli/commands.rb +9 -10
  33. data/lib/hanami/cli/generators/{monolith → app}/action/action.erb +0 -0
  34. data/lib/hanami/cli/generators/{monolith → app}/action/template.erb +0 -0
  35. data/lib/hanami/cli/generators/{monolith → app}/action/template.html.erb +0 -0
  36. data/lib/hanami/cli/generators/{monolith → app}/action/view.erb +0 -0
  37. data/lib/hanami/cli/generators/{monolith → app}/action.rb +2 -2
  38. data/lib/hanami/cli/generators/{monolith → app}/action_context.rb +1 -1
  39. data/lib/hanami/cli/generators/{monolith → app}/slice/action.erb +0 -0
  40. data/lib/hanami/cli/generators/{monolith → app}/slice/entities.erb +0 -0
  41. data/lib/hanami/cli/generators/{gem/application/monolith → app/slice}/keep.erb +0 -0
  42. data/lib/hanami/cli/generators/{monolith → app}/slice/repository.erb +0 -0
  43. data/lib/hanami/cli/generators/{monolith → app}/slice/routes.erb +0 -0
  44. data/lib/hanami/cli/generators/{monolith → app}/slice/view.erb +0 -0
  45. data/lib/hanami/cli/generators/{monolith → app}/slice.rb +2 -2
  46. data/lib/hanami/cli/generators/{monolith → app}/slice_context.rb +1 -1
  47. data/lib/hanami/cli/generators/context.rb +2 -2
  48. data/lib/hanami/cli/generators/gem/{application/monolith/entities.erb → app/action.erb} +3 -3
  49. data/lib/hanami/cli/generators/gem/{application/monolith/application.erb → app/app.erb} +1 -1
  50. data/lib/hanami/cli/generators/gem/{application/monolith → app}/config_ru.erb +0 -0
  51. data/lib/hanami/cli/generators/gem/{application/monolith → app}/env.erb +0 -0
  52. data/lib/hanami/cli/generators/gem/app/gemfile.erb +15 -0
  53. data/lib/hanami/cli/generators/{monolith/slice → gem/app}/keep.erb +0 -0
  54. data/lib/hanami/cli/generators/gem/app/operation.erb +9 -0
  55. data/lib/hanami/cli/generators/gem/app/rakefile.erb +3 -0
  56. data/lib/hanami/cli/generators/gem/{application/monolith → app}/readme.erb +0 -0
  57. data/lib/hanami/cli/generators/gem/app/relation.erb +7 -0
  58. data/lib/hanami/cli/generators/gem/app/repository.erb +9 -0
  59. data/lib/hanami/cli/generators/gem/app/routes.erb +11 -0
  60. data/lib/hanami/cli/generators/gem/app/settings.erb +9 -0
  61. data/lib/hanami/cli/generators/gem/{application/monolith/functions.erb → app/transformations.erb} +1 -1
  62. data/lib/hanami/cli/generators/gem/{application/monolith → app}/types.erb +0 -0
  63. data/lib/hanami/cli/generators/gem/app/validator.erb +12 -0
  64. data/lib/hanami/cli/generators/gem/app/view.erb +9 -0
  65. data/lib/hanami/cli/generators/gem/{application/monolith → app}/view_context.erb +1 -6
  66. data/lib/hanami/cli/generators/gem/app/view_part.erb +10 -0
  67. data/lib/hanami/cli/generators/gem/app.rb +64 -0
  68. data/lib/hanami/cli/generators/version.rb +55 -0
  69. data/lib/hanami/cli/rake_tasks.rb +54 -0
  70. data/lib/hanami/cli/repl/core.rb +7 -7
  71. data/lib/hanami/cli/server.rb +45 -0
  72. data/lib/hanami/cli/version.rb +1 -1
  73. data/lib/hanami/console/context.rb +12 -12
  74. data/lib/hanami/console/plugins/slice_readers.rb +2 -2
  75. metadata +85 -60
  76. data/lib/hanami/cli/commands/application.rb +0 -67
  77. data/lib/hanami/cli/commands/monolith.rb +0 -55
  78. data/lib/hanami/cli/generators/gem/application/monolith/action.erb +0 -21
  79. data/lib/hanami/cli/generators/gem/application/monolith/gemfile.erb +0 -19
  80. data/lib/hanami/cli/generators/gem/application/monolith/operation.erb +0 -18
  81. data/lib/hanami/cli/generators/gem/application/monolith/rakefile.erb +0 -3
  82. data/lib/hanami/cli/generators/gem/application/monolith/repository.erb +0 -13
  83. data/lib/hanami/cli/generators/gem/application/monolith/routes.erb +0 -4
  84. data/lib/hanami/cli/generators/gem/application/monolith/settings.erb +0 -6
  85. data/lib/hanami/cli/generators/gem/application/monolith/validation_contract.erb +0 -14
  86. data/lib/hanami/cli/generators/gem/application/monolith.rb +0 -83
  87. data/lib/hanami/cli/generators/gem/application.rb +0 -21
  88. data/lib/hanami/rake_tasks.rb +0 -52
@@ -1,67 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "dry/files"
4
-
5
- require_relative "db/utils/database"
6
-
7
- module Hanami
8
- module CLI
9
- module Commands
10
- class Application < Hanami::CLI::Command
11
- module Environment
12
- def call(**opts)
13
- env = opts[:env]
14
-
15
- hanami_env = env ? env.to_s : ENV["HANAMI_ENV"] || "development"
16
-
17
- ENV["HANAMI_ENV"] = hanami_env
18
-
19
- super(**opts)
20
- end
21
- end
22
-
23
- def self.inherited(klass)
24
- super
25
- klass.option(:env, required: false, desc: "Application's environment")
26
- klass.prepend(Environment)
27
- end
28
-
29
- def application
30
- @application ||=
31
- begin
32
- require "hanami/prepare"
33
- Hanami.application
34
- end
35
- end
36
-
37
- def run_command(klass, *args)
38
- klass.new(
39
- out: out,
40
- inflector: application.inflector,
41
- fs: Dry::Files
42
- ).call(*args)
43
- end
44
-
45
- def measure(desc)
46
- start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
47
- result = yield
48
- stop = Process.clock_gettime(Process::CLOCK_MONOTONIC)
49
-
50
- if result
51
- out.puts "=> #{desc} in #{(stop - start).round(4)}s"
52
- else
53
- out.puts "!!! => #{desc.inspect} FAILED"
54
- end
55
- end
56
-
57
- def database
58
- @database ||= Commands::DB::Utils::Database[application]
59
- end
60
-
61
- def database_config
62
- database.config
63
- end
64
- end
65
- end
66
- end
67
- end
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Hanami
4
- module CLI
5
- module Commands
6
- module Monolith
7
- require_relative "monolith/version"
8
- # require_relative "monolith/install"
9
- # require_relative "monolith/generate"
10
- require_relative "monolith/install"
11
- require_relative "monolith/generate"
12
- require_relative "monolith/console"
13
- require_relative "monolith/db/create"
14
- require_relative "monolith/db/create_migration"
15
- require_relative "monolith/db/drop"
16
- require_relative "monolith/db/migrate"
17
- require_relative "monolith/db/setup"
18
- require_relative "monolith/db/reset"
19
- require_relative "monolith/db/rollback"
20
- require_relative "monolith/db/sample_data"
21
- require_relative "monolith/db/seed"
22
- require_relative "monolith/db/structure/dump"
23
- require_relative "monolith/db/version"
24
-
25
- def self.extended(base)
26
- base.module_eval do
27
- register "version", Version, aliases: ["v", "-v", "--version"]
28
- # FIXME: temporary disabled for Hanami v2.0.0.alpha2
29
- # register "install", Install
30
-
31
- # FIXME: temporary disabled for Hanami v2.0.0.alpha2
32
- # register "generate", aliases: ["g"] do |prefix|
33
- # prefix.register "slice", Generate::Slice
34
- # prefix.register "action", Generate::Action
35
- # end
36
-
37
- register "console", Commands::Monolith::Console
38
-
39
- register "db create", Commands::Monolith::DB::Create
40
- register "db create_migration", Commands::Monolith::DB::CreateMigration
41
- register "db drop", Commands::Monolith::DB::Drop
42
- register "db migrate", Commands::Monolith::DB::Migrate
43
- register "db setup", Commands::Monolith::DB::Setup
44
- register "db reset", Commands::Monolith::DB::Reset
45
- register "db rollback", Commands::Monolith::DB::Rollback
46
- register "db sample_data", Commands::Monolith::DB::SampleData
47
- register "db seed", Commands::Monolith::DB::Seed
48
- register "db structure dump", Commands::Monolith::DB::Structure::Dump
49
- register "db version", Commands::Monolith::DB::Version
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end
@@ -1,21 +0,0 @@
1
- # auto_register: false
2
- # frozen_string_literal: true
3
-
4
- require "json" # required for Hanami::Action::Flash to work
5
- require "hanami/action"
6
- require "hanami/action/cookies"
7
- require "hanami/action/csrf_protection"
8
- require "hanami/action/session"
9
-
10
- module <%= classified_app_name %>
11
- class Action < Hanami::Action
12
- def self.inherited(klass)
13
- super
14
-
15
- # These will need to be sorted by the framework eventually
16
- klass.include Hanami::Action::Cookies
17
- klass.include Hanami::Action::Session
18
- klass.include Hanami::Action::CSRFProtection
19
- end
20
- end
21
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rake"
6
-
7
- gem "hanami-router", "<%= hanami_version %>"
8
- gem "hanami-controller", "<%= hanami_version %>"
9
- gem "hanami-validations", "<%= hanami_version %>"
10
- gem "hanami-view", git: "https://github.com/hanami/view.git", branch: "master"
11
- gem "dry-cli", "~> 0.6", require: false, git: "https://github.com/dry-rb/dry-cli.git", branch: "feature/file-utils-class"
12
- gem "hanami-cli", git: "https://github.com/hanami/cli.git", branch: "main"
13
- gem "hanami", require: false, git: "https://github.com/hanami/hanami.git", branch: "feature/hanami-2-cli"
14
-
15
- gem "puma"
16
-
17
- group :cli, :development, :test do
18
- gem "hanami-rspec", git: "https://github.com/hanami/rspec.git", branch: "main"
19
- end
@@ -1,18 +0,0 @@
1
- # auto_register: false
2
- # frozen_string_literal: true
3
-
4
- require "dry/monads"
5
- require "dry/matcher/result_matcher"
6
-
7
- module <%= classified_app_name %>
8
- class Operation
9
- include Dry::Monads[:result, :try]
10
-
11
- class << self
12
- def inherited(klass)
13
- klass.include Dry::Monads[:do]
14
- klass.include Dry::Matcher::ResultMatcher.for(:call)
15
- end
16
- end
17
- end
18
- end
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "hanami/application/rake_tasks"
@@ -1,13 +0,0 @@
1
- # auto_register: false
2
- # frozen_string_literal: true
3
-
4
- require "rom-repository"
5
- require_relative "entities"
6
-
7
- module <%= classified_app_name %>
8
- class Repository < ROM::Repository::Root
9
- include Deps[container: "persistence.rom"]
10
-
11
- struct_namespace Entities
12
- end
13
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Hanami.application.routes do
4
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "<%= underscored_app_name %>/types"
4
-
5
- Hanami.application.settings do
6
- end
@@ -1,14 +0,0 @@
1
- # auto_register: false
2
- # frozen_string_literal: true
3
-
4
- require "dry/validation"
5
- require "dry/schema/messages/i18n"
6
-
7
- module <%= classified_app_name %>
8
- module Validation
9
- class Contract < Dry::Validation::Contract
10
- config.messages.backend = :i18n
11
- config.messages.top_namespace = "validation"
12
- end
13
- end
14
- end
@@ -1,83 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "erb"
4
- require "shellwords"
5
- require "hanami/cli/generators/context"
6
-
7
- module Hanami
8
- module CLI
9
- module Generators
10
- module Gem
11
- module Application
12
- class Monolith
13
- def initialize(fs:, inflector:, command_line:)
14
- super()
15
- @fs = fs
16
- @inflector = inflector
17
- @command_line = command_line
18
- end
19
-
20
- def call(app, slice, slice_url_prefix, context: Context.new(inflector, app), &blk)
21
- generate_app(app, context)
22
- blk.call
23
- generate_slice!(slice, slice_url_prefix)
24
- end
25
-
26
- private
27
-
28
- attr_reader :fs
29
-
30
- attr_reader :inflector
31
-
32
- attr_reader :command_line
33
-
34
- def generate_app(app, context) # rubocop:disable Metrics/AbcSize
35
- fs.write(".env", t("env.erb", context))
36
-
37
- fs.write("README.md", t("readme.erb", context))
38
- fs.write("Gemfile", t("gemfile.erb", context))
39
- fs.write("Rakefile", t("rakefile.erb", context))
40
- fs.write("config.ru", t("config_ru.erb", context))
41
-
42
- fs.write("config/application.rb", t("application.erb", context))
43
- fs.write("config/settings.rb", t("settings.erb", context))
44
- fs.write("config/routes.rb", t("routes.erb", context))
45
-
46
- fs.write("lib/tasks/.keep", t("keep.erb", context))
47
-
48
- fs.write("lib/#{app}/entities/.keep", t("keep.erb", context))
49
- fs.write("lib/#{app}/persistence/relations/.keep", t("keep.erb", context))
50
- fs.write("lib/#{app}/validation/contract.rb", t("validation_contract.erb", context))
51
- fs.write("lib/#{app}/view/context.rb", t("view_context.erb", context))
52
- fs.write("lib/#{app}/action.rb", t("action.erb", context))
53
- fs.write("lib/#{app}/entities.rb", t("entities.erb", context))
54
- fs.write("lib/#{app}/functions.rb", t("functions.erb", context))
55
- fs.write("lib/#{app}/operation.rb", t("operation.erb", context))
56
- fs.write("lib/#{app}/repository.rb", t("repository.erb", context))
57
- fs.write("lib/#{app}/types.rb", t("types.erb", context))
58
- end
59
-
60
- def generate_slice!(slice_name, slice_url_prefix)
61
- slice_name = Shellwords.shellescape(slice_name)
62
- slice_url_prefix = Shellwords.shellescape(slice_url_prefix)
63
-
64
- command_line.call("hanami generate slice #{slice_name} --url-prefix=#{slice_url_prefix}").tap do |result|
65
- raise "hanami generate slice #{slice_name} failed\n\n\n#{result.err.inspect}" unless result.successful?
66
- end
67
- end
68
-
69
- def template(path, context)
70
- require "erb"
71
-
72
- ERB.new(
73
- File.read(__dir__ + "/monolith/#{path}")
74
- ).result(context.ctx)
75
- end
76
-
77
- alias_method :t, :template
78
- end
79
- end
80
- end
81
- end
82
- end
83
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Hanami
4
- module CLI
5
- module Generators
6
- module Gem
7
- module Application
8
- class << self
9
- def call(architecture, fs, inflector, command_line)
10
- require_relative "./application/#{architecture}"
11
-
12
- generator_name = inflector.classify(architecture).to_sym
13
- const_get(generator_name).new(fs: fs, inflector: inflector, command_line: command_line)
14
- end
15
- alias_method :[], :call
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rake"
4
- require "hanami/cli/bundler"
5
-
6
- module Hanami
7
- # Install Rake tasks in an application
8
- #
9
- # @since 2.0.0
10
- class RakeTasks
11
- include Rake::DSL
12
-
13
- # @since 2.0.0
14
- # @api private
15
- @tasks = []
16
-
17
- # @since 2.0.0
18
- # @api private
19
- @_mutex = Mutex.new
20
-
21
- # @since 2.0.0
22
- # @api private
23
- def self.register_tasks(&blk)
24
- @_mutex.synchronize do
25
- @tasks << blk
26
- @tasks.uniq!
27
- end
28
- end
29
-
30
- # @since 2.0.0
31
- # @api private
32
- def self.tasks
33
- @_mutex.synchronize do
34
- @tasks
35
- end
36
- end
37
-
38
- # @since 0.6.0
39
- # @api private
40
- def self.install_tasks
41
- new.call(tasks)
42
- end
43
-
44
- # @since 2.0.0
45
- # @api private
46
- def call(tasks)
47
- tasks.each(&:call)
48
- end
49
- end
50
- end
51
-
52
- Hanami::CLI::Bundler.require(:cli)