blob: d69e5b3f2884daca1f60d2deb47b3571a639123a (
plain) (
tree)
|
|
module ActiveRecord
module Type
class Integer < Value # :nodoc:
include Numeric
def initialize(*)
super
@range = -max_value...max_value
end
def type
:integer
end
alias type_cast_for_database type_cast
protected
attr_reader :range
private
def cast_value(value)
case value
when true then 1
when false then 0
else
result = value.to_i rescue nil
ensure_in_range(result) if result
result
end
end
def ensure_in_range(value)
unless range.cover?(value)
raise RangeError, "#{value} is too large for #{self.class} with limit #{limit || 4}"
end
end
def max_value
limit = self.limit || 4
1 << (limit * 8 - 1) # 8 bits per byte with one bit for sign
end
end
end
end
|