dbd4 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/bin/dbd4 CHANGED
@@ -21,7 +21,7 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #--
23
23
 
24
- DBD4VERSION = '1.0.4'
24
+ DBD4VERSION = '1.0.5'
25
25
 
26
26
  require 'getoptlong'
27
27
  require 'dbd4/dbd4_model_file'
@@ -141,10 +141,10 @@ class DBD4Import
141
141
  dbmf.generateModelFiles unless $validate_only == true
142
142
  puts "Done!"
143
143
  end
144
- rescue Exception => ex
145
- puts "dbmodel aborted!"
146
- puts ex
147
- exit(1)
144
+ #rescue Exception => ex
145
+ # puts "dbmodel aborted!"
146
+ # puts ex
147
+ # exit(1)
148
148
  end
149
149
  end
150
150
  end
@@ -92,7 +92,7 @@ module DBD4
92
92
  @comments = table.attributes['Comments']
93
93
  @name = table.attributes['Tablename']
94
94
  @modelname = Inflector.singularize(@name)
95
- @nm_table = false;
95
+ @nm_table = table.attributes['nmTable'];
96
96
  @primary_key = nil;
97
97
 
98
98
  @relation_starts = Array.new
@@ -100,7 +100,15 @@ module DBD4
100
100
  @columns = Columns.new(self)
101
101
  @non_standard_name = false
102
102
  end
103
-
103
+
104
+ def self.createJoinTableName(t1, t2)
105
+ if t1.name < t2.name
106
+ "#{t1.name}_#{t2.name}"
107
+ else
108
+ "#{t2.name}_#{t1.name}"
109
+ end
110
+ end
111
+
104
112
  def addColumnFromXml(column_xml)
105
113
  column = Column.new(column_xml, self)
106
114
  @primary_key = column if column.primary_key? and ! @primary_key
@@ -116,20 +124,25 @@ module DBD4
116
124
  end
117
125
 
118
126
  def validate(messages)
119
- if @nm_table
120
- t1 = @relation_ends.values[0].source_table
121
- t2 = @relation_ends.values[1].source_table
122
- expected_name = nil;
123
- if t1.name < t2.name
124
- expected_name = "#{t1.name}_#{t2.name}"
127
+ if @nm_table == '1'
128
+ if @relation_ends.size != 2
129
+ messages[:warnings] << "Warning : join table #{name} must have only 2 foreign keys with one2many types."
130
+ elsif @relation_ends.values[0].type != :many2many or relation_ends.values[1].type != :many2many
131
+ messages[:warnings] << "Warning : join table #{name} has a relation that is not many2many"
125
132
  else
126
- expected_name = "#{t2.name}_#{t1.name}"
127
- end
128
- if @name != expected_name then
129
- messages[:warnings] << "Warning : join table #{name} differs from expected #{expected_name}"
130
- @non_standard_name = true
133
+ t1 = @relation_ends.values[0].source_table
134
+ t2 = @relation_ends.values[1].source_table
135
+ expected_name = Table.createJoinTableName(t1, t2)
136
+ if @name != expected_name then
137
+ messages[:warnings] << "Warning : join table #{name} differs from expected #{expected_name}"
138
+ @non_standard_name = true
139
+ end
131
140
  end
132
141
  else
142
+ if @columns.size == 2 and @columns.foreign_keys.size == 2 and @relation_ends.values.size == 2 and @relation_ends.values[0].type == :one2many and @relation_ends.values[1].type == :one2many
143
+ messages[:warnings] << "Warning : table name #{name} seems to be a join table (many2many) please specify 'is nm_table' in DBDesigner"
144
+ end
145
+
133
146
  if @modelname == @name
134
147
  messages[:warnings] << "Warning : table name #{name} is not in a valid plural form, should be #{Inflector.pluralize(name)}"
135
148
  @non_standard_name = true
@@ -152,28 +165,28 @@ module DBD4
152
165
  tmp = Relations.new
153
166
  @relation_ends.each { |r| tmp<<allObjects[:relations][r.id] }
