class Temporality::AutoClose
Public Instance Methods
call()
click to toggle source
# File lib/temporality/auto_close.rb, line 6 def call prev = nil if @model.id prev = inverse.order('starts_on ASC').where('id <> ?', @model.id).last else prev = inverse.order('starts_on ASC').last end if prev if prev.starts_on >= @model.starts_on raise Temporality::AutoCloseError.new("Can't auto-close a previous sibling with a fully overlapping record") end if prev.ends_on != Temporality::FUTURE_INFINITY raise Temporality::AutoCloseError.new("Can't auto-close previous record if it's end date is finite") end end if prev if Temporality.active_transaction? prev.ends_on = @model.starts_on - 1 prev.save else raise Temporality::NoTransactionError.new("Auto-closing previous records requires a Temporality transaction") end end end