Class: Anvil::Cli

Inherits:
Object
  • Object
show all
Defined in:
lib/anvil/cli.rb

Overview

Anvil command line interface

Constant Summary collapse

HELP_HEADER =
<<-HELP_HEADER
Anvil is a tool for making your life easier.

Available tasks:
HELP_HEADER

Instance Method Summary collapse

Instance Method Details

#bad_arguments(task_name) ⇒ Object



56
57
58
59
# File 'lib/anvil/cli.rb', line 56

def bad_arguments(task_name)
  Anvil.logger.info("Wrong number of arguments.\n")
  HelpTask.run(task_name)
end

#build_task(argv) ⇒ Anvil::Task

Builds a task and prepares it to run

Parameters:

  • argv (Array)

    Command line arguments

Returns:



36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/anvil/cli.rb', line 36

def build_task(argv)
  arguments = argv.dup
  task_name = arguments.shift
  klazz     = Task.from_name(task_name)
  klazz.new(*klazz.parse_options!(arguments))
rescue NameError
  task_not_found(task_name)
  exit false
rescue ArgumentError
  bad_arguments(task_name)
  exit false
end

#load_tasksObject



28
29
30
# File 'lib/anvil/cli.rb', line 28

def load_tasks
  Anvil::ExtensionsManager.load_tasks
end


61
62
63
# File 'lib/anvil/cli.rb', line 61

def print_help_body(task_name = nil)
  task_list(task_name).each { |task| print_task_line(task) }
end


77
78
79
# File 'lib/anvil/cli.rb', line 77

def print_help_header
  Anvil.logger.info HELP_HEADER
end


72
73
74
75
# File 'lib/anvil/cli.rb', line 72

def print_task_line(task)
  message = format '%-20s %s', task.task_name, task.description
  Anvil.logger.info message
end

#run(argv) ⇒ Object?

Runs a task or prints its help if it needs arguments

Parameters:

  • argv (Array)

    Command line arguments

Returns:

  • (Object, nil)

    Anything the task returns



19
20
21
22
23
24
25
26
# File 'lib/anvil/cli.rb', line 19

def run(argv)
  load_tasks

  return build_task(argv).run unless argv.empty?

  print_help_header
  print_help_body
end

#task_list(task_name) ⇒ Object



65
66
67
68
69
70
# File 'lib/anvil/cli.rb', line 65

def task_list(task_name)
  tasks = Anvil::ExtensionsManager.tasks_by_name

  return tasks unless task_name
  tasks.select { |task| task.to_s.underscore =~ /#{task_name}/ }
end

#task_not_found(task_name = nil) ⇒ Object



49
50
51
52
53
54
# File 'lib/anvil/cli.rb', line 49

def task_not_found(task_name = nil)
  Anvil.logger.info "Task '#{task_name}' not found"
  Anvil.logger.info('Maybe you mean one of the following') if task_name
  Anvil.logger.info("\n")
  print_help_body task_name
end