acurley
7/8/2013 - 1:40 AM

string_boolean.rb

# However there is also better practice to do it by using 

ActiveRecord::ConnectionAdapters::Column.value_to_boolean( something )

2.0.0dev :019 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('1')
 => true 
2.0.0dev :020 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('0')
 => false 
2.0.0dev :021 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('true')
 => true 
2.0.0dev :022 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('false')
 => false 
2.0.0dev :023 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('nil')
 => false 
2.0.0dev :024 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('t')
 => true 
2.0.0dev :025 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('cat')
 => false 
2.0.0dev :026 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean(true)
 => true 
2.0.0dev :027 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean(false)

2.0.0dev :035 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean(1)
 => true 
2.0.0dev :036 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean(2)
 => false 
2.0.0dev :037 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean(0)
 => false 

module StringToBoolean
  def to_bool
    return true if self == true || self =~ (/^(true|t|yes|y|1)$/i)
    return false if self == false || self.blank? || self =~ (/^(false|f|no|n|0)$/i)
    raise ArgumentError.new("invalid value for Boolean: \"#{self}\"")
  end
end
class String; include StringToBoolean; end

module BooleanToBoolean
  def to_bool;return self; end
end

class TrueClass; include BooleanToBoolean; end
class FalseClass; include BooleanToBoolean; end