class Webcommand::Command

Constants

DEFAULT_PARAM_SCHEMA_REGEX
InvalidParams
PARAMS_DEFAULT_SCHEMA
WrongParamsSize

Public Class Methods

new(template_command, params_schema: nil, executor: TTY::Command) click to toggle source
# File lib/webcommand/command.rb, line 11
def initialize(template_command, params_schema: nil, executor: TTY::Command)
  @template_command = template_command
  @params_schema = params_schema || PARAMS_DEFAULT_SCHEMA
  @executor = executor
end

Public Instance Methods

call(**params) click to toggle source
# File lib/webcommand/command.rb, line 17
def call(**params)
  raise WrongParamsSize, params if wrong_params_size?(params)
  raise InvalidParams, params unless valid_params?(params)

  template_render = make_template_renderer(params)
  command = template_render.render(@template_command)
  #TODO: Extract executor to a new class returning a customized execution result
  @executor.new.run!(command)
end

Private Instance Methods

make_template_renderer(params) click to toggle source
# File lib/webcommand/command.rb, line 46
def make_template_renderer(params)
  Mustache.new.tap do |template|
    params.each do |key, value|
      template[key] = value
    end
  end
end
template_command_keys() click to toggle source
# File lib/webcommand/command.rb, line 42
def template_command_keys
  @template_command.scan(/{{(.*?)}}/).flatten.map(&:to_sym)
end
valid_params?(params) click to toggle source
# File lib/webcommand/command.rb, line 33
def valid_params?(params)
  return false unless params.keys == template_command_keys
  return true if @params_schema == PARAMS_DEFAULT_SCHEMA

  params.keys.reduce(true) do |result, key|
    result && @params_schema[key].match?(params[key])
  end
end
wrong_params_size?(params) click to toggle source
# File lib/webcommand/command.rb, line 29
def wrong_params_size?(params)
  @params_schema.keys.size != 0 && params.keys.size != @params_schema.keys.size
end