module RuWEB::SewMacros

Gets macros

Public Instance Methods

init(macros, cmds: [], in_macro: '', loops: 100) click to toggle source
# File lib/ruweb/sewmacros.rb, line 8
def init(macros, cmds: [], in_macro: '', loops: 100)
  @macros = macros
  @pass   = true
  @els    = obtain_els(cmds, in_macro)
  @loops  = loops
  sew
  inspect
  resolve
end

Private Instance Methods

inspect() click to toggle source
# File lib/ruweb/sewmacros.rb, line 35
def inspect
  @macros.map do |e|
    @pass = false if @els.join.scan(e[:macro]).any?
  end
end
inspect_loops() click to toggle source
# File lib/ruweb/sewmacros.rb, line 50
def inspect_loops
  if @loops <= 0
    puts '🕷️ ruweb: [ERROR] too much recursion: check for missing macros or typos in their names or implementations'
    abort
  end
end
obtain_els(cmds, macro) click to toggle source
# File lib/ruweb/sewmacros.rb, line 20
def obtain_els(cmds, macro)
  cmd = [{index: 0, cmd: '', data: "\u005F#{macro}"}]
  cmds.empty? ? cmd : cmds
end
resolve() click to toggle source
# File lib/ruweb/sewmacros.rb, line 41
def resolve
  if @pass
    @els[0][:cmd].empty? ? @els[0][:data] : @els
  else
    inspect_loops
    init(@macros, cmds: @els, loops: @loops - 1)
  end
end
sew() click to toggle source
# File lib/ruweb/sewmacros.rb, line 25
def sew
  @macros.map do |m|
    @els.map! do |e|
      e.each do |k, v|
        e[k] = e[k].gsub(/\b#{m[:macro]}\b/, m[:data]) if k == :data
      end
    end
  end
end