154
167
  @relation_ends = tmp
155
- if @columns.size == 3
156
- if @columns.foreign_keys.size == 2
157
- if @relation_ends.values.size == 2
158
- if @relation_ends.values[0].type == :one2many and @relation_ends.values[1].type == :one2many
159
- @nm_table = true
160
- @relation_ends.values[0].destination_table = @relation_ends.values[1].source_table
161
- @relation_ends.values[0].join_table = self
162
- @relation_ends.values[1].destination_table = @relation_ends.values[0].source_table
163
- @relation_ends.values[1].join_table = self
164
- @relation_ends.values[0].type = :many2many
165
- @relation_ends.values[1].type = :many2many
166
- end
167
- end
168
- end
168
+ if @relation_ends.values.size == 2 and @nm_table == '1' then
169
+ @relation_ends.values[0].destination_table = @relation_ends.values[1].source_table
170
+ @relation_ends.values[0].join_table = self
171
+ @relation_ends.values[1].destination_table = @relation_ends.values[0].source_table
172
+ @relation_ends.values[1].join_table = self
173
+ @relation_ends.values[0].type = :many2many
174
+ @relation_ends.values[1].type = :many2many
169
175
  end
170
176
  end
171
177
 
172
178
  def generateModelFile
173
179
  m = RailsModelFile.new({:modelname => @modelname})
174
- m.update(self) unless @nm_table
180
+ m.update(self) unless @nm_table == '1'
175
181
  m = RailsMigrationFile.new({:tablename => @name})
176
182
  m.update(self)
183
+
184
+ @relation_starts.each_value do |rs|
185
+ if rs.type == :many2many and rs.join_table == nil
186
+ m = RailsMigrationFile.new({:virtual => true, :tablename => Table.createJoinTableName(self, rs.destination_table)})
187
+ m.update_implicit_join_table(rs)
188
+ end
189
+ end
177
190
  end
178
191
 
179
192
  def to_str
@@ -273,33 +286,61 @@ module DBD4
273
286
  when '5'
274
287
  @type = :one2one
275
288
  when '2'
276
- @type = :one2many
289
+ @type = :one2many
290
+ when '3'
291
+ @type = :many2many
277
292
  end
278
293
  @source_table = relation.attributes['SrcTable']
279
294
  @destination_table = relation.attributes['DestTable']
280
295
  end
281
-
296
+
282
297
  def resolve(allObjects)
283
298
  @source_table = allObjects[:tables][@source_table]
284
299
  @destination_table = allObjects[:tables][@destination_table]
285
- @source_column = @source_table.columns.primary_keys[@fk_fields[0].source_field]
286
- @destination_column = @destination_table.columns.foreign_keys[@fk_fields[0].destination_field]
300
+ if @type != :many2many
301
+ @source_column = @source_table.columns.primary_keys[@fk_fields[0].source_field]
302
+ @destination_column = @destination_table.columns.foreign_keys[@fk_fields[0].destination_field]
303
+ end
287
304
  end
288
305
 
289
306
  def validate(messages)
307
+ if @type == nil
308
+ messages[:warnings] << "Warning : between table #{@destination_table.name} and table #{@source_table.name}, type #{@kind} is invalid"
309
+ end
310
+
290
311
  if @fk_fields.size > 1
291
- messages[:warnings] << "Warning : between table #{@destination_column.table.name} and table #{@source_column.table.name}, relation #{name} targets more than 1 foreign_key"
312
+ messages[:warnings] << "Warning : between table #{@destination_table.name} and table #{@source_table.name}, relation #{name} targets more than 1 foreign_key"
292
313
  end
293
314
 
