Class: Hanami::CLI::Commands::App::Command

Inherits:
Hanami::CLI::Command show all
Defined in:
lib/hanami/cli/commands/app/command.rb

Overview

Base class for hanami CLI commands intended to be executed within an existing Hanami app.

Since:

  • 2.0.0

Defined Under Namespace

Modules: Environment

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Hanami::CLI::Command

#initialize, new

Constructor Details

This class inherits a constructor from Hanami::CLI::Command

Class Method Details

.inherited(klass) ⇒ 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



55
56
57
58
# File 'lib/hanami/cli/commands/app/command.rb', line 55

def self.inherited(klass)
  super
  klass.prepend(Environment)
end

Instance Method Details

#appHanami::App

Returns the Hanami app class.

Returns:

  • (Hanami::App)

    the Hanami app

Raises:

  • (Hanami::AppLoadError)

    if the app has not been loaded

Since:

  • 2.0.0



68
69
70
71
72
73
74
# File 'lib/hanami/cli/commands/app/command.rb', line 68

def app
  @app ||=
    begin
      require "hanami/prepare"
      Hanami.app
    end
end

#inflectorObject

Since:

  • 2.0.0



76
# File 'lib/hanami/cli/commands/app/command.rb', line 76

def inflector = app.inflector

#measure(desc) ⇒ Object

Executes a given block and prints string to the out stream with details of the time taken to execute.

If the block returns a falsey value, then a failure message is printed.

Examples:

measure("Reverse the polarity of the neutron flow") do
  # reverses the polarity, returns a truthy value
end
# printed to `out`:
# => Reverse the polarity of the neutron flow in 2s
measure("Disable the time dilation device") do
  # attempts to disable the device, returns a falsey favlue
end
# printed to `out`:
# !!! => Disable the time dilation device FAILED

Since:

  • 2.0.0



113
114
115
116
117
118
119
120
121
122
123
# File 'lib/hanami/cli/commands/app/command.rb', line 113

def measure(desc)
  start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
  result = yield
  stop = Process.clock_gettime(Process::CLOCK_MONOTONIC)

  if result
    out.puts "=> #{desc} in #{(stop - start).round(4)}s"
  else
    out.puts "!!! => #{desc.inspect} FAILED"
  end
end

#run_command(klass) ⇒ Object

Runs another CLI command via its command class.

Parameters:

  • klass (Hanami::CLI::Command)
  • args (Array)

    any additional arguments to pass to the command's #call method.

Since:

  • 2.0.0



85
86
87
88
89
90
# File 'lib/hanami/cli/commands/app/command.rb', line 85

def run_command(klass, ...)
  klass.new(
    out: out,
    fs: Hanami::CLI::Files,
  ).call(...)
end