dbd4 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.5'
24
+ DBD4VERSION = '1.0.6'
25
25
 
26
26
  require 'getoptlong'
27
27
  require 'dbd4/dbd4_model_file'
@@ -176,8 +176,10 @@ module DBD4
176
176
  end
177
177
 
178
178
  def generateModelFile
179
- m = RailsModelFile.new({:modelname => @modelname})
180
- m.update(self) unless @nm_table == '1'
179
+ if @nm_table == '0'
180
+ m = RailsModelFile.new({:modelname => @modelname})
181
+ m.update(self)
182
+ end
181
183
  m = RailsMigrationFile.new({:tablename => @name})
182
184
  m.update(self)
183
185
 
@@ -185,6 +187,9 @@ module DBD4
185
187
  if rs.type == :many2many and rs.join_table == nil
186
188
  m = RailsMigrationFile.new({:virtual => true, :tablename => Table.createJoinTableName(self, rs.destination_table)})
187
189
  m.update_implicit_join_table(rs)
190
+ elsif rs.type == :acts_as_graph
191
+ m = RailsMigrationFile.new({:virtual => true, :tablename => "#{name}_edges"})
192
+ m.update_acts_as_graph_table(rs)
188
193
  end
189
194
  end
190
195
  end
@@ -301,6 +306,10 @@ module DBD4
301
306
  @source_column = @source_table.columns.primary_keys[@fk_fields[0].source_field]
302
307
  @destination_column = @destination_table.columns.foreign_keys[@fk_fields[0].destination_field]
303
308
  end
309
+
310
+ if @type == :many2many and @name =~ /acts_as_graph/
311
+ @type = :acts_as_graph
312
+ end
304
313
  end
305
314
 
306
315
  def validate(messages)
@@ -312,11 +321,15 @@ module DBD4
312
321
  messages[:warnings] << "Warning : between table #{@destination_table.name} and table #{@source_table.name}, relation #{name} targets more than 1 foreign_key"
313
322
  end
314
323
 
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
324
+ if !( @type != nil and (@type == :many2many or @type == :acts_as_graph) and @join_table == nil )
325
+ if (@source_table.name == @destination_table.name)
326
+ messages[:warnings] << "Warning : relation #{name} has same source and target table name : \"#{@source_table.name}\", dbd4 does not support this yet"
327
+ else
328
+ expected_fkey_name = Inflector.singularize(@source_table.name) + "_id"
329
+ if @destination_column.name != expected_fkey_name and @destination_column.polymorphic == nil then
330
+ messages[:warnings] << "Warning : table #{@destination_column.table.name}, foreign key #{@destination_column.name} does not match expected name #{expected_fkey_name}"
331
+ @destination_column.non_standard_name = true
332
+ end
320
333
  end
321
334
  end
322
335
  end
@@ -27,6 +27,9 @@ module DBD4
27
27
  class RailsMigrationFile
28
28
  attr_writer :tablename
29
29
  attr_reader :warnings, :tablename
30
+
31
+ class RailsModelFileError < Exception
32
+ end
30
33
 
31
34
  def initialize(options = {})
32
35
  @warnings = Array.new
@@ -122,7 +125,7 @@ class Create#{c} < ActiveRecord::Migration
122
125
  def self.down
123
126
  drop_table :#{@tablename}
124
127
  end
125
- end
128
+ end
126
129
  MIGRATIONFILE
127
130
 
128
131
  old_migration_file_content = IO.readlines(@migrationfile).join("")
@@ -148,7 +151,7 @@ class Create#{c} < ActiveRecord::Migration
148
151
  def self.down
149
152
  drop_table :#{@tablename}
150
153
  end
151
- end
154
+ end
152
155
  MIGRATIONFILE
153
156
 
154
157
  old_migration_file_content = IO.readlines(@migrationfile).join("")
@@ -159,6 +162,31 @@ MIGRATIONFILE
159
162
  end
160
163
  end
161
164
 
165
+ def update_acts_as_graph_table(relation)
166
+ raise "MigrationFile : migration file name not given" if ! @migrationfile
167
+ c = Inflector.camelize(@tablename)
168
+ new_migration_file_content = <<"MIGRATIONFILE"
169
+ class Create#{c} < ActiveRecord::Migration
170
+ def self.up
171
+ create_table :#{@tablename}, :id => false, :force => true do |t|
172
+ t.column :#{relation.source_table.modelname}_id, :integer, :default => 0, :null => false
173
+ t.column :#{relation.destination_table.modelname}_id, :integer, :default => 0, :null => false
174
+ end
175
+ end
176
+
177
+ def self.down
178
+ drop_table :#{@tablename}
179
+ end
180
+ end
181
+ MIGRATIONFILE
182
+
183
+ old_migration_file_content = IO.readlines(@migrationfile).join("")
184
+ if (old_migration_file_content != new_migration_file_content)
185
+ puts "Updating migration file for table #{@tablename} (file : #{@migrationfile})..."
186
+ newFile = File.open(@migrationfile, "w")
187
+ newFile.puts new_migration_file_content
188
+ end
189
+ end
162
190
  def to_str
163
191
  @lines.join("")
164
192
  end
@@ -43,7 +43,8 @@ module DBD4
43
43
  'class' => {},
44
44
  'primary_key' => {},
45
45
  'table_name' => {},
46
- 'as' => {}
46
+ 'as' => {},
47
+ 'acts_as_graph' => {}
47
48
  }
48
49
  end
49
50
 
@@ -111,6 +112,15 @@ module DBD4
111
112
  else
112
113
  @elements['table_name'] = { :start => i, :name => $~[1] }
