class Iamspe::Bossy::Lunch
Classe de geração de anúncio de almoços
Constants
- BASE_TXT
-
Texto base do anúncio de almoços
Public Class Methods
Source
# File lib/iamspe/bossy/lunch.rb 24 def initialize 25 # Inicializar TTY::Prompt 26 @prompt = TTY::Prompt.new 27 # Compilar texto de "output" 28 @out = build_lunchs 29 end
Inicializador
Public Instance Methods
Source
# File lib/iamspe/bossy/lunch.rb 32 def to_s 33 Clipboard.copy(@out) 34 '<< Texto copiado! >>' 35 end
Converter em String, no caso sendo o texto de “output”
Private Instance Methods
Source
# File lib/iamspe/bossy/lunch.rb 40 def build_lunchs 41 txt = BASE_TXT.dup 42 txt.gsub!('{{ DOOR }}', door_list) 43 txt.gsub!('{{ OBS }}', obs_list) 44 txt 45 end
Construir lista de almoços
Source
# File lib/iamspe/bossy/lunch.rb 48 def door_list 49 txt = @prompt.multiline('Colar (Ctrl+V) as colunas B-F do controle de salas (incluindo linhas em branco):') do |q| 50 q.help 'Use Ctrl+D quando terminar de colar' 51 end 52 txt.filter! do |elem| 53 /(\d+|Rv)\t([A-Za-zÇçáéíóúãõôê ]+)\t(07-19+h)\t([0-9A-Za-z'-]+)\t(\d+h\d+)/.match?(elem) 54 end 55 txt.map! do |elem| 56 person = elem.split("\t") 57 "#{person[1].strip} (_sala #{person[0].strip}_), *#{person[4].strip}*" 58 end 59 txt.join("\n") 60 end
Construir lista de almoços na porta
Source
# File lib/iamspe/bossy/lunch.rb 63 def obs_list 64 physicians = [] 65 loop do 66 name = @prompt.ask('Nome do plantonista da Obs (deixe em branco para terminar):') do |q| 67 q.modify :strip 68 end 69 break if name.nil? 70 71 scheme = @prompt.select('Duração do plantão:') do |q| 72 q.choice '12h', 12 73 q.choice '6h', 6 74 end 75 physicians << { name: name, scheme: scheme } 76 end 77 names = physicians.map do |p| 78 p[:name] 79 end 80 case physicians.length 81 when 4 82 # Se todo mundo de 6h 83 last = names.pop 84 "#{names.join(', ')}, e #{last} podem dividir os horários de lanche entre si conforme fluxo da Observação, sempre ficando pelo menos um plantonista presente." 85 when 3 86 "#{names[0]}, preferencialmente sair para almoçar após #{names[2]} render #{names[1]} às 13h." 87 when 2 88 "#{names[0]} e #{names[1]} podem dividir entre si conforme fluxo da Observação, sempre ficando pelo menos um plantonista presente." 89 else 90 'Se organizem conforme fluxo da Obs para seus horários de lanche, sempre ficando pelo menos um plantonista presente.' 91 end 92 end
Construir lista de almoços na observação