Skip to content

Commit da2342c

Browse files
authored
Merge pull request #118 from wata727/assign_updated_bitemporal_times
Assign updated bitemporal times to the receiver after update/destroy
2 parents 1aae1f5 + 215217c commit da2342c

File tree

3 files changed

+24
-15
lines changed

3 files changed

+24
-15
lines changed

lib/activerecord-bitemporal/bitemporal.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,8 @@ def _update_row(attribute_names, attempted_action = 'update')
326326
@_swapped_id = after_instance.swapped_id
327327
self.valid_from = after_instance.valid_from
328328
self.valid_to = after_instance.valid_to
329+
self.transaction_from = after_instance.transaction_from
330+
self.transaction_to = after_instance.transaction_to
329331

330332
1
331333
# MEMO: Must return false instead of nil, if `#_update_row` failure.
@@ -352,6 +354,10 @@ def destroy(force_delete: false)
352354
if @destroyed
353355
@_swapped_id_previously_was = swapped_id
354356
@_swapped_id = duplicated_instance.swapped_id
357+
self.valid_from = duplicated_instance.valid_from
358+
self.valid_to = duplicated_instance.valid_to
359+
self.transaction_from = duplicated_instance.transaction_from
360+
self.transaction_to = duplicated_instance.transaction_to
355361
end
356362
}
357363
raise ActiveRecord::RecordInvalid unless @destroyed

spec/activerecord-bitemporal/bitemporal_spec.rb

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,15 +1040,15 @@ class EmployeeWithUniquness < Employee
10401040
@swapped_id_before_destroy = employee.swapped_id
10411041
end
10421042

1043-
it { is_expected.not_to change(employee, :valid_to) }
10441043
it { is_expected.to change(Employee, :call_before_destroy_count).by(1) }
10451044
it { is_expected.to change(Employee, :call_after_destroy_count).by(1) }
10461045
it { is_expected.to change(Employee, :call_after_save_count) }
10471046
it { is_expected.to change(Employee, :count).by(-1) }
10481047
it { is_expected.to change(employee, :destroyed?).from(false).to(true) }
10491048
it { is_expected.not_to change(employee, :valid_from) }
1050-
it { is_expected.not_to change(employee, :valid_to) }
1051-
it { is_expected.to change(employee, :transaction_to).from(ActiveRecord::Bitemporal::DEFAULT_TRANSACTION_TO).to(destroyed_time) }
1049+
it { is_expected.to change(employee, :valid_to).from(ActiveRecord::Bitemporal::DEFAULT_VALID_TO).to(destroyed_time) }
1050+
it { is_expected.to change(employee, :transaction_from).from(updated_time).to(destroyed_time) }
1051+
it { is_expected.not_to change(employee, :transaction_to) }
10521052
it { is_expected.to change { Employee.ignore_valid_datetime.within_deleted.count }.by(1) }
10531053
it { is_expected.to change(employee, :swapped_id).from(@swapped_id_before_destroy).to(kind_of(Integer)) }
10541054
it { is_expected.to change(employee, :swapped_id_previously_was).from(kind_of(Integer)).to(@swapped_id_before_destroy) }
@@ -1174,7 +1174,7 @@ class EmployeeWithUniquness < Employee
11741174
employee.define_singleton_method(:on_after_destroy){
11751175
valid_to = self.valid_to
11761176
# After update valid_to
1177-
self_.instance_exec { expect(valid_to).to eq before_time }
1177+
self_.instance_exec { expect(valid_to).to eq destroyed_time }
11781178
}
11791179
subject.call
11801180
end
@@ -1190,8 +1190,11 @@ class EmployeeWithUniquness < Employee
11901190
end
11911191

11921192
context "with `#valid_at`" do
1193-
subject { -> { Timecop.freeze(destroyed_time) { employee.valid_at(destroyed_time + 1.days, &:destroy) } } }
1194-
it { is_expected.to change(employee, :transaction_to).from(ActiveRecord::Bitemporal::DEFAULT_TRANSACTION_TO).to(destroyed_time) }
1193+
subject { -> { Timecop.freeze(destroyed_time) { employee.valid_at(destroyed_time + 1.day, &:destroy) } } }
1194+
it { is_expected.not_to change(employee, :valid_from) }
1195+
it { is_expected.to change(employee, :valid_to).from(ActiveRecord::Bitemporal::DEFAULT_VALID_TO).to(destroyed_time + 1.day) }
1196+
it { is_expected.to change(employee, :transaction_from).from(updated_time).to(destroyed_time) }
1197+
it { is_expected.not_to change(employee, :transaction_to) }
11951198
end
11961199
end
11971200

spec/activerecord-bitemporal/visualizer_spec.rb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -297,15 +297,15 @@
297297
| | 2022-06-23 18:06:06.712
298298
| | | 9999-12-31 00:00:00.000
299299
2022-05-23 18:06:06.712 +---------------------------------------+
300-
|***************************************|
301-
|***************************************|
302-
|***************************************|
303-
|***************************************|
304-
2022-06-23 18:06:06.712 +---------------------------------------+
305-
| |
306-
| |
307-
| |
308-
| |
300+
| |
301+
| |
302+
| |
303+
| |
304+
2022-06-23 18:06:06.712 +-------------------+-------------------+
305+
|*******************|
306+
|*******************|
307+
|*******************|
308+
|*******************|
309309
9999-12-31 00:00:00.000 +-------------------+
310310
EOS
311311
end

0 commit comments

Comments
 (0)