Module: Hanami::CLI

Extended by:
Dry::CLI::Registry
Defined in:
lib/hanami/cli.rb,
lib/hanami/cli/url.rb,
lib/hanami/cli/files.rb,
lib/hanami/cli/errors.rb,
lib/hanami/cli/naming.rb,
lib/hanami/cli/server.rb,
lib/hanami/cli/bundler.rb,
lib/hanami/cli/command.rb,
lib/hanami/cli/version.rb,
lib/hanami/cli/commands.rb,
lib/hanami/cli/repl/irb.rb,
lib/hanami/cli/repl/pry.rb,
lib/hanami/cli/repl/core.rb,
lib/hanami/cli/rake_tasks.rb,
lib/hanami/cli/system_call.rb,
lib/hanami/cli/commands/app.rb,
lib/hanami/cli/commands/gem.rb,
lib/hanami/cli/commands/app/dev.rb,
lib/hanami/cli/commands/app/run.rb,
lib/hanami/cli/commands/gem/new.rb,
lib/hanami/cli/generators/context.rb,
lib/hanami/cli/generators/gem/app.rb,
lib/hanami/cli/generators/version.rb,
lib/hanami/cli/commands/app/assets.rb,
lib/hanami/cli/commands/app/routes.rb,
lib/hanami/cli/commands/app/server.rb,
lib/hanami/cli/generators/app/part.rb,
lib/hanami/cli/generators/app/repo.rb,
lib/hanami/cli/generators/app/view.rb,
lib/hanami/cli/ruby_file_generator.rb,
lib/hanami/cli/commands/app/command.rb,
lib/hanami/cli/commands/app/console.rb,
lib/hanami/cli/commands/app/db/drop.rb,
lib/hanami/cli/commands/app/db/seed.rb,
lib/hanami/cli/commands/app/install.rb,
lib/hanami/cli/commands/app/version.rb,
lib/hanami/cli/commands/gem/version.rb,
lib/hanami/cli/generators/app/slice.rb,
lib/hanami/cli/generators/constants.rb,
lib/hanami/cli/commands/app/generate.rb,
lib/hanami/cli/generators/app/action.rb,
lib/hanami/cli/generators/app/struct.rb,
lib/hanami/cli/commands/app/db/create.rb,
lib/hanami/cli/commands/app/db/command.rb,
lib/hanami/cli/commands/app/db/migrate.rb,
lib/hanami/cli/commands/app/db/prepare.rb,
lib/hanami/cli/commands/app/db/version.rb,
lib/hanami/cli/commands/app/middleware.rb,
lib/hanami/cli/generators/app/relation.rb,
lib/hanami/cli/interactive_system_call.rb,
lib/hanami/cli/commands/app/db/rollback.rb,
lib/hanami/cli/generators/app/component.rb,
lib/hanami/cli/generators/app/migration.rb,
lib/hanami/cli/generators/app/operation.rb,
lib/hanami/cli/generators/app/ruby_file.rb,
lib/hanami/cli/commands/app/assets/watch.rb,
lib/hanami/cli/commands/app/generate/part.rb,
lib/hanami/cli/commands/app/generate/repo.rb,
lib/hanami/cli/commands/app/generate/view.rb,
lib/hanami/cli/middleware_stack_inspector.rb,
lib/hanami/cli/commands/app/assets/command.rb,
lib/hanami/cli/commands/app/assets/compile.rb,
lib/hanami/cli/commands/app/db/utils/mysql.rb,
lib/hanami/cli/commands/app/generate/slice.rb,
lib/hanami/cli/commands/app/db/utils/sqlite.rb,
lib/hanami/cli/commands/app/generate/action.rb,
lib/hanami/cli/commands/app/generate/struct.rb,
lib/hanami/cli/commands/app/generate/command.rb,
lib/hanami/cli/commands/app/db/structure/dump.rb,
lib/hanami/cli/commands/app/db/structure/load.rb,
lib/hanami/cli/commands/app/db/utils/database.rb,
lib/hanami/cli/commands/app/db/utils/postgres.rb,
lib/hanami/cli/commands/app/generate/relation.rb,
lib/hanami/cli/generators/app/ruby_class_file.rb,
lib/hanami/cli/commands/app/generate/component.rb,
lib/hanami/cli/commands/app/generate/migration.rb,
lib/hanami/cli/commands/app/generate/operation.rb,
lib/hanami/cli/generators/app/ruby_module_file.rb

Overview

Extensible command line interface for Hanami.

Since:

  • 2.0.0

Defined Under Namespace

Modules: Commands, Generators, Repl, URL Classes: BundleInstallError, Bundler, Command, ConflictingOptionsError, DatabaseExistenceCheckError, DatabaseNotSupportedError, Error, FileAlreadyExistsError, Files, ForbiddenAppNameError, HanamiExecError, HanamiInstallError, InteractiveSystemCall, InvalidActionNameError, InvalidMigrationNameError, InvalidURLError, InvalidURLPrefixError, MiddlewareStackInspector, MissingSliceError, Naming, NotImplementedError, PathAlreadyExistsError, RakeTasks, RubyFileGenerator, Server, SystemCall, UnknownHTTPMethodError, UnsupportedDatabaseSchemeError

Constant Summary collapse

VERSION =

The current hanami-cli version.

Since:

  • 2.0.0

"2.3.5"

Class Method Summary collapse

Class Method Details

.gem_loaderObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 2.0.0



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/hanami/cli.rb', line 14

def self.gem_loader
  @gem_loader ||= Zeitwerk::Loader.new.tap do |loader|
    root = File.expand_path("..", __dir__)
    loader.tag = "hanami-cli"
    loader.inflector = Zeitwerk::GemInflector.new("#{root}/hanami-cli.rb")
    loader.push_dir(root)
    loader.ignore(
      "#{root}/hanami-cli.rb",
      "#{root}/hanami/cli/{errors,version}.rb"
    )
    loader.inflector.inflect("cli" => "CLI")
    loader.inflector.inflect("db" => "DB")
    loader.inflector.inflect("url" => "URL")
  end
end

.register_commands!(within_hanami_app = within_hanami_app?) ) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 2.0.0



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/hanami/cli/commands.rb', line 45

def self.register_commands!(within_hanami_app = within_hanami_app?)
  commands =
    if within_hanami_app
      require_relative "commands/app"
      Commands::App
    else
      require_relative "commands/gem"
      Commands::Gem
    end

  extend(commands)
end

.within_hanami_app?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns true if the CLI is being called from inside an Hanami app.

This is typically used to determine whether to register commands that are applicable either inside or outside an app.

Returns:

  • (Boolean)

Since:

  • 2.0.0



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/hanami/cli/commands.rb', line 14

def self.within_hanami_app?
  require "hanami"

  !!Hanami.app_path
rescue LoadError => exception
  # Only rescue:
  #
  # 1. LoadError, due to hanami itself being missing, or
  # 2. Gem::LoadError, indicating gem version conflicts or other gem-related issues while
  #    loading hanami.
  #
  # This allows us to work around global gem version conflicts (e.g. with gems like bigdecimal,
  # which can come bundled with Ruby while also being upgraded independently) while still
  # raising errors for other missing requires.
  raise exception unless exception.path == "hanami" || exception.is_a?(Gem::LoadError)

  # If we can't load the hanami gem, fall back to a simple file check.
  File.exist?("config/app.rb")
end