rubyrep 1.0.9 → 1.1.0
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/History.txt +5 -0
- data/config/hoe.rb +2 -2
- data/config/requirements.rb +1 -1
- data/lib/rubyrep/committers/buffered_committer.rb +20 -15
- data/lib/rubyrep/configuration.rb +11 -7
- data/lib/rubyrep/connection_extenders/connection_extenders.rb +1 -1
- data/lib/rubyrep/connection_extenders/jdbc_extender.rb +16 -34
- data/lib/rubyrep/connection_extenders/postgresql_extender.rb +66 -0
- data/lib/rubyrep/proxy_connection.rb +30 -3
- data/lib/rubyrep/replication_helper.rb +33 -3
- data/lib/rubyrep/replication_run.rb +20 -1
- data/lib/rubyrep/replicators/replicators.rb +6 -1
- data/lib/rubyrep/replicators/two_way_replicator.rb +12 -20
- data/lib/rubyrep/sync_helper.rb +14 -6
- data/lib/rubyrep/syncers/syncers.rb +3 -3
- data/lib/rubyrep/syncers/two_way_syncer.rb +4 -4
- data/lib/rubyrep/table_sync.rb +23 -1
- data/lib/rubyrep/version.rb +2 -2
- data/spec/configuration_spec.rb +5 -0
- data/spec/connection_extender_interface_spec.rb +16 -21
- data/spec/db_specific_connection_extenders_spec.rb +1 -1
- data/spec/logged_change_spec.rb +2 -2
- data/spec/noisy_connection_spec.rb +7 -9
- data/spec/postgresql_schema_support_spec.rb +5 -2
- data/spec/postgresql_support_spec.rb +8 -2
- data/spec/proxy_connection_spec.rb +34 -30
- data/spec/replication_helper_spec.rb +40 -0
- data/spec/replication_run_spec.rb +114 -3
- data/spec/replicators_spec.rb +5 -0
- data/spec/strange_name_support_spec.rb +14 -3
- data/spec/sync_helper_spec.rb +11 -4
- data/spec/syncers_spec.rb +6 -6
- data/spec/table_sync_spec.rb +60 -4
- data/spec/two_way_replicator_spec.rb +18 -38
- data/spec/two_way_syncer_spec.rb +6 -6
- data/spec/type_casting_cursor_spec.rb +8 -8
- data/tasks/database.rake +6 -0
- metadata +4 -4
data/spec/syncers_spec.rb
CHANGED
@@ -101,7 +101,7 @@ describe Syncers::OneWaySyncer do
|
|
101
101
|
helper = SyncHelper.new(sync)
|
102
102
|
helper.stub!(:sync_options).and_return({:direction => :left, :delete => true})
|
103
103
|
syncer = Syncers::OneWaySyncer.new(helper)
|
104
|
-
helper.should_receive(:delete_record).with(:left, :dummy_record)
|
104
|
+
helper.should_receive(:delete_record).with(:left, 'scanner_records', :dummy_record)
|
105
105
|
helper.should_not_receive(:update_record)
|
106
106
|
helper.should_not_receive(:insert_record)
|
107
107
|
syncer.sync_difference(:left, :dummy_record)
|
@@ -109,7 +109,7 @@ describe Syncers::OneWaySyncer do
|
|
109
109
|
helper = SyncHelper.new(sync)
|
110
110
|
helper.stub!(:sync_options).and_return({:direction => :right, :delete => true})
|
111
111
|
syncer = Syncers::OneWaySyncer.new(helper)
|
112
|
-
helper.should_receive(:delete_record).with(:right, :dummy_record)
|
112
|
+
helper.should_receive(:delete_record).with(:right, 'scanner_records', :dummy_record)
|
113
113
|
syncer.sync_difference(:right, :dummy_record)
|
114
114
|
end
|
115
115
|
|
@@ -131,13 +131,13 @@ describe Syncers::OneWaySyncer do
|
|
131
131
|
syncer = Syncers::OneWaySyncer.new(helper)
|
132
132
|
helper.should_not_receive(:delete_record)
|
133
133
|
helper.should_not_receive(:update_record)
|
134
|
-
helper.should_receive(:insert_record).with(:left, :dummy_record)
|
134
|
+
helper.should_receive(:insert_record).with(:left, 'scanner_records', :dummy_record)
|
135
135
|
syncer.sync_difference(:right, :dummy_record)
|
136
136
|
|
137
137
|
helper = SyncHelper.new(sync)
|
138
138
|
helper.stub!(:sync_options).and_return({:direction => :right, :insert => true})
|
139
139
|
syncer = Syncers::OneWaySyncer.new(helper)
|
140
|
-
helper.should_receive(:insert_record).with(:right, :dummy_record)
|
140
|
+
helper.should_receive(:insert_record).with(:right, 'scanner_records', :dummy_record)
|
141
141
|
syncer.sync_difference(:left, :dummy_record)
|
142
142
|
end
|
143
143
|
|
@@ -158,14 +158,14 @@ describe Syncers::OneWaySyncer do
|
|
158
158
|
helper.stub!(:sync_options).and_return({:direction => :left, :update => true})
|
159
159
|
syncer = Syncers::OneWaySyncer.new(helper)
|
160
160
|
helper.should_not_receive(:delete_record)
|
161
|
-
helper.should_receive(:update_record).with(:left, :right_record)
|
161
|
+
helper.should_receive(:update_record).with(:left, 'scanner_records', :right_record)
|
162
162
|
helper.should_not_receive(:insert_record)
|
163
163
|
syncer.sync_difference(:conflict, [:left_record, :right_record])
|
164
164
|
|
165
165
|
helper = SyncHelper.new(sync)
|
166
166
|
helper.stub!(:sync_options).and_return({:direction => :right, :update => true})
|
167
167
|
syncer = Syncers::OneWaySyncer.new(helper)
|
168
|
-
helper.should_receive(:update_record).with(:right, :left_record)
|
168
|
+
helper.should_receive(:update_record).with(:right, 'scanner_records', :left_record)
|
169
169
|
syncer.sync_difference(:conflict, [:left_record, :right_record])
|
170
170
|
end
|
171
171
|
end
|
data/spec/table_sync_spec.rb
CHANGED
@@ -22,7 +22,7 @@ describe TableSync do
|
|
22
22
|
sync.execute_sync_hook(:before_table_sync)
|
23
23
|
end
|
24
24
|
|
25
|
-
it "
|
25
|
+
it "execute_sync_hook should execute the given SQL command" do
|
26
26
|
config = deep_copy(standard_config)
|
27
27
|
config.add_table_options 'scanner_records', :before_table_sync => 'dummy_command'
|
28
28
|
session = Session.new config
|
@@ -34,7 +34,7 @@ describe TableSync do
|
|
34
34
|
sync.execute_sync_hook(:before_table_sync)
|
35
35
|
end
|
36
36
|
|
37
|
-
it "
|
37
|
+
it "execute_sync_hook should execute the given Proc" do
|
38
38
|
config = deep_copy(standard_config)
|
39
39
|
received_handler = nil
|
40
40
|
config.add_table_options 'scanner_records',
|
@@ -48,6 +48,52 @@ describe TableSync do
|
|
48
48
|
received_handler.should == :dummy_helper
|
49
49
|
end
|
50
50
|
|
51
|
+
it "event_filtered? should return false if there is no event filter" do
|
52
|
+
session = Session.new standard_config
|
53
|
+
sync = TableSync.new(session, 'scanner_records')
|
54
|
+
|
55
|
+
sync.event_filtered?(:left, 'id' => 1).should be_false
|
56
|
+
end
|
57
|
+
|
58
|
+
it "event_filtered? should return false if event filter does not filter sync events" do
|
59
|
+
config = deep_copy(standard_config)
|
60
|
+
config.add_table_options 'scanner_records', :event_filter => Object.new
|
61
|
+
session = Session.new config
|
62
|
+
sync = TableSync.new(session, 'scanner_records')
|
63
|
+
|
64
|
+
sync.event_filtered?(:left, 'id' => 1).should be_false
|
65
|
+
end
|
66
|
+
|
67
|
+
it "event_filtered? should signal filtering (i. e. return true) if the event filter result is false" do
|
68
|
+
filter = Object.new
|
69
|
+
def filter.before_sync(table, key, helper, type, row)
|
70
|
+
false
|
71
|
+
end
|
72
|
+
config = deep_copy(standard_config)
|
73
|
+
config.add_table_options 'scanner_records', :event_filter => filter
|
74
|
+
session = Session.new config
|
75
|
+
sync = TableSync.new(session, 'scanner_records')
|
76
|
+
sync.helper = SyncHelper.new(sync)
|
77
|
+
sync.event_filtered?(:left, 'id' => 1).should be_true
|
78
|
+
end
|
79
|
+
|
80
|
+
it "event_filtered? should return false if the event filter result is true" do
|
81
|
+
filter = {}
|
82
|
+
def filter.before_sync(table, key, helper, type, row)
|
83
|
+
self[:args] = [table, key, helper, type, row]
|
84
|
+
true
|
85
|
+
end
|
86
|
+
config = deep_copy(standard_config)
|
87
|
+
config.add_table_options 'scanner_records', :event_filter => filter
|
88
|
+
session = Session.new config
|
89
|
+
sync = TableSync.new(session, 'scanner_records')
|
90
|
+
sync.helper = SyncHelper.new(sync)
|
91
|
+
sync.event_filtered?(:left, 'id' => 1, 'name' => 'bla').should be_false
|
92
|
+
|
93
|
+
# verify correct parameter assignment
|
94
|
+
filter[:args].should == ['scanner_records', {'id' => 1}, sync.helper, :left, {'id' => 1, 'name' => 'bla'}]
|
95
|
+
end
|
96
|
+
|
51
97
|
it "run should synchronize the databases" do
|
52
98
|
config = deep_copy(standard_config)
|
53
99
|
config.options[:committer] = :never_commit
|
@@ -56,6 +102,12 @@ describe TableSync do
|
|
56
102
|
after_hook_called = false
|
57
103
|
config.options[:before_table_sync] = lambda {|helper| before_hook_called = true}
|
58
104
|
config.options[:after_table_sync] = lambda { |helper| after_hook_called = true}
|
105
|
+
|
106
|
+
filter = Object.new
|
107
|
+
def filter.before_sync(table, key, helper, type, row)
|
108
|
+
key['id'] != 6
|
109
|
+
end
|
110
|
+
config.options[:event_filter] = filter
|
59
111
|
session = Session.new(config)
|
60
112
|
begin
|
61
113
|
sync = TableSync.new(session, 'scanner_records')
|
@@ -68,10 +120,14 @@ describe TableSync do
|
|
68
120
|
row['description'].should == 'left_wins'
|
69
121
|
|
70
122
|
# verify that the table was synchronized
|
71
|
-
left_records = session.left.select_all("select * from scanner_records order by id")
|
72
|
-
right_records = session.right.select_all("select * from scanner_records order by id")
|
123
|
+
left_records = session.left.select_all("select * from scanner_records where id <> 6 order by id")
|
124
|
+
right_records = session.right.select_all("select * from scanner_records where id <> 6 order by id")
|
73
125
|
left_records.should == right_records
|
74
126
|
|
127
|
+
# verify that the filtered out record was not synced
|
128
|
+
session.left.select_one("select * from scanner_records where id = 6").
|
129
|
+
should be_nil
|
130
|
+
|
75
131
|
# verify that hooks where called
|
76
132
|
before_hook_called.should be_true
|
77
133
|
after_hook_called.should be_true
|
@@ -68,26 +68,6 @@ describe Replicators::TwoWayReplicator do
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
it "options_for_table should return the correct options for the table" do
|
72
|
-
Initializer.configuration.options = {:a => 1, :b => 2}
|
73
|
-
Initializer.configuration.add_table_options 'scanner_records', {:b => 3}
|
74
|
-
rep_run = ReplicationRun.new(Session.new, TaskSweeper.new(1))
|
75
|
-
helper = ReplicationHelper.new(rep_run)
|
76
|
-
replicator = Replicators::TwoWayReplicator.new(helper)
|
77
|
-
options = replicator.options_for_table('scanner_records')
|
78
|
-
options[:a].should == 1
|
79
|
-
options[:b].should == 3
|
80
|
-
end
|
81
|
-
|
82
|
-
it "options_for_table should merge the configured options into the default two way replicator options" do
|
83
|
-
rep_run = ReplicationRun.new(Session.new, TaskSweeper.new(1))
|
84
|
-
helper = ReplicationHelper.new(rep_run)
|
85
|
-
replicator = Replicators::TwoWayReplicator.new(helper)
|
86
|
-
replicator.options_for_table('scanner_records').include?(:left_change_handling).should be_true
|
87
|
-
replicator.options_for_table('scanner_records').include?(:right_change_handling).should be_true
|
88
|
-
replicator.options_for_table('scanner_records').include?(:replication_conflict_handling).should be_true
|
89
|
-
end
|
90
|
-
|
91
71
|
it "clear_conflicts should update the correct database with the correct action" do
|
92
72
|
Initializer.configuration.include_tables 'left_table, right_table'
|
93
73
|
session = Session.new
|
@@ -165,23 +145,23 @@ describe Replicators::TwoWayReplicator do
|
|
165
145
|
helper = ReplicationHelper.new(rep_run)
|
166
146
|
replicator = Replicators::TwoWayReplicator.new(helper)
|
167
147
|
helper.should_not_receive(:log_replication_outcome)
|
168
|
-
|
148
|
+
helper.stub!(:options_for_table).and_return({:logged_replication_events => []})
|
169
149
|
replicator.log_replication_outcome :ignore, diff
|
170
|
-
|
150
|
+
helper.stub!(:options_for_table).and_return({:logged_replication_events => [:ignored_conflicts]})
|
171
151
|
replicator.log_replication_outcome :left, diff
|
172
152
|
|
173
153
|
# should log ignored conflicts correctly
|
174
154
|
helper = ReplicationHelper.new(rep_run)
|
175
155
|
replicator = Replicators::TwoWayReplicator.new(helper)
|
176
156
|
helper.should_receive(:log_replication_outcome).with(diff, 'ignored')
|
177
|
-
|
157
|
+
helper.stub!(:options_for_table).and_return({:logged_replication_events => [:ignored_conflicts]})
|
178
158
|
replicator.log_replication_outcome :ignore, diff
|
179
159
|
|
180
160
|
# should log conflicts correctly
|
181
161
|
helper = ReplicationHelper.new(rep_run)
|
182
162
|
replicator = Replicators::TwoWayReplicator.new(helper)
|
183
163
|
helper.should_receive(:log_replication_outcome).with(diff, 'left_won')
|
184
|
-
|
164
|
+
helper.stub!(:options_for_table).and_return({:logged_replication_events => [:all_conflicts]})
|
185
165
|
replicator.log_replication_outcome :left, diff
|
186
166
|
end
|
187
167
|
|
@@ -200,23 +180,23 @@ describe Replicators::TwoWayReplicator do
|
|
200
180
|
helper = ReplicationHelper.new(rep_run)
|
201
181
|
replicator = Replicators::TwoWayReplicator.new(helper)
|
202
182
|
helper.should_not_receive(:log_replication_outcome)
|
203
|
-
|
183
|
+
helper.stub!(:options_for_table).and_return({:logged_replication_events => []})
|
204
184
|
replicator.log_replication_outcome :ignore, diff
|
205
|
-
|
185
|
+
helper.stub!(:options_for_table).and_return({:logged_replication_events => [:ignored_changes]})
|
206
186
|
replicator.log_replication_outcome :left, diff
|
207
187
|
|
208
188
|
# should log changes correctly
|
209
189
|
helper = ReplicationHelper.new(rep_run)
|
210
190
|
replicator = Replicators::TwoWayReplicator.new(helper)
|
211
191
|
helper.should_receive(:log_replication_outcome).with(diff, 'replicated')
|
212
|
-
|
192
|
+
helper.stub!(:options_for_table).and_return({:logged_replication_events => [:all_changes]})
|
213
193
|
replicator.log_replication_outcome :right, diff
|
214
194
|
|
215
195
|
# should log changes correctly
|
216
196
|
helper = ReplicationHelper.new(rep_run)
|
217
197
|
replicator = Replicators::TwoWayReplicator.new(helper)
|
218
198
|
helper.should_receive(:log_replication_outcome).with(diff, 'ignored')
|
219
|
-
|
199
|
+
helper.stub!(:options_for_table).and_return({:logged_replication_events => [:ignored_changes]})
|
220
200
|
replicator.log_replication_outcome :ignore, diff
|
221
201
|
end
|
222
202
|
|
@@ -225,7 +205,7 @@ describe Replicators::TwoWayReplicator do
|
|
225
205
|
rep_run = ReplicationRun.new(session, TaskSweeper.new(1))
|
226
206
|
helper = ReplicationHelper.new(rep_run)
|
227
207
|
replicator = Replicators::TwoWayReplicator.new(helper)
|
228
|
-
|
208
|
+
helper.stub!(:options_for_table).and_return(
|
229
209
|
{
|
230
210
|
:left_change_handling => :ignore,
|
231
211
|
:right_change_handling => :ignore,
|
@@ -267,7 +247,7 @@ describe Replicators::TwoWayReplicator do
|
|
267
247
|
lambda_parameters << [rep_helper, diff]
|
268
248
|
end
|
269
249
|
replicator = Replicators::TwoWayReplicator.new(helper)
|
270
|
-
|
250
|
+
helper.stub!(:options_for_table).and_return(
|
271
251
|
{
|
272
252
|
:left_change_handling => l,
|
273
253
|
:right_change_handling => l,
|
@@ -317,17 +297,17 @@ describe Replicators::TwoWayReplicator do
|
|
317
297
|
diff.changes[:right] = right_change
|
318
298
|
|
319
299
|
replicator = Replicators::TwoWayReplicator.new(helper)
|
320
|
-
|
300
|
+
helper.stub!(:options_for_table).and_return({:replication_conflict_handling => :left_wins})
|
321
301
|
replicator.should_receive(:clear_conflict).with(:left, diff, 1)
|
322
302
|
replicator.replicate_difference diff, 1
|
323
303
|
|
324
304
|
replicator = Replicators::TwoWayReplicator.new(helper)
|
325
|
-
|
305
|
+
helper.stub!(:options_for_table).and_return({:replication_conflict_handling => :right_wins})
|
326
306
|
replicator.should_receive(:clear_conflict).with(:right, diff, 1)
|
327
307
|
replicator.replicate_difference diff, 1
|
328
308
|
|
329
309
|
replicator = Replicators::TwoWayReplicator.new(helper)
|
330
|
-
|
310
|
+
helper.stub!(:options_for_table).and_return({:replication_conflict_handling => :later_wins})
|
331
311
|
replicator.should_receive(:clear_conflict).with(:left, diff, 1).twice
|
332
312
|
left_change.last_changed_at = 5.seconds.from_now
|
333
313
|
right_change.last_changed_at = Time.now
|
@@ -339,7 +319,7 @@ describe Replicators::TwoWayReplicator do
|
|
339
319
|
replicator.replicate_difference diff, 1
|
340
320
|
|
341
321
|
replicator = Replicators::TwoWayReplicator.new(helper)
|
342
|
-
|
322
|
+
helper.stub!(:options_for_table).and_return({:replication_conflict_handling => :earlier_wins})
|
343
323
|
replicator.should_receive(:clear_conflict).with(:left, diff, 1).twice
|
344
324
|
left_change.last_changed_at = 5.seconds.ago
|
345
325
|
right_change.last_changed_at = Time.now
|
@@ -449,8 +429,8 @@ describe Replicators::TwoWayReplicator do
|
|
449
429
|
}
|
450
430
|
replicator.replicate_difference diff, 2
|
451
431
|
|
452
|
-
session.left.
|
453
|
-
'id' =>
|
432
|
+
session.left.select_record(:table => "extender_no_record").should == {
|
433
|
+
'id' => 1,
|
454
434
|
'name' => 'blub'
|
455
435
|
}
|
456
436
|
ensure
|
@@ -725,8 +705,8 @@ describe Replicators::TwoWayReplicator do
|
|
725
705
|
}
|
726
706
|
replicator.replicate_difference diff, 2
|
727
707
|
|
728
|
-
session.right.
|
729
|
-
'id' =>
|
708
|
+
session.right.select_record(:table => "extender_no_record").should == {
|
709
|
+
'id' => 2,
|
730
710
|
'name' => 'bla'
|
731
711
|
}
|
732
712
|
ensure
|
data/spec/two_way_syncer_spec.rb
CHANGED
@@ -198,8 +198,8 @@ describe Syncers::TwoWaySyncer do
|
|
198
198
|
})
|
199
199
|
|
200
200
|
syncer = Syncers::TwoWaySyncer.new(helper)
|
201
|
-
helper.should_receive(:delete_record).with(:left, :dummy_left)
|
202
|
-
helper.should_receive(:delete_record).with(:right, :dummy_right)
|
201
|
+
helper.should_receive(:delete_record).with(:left, 'scanner_records', :dummy_left)
|
202
|
+
helper.should_receive(:delete_record).with(:right, 'scanner_records', :dummy_right)
|
203
203
|
syncer.sync_difference(:left, :dummy_left)
|
204
204
|
syncer.sync_difference(:right, :dummy_right)
|
205
205
|
end
|
@@ -216,8 +216,8 @@ describe Syncers::TwoWaySyncer do
|
|
216
216
|
})
|
217
217
|
|
218
218
|
syncer = Syncers::TwoWaySyncer.new(helper)
|
219
|
-
helper.should_receive(:insert_record).with(:right, :dummy_left)
|
220
|
-
helper.should_receive(:insert_record).with(:left, :dummy_right)
|
219
|
+
helper.should_receive(:insert_record).with(:right, 'scanner_records', :dummy_left)
|
220
|
+
helper.should_receive(:insert_record).with(:left, 'scanner_records', :dummy_right)
|
221
221
|
syncer.sync_difference(:left, :dummy_left)
|
222
222
|
syncer.sync_difference(:right, :dummy_right)
|
223
223
|
end
|
@@ -234,7 +234,7 @@ describe Syncers::TwoWaySyncer do
|
|
234
234
|
})
|
235
235
|
|
236
236
|
syncer = Syncers::TwoWaySyncer.new(helper)
|
237
|
-
helper.should_receive(:update_record).with(:left, :dummy_right)
|
237
|
+
helper.should_receive(:update_record).with(:left, 'scanner_records', :dummy_right)
|
238
238
|
syncer.sync_difference(:conflict, [:dummy_left, :dummy_right])
|
239
239
|
end
|
240
240
|
|
@@ -250,7 +250,7 @@ describe Syncers::TwoWaySyncer do
|
|
250
250
|
})
|
251
251
|
|
252
252
|
syncer = Syncers::TwoWaySyncer.new(helper)
|
253
|
-
helper.should_receive(:update_record).with(:right, :dummy_left)
|
253
|
+
helper.should_receive(:update_record).with(:right, 'scanner_records', :dummy_left)
|
254
254
|
syncer.sync_difference(:conflict, [:dummy_left, :dummy_right])
|
255
255
|
end
|
256
256
|
end
|
@@ -16,9 +16,10 @@ describe TypeCastingCursor do
|
|
16
16
|
|
17
17
|
it "next_row should delegate next? and clear to the original cursor" do
|
18
18
|
session = Session.new
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
cursor = session.left.select_cursor(
|
20
|
+
:query => "select id from extender_type_check where id = 1",
|
21
|
+
:table => "extender_type_check"
|
22
|
+
)
|
22
23
|
cursor.next?.should be_true
|
23
24
|
row = cursor.next_row
|
24
25
|
cursor.next?.should be_false
|
@@ -27,11 +28,11 @@ describe TypeCastingCursor do
|
|
27
28
|
|
28
29
|
it "next_row should cast rows - including uncommon data types - correctly" do
|
29
30
|
session = Session.new
|
30
|
-
|
31
|
-
|
31
|
+
row = session.left.select_record(
|
32
|
+
:query => "select id, decimal_test, timestamp, binary_test from extender_type_check where id = 1",
|
33
|
+
:table => "extender_type_check"
|
34
|
+
)
|
32
35
|
|
33
|
-
row = cursor.next_row
|
34
|
-
|
35
36
|
# verify that the row fields have been converted to the correct types
|
36
37
|
row['id'].should be_an_instance_of(Fixnum)
|
37
38
|
row['timestamp'].should be_an_instance_of(Time)
|
@@ -45,6 +46,5 @@ describe TypeCastingCursor do
|
|
45
46
|
'timestamp' => Time.local(2007,"nov",10,20,15,1),
|
46
47
|
'binary_test' => Marshal.dump(['bla',:dummy,1,2,3])
|
47
48
|
}
|
48
|
-
cursor.clear
|
49
49
|
end
|
50
50
|
end
|
data/tasks/database.rake
CHANGED
@@ -257,6 +257,12 @@ def create_sample_schema(database, config)
|
|
257
257
|
t.column :name, :string
|
258
258
|
end
|
259
259
|
|
260
|
+
connection = ActiveRecord::Base.connection
|
261
|
+
# Neccessary to create tables with dots in ActiveRecord 2.3.5
|
262
|
+
def connection.extract_pg_identifier_from_name(name)
|
263
|
+
return name, nil
|
264
|
+
end
|
265
|
+
|
260
266
|
create_table STRANGE_TABLE do |t|
|
261
267
|
t.column :first_fk, :integer
|
262
268
|
t.column :second_fk, :integer
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubyrep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arndt Lehmann
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-14 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 2.
|
23
|
+
version: 2.3.5
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activerecord
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.
|
33
|
+
version: 2.3.5
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: hoe
|