Class: ActiveRecord::ConnectionAdapters::RedshiftAdapter::OID::Range
- Inherits:
-
Type
- Object
- Type
- ActiveRecord::ConnectionAdapters::RedshiftAdapter::OID::Range
show all
- Defined in:
- lib/active_record/connection_adapters/redshift/oid.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from Type
#type, #type_cast_for_write
Constructor Details
#initialize(subtype) ⇒ Range
Returns a new instance of Range.
104
105
106
|
# File 'lib/active_record/connection_adapters/redshift/oid.rb', line 104
def initialize(subtype)
@subtype = subtype
end
|
Instance Attribute Details
#subtype ⇒ Object
Returns the value of attribute subtype.
103
104
105
|
# File 'lib/active_record/connection_adapters/redshift/oid.rb', line 103
def subtype
@subtype
end
|
Instance Method Details
108
109
110
111
112
113
114
115
116
|
# File 'lib/active_record/connection_adapters/redshift/oid.rb', line 108
def (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 = {}) ⇒ Object
118
119
120
|
# File 'lib/active_record/connection_adapters/redshift/oid.rb', line 118
def infinity(options = {})
::Float::INFINITY * (options[:negative] ? -1 : 1)
end
|
#infinity?(value) ⇒ Boolean
122
123
124
|
# File 'lib/active_record/connection_adapters/redshift/oid.rb', line 122
def infinity?(value)
value.respond_to?(:infinite?) && value.infinite?
end
|
#to_integer(value) ⇒ Object
126
127
128
|
# 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) ⇒ Object
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
# 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)
= (value)
case @subtype
when :date
from = ConnectionAdapters::Column.value_to_date([:from])
from -= 1.day if [:exclude_start]
to = ConnectionAdapters::Column.value_to_date([:to])
when :decimal
from = BigDecimal.new([:from].to_s)
to = BigDecimal.new([:to].to_s)
when :time
from = ConnectionAdapters::Column.string_to_time([:from])
to = ConnectionAdapters::Column.string_to_time([:to])
when :integer
from = to_integer([:from]) rescue value ? 1 : 0
from -= 1 if [:exclude_start]
to = to_integer([:to]) rescue value ? 1 : 0
else
return value
end
::Range.new(from, to, [:exclude_end])
end
|