a005391724
- Update `Card::Closeable` to destroy associated "not now" state during close. - Add new tests to verify closure behavior for different column types, including "not now".
50 lines
1004 B
Ruby
50 lines
1004 B
Ruby
module Card::Closeable
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
has_one :closure, dependent: :destroy
|
|
|
|
scope :closed, -> { joins(:closure) }
|
|
scope :open, -> { where.missing(:closure) }
|
|
|
|
scope :recently_closed_first, -> { closed.order(closures: { created_at: :desc }) }
|
|
scope :closed_at_window, ->(window) { closed.where(closures: { created_at: window }) }
|
|
scope :closed_by, ->(users) { closed.where(closures: { user_id: Array(users) }) }
|
|
end
|
|
|
|
def closed?
|
|
closure.present?
|
|
end
|
|
|
|
def open?
|
|
!closed?
|
|
end
|
|
|
|
def closed_by
|
|
closure&.user
|
|
end
|
|
|
|
def closed_at
|
|
closure&.created_at
|
|
end
|
|
|
|
def close(user: Current.user)
|
|
unless closed?
|
|
transaction do
|
|
not_now&.destroy
|
|
create_closure! user: user
|
|
track_event :closed, creator: user
|
|
end
|
|
end
|
|
end
|
|
|
|
def reopen(user: Current.user)
|
|
if closed?
|
|
transaction do
|
|
closure&.destroy
|
|
track_event :reopened, creator: user
|
|
end
|
|
end
|
|
end
|
|
end
|