Changeset 31339
- Timestamp:
- 03/18/09 15:43:50 (4 years ago)
- Location:
- lang/ruby/ymldot
- Files:
-
- 5 modified
-
bin/ymldot (modified) (1 diff)
-
lib/ymldot.rb (modified) (6 diffs)
-
spec/test_jp.yml (modified) (2 diffs)
-
spec/ymldot_spec.rb (modified) (5 diffs)
-
ymldot.gemspec (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/ruby/ymldot/bin/ymldot
r28323 r31339 10 10 require 'optparse' 11 11 12 Version = "0.0. 5"12 Version = "0.0.6" 13 13 is_output = false 14 14 is_csv = false -
lang/ruby/ymldot/lib/ymldot.rb
r28322 r31339 68 68 end 69 69 70 def add_entity(table) 71 eval_entity(table) 72 end 73 70 74 private 71 75 def eval_entity(table) … … 129 133 res << %Q!graph [size="#{(@config["size"]["x"]/2.54).round},#{(@config["size"]["y"]/2.54).round}"]\n! 130 134 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 133 143 res 134 144 end … … 166 176 @node["category"].each{|c| @category << Tables.new(c["tables"], c["label"], true) } if @node["category"] 167 177 @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) 172 182 foreignkeys = table["foreignkeys"] 173 183 tname = table["name"] … … 175 185 eval_relation_has_many(foreignkeys["has_many"], tname) if foreignkeys["has_many"] 176 186 eval_relation_has_one(foreignkeys["has_one"], tname) if foreignkeys["has_one"] 177 eval_relation_h mabt(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"] 178 188 eval_relation_polymorphic(foreignkeys["polymorphic"], tname) if foreignkeys["polymorphic"] 179 189 end … … 195 205 end 196 206 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 205 211 206 212 # make new category … … 208 214 keys << append_fk_str(tname) 209 215 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]} 214 223 end 215 224 end -
lang/ruby/ymldot/spec/test_jp.yml
r21829 r31339 8 8 - タイトル 9 9 foreignkeys: 10 has_ many_and_belongs_to:10 has_and_belongs_to_many: 11 11 - カテゴリ 12 12 dependent: … … 16 16 - 種別名 17 17 foreignkeys: 18 has_ many_and_belongs_to:18 has_and_belongs_to_many: 19 19 - コンテンツ 20 20 dependent: false -
lang/ruby/ymldot/spec/ymldot_spec.rb
r28322 r31339 64 64 end 65 65 66 describe Ymldot, "で読み込んだ.ymlのリレーションがhas_ many_and_belongs_toである場合" do67 before do 68 @ymldot = Ymldot.new("test_has_ many_and_belongs_to.yml")66 describe Ymldot, "で読み込んだ.ymlのリレーションがhas_and_belongs_to_manyである場合" do 67 before do 68 @ymldot = Ymldot.new("test_has_and_belongs_to_many.yml") 69 69 end 70 70 71 71 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)"] 73 73 end 74 74 … … 84 84 @ymldot.to_dot.should_not be_empty 85 85 @ymldot.to_dot.should == <<'EOS' 86 digraph test_has_ many_and_belongs_to{86 digraph test_has_and_belongs_to_many { 87 87 graph [overlap=false, splines=true] 88 88 node [fontname="MSUIGOTHIC.ttf"] … … 130 130 131 131 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)"] 133 133 end 134 134 … … 238 238 239 239 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)') 241 241 end 242 242 243 243 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)') 245 245 end 246 246 … … 255 255 "baf" [shape=record, label="{baf|buge\l}"] 256 256 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"] 260 260 261 261 } -
lang/ruby/ymldot/ymldot.gemspec
r28323 r31339 1 1 Gem::Specification.new do |s| 2 2 s.name = %q{ymldot} 3 s.version = "0.0. 5"3 s.version = "0.0.6" 4 4 5 5 s.specification_version = 2 if s.respond_to? :specification_version= … … 8 8 s.authors = ["nari"] 9 9 s.date = %q{2008-10-22} 10 s.description = %q{ }10 s.description = %q{Can describe ERD in a from of ".yml"} 11 11 s.email = %q{authornari@gmail.com} 12 12 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"] 13 14 s.homepage = %q{http://coderepos.org/share/browser/lang/ruby/ymldot} 14 15 s.require_paths = ["lib"]
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)