Sha256: 1b355254f91696797f922b4c307c8be84f42979deb6107507ed04e87a1d40a17
Contents?: true
Size: 1.6 KB
Versions: 1
Compression:
Stored size: 1.6 KB
Contents
require 'date' module ActiveRegulation module Expiration extend ActiveSupport::Concern include ActiveRegulation::Base included do attr_accessor :expiration, :raw_expiration before_save :record_expiration!, unless: -> (obj) { obj.raw_expiration.nil? } after_initialize :set_expiration! scope :expired, -> { where("expires_at IS NULL OR expires_at < ?", Time.now) } scope :unexpired, -> { where("expires_at IS NOT NULL AND expires_at >= ?", Time.now) } end def expire! update(expires_at: nil) unless expires_at.nil? end def extend!(amount=nil) update(expires_at: (amount.nil? ? extension_date : amount)) end def unexpire! update(expires_at: extension_date) if expires_at.nil? end def expired? expires_at.nil? ? true : (Time.now >= expires_at) end def unexpired? expires_at.nil? ? false : (Time.now < expires_at) end def to_expiration I18n.t("active_regulation.expiration.#{expired? ? :expired : :unexpired}") end private def extension_date(days=30) DateTime.now + days end def record_expiration! false_value = FALSE_VALUES.include?(expiration) true_value = TRUE_VALUES.include?(expiration) if false_value || true_value self.expires_at = (false_value ? extension_date : nil) else raise ArgumentError, "Unknown boolean: #{expiration.inspect}. Must be a valid boolean." end end def set_expiration! self.raw_expiration = expiration self.expiration = expired? if expiration.nil? end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
active_regulation-2.2.4 | lib/active_regulation/expiration.rb |