pusiing gmn caranya mengubah data di database sehingga menjadi
fixtures berformat yaml, setelah nyari2 plugin dan gemnya hiks gak
ketemu, kepaksa bikin sendiri dengan format abal2 dan ala kadarnya
(bukan dalam format rake pulak)

ini controllernya

class Data2yamlController < ApplicationController

  FIXTURES_DIR="test/fixtures/"
  SURVEYS_MODELS = ["quiz","question","quiz_option"]  
  QUIZME_MODELS = ["text_question","text_question_category","text_answer"]
  
  #### desc ####
  # this is controller to generate data to yaml files
  # just type /data2yaml/dump/{model_name} on your browser
  # also if you type /data2yaml/dump/survey, it will generate data
from Quiz,QuizOption && Question model
  # and then if you type /data2yaml/dump/quizme, it will generate data
from TextQuestion,TextQuestionCategory & TextAnswer model

  def dump
    response.headers["Content-Type"]="text/plain"
    @res=""
    if params[:id]=="survey"
      dump_models(SURVEYS_MODELS)
    elsif params[:id]=="quizme"
      dump_models(QUIZME_MODELS)  
    else
      @res << "#### "+params[:id].camelize+" ###
\n\n"+generate(params[:id])
    end
    render :action=>"index"
  end


  def dump_models(models)  
    @res="" if @res.nil?
    models.each do |list|
      @res << "#### "+list.camelize+" ### \n\n"+generate(list)      
    end
  end
  
  def generate(model)
    klass=model.classify.constantize

    datas=klass.find(:all)
    res=''
    datas.each_with_index do |data,iterator|
      i=iterator+1
      res << model.camelize+i.to_s+": \n"
      for column in klass.columns
        res << "  "+column.name+":
"+parsing_all(data.send(column.name)).to_s+"\n"        
      end
      res << "\n" if datas.last
    end
    open(FIXTURES_DIR+model.tableize+".yml",'w') { |f| f << res }
    return res
  end 

  def parsing_all(data)
    need_dq(data)
    parsing_time(data)  
  end 

  ### need double quote ?
  def need_dq(data)
    
    if data=="Yes" || data=="No" || data.class.to_s=="String"
      data='"'+data+'"'   
    end
    return data  
  end

  def parsing_time(data)
    if data.class.to_s=="Time"
      data=data.strftime("%Y-%m-%d %H:%M:%S")
    else
      return data
    end
  end
    
end

ini viewnya disimpen di app/views/data2yaml/index.rhtml

<%= @res %>


catatan : 
1.surveys sama quiz mah abaikan, kecuali kalo di aplikasi dikau ada
tabel2 itu :D
2.kalo ada isi data yg berformat paragraf, ketika melakukan
rake:db:fixtures:load bakalan error soale gak diapit sama tanda kutip
aku binun gmn caranya mengapit paragraf dengan tanda kutip soale gak
tau cara untuk menentukan suatu data dari mysql apakah string atau
integer, jadi kalo si data paragraf mau di load kembali ke database,
ya ubah aja manual, tambahin tanda kutip :D
3.ada yg mau convert ini ke rake ?
4.btw, di luar sana ada plugin/gem/rake yg fungsinya serupa ndak sih,
kalo ada kasih tau yak, secara coding di atas kelemahannya buanyak... 

demikian, monggo kalo mo direview, dimodif menjadi lebih baik lagi
atau mo dicopas juga boleh, mudah2an berguna 




Kirim email ke