lib/active_regulation/containment.rb in active_regulation-2.2.2 vs lib/active_regulation/containment.rb in active_regulation-2.2.3
- old
+ new
@@ -1,18 +1,15 @@
module ActiveRegulation
module Containment
extend ActiveSupport::Concern
included do
- attr_accessor :containment
+ attr_accessor :containment, :raw_containment
- validates :containment, inclusion: { in: 0..1 },
- allow_blank: true,
- allow_nil: true
+ before_save :record_containment!, unless: -> (obj) { obj.raw_containment.nil? }
+ after_initialize :set_containment!
- before_save :record_containment!
-
scope :contained, -> { where.not(contained_at: nil) }
scope :uncontained, -> { where(contained_at: nil) }
end
def contain!
@@ -36,10 +33,23 @@
end
private
def record_containment!
- self.contained_at = (containment.zero? ? nil : Time.now) unless containment.blank?
+ false_value = ActiveRecord::ConnectionAdapters::Column::FALSE_VALUES.include?(containment)
+ true_value = ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES.include?(containment)
+
+ if false_value || true_value
+ self.contained_at = (false_value ? nil : Time.now)
+ else
+ raise ArgumentError,
+ "Unknown boolean: #{containment.inspect}. Must be a valid boolean."
+ end
+ end
+
+ def set_containment!
+ self.raw_containment = containment
+ self.containment = contained? if containment.nil?
end
end
end
\ No newline at end of file