2016-02-03 20:10:03 +00:00
|
|
|
module DB
|
|
|
|
# Generic module to encapsulate disposable db resources.
|
|
|
|
module Disposable
|
|
|
|
macro included
|
|
|
|
@closed = false
|
|
|
|
end
|
|
|
|
|
|
|
|
# Closes this object.
|
|
|
|
def close
|
|
|
|
return if @closed
|
|
|
|
do_close
|
2016-06-24 13:54:30 +00:00
|
|
|
@closed = true
|
2016-02-03 20:10:03 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
# Returns `true` if this object is closed. See `#close`.
|
|
|
|
def closed?
|
|
|
|
@closed
|
|
|
|
end
|
|
|
|
|
|
|
|
# Implementors overrides this method to perform resource cleanup
|
2016-06-24 13:54:30 +00:00
|
|
|
# If an exception is raised, the resource will not be marked as closed.
|
2016-02-03 20:10:03 +00:00
|
|
|
protected abstract def do_close
|
|
|
|
end
|
|
|
|
end
|