113
114
  end
115
+ elsif l.match(/^\s*acts_as_graph\s+\{\}\s+$/)
116
+ table_name = Inflector.pluralize(@modelname)
117
+ r = @elements['acts_as_graph'][table_name] = { :start => i, :end => i }
118
+ i += 1
119
+ while i < @lines.size
120
+ break if @lines[i].match(/^\s*(?:has_one|has_many|has_and_belongs_to_many|belongs_to|def|end|acts_as)/)
121
+ r[:end] = i
122
+ i += 1
123
+ end
114
124
  elsif l.match(/^\s*(has_one|has_many|has_and_belongs_to_many|belongs_to)\s+:([a-zA-Z_0-9]+)/)
115
125
  r_type = $~[1]
116
126
  t_name = $~[2]
@@ -121,7 +131,7 @@ module DBD4
121
131
  @lines[i] = "#" + @lines[i]
122
132
  i += 1
123
133
  while i < @lines.size
124
- break if @lines[i].match(/^\s*(?:has_one|has_many|has_and_belongs_to_many|belongs_to|def|end)/)
134
+ break if @lines[i].match(/^\s*(?:has_one|has_many|has_and_belongs_to_many|belongs_to|def|end|acts_as)/)
125
135
  @lines[i] = "#" + @lines[i] if @lines[i] !~ /^\s*#/
126
136
  i += 1
127
137
  end
@@ -187,11 +197,14 @@ module DBD4
187
197
  etype = 'has_one' if r.type == :one2one
188
198
  etype = 'has_many' if r.type == :one2many
189
199
  etype = 'has_and_belongs_to_many' if r.type == :many2many
200
+ etype = 'acts_as_graph' if r.type == :acts_as_graph
190
201
  element = @elements[etype][dname]
191
202
 
192
203
  #If the line exists
193
204
  if element
194
- if element[:as]
205
+ if r.type == :acts_as_graph
206
+ #do nothing, acts as graph can only be used with default parameters({})
207
+ elsif element[:as]
195
208
  if r.destination_column and r.destination_column.polymorphic
196
209
  for i in (element[:start] .. element[:end])
197
210
  @lines[i].sub!(/(:as\s*=>\s*["']?)[a-zA-Z_0-9]+/, "\\1#{r.destination_column.polymorphic}")
@@ -208,7 +221,11 @@ module DBD4
208
221
  end
209
222
  left_over[etype].delete(dname)
210
223
  else
211
- @lines[@elements['class'][:start]] += " #{etype} :#{dname}"
224
+ if r.type == :acts_as_graph
225
+ @lines[@elements['class'][:start]] += " #{etype} {}"
226
+ else
227
+ @lines[@elements['class'][:start]] += " #{etype} :#{dname}"
228
+ end
212
229
  if r.destination_column and r.destination_column.polymorphic
213
230
  @lines[@elements['class'][:start]] += ", :as => #{r.destination_column.polymorphic}"
214
231
  end
@@ -220,6 +237,8 @@ module DBD4
220
237
  dname = ""
221
238
  if r.type == :many2many
222
239
  dname = r.source_table.name
240
+ elsif r.type == :acts_as_graph
241
+ next
223
242
  else
224
243
  if r.destination_column.polymorphic
225
244
  dname = r.destination_column.polymorphic
@@ -40,6 +40,7 @@ $files = {
40
40
  'db/migrate/013_create_kids.rb' => "",
41
41
  'db/migrate/014_create_houses.rb' => "",
42
42
  'db/migrate/015_create_cars.rb' => "",
43
+ 'db/migrate/103_create_cars_edges.rb' => "",
43
44
  'db/migrate/104_create_cars_people.rb' => ""
44
45
  }
45
46
 
@@ -230,6 +231,7 @@ INPUT
230
231
  'db/migrate/012_create_dogs.rb' => "",
231
232
  'db/migrate/013_create_kids.rb' => "",
232
233
  'db/migrate/014_create_houses.rb' => "",
234
+ 'db/migrate/103_create_cars_edges.rb' => "",
233
235
  'db/migrate/104_create_cars_people.rb' => "",
234
236
  'db/migrate/015_create_cars.rb' => ""
235
237
  }
@@ -245,7 +247,6 @@ INPUT
245
247
  assert_equal(1, run_info['model person'])
246
248
  assert_equal(1, run_info['model security_number'])
247
249
  assert_equal(1, run_info['model user'])
248
- assert_equal(1, run_info['model jobs_person'])
249
250
  assert_equal(1, run_info['model kid'])
250
251
  assert_equal(1, run_info['model generic_animal'])
251
252
  assert_equal(1, run_info['model house'])
@@ -253,6 +254,7 @@ INPUT
253
254
  assert_equal(1, run_info['model job'])
254
255
  assert_equal(1, run_info['migration create_cars_people'])
255
256
  assert_equal(1, run_info['model car'])
257
+ assert_equal(1, run_info['migration create_cars_edges'])
256
258
  end
257
259
 
258
260
  def _test_comment
@@ -287,6 +289,7 @@ INPUT
287
289
  'db/migrate/012_create_dogs.rb' => "",
288
290
  'db/migrate/013_create_kids.rb' => "",
289
291
  'db/migrate/014_create_houses.rb' => "",
292
+ 'db/migrate/103_create_cars_edges.rb' => "",
290
293
  'db/migrate/104_create_cars_people.rb' => "",
291
294
  'db/migrate/015_create_cars.rb' => ""
292
295
  }
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.5
7
- date: 2006-08-26 00:00:00 -04:00
6
+ version: 1.0.6
7
+ date: 2006-08-27 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