Class: ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID::Range
- Defined in:
- activerecord/lib/active_record/connection_adapters/postgresql/oid.rb
Instance Attribute Summary collapse
-
#subtype ⇒ Object
readonly
Returns the value of attribute subtype.
Instance Method Summary collapse
- #extract_bounds(value) ⇒ Object
- #infinity(options = {}) ⇒ Object
- #infinity?(value) ⇒ Boolean
-
#initialize(subtype) ⇒ Range
constructor
A new instance of Range.
- #to_integer(value) ⇒ Object
- #type_cast(value) ⇒ Object
Methods inherited from Type
Constructor Details
#initialize(subtype) ⇒ Range
Returns a new instance of Range.
105 106 107 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid.rb', line 105 def initialize(subtype) @subtype = subtype end |
Instance Attribute Details
#subtype ⇒ Object (readonly)
Returns the value of attribute subtype
104 105 106 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid.rb', line 104 def subtype @subtype end |
Instance Method Details
#extract_bounds(value) ⇒ Object
109 110 111 112 113 114 115 116 117 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid.rb', line 109 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 = {}) ⇒ Object
119 120 121 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid.rb', line 119 def infinity( = {}) ::Float::INFINITY * ([:negative] ? -1 : 1) end |
#infinity?(value) ⇒ Boolean
123 124 125 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid.rb', line 123 def infinity?(value) value.respond_to?(:infinite?) && value.infinite? end |
#to_integer(value) ⇒ Object
127 128 129 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid.rb', line 127 def to_integer(value) infinity?(value) ? value : value.to_i end |
#type_cast(value) ⇒ Object
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 158 |
# File 'activerecord/lib/active_record/connection_adapters/postgresql/oid.rb', line 131 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 |