Class: Makit::Commands::Strategies::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/makit/commands/strategies/base.rb

Overview

Base class for command execution strategies.

Execution strategies define how commands are actually executed - synchronously, asynchronously, in parallel, etc. This provides flexibility in execution patterns while maintaining a consistent interface.

Examples:

Creating custom strategy

class CustomStrategy < Base
  def execute(request)
    # Custom execution logic
    result = Result.new(command: request.to_shell_command)
    # ... perform execution ...
    result.finish!(exit_code: 0, stdout: "success")
  end
end

Direct Known Subclasses

ChildProcess, Synchronous

Instance Method Summary collapse

Instance Method Details

#configHash

Get strategy configuration.

Returns:

  • (Hash)

    strategy configuration



71
72
73
# File 'lib/makit/commands/strategies/base.rb', line 71

def config
  {}
end

#execute(request) ⇒ Result

Execute a command request.

This method must be implemented by subclasses to provide the actual command execution logic. The implementation should create a Result object and populate it with execution details.

Parameters:

  • request (Request)

    the command request to execute

Returns:

  • (Result)

    the execution result

Raises:

  • (NotImplementedError)

    if not overridden by subclass



35
36
37
# File 'lib/makit/commands/strategies/base.rb', line 35

def execute(request)
  raise NotImplementedError, "#{self.class.name} must implement #execute"
end

#execute_batch(requests) ⇒ Array<Result>

Execute multiple requests (default: sequential execution).

Override this method in subclasses to provide optimized batch execution such as parallel execution.

Parameters:

  • requests (Array<Request>)

    requests to execute

Returns:

  • (Array<Result>)

    execution results in same order



46
47
48
# File 'lib/makit/commands/strategies/base.rb', line 46

def execute_batch(requests)
  requests.map { |request| execute(request) }
end

#nameString

Get strategy name for logging and debugging.

Returns:



64
65
66
# File 'lib/makit/commands/strategies/base.rb', line 64

def name
  self.class.name.split("::").last
end

#supports?(_request) ⇒ Boolean

Check if this strategy can handle the given request.

Override this method to provide conditional strategy selection based on request properties.

Parameters:

  • request (Request)

    the command request

Returns:

  • (Boolean)

    true if strategy can handle the request



57
58
59
# File 'lib/makit/commands/strategies/base.rb', line 57

def supports?(_request)
  true
end