###前提・実現したいこと
フォルダ内に複数あるjsonファイルのデータを読み取り、mustache(テンプレートエンジン)のテンプレートと合わせて、jsonファイルの内容をmdに書き出して保存するプログラムを作ろうとしています。
ただやりたいことはjsonの内容を使ってmdファイルを書き出したいだけなので、下に描いたやり方以外で実現できれば方法は構わないです。何か良い方法はないでしょうか・・・?
###発生している問題
mustache用にdefでmdに渡すkeyとvalueを定義しているのですが、一度定義したものundefすることが出来ないため、後に作ったmdファイルにundef出来なかった値が書き込まれてしまいます・・・
エラーメッセージ
###該当のソースコード
Ruby
1require 'mustache' 2require 'json' 3require 'fileutils' 4 5class Features < Mustache 6 mustache_name = Features 7 #jsonファイルのパスを取得 8 Dir::glob("./../jsons/#{mustache_name}_json/*.json").each {|json_file_path| 9 #md用のフォルダがなければ作成 10 dir_path = Dir::pwd + "/#{mustache_name}_md" 11 FileUtils.mkdir_p(dir_path) unless FileTest.exist?(dir_path) 12 13 #jsonファイルを開く 14 json_data = open(json_file_path) do |io| 15 #ハッシュを取り出す 16 hash = JSON.load(io) 17 18 #mustache用キーが日本語の場合の対策 19 count = 1 20 21 #ハッシュのキーと値を取得 22 hash.each_with_index do | (key, value), i | 23 #キーからidを取得してファイル名を作る 24 if i == 0 25 @file_name = dir_path + "/#{value}.md" 26 end 27 #mustache用キーが日本語の場合の対策 28 if key !~ /^[a-zA-Z]+$/ 29 key = "key#{count}" 30 count += 1 31 end 32 @key = [] 33 @key << key 34 #mustache用のメソッド定義 35 eval <<-EOS 36 def #{key} 37 "#{value}" 38 end 39 EOS 40 end 41 end 42 puts @file_name 43 #mdファイル作成 44 File.open(@file_name, 'w') do |file| 45 file.write(self.render) 46 end 47 #mustache用のメソッド定義 48 i = @key.length 49 eval <<-EOS 50 until i == 0 do 51 undef #{@key[i]} 52 p #{@key[i]} 53 end 54 EOS 55 } 56end
###試したこと
undefがなぜ出来ないのか理由がよく分からないです。
そもそもこのやり方がスマートではない気がしますので、やり方をご教示していただけたら幸いです。宜しくお願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
それぞれjsonの中身はこのようになっています。
json
{"id":xxx,"code":"yyy","flow":"zzz"}
mustacheファイルの例
##id
{{id}}
##code
{{code}}
##flow
{{flow}}
この2つを使ってmdファイルを作成していくプログラムを作りたいです。
あなたの回答
tips
プレビュー