module Mastalk::Extensions

Extension DSL for adding new mastalk snippets.

Add new snippets in the form: # start_tag, end_tag, new_line_ending

<p>replacement html <%= body %></p>

Constants

SNIPPETS_FOLDER

Public Instance Methods

args(content) click to toggle source
# File lib/mastalk/extensions.rb, line 39
def args(content)
  content.match(/#(.*)\n\n/m).captures.first.split(',').map(&:strip)
end
extension(start, stop = nil, &block) click to toggle source
# File lib/mastalk/extensions.rb, line 15
def extension(start, stop = nil, &block)
  re_start = Regexp.escape(start)
  re_stop = Regexp.escape(stop || start)
  regex = Regexp.new("#{re_start}(.*?)(#{re_stop}+)", Regexp::MULTILINE)
  @@extensions << [regex, block]
end
extensions() click to toggle source
# File lib/mastalk/extensions.rb, line 22
def extensions
  return @@extensions unless @@extensions.empty?

  Dir.foreach(SNIPPETS_FOLDER) do |file|
    next if file == '.' || file == '..'
    content = File.read(File.join(SNIPPETS_FOLDER, file))
    start, stop = args(content)
    erb = ERB.new(remove_syntax_from(content))
    extension(start, stop) do |body|
      body_lines = body.strip.gsub(/(\n|\r)+/, "\n").split(/\n/)
      erb.result(binding)
    end
  end

  @@extensions
end
remove_syntax_from(content) click to toggle source
# File lib/mastalk/extensions.rb, line 43
def remove_syntax_from(content)
  content.split(/#(.*)\n\n/).last
end