294
- expected_fkey_name = Inflector.singularize(@source_table.name) + "_id"
295
- if @destination_column.name != expected_fkey_name and @destination_column.polymorphic == nil then
296
- messages[:warnings] << "Warning : table #{@destination_column.table.name}, foreign key #{@destination_column.name} does not match expected name #{expected_fkey_name}"
297
- @destination_column.non_standard_name = true
315
+ if !( @type != nil and @type == :many2many and @join_table == nil )
316
+ expected_fkey_name = Inflector.singularize(@source_table.name) + "_id"
317
+ if @destination_column.name != expected_fkey_name and @destination_column.polymorphic == nil then
318
+ messages[:warnings] << "Warning : table #{@destination_column.table.name}, foreign key #{@destination_column.name} does not match expected name #{expected_fkey_name}"
319
+ @destination_column.non_standard_name = true
320
+ end
298
321
  end
299
322
  end
300
323
 
301
324
  def to_str
302
- "Relation(id=#{id}, name=#{name}, type=#{type}, src=#{source_table.name}, dst=#{destination_table.name}, fk=#{fk_fields.to_str})"
325
+ result = "Relation(id=#{id}, name=#{name}, type=#{type},"
326
+ if source_column != nil
327
+ result += " src_col=#{source_column.name},"
328
+ else
329
+ result += " src_col=nil,"
330
+ end
331
+ if destination_column != nil
332
+ result += " dst_col=#{destination_column.name},"
333
+ else
334
+ result += " dst_col=nil,"
335
+ end
336
+ result += " src=#{source_table.name}, dst=#{destination_table.name}, fk=#{fk_fields.to_str},"
337
+ if join_table != nil
338
+ result += " join_table=#{join_table.name}"
339
+ else
340
+ result += " join_table=nil"
341
+ end
342
+ result += ")"
343
+ result
303
344
  end
304
345
  end
305
346
 
@@ -444,8 +485,9 @@ module DBD4
444
485
 
445
486
  def <<(column)
446
487
  column.table = @table
447
- @primary_key = column unless @primary_key
488
+
448
489
  if column.primary_key?
490
+ @primary_key = column
449
491
  @primary_keys[column.name] = column
450
492
  end
451
493
  if column.foreign_key?
@@ -464,16 +506,22 @@ module DBD4
464
506
  end
465
507
 
466
508
  def validate(messages)
467
- if @primary_key == nil then
468
- messages[:errors] << "Error : table #{@table.name} has no primary keys, you need at least 1"
469
- else
470
- if @primary_keys.size > 1 then
471
- messages[:warnings] << "Warning : table #{@table.name} has more than 1 primary key, only the first one will be considered"
509
+ if @table.nm_table == '0'
510
+ if @primary_key == nil then
511
+ messages[:errors] << "Error : table #{@table.name} has no primary keys, you need at least 1"
512
+ else
513
+ if @primary_keys.size > 1 then
514
+ messages[:warnings] << "Warning : table #{@table.name} has more than 1 primary key, only the first one will be considered"
515
+ end
516
+
517
+ if @primary_key.name != 'id'
518
+ messages[:warnings] << "Warning : table #{@table.name} primary key #{@primary_key.name} differs from expected name id"
519
+ @primary_key.non_standard_name = true
520
+ end
472
521
  end
473
-
474
- if @primary_key.name != 'id'
475
- messages[:warnings] << "Warning : table #{@table.name} primary key #{@primary_key.name} differs from expected name id"
476
- @primary_key.non_standard_name = true
522
+ else
523
+ if @primary_key != nil then
524
+ messages[:warnings] << "Warning : table #{@table.name} is a many2many join table, it cannot have a primary key"
477
525
  end
478
526
  end
479
527
  each_value { |v| v.validate(messages) }
@@ -32,15 +32,29 @@ module DBD4
32
32
  @warnings = Array.new
33
33
  @infos = Array.new
34
34
  @tablename = options[:tablename]
35
+ @virtual = options[:virtual]
35
36
 
36
37
  if options[:tablename]
37
38
  if Inflector.singularize(@tablename) == @tablename
38
39
  raise RailsModelFileError, "MigrationModelFile : tablename #{@tablename} is not valid, it must be plural, not singular"
39
40
  end
