module ActsAsBoolean::Extension

Public Instance Methods

acts_as_boolean(column_name, options = {}) click to toggle source
# File lib/acts_as_boolean.rb, line 8
def acts_as_boolean(column_name, options = {})
  options[:as] ||= ActsAsBoolean.normalize_column.call(column_name)
  options[:time] ||= ActsAsBoolean.timeish
  define_booleany_reader(column_name, options[:as], options[:time]) unless options[:reader]
  define_booleany_writer(column_name, options[:as], options[:time]) unless options[:writer]
  define_booleany_scope(column_name, options[:as], options[:time]) unless options[:scope]
end
define_booleany_reader(original_column, booleany_column, time) click to toggle source
# File lib/acts_as_boolean.rb, line 16
def define_booleany_reader(original_column, booleany_column, time)
  define_method("#{booleany_column}") do
    return false if send(original_column).nil?
    send(original_column) <= time.call
  end
  alias_method "#{booleany_column}?", booleany_column
end
define_booleany_scope(original_column, booleany_column, time) click to toggle source
# File lib/acts_as_boolean.rb, line 34
def define_booleany_scope(original_column, booleany_column, time)
  scope booleany_column.to_sym, -> { where("#{original_column} <= ?", time.call).where.not(original_column.to_sym => nil) }
end
define_booleany_writer(original_column, booleany_column, time) click to toggle source
# File lib/acts_as_boolean.rb, line 24
def define_booleany_writer(original_column, booleany_column, time)
  define_method("#{booleany_column}=") do |value|
    if ActiveModel::Type::Boolean::FALSE_VALUES.exclude?(value)
      send("#{original_column}=", time.call)
    else
      send("#{original_column}=", nil)
    end
  end
end