Module: ActsAsBoolean::Extension

Defined in:
lib/acts_as_boolean.rb

Instance Method Summary collapse

Instance Method Details

#acts_as_boolean(column_name, options = {}) ⇒ Object



8
9
10
11
12
13
14
# 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) ⇒ Object



16
17
18
19
20
21
22
# 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) ⇒ Object



34
35
36
# 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) ⇒ Object



24
25
26
27
28
29
30
31
32
# 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