class ActiveRecord::ConnectionAdapters::RedshiftAdapter::OID::Range
Attributes
subtype[R]
Public Class Methods
new(subtype)
click to toggle source
# File lib/active_record/connection_adapters/redshift/oid.rb, line 104 def initialize(subtype) @subtype = subtype end
Public Instance Methods
extract_bounds(value)
click to toggle source
# File lib/active_record/connection_adapters/redshift/oid.rb, line 108 def extract_bounds(value) from, to = value[1..-2].split(',') { from: (value[1] == ',' || from == '-infinity') ? infinity(:negative => true) : from, to: (value[-2] == ',' || to == 'infinity') ? infinity : to, exclude_start: (value[0] == '('), exclude_end: (value[-1] == ')') } end
infinity(options = {})
click to toggle source
# File lib/active_record/connection_adapters/redshift/oid.rb, line 118 def infinity(options = {}) ::Float::INFINITY * (options[:negative] ? -1 : 1) end
infinity?(value)
click to toggle source
# File lib/active_record/connection_adapters/redshift/oid.rb, line 122 def infinity?(value) value.respond_to?(:infinite?) && value.infinite? end
to_integer(value)
click to toggle source
# File lib/active_record/connection_adapters/redshift/oid.rb, line 126 def to_integer(value) infinity?(value) ? value : value.to_i end
type_cast(value)
click to toggle source
# File lib/active_record/connection_adapters/redshift/oid.rb, line 130 def type_cast(value) return if value.nil? || value == 'empty' return value if value.is_a?(::Range) extracted = extract_bounds(value) case @subtype when :date from = ConnectionAdapters::Column.value_to_date(extracted[:from]) from -= 1.day if extracted[:exclude_start] to = ConnectionAdapters::Column.value_to_date(extracted[:to]) when :decimal from = BigDecimal.new(extracted[:from].to_s) # FIXME: add exclude start for ::Range, same for timestamp ranges to = BigDecimal.new(extracted[:to].to_s) when :time from = ConnectionAdapters::Column.string_to_time(extracted[:from]) to = ConnectionAdapters::Column.string_to_time(extracted[:to]) when :integer from = to_integer(extracted[:from]) rescue value ? 1 : 0 from -= 1 if extracted[:exclude_start] to = to_integer(extracted[:to]) rescue value ? 1 : 0 else return value end ::Range.new(from, to, extracted[:exclude_end]) end