Skip to content

Instantly share code, notes, and snippets.

@kawakami-o3
Last active April 24, 2018 09:43
Show Gist options
  • Save kawakami-o3/124084bd9f5b598c3ec893cb1f7f4142 to your computer and use it in GitHub Desktop.
Save kawakami-o3/124084bd9f5b598c3ec893cb1f7f4142 to your computer and use it in GitHub Desktop.
require 'yaml'
def escape str
str = str.chars.map{|c|
if c == "\n"
"\\n"
elsif c == "\r"
"\\r"
elsif c == "\t"
"\\t"
elsif c == "\""
"\\\""
else
c
end
}.join
if str.chars.first == "\""
return str
else
return "\"#{str}\""
end
end
def to_go hash
if not hash.is_a?(Hash)
if hash.is_a?(Array)
elms = []
hash.each do |i|
elms << to_go(i)
end
return "[]interface{}{#{elms.join(",")}}"
else
return hash.is_a?(String) ? "\"#{hash}\"" : "#{hash}"
end
end
pairs = []
hash.each do |k,v|
if v == true or v == false
pairs << "\"#{k}\":#{v}"
elsif v.is_a?(Hash)
pairs << "\"#{k}\":#{to_go(v)}"
elsif v.is_a?(Array)
elms = []
v.each do |i|
elms << to_go(i)
end
pairs << "\"#{k}\":[]interface{}{#{elms.join(",")}}"
else
pairs << "\"#{k}\":\"#{v}\""
end
end
return "map[string]interface{}{#{pairs.join(",")}}"
end
fn = ARGV.first
cnt = open(fn).read
#p cnt
data = YAML.load(cnt)
puts "package main"
puts "import ("
puts "\"fmt\""
puts "\"github.com/cbroglie/mustache\""
puts ")"
puts "func main() {"
i = 0
data['tests'].each do |t|
puts "{"
#p t['data']
puts " data := #{to_go(t['data'])}"
puts " template := #{escape(t['template'])}"
puts " expected := #{escape(t['expected'])}"
puts " result, _ := mustache.Render(template, data)"
puts " fmt.Println(result == expected)"
#puts " tmpl, _ := mustache.ParseString(template)"
#puts " var buf bytes.Buffer;"
#puts " tmpl.Render(data, &buf)"
#puts " fmt.Println(expected, buf)"
#puts " fmt.Println(bytes.Equal(buf.Bytes(), []byte(expected)))"
puts "}"
if t['template'] =~ /Here/
break
end
end
puts "}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment