Skip to content

Instantly share code, notes, and snippets.

@redraiment
Last active August 29, 2015 13:57
Show Gist options
  • Save redraiment/9639738 to your computer and use it in GitHub Desktop.
Save redraiment/9639738 to your computer and use it in GitHub Desktop.
ERM: Embedded Ruby Macro, code to write code
#!/usr/bin/ruby
require "fileutils"
require "erubis"
require "yaml"
def erm(source)
content, data = "", {}
loop do
properties, fragment = File.read(source).split("---\n", 2)
properties, fragment = "", (properties || "") if fragment.nil?
content = fragment.gsub(/<%=\s*yield\s*%>/, content)
data = (YAML.load(properties) || {}).merge(data)
if data.has_key? "layout"
name = data.delete "layout"
source = "layout/#{name}.erm"
else
break
end
end
Erubis::Eruby.new(content).evaluate(data)
end
Dir["src/**/*.erm"].each do |source|
target = source.sub(/^src/, "target").sub(/\.erm$/, "")
FileUtils.mkdir_p File.dirname target
File.write target, erm(source)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment