Module: Alchemy::Shell

Included in:
Seeder, Tidy, Upgrader
Defined in:
lib/alchemy/shell.rb

Overview

Provides methods for collecting sentences and displaying them in a list on the shell / log

Constant Summary collapse

COLORS =
{
  clear: Thor::Shell::Color::CLEAR,
  green: Thor::Shell::Color::GREEN,
  red: Thor::Shell::Color::RED,
  yellow: Thor::Shell::Color::YELLOW,
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.silence!Object


16
17
18
# File 'lib/alchemy/shell.rb', line 16

def self.silence!
  @silenced = true
end

.silenced?Boolean

Returns:

  • (Boolean)

24
25
26
# File 'lib/alchemy/shell.rb', line 24

def self.silenced?
  @silenced ||= false
end

.verbose!Object


20
21
22
# File 'lib/alchemy/shell.rb', line 20

def self.verbose!
  @silenced = false
end

Instance Method Details

#add_todo(todo) ⇒ Object

Adds a sentence to the todos Array

Parameters:

  • todo (String)

43
44
45
# File 'lib/alchemy/shell.rb', line 43

def add_todo(todo)
  todos << todo
end

#desc(message) ⇒ Object


28
29
30
31
32
33
# File 'lib/alchemy/shell.rb', line 28

def desc(message)
  unless Alchemy::Shell.silenced?
    puts "\n#{message}"
    puts "#{"-" * message.length}\n"
  end
end

#display_todosObject

Prints out all the todos


57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/alchemy/shell.rb', line 57

def display_todos
  return if todos.empty?

  log "\n+---------+", :message
  log "| 📝 TODO |", :message
  log "+---------+\n", :message
  puts "\nWe did most of the work for you, but there are still some things left for you to do."
  todos.each_with_index do |todo, i|
    title = "\n#{i + 1}. #{todo[0]}"
    log title, :message
    puts "=" * title.length
    puts ""
    log todo[1], :message
  end
  puts ""
  puts "============================================================"
  puts "= ✨ Please take a minute and read the notes from above ✨ ="
  puts "============================================================"
  puts ""
end

#log(message, type = nil) ⇒ Object

Prints out the given log message with the color due to its type

Parameters:

  • message (String)
  • type (Symbol) (defaults to: nil)

83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/alchemy/shell.rb', line 83

def log(message, type = nil)
  unless Alchemy::Shell.silenced?
    case type
    when :skip
      puts "#{color(:yellow)}== Skipping! #{message}#{color(:clear)}"
    when :error
      puts "#{color(:red)}!! ERROR: #{message}#{color(:clear)}"
    when :message
      puts "#{color(:clear)}#{message}"
    else
      puts "#{color(:green)}== #{message}#{color(:clear)}"
    end
  end
end

#todo(todo, title = "") ⇒ Object


35
36
37
# File 'lib/alchemy/shell.rb', line 35

def todo(todo, title = "")
  add_todo [title, todo]
end

#todosArray

All todos

Returns:

  • (Array)

51
52
53
# File 'lib/alchemy/shell.rb', line 51

def todos
  @@todos ||= []
end