Changeset 19115

Show
Ignore:
Timestamp:
09/10/08 11:31:41 (4 months ago)
Author:
authorNari
Message:

write readme. add spec test.

Location:
lang/ruby/ymldot
Files:
10 added
2 modified

Legend:

Unmodified
Added
Removed
  • lang/ruby/ymldot/lib/ymldot.rb

    r19101 r19115  
    1414  end 
    1515 
    16   def to_s 
     16  def to_dot 
    1717    res = "" 
    1818    res << %Q!"#{@name}" [#{@dependent? 'shape=Mrecord, ' : 'shape=record, '}label=\"{#{@name}|! 
     
    4545    code += <<"EOS" 
    4646digraph #{@file_name} { 
    47 #{add_2_tab(config_to_s)} 
    48 #{add_2_tab(entities_to_s)} 
    49 #{add_2_tab(relations_to_s)} 
     47#{add_2_tab(config_to_dot)} 
     48#{add_2_tab(entities_to_dot)} 
     49#{add_2_tab(relations_to_dot)} 
    5050} 
    5151EOS 
     
    5959  end 
    6060 
    61   def config_to_s 
     61  def config_to_dot 
    6262    res = "" 
    6363    res << "graph[overlap=false, splines=true]\n" 
    6464    res << %Q!node [fontname="#{@config["font"]}"]! if @config["font"] 
     65    res 
    6566  end 
    6667 
    67   def entities_to_s 
     68  def entities_to_dot 
    6869    res = "" 
    6970    s = [] 
    7071    @entities.each_value{|e| s << e } 
    71     s.sort{|a, b| a.name <=> b.name}.each{|e| res << e.to_s << "\n"} 
     72    s.sort{|a, b| a.name <=> b.name}.each{|e| res << e.to_dot << "\n"} 
    7273    res 
    7374  end 
    7475 
    75   def relations_to_s 
     76  def relations_to_dot 
    7677    res = "" 
    7778    @one_relations.sort{|a, b| a[:self].name <=> b[:self].name}.each do |r| 
     
    8586 
    8687  def eval 
    87     @config = @node["config"] 
     88    @config = @node["config"]? @node["config"] : {} 
    8889    @node["tables"].each {|t| eval_entity(t) } 
    8990    @node["tables"].each {|t| eval_relation(t) } 
     
    9899    foreignkeys = table["foreignkeys"] 
    99100    tname = table["name"] 
    100     case 
    101     when foreignkeys["belongs_to"] 
    102       foreignkeys["belongs_to"].each do |rel| 
    103         @entities[tname].foreignkeys << "#{rel}ID(FK)" 
    104       end 
    105     when foreignkeys["has_many"] 
    106       foreignkeys["has_many"].each do |rel| 
    107         @many_relations << {:self => @entities[tname], :have => @entities[rel]} 
    108       end 
    109     when foreignkeys["has_one"] 
    110       foreignkeys["has_one"].each do |rel| 
    111         @one_relations << {:self => @entities[tname], :have => @entities[rel]} 
    112       end 
    113     when foreignkeys["has_many_and_belongs_to"] 
    114       foreignkeys["has_many_and_belongs_to"].each do |rel| 
    115         join_tname = "#{rel}_#{tname}" 
    116         return if @entities.has_key? join_tname 
    117         join_tname = "#{tname}_#{rel}" 
    118         @entities[join_tname] ||= Entity.new(join_tname, true) 
    119         @entities[join_tname].foreignkeys << "#{tname}ID(FK)" 
    120         @entities[join_tname].foreignkeys << "#{rel}ID(FK)" 
    121         @many_relations << {:self => @entities[tname], :have => @entities[join_tname]} 
    122         @many_relations << {:self => @entities[rel], :have => @entities[join_tname]} 
    123       end 
     101    eval_relation_belongs_to(foreignkeys["belongs_to"], tname) if foreignkeys["belongs_to"] 
     102    eval_relation_has_many(foreignkeys["has_many"], tname) if foreignkeys["has_many"] 
     103    eval_relation_has_one(foreignkeys["has_one"], tname) if foreignkeys["has_one"] 
     104    eval_relation_hmabt(foreignkeys["has_many_and_belongs_to"], tname) if foreignkeys["has_many_and_belongs_to"] 
     105  end 
     106 
     107  def eval_relation_belongs_to(keys, tname) 
     108    keys.each do |rel| 
     109      @entities[tname].foreignkeys << "#{rel}ID(FK)" 
     110    end 
     111  end 
     112 
     113  def eval_relation_has_many(keys, tname) 
     114    keys.each do |rel| 
     115      @many_relations << {:self => @entities[tname], :have => @entities[rel]} 
     116    end 
     117  end 
     118 
     119  def eval_relation_has_one(keys, tname) 
     120    keys.each do |rel| 
     121      @one_relations << {:self => @entities[tname], :have => @entities[rel]} 
     122    end 
     123  end 
     124 
     125  def eval_relation_hmabt(keys, tname) 
     126    keys.each do |rel| 
     127      join_tname = "#{rel}_#{tname}" 
     128      return if @entities.has_key? join_tname 
     129      join_tname = "#{tname}_#{rel}" 
     130      @entities[join_tname] ||= Entity.new(join_tname, true) 
     131      @entities[join_tname].foreignkeys << "#{tname}ID(FK)" 
     132      @entities[join_tname].foreignkeys << "#{rel}ID(FK)" 
     133      @many_relations << {:self => @entities[tname], :have => @entities[join_tname]} 
     134      @many_relations << {:self => @entities[rel], :have => @entities[join_tname]} 
    124135    end 
    125136  end 
  • lang/ruby/ymldot/spec/ymldot_spec.rb

    r19101 r19115  
    33 
    44class Ymldot 
    5   attr_accessor :node, :entities, :one_relations, :many_relations, :file_name 
     5  attr_accessor :node, :entities, :one_relations, :many_relations, :file_name, :config 
    66end 
    77 
     
    137137  end 
    138138end 
     139 
     140describe Ymldot, "で読み込んだ.ymlにconfigがない場合" do 
     141  before do 
     142    @ymldot = Ymldot.new("test_config_none.yml") 
     143  end 
     144 
     145  it "#config は空のHashが格納されていること" do 
     146    @ymldot.config.should be_empty 
     147  end 
     148end 
     149 
     150describe Ymldot, "で読み込んだ.ymlにて一つのに複数の関係を持っている場合" do 
     151  before do 
     152    @ymldot = Ymldot.new("test_many_relation.yml") 
     153  end 
     154 
     155  it "#many_relations には'bar'から'baf'へのリレーションがあること" do 
     156    res = nil 
     157    @ymldot.many_relations.each{|e| res = e if e[:self].name == 'bar' and e[:have].name == 'baf' } 
     158    res.should_not be_nil 
     159  end 
     160 
     161  it "#entities の'baf'には'bar'へのforeginkeyがあること" do 
     162     @ymldot.entities["baf"].foreignkeys[0].should == "barID(FK)" 
     163  end 
     164end