40
- partial_name = "_create_" + Inflector.underscore(Inflector.camelize(@tablename)) + ".rb"
41
- fileList = Dir.new(File.join('db', 'migrate')).entries.delete_if { |e| e !~ /#{partial_name}/ }
41
+ partial_name = "_create_" + Inflector.underscore(Inflector.camelize(@tablename)) + ".rb"
42
+ fileList = Array.new(Dir.new(File.join('db', 'migrate')).entries).delete_if { |e| e !~ /#{partial_name}/ }
42
43
  if fileList.size == 0
43
- raise "Could not find migration file starting with #{partial_name} in dir db/migrate"
44
+ if @virtual == true
45
+ cmdline = ['migration', "create_" + Inflector.underscore(Inflector.camelize(@tablename)) ]
46
+ puts "Calling generator: #{cmdline.join(' ')}"
47
+ Rails::Generator::Scripts::Generate.new.run(cmdline)
48
+ fileList = Array.new(Dir.new(File.join('db', 'migrate')).entries).delete_if { |e| e !~ /#{partial_name}/ }
49
+ if fileList.size == 0
50
+ raise "Could not find generated migration file starting with #{partial_name} in dir db/migrate"
51
+ end
52
+ if fileList.size > 1
53
+ raise "Found more than 1 migration file starting with #{partial_name} in dir db/migrate"
54
+ end
55
+ else
56
+ raise "Could not find migration file starting with #{partial_name} in dir db/migrate"
57
+ end
44
58
  end
45
59
  if fileList.size > 1
46
60
  raise "Found more than 1 migration file starting with #{partial_name} in dir db/migrate"
@@ -100,7 +114,7 @@ module DBD4
100
114
  new_migration_file_content = <<"MIGRATIONFILE"
101
115
  class Create#{c} < ActiveRecord::Migration
102
116
  def self.up
103
- create_table :#{table.name} do |t|
117
+ create_table :#{@tablename} do |t|
104
118
  #{columnsToString(table)}
105
119
  end
106
120
  end
@@ -119,6 +133,32 @@ MIGRATIONFILE
119
133
  end
120
134
  end
121
135
 
136
+ def update_implicit_join_table(relation)
137
+ raise "MigrationFile : migration file name not given" if ! @migrationfile
138
+ c = Inflector.camelize(@tablename)
139
+ new_migration_file_content = <<"MIGRATIONFILE"
140
+ class Create#{c} < ActiveRecord::Migration
141
+ def self.up
142
+ create_table :#{@tablename}, :id => false do |t|
143
+ t.column :#{relation.source_table.modelname}_id, :integer
144
+ t.column :#{relation.destination_table.modelname}_id, :integer
145
+ end
146
+ end
147
+
148
+ def self.down
149
+ drop_table :#{@tablename}
150
+ end
151
+ end
152
+ MIGRATIONFILE
153
+
154
+ old_migration_file_content = IO.readlines(@migrationfile).join("")
155
+ if (old_migration_file_content != new_migration_file_content)
156
+ puts "Updating migration file for table #{@tablename} (file : #{@migrationfile})..."
157
+ newFile = File.open(@migrationfile, "w")
158
+ newFile.puts new_migration_file_content
159
+ end
160
+ end
161
+
122
162
  def to_str
123
163
  @lines.join("")
124
164
  end
@@ -39,7 +39,6 @@ module DBD4
39
39
  'has_one' => {},
40
40
  'has_many' => {},
41
41
  'belongs_to' => {},
42
- 'habtm' => {},
43
42
  'has_and_belongs_to_many' => {},
44
43
  'class' => {},
45
44
  'primary_key' => {},
@@ -112,21 +111,17 @@ module DBD4
112
111
  else
113
112
  @elements['table_name'] = { :start => i, :name => $~[1] }
114
113
  end
115
- elsif l.match(/^\s*(has_one|has_many|has_and_belongs_to_many|habtm|belongs_to)\s+:([a-zA-Z_0-9]+)/)
114
+ elsif l.match(/^\s*(has_one|has_many|has_and_belongs_to_many|belongs_to)\s+:([a-zA-Z_0-9]+)/)
116
115
  r_type = $~[1]
117
116
  t_name = $~[2]
118
117
 
119
- if r_type == 'has_and_belongs_to_many'
120
- r_type = 'habtm'
121
- end
122
-
123
118
  if @elements[r_type][t_name]
124
119
  @warnings << "Warning in file #{@modelfile} at line #{i + 1}:"
125
120
  @warnings << " Duplicate declaration #{r_type}, it is already defined at line #{@elements[r_type][t_name][:start] + 1}"
126
121
  @lines[i] = "#" + @lines[i]
127
122
  i += 1
128
123
  while i < @lines.size
129
- break if @lines[i].match(/^\s*(?:has_one|has_many|has_and_belongs_to_many|habtm|belongs_to|def|end)/)
124
+ break if @lines[i].match(/^\s*(?:has_one|has_many|has_and_belongs_to_many|belongs_to|def|end)/)
130
125
  @lines[i] = "#" + @lines[i] if @lines[i] !~ /^\s*#/
131
126
  i += 1
132
127
  end
@@ -141,7 +136,7 @@ module DBD4
141
136
  i += 1
142
137
  while i < @lines.size
143
138
  l2 = @lines[i]
144
- break if @lines[i].match(/^\s*(?:has_one|has_many|has_and_belongs_to_many|habtm|belongs_to|def|end)/)
139
+ break if @lines[i].match(/^\s*(?:has_one|has_many|has_and_belongs_to_many|belongs_to|def|end)/)
145
140
  r[:foreign_key] = $~ if l2.match(/:foreign_key\s*=>\s*["']([a-zA-Z_0-9]+)/)
146
141
  r[:polymorphic] = $~ if l2.match(/:polymorphic\s*=>\s*true/)
147
142
  r[:as] = $~ if l2.match(/:as\s*=>\s*([a-zA-Z_0-9]+)/)
@@ -191,13 +186,13 @@ module DBD4
191
186
 
192
187
  etype = 'has_one' if r.type == :one2one
193
188
  etype = 'has_many' if r.type == :one2many
194
- etype = 'habtm' if r.type == :many2many
189
+ etype = 'has_and_belongs_to_many' if r.type == :many2many
195
190
  element = @elements[etype][dname]
196
191
 
197
192
  #If the line exists
198
193
  if element
199
194
  if element[:as]
200
- if r.destination_column.polymorphic
195
+ if r.destination_column and r.destination_column.polymorphic
201
196
  for i in (element[:start] .. element[:end])
202
197
  @lines[i].sub!(/(:as\s*=>\s*["']?)[a-zA-Z_0-9]+/, "\\1#{r.destination_column.polymorphic}")
203
198
  end
@@ -207,12 +202,14 @@ module DBD4
207
202
  end
208
203
  end
209
204
  else
210
- @lines[element[:start]].sub!(/(#{etype}[^,]+)/, "\\1, :as => '#{r.destination_column.polymorphic}'")
205
+ if r.destination_column and r.destination_column.polymorphic
206
+ @lines[element[:start]].sub!(/(#{etype}[^,]+)/, "\\1, :as => '#{r.destination_column.polymorphic}'")
207
+ end
211
208
  end
212
209
  left_over[etype].delete(dname)
213
210
  else
214
211
  @lines[@elements['class'][:start]] += " #{etype} :#{dname}"
215
- if r.destination_column.polymorphic
212
+ if r.destination_column and r.destination_column.polymorphic
216
213
  @lines[@elements['class'][:start]] += ", :as => #{r.destination_column.polymorphic}"
217
214
  end
218
215
  @lines[@elements['class'][:start]] += "\n"
@@ -232,19 +229,19 @@ module DBD4
232
229
  end
233
230
 
234
231
  etype = 'belongs_to' if r.type == :one2one or r.type == :one2many
235
- etype = 'habtm' if r.type == :many2many
232
+ etype = 'has_and_belongs_to_many' if r.type == :many2many
236
233
  element = @elements[etype][dname]
237
234
 
238
235
  #If the line exists
239
236
  if element
240
237
  if element[:polymorphic]
241
- if ! r.destination_column.polymorphic
238
+ if r.destination_column and ! r.destination_column.polymorphic
242
239
  for i in (element[:start] .. element[:end])
243
240
  @lines[i].sub!(/,\s*:polymorphic\s*=>\s*["']?[a-zA-Z_0-9]+["']?/, "")
244
241
  end
245
242
  end
246
243
  else
247
- if r.destination_column.polymorphic
244
+ if r.destination_column and r.destination_column.polymorphic
248
245
  @lines[element[:start]].sub!(/(#{etype}[^,\n]+)/, "\\1, :polymorphic => true")
249
246
  else
250
247
  # do nothing
@@ -253,7 +250,7 @@ module DBD4
253
250
  left_over[etype].delete(dname)
254
251
  else
255
252
  @lines[@elements['class'][:start]] += " #{etype} :#{dname}"
256
- if r.destination_column.polymorphic
253
+ if r.destination_column and r.destination_column.polymorphic
257
254
  @elements[etype] = { dname => { :polymorphic => true, :added => true } }
258
255
  @lines[@elements['class'][:start]] += ", :polymorphic => true"
259
256
  end
@@ -22,6 +22,7 @@ $files = {
22
22
  'app/models/dog.rb' => "class Dog < ActiveRecord::Base\nend\n",
23
23
  'app/models/kid.rb' => "class Kid < ActiveRecord::Base\nend\n",
24
24
  'app/models/house.rb' => "class House < ActiveRecord::Base\nend\n",
25
+ 'app/models/car.rb' => "class Car < ActiveRecord::Base\nend\n",
25
26
  'db/migrate/001_create_cats.rb' => "",
26
27
  'db/migrate/001_create_cats.rb' => "",
27
28
  'db/migrate/001_create_cats.rb' => "",
@@ -37,18 +38,14 @@ $files = {
37
38
  'db/migrate/011_create_wives.rb' => "",
38
39
  'db/migrate/012_create_dogs.rb' => "",
39
40
  'db/migrate/013_create_kids.rb' => "",
40
- 'db/migrate/014_create_houses.rb' => ""
41
+ 'db/migrate/014_create_houses.rb' => "",
42
+ 'db/migrate/015_create_cars.rb' => "",
43
+ 'db/migrate/104_create_cars_people.rb' => ""
41
44
  }
42
45
 
43
- $files_written_to = Array.new
46
+ $new_migration_numbers = ['100', '101', '102', '103', '104']
44
47
 
45
- class Dir
46
- def initialize(dirname)
47
- raise "Cannot open directory : #{dirname}" if dirname != File.join("db", "migrate")
48
- end
49
-
50
- def entries
51
- [
48
+ $dir_entries = [
52
49
  '001_create_cats.rb',
53
50
  '002_create_computers_users.rb',
54
51
  '003_create_computers.rb',
@@ -62,8 +59,19 @@ class Dir
62
59
  '011_create_wives.rb',
63
60
  '012_create_dogs.rb',
64
61
  '013_create_kids.rb',
65
- '014_create_houses.rb'
62
+ '014_create_houses.rb',
63
+ '015_create_cars.rb'
66
64
  ]
65
+
66
+ $files_written_to = Array.new
67
+
68
+ class Dir
69
+ def initialize(dirname)
70
+ raise "Cannot open directory : #{dirname}" if dirname != File.join("db", "migrate")
71
+ end
72
+
73
+ def entries
74
+ $dir_entries
67
75
  end
68
76
  end
69
77
 
@@ -207,6 +215,7 @@ INPUT
207
215
  'app/models/dog.rb' => "class Dog < ActiveRecord::Base\nend\n",
208
216
  'app/models/kid.rb' => "class Kid < ActiveRecord::Base\nend\n",
209
217
  'app/models/house.rb' => "class House < ActiveRecord::Base\nend\n",
218
+ 'app/models/car.rb' => "class Car < ActiveRecord::Base\nend\n",
210
219
  'db/migrate/001_create_cats.rb' => "",
211
220
  'db/migrate/002_create_computers_users.rb' => "",
212
221
  'db/migrate/003_create_computers.rb' => "",
@@ -220,12 +229,14 @@ INPUT
220
229
  'db/migrate/011_create_wives.rb' => "",
221
230
  'db/migrate/012_create_dogs.rb' => "",
222
231
  'db/migrate/013_create_kids.rb' => "",
223
- 'db/migrate/014_create_houses.rb' => ""
232
+ 'db/migrate/014_create_houses.rb' => "",
233
+ 'db/migrate/104_create_cars_people.rb' => "",
234
+ 'db/migrate/015_create_cars.rb' => ""
224
235
  }
225
236
  @b.generateModelFiles
226
- #puts $files_written_to
237
+
227
238
  run_info = Rails::Generator::Scripts::Generate.new.run_info
228
- assert_equal(14, run_info.size)
239
+ assert_equal(16, run_info.size)
229
240
  assert_equal(1, run_info['model computer'])
230
241
  assert_equal(1, run_info['model wife'])
231
242
  assert_equal(1, run_info['model shoe'])
@@ -240,6 +251,8 @@ INPUT
240
251
  assert_equal(1, run_info['model house'])
241
252
  assert_equal(1, run_info['model dog'])
242
253
  assert_equal(1, run_info['model job'])
254
+ assert_equal(1, run_info['migration create_cars_people'])
255
+ assert_equal(1, run_info['model car'])
243
256
  end
244
257
 
245
258
  def _test_comment
@@ -258,6 +271,7 @@ INPUT
258
271
  'app/models/dog.rb' => "class Dog < ActiveRecord::Base\n has_many :generic_animals, :as => gogole\nend\n",
259
272
  'app/models/kid.rb' => "class Kid < ActiveRecord::Base\nend\n",
260
273
  'app/models/house.rb' => "class House < ActiveRecord::Base\nend\n",
274
+ 'app/models/car.rb' => "class Car < ActiveRecord::Base\nend\n",
261
275
  'db/migrate/001_create_cats.rb' => "",
262
276
  'db/migrate/001_create_cats.rb' => "",
263
277
  'db/migrate/002_create_computers_users.rb' => "",
@@ -272,7 +286,9 @@ INPUT
272
286
  'db/migrate/011_create_wives.rb' => "",
273
287
  'db/migrate/012_create_dogs.rb' => "",
274
288
  'db/migrate/013_create_kids.rb' => "",
275
- 'db/migrate/014_create_houses.rb' => ""
289
+ 'db/migrate/014_create_houses.rb' => "",
290
+ 'db/migrate/104_create_cars_people.rb' => "",
291
+ 'db/migrate/015_create_cars.rb' => ""
276
292
  }
277
293
 
278
294
  $files_written_to = Array.new
@@ -34,6 +34,7 @@ class Dbd4Test < Test::Unit::TestCase
34
34
 
35
35
  def _test_with_all_errors_corrected
36
36
  b = DBD4::DBD4ModelFile.new(File.join(File.dirname(__FILE__), '..', 'data', 'good_example.xml'))
37
+ puts b.messages[:warnings]
37
38
  assert_equal(0, b.messages[:errors].size)
38
39
  assert_equal(0, b.messages[:warnings].size)
39
40
  a = b.to_str.readlines.zip(IO.readlines(File.join(File.dirname(__FILE__), '..', 'data', 'good_example.output')))
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: dbd4
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.0.4
7
- date: 2006-08-24 00:00:00 -04:00
6
+ version: 1.0.5
7
+ date: 2006-08-26 00:00:00 -04:00
8
8
  summary: A package for importing DB Designer 4 xml models in rails.
9
9
  require_paths:
10
10
  - lib