Last active
April 24, 2018 09:43
-
-
Save kawakami-o3/124084bd9f5b598c3ec893cb1f7f4142 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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