Changeset 31339

Show
Ignore:
Timestamp:
03/18/09 15:43:50 (4 years ago)
Author:
authorNari
Message:

relase version 0.0.6

Location:
lang/ruby/ymldot
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • lang/ruby/ymldot/bin/ymldot

    r28323 r31339  
    1010require 'optparse' 
    1111 
    12 Version = "0.0.5" 
     12Version = "0.0.6" 
    1313is_output = false 
    1414is_csv = false 
  • lang/ruby/ymldot/lib/ymldot.rb

    r28322 r31339  
    6868  end 
    6969 
     70  def add_entity(table) 
     71    eval_entity(table) 
     72  end 
     73   
    7074  private 
    7175  def eval_entity(table) 
     
    129133      res << %Q!graph [size="#{(@config["size"]["x"]/2.54).round},#{(@config["size"]["y"]/2.54).round}"]\n!  
    130134    end 
    131     raise "Error: please seto 'font'" if @config["ja"] && @config["font"] 
    132     res << %Q!node [fontname="#{@config["font"]}"]! if @config["font"] 
     135    raise "Error: please set 'font'" if @config["ja"] && @config["font"] 
     136     
     137    if @config["font"] || @config["fontsize"] 
     138      res << "node [" 
     139      res << %Q!fontname="#{@config["font"]}"! if @config["font"] 
     140      res << %Q!, fontsize=#{@config["fontsize"]}! if @config["fontsize"] 
     141      res << "]" 
     142    end 
    133143    res 
    134144  end 
     
    166176    @node["category"].each{|c| @category << Tables.new(c["tables"], c["label"], true) } if @node["category"] 
    167177    @category.each{|c| c.entity_dict.each_pair{|k, v| @entity_dict[k] = v}} 
    168     @category.each{|c| c.table_node.each{|e| eval_relation(e) } } 
    169   end 
    170  
    171   def eval_relation(table) 
     178    @category.each{|c| c.table_node.each{|e| eval_relation(e, c) } } 
     179  end 
     180 
     181  def eval_relation(table, category) 
    172182    foreignkeys = table["foreignkeys"] 
    173183    tname = table["name"] 
     
    175185    eval_relation_has_many(foreignkeys["has_many"], tname) if foreignkeys["has_many"] 
    176186    eval_relation_has_one(foreignkeys["has_one"], tname) if foreignkeys["has_one"] 
    177     eval_relation_hmabt(foreignkeys["has_many_and_belongs_to"], tname) if foreignkeys["has_many_and_belongs_to"] 
     187    eval_relation_habtm(foreignkeys["has_and_belongs_to_many"], tname, category) if foreignkeys["has_and_belongs_to_many"] 
    178188    eval_relation_polymorphic(foreignkeys["polymorphic"], tname) if foreignkeys["polymorphic"] 
    179189  end 
     
    195205  end 
    196206 
    197   def eval_relation_hmabt(keys, tname) 
    198     keys.each do |rel| 
    199       join_tname = "#{rel}_#{tname}" 
    200       return if @entity_dict.has_key? join_tname 
    201       join_tname = "#{tname}_#{rel}" 
    202       @entity_dict[join_tname] ||= Entity.new(join_tname, true) 
    203       @entity_dict[join_tname].foreignkeys << append_fk_str(singularize(tname)) 
    204       @entity_dict[join_tname].foreignkeys << append_fk_str(singularize(rel)) 
     207  def eval_relation_habtm(keys, tname, category) 
     208    keys.each do |rel| 
     209      join_tname = [rel, tname].sort.join("_") 
     210      return if category.entity_dict.has_key? join_tname 
    205211 
    206212      # make new category 
     
    208214      keys << append_fk_str(tname) 
    209215      keys << append_fk_str(rel) 
    210       @category << Tables.new([{"name" => join_tname, "columns" => keys}]) 
    211  
    212       @many_relations << {:self => @entity_dict[tname], :have => @entity_dict[join_tname]} 
    213       @many_relations << {:self => @entity_dict[rel], :have => @entity_dict[join_tname]} 
     216       
     217      category.add_entity("name" => join_tname) 
     218      category.entity_dict[join_tname].foreignkeys << append_fk_str(singularize(tname)) 
     219      category.entity_dict[join_tname].foreignkeys << append_fk_str(singularize(rel)) 
     220       
     221      @many_relations << {:self => category.entity_dict[tname], :have => category.entity_dict[join_tname]} 
     222      @many_relations << {:self => category.entity_dict[rel], :have => category.entity_dict[join_tname]} 
    214223    end 
    215224  end 
  • lang/ruby/ymldot/spec/test_jp.yml

    r21829 r31339  
    88      - タイトル 
    99    foreignkeys: 
    10       has_many_and_belongs_to: 
     10      has_and_belongs_to_many: 
    1111        - カテゴリ 
    1212    dependent:  
     
    1616      - 種別名 
    1717    foreignkeys: 
    18       has_many_and_belongs_to: 
     18      has_and_belongs_to_many: 
    1919         - コンテンツ 
    2020    dependent: false 
  • lang/ruby/ymldot/spec/ymldot_spec.rb

    r28322 r31339  
    6464end 
    6565 
    66 describe Ymldot, "で読み込んだ.ymlのリレーションがhas_many_and_belongs_toである場合" do 
    67   before do 
    68     @ymldot = Ymldot.new("test_has_many_and_belongs_to.yml") 
     66describe Ymldot, "で読み込んだ.ymlのリレーションがhas_and_belongs_to_manyである場合" do 
     67  before do 
     68    @ymldot = Ymldot.new("test_has_and_belongs_to_many.yml") 
    6969  end 
    7070 
    7171  it "#entity_dict には正しいEntityクラスが格納されていること" do 
    72     @ymldot.entity_dict["one1_one2"].foreignkeys.should == ["one1_id(FK)", "one2_id(FK)"] 
     72    @ymldot.category.first.entity_dict["one1_one2"].foreignkeys.should == ["one1_id(FK)", "one2_id(FK)"] 
    7373  end 
    7474 
     
    8484    @ymldot.to_dot.should_not be_empty 
    8585    @ymldot.to_dot.should == <<'EOS' 
    86 digraph test_has_many_and_belongs_to { 
     86digraph test_has_and_belongs_to_many { 
    8787  graph [overlap=false, splines=true] 
    8888  node [fontname="MSUIGOTHIC.ttf"] 
     
    130130 
    131131  it "#entity_dict には正しいEntityクラスが格納されていること" do 
    132     @ymldot.entity_dict["コンテンツ_カテゴリ"].foreignkeys.should == ["コンテンツID(FK)", "カテゴリID(FK)"] 
     132    @ymldot.category.first.entity_dict["カテゴリ_コンテンツ"].foreignkeys.should == ["コンテンツID(FK)", "カテゴリID(FK)"] 
    133133  end 
    134134 
     
    238238 
    239239  it "#entity_dict['foo'] のforeginkeyは'entiity_id(FK)'であること" do 
    240     @ymldot.entity_dict['foo'].foreignkeys.should be_include 'entity_id(FK)' 
     240    @ymldot.entity_dict['foo'].foreignkeys.should be_include('entity_id(FK)') 
    241241  end 
    242242 
    243243  it "#entity_dict['foo'] のcolumnsには'entity_tyep(type)'があること" do 
    244     @ymldot.entity_dict['foo'].columns.should be_include 'entity_type(type)' 
     244    @ymldot.entity_dict['foo'].columns.should be_include('entity_type(type)') 
    245245  end 
    246246 
     
    255255  "baf" [shape=record, label="{baf|buge\l}"] 
    256256 
    257   "baf" -> "foo" [arrowtail=none arrowhead=dot headlabel="1" taillabel="1"] 
    258   "bar" -> "foo" [arrowtail=none arrowhead=dot headlabel="1" taillabel="1"] 
    259   "baz" -> "foo" [arrowtail=none arrowhead=dot headlabel="1" taillabel="1"] 
     257  "baf" -> "foo" [arrowtail=none arrowhead=dot headlabel="n" taillabel="1"] 
     258  "bar" -> "foo" [arrowtail=none arrowhead=dot headlabel="n" taillabel="1"] 
     259  "baz" -> "foo" [arrowtail=none arrowhead=dot headlabel="n" taillabel="1"] 
    260260 
    261261} 
  • lang/ruby/ymldot/ymldot.gemspec

    r28323 r31339  
    11Gem::Specification.new do |s| 
    22  s.name = %q{ymldot} 
    3   s.version = "0.0.5" 
     3  s.version = "0.0.6" 
    44 
    55  s.specification_version = 2 if s.respond_to? :specification_version= 
     
    88  s.authors = ["nari"] 
    99  s.date = %q{2008-10-22} 
    10   s.description = %q{} 
     10  s.description = %q{Can describe ERD in a from of ".yml"} 
    1111  s.email = %q{authornari@gmail.com} 
    1212  s.files = ["README", "bin/ymldot", "lib/ymldot.rb", "lib/util.rb", "sample/sample.dot", "sample/sample.png", "sample/sample.yml", "sample/sample_jp.dot", "sample/sample_jp.png", "sample/sample_jp.yml"] 
     13  s.executables = ["ymldot"] 
    1314  s.homepage = %q{http://coderepos.org/share/browser/lang/ruby/ymldot} 
    1415  s.require_paths = ["lib"]