Module: ActiveRecord::ConnectionAdapters::PostgreSQLColumn::Cast
- Included in:
- ActiveRecord::ConnectionAdapters::PostgreSQLColumn
- Defined in:
- lib/active_record/connection_adapters/postgresql/cast.rb
Instance Method Summary collapse
- #array_to_string(value, column, adapter) ⇒ Object
- #cidr_to_string(object) ⇒ Object
- #hstore_to_string(object, array_member = false) ⇒ Object
- #json_to_string(object) ⇒ Object
- #point_to_string(point) ⇒ Object
- #range_to_string(object) ⇒ Object
- #string_to_array(string, oid) ⇒ Object
- #string_to_bit(value) ⇒ Object
- #string_to_cidr(string) ⇒ Object
- #string_to_hstore(string) ⇒ Object
- #string_to_json(string) ⇒ Object
- #string_to_point(string) ⇒ Object
- #string_to_time(string) ⇒ Object
Instance Method Details
#array_to_string(value, column, adapter) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/active_record/connection_adapters/postgresql/cast.rb', line 70 def array_to_string(value, column, adapter) casted_values = value.map do |val| if String === val if val == "NULL" "\"#{val}\"" else quote_and_escape(adapter.type_cast(val, column, true)) end else adapter.type_cast(val, column, true) end end "{#{casted_values.join(',')}}" end |
#cidr_to_string(object) ⇒ Object
113 114 115 116 117 118 119 |
# File 'lib/active_record/connection_adapters/postgresql/cast.rb', line 113 def cidr_to_string(object) if IPAddr === object "#{object.to_s}/#{object.instance_variable_get(:@mask_addr).to_s(2).count('1')}" else object end end |
#hstore_to_string(object, array_member = false) ⇒ Object
38 39 40 41 42 43 44 45 46 |
# File 'lib/active_record/connection_adapters/postgresql/cast.rb', line 38 def hstore_to_string(object, array_member = false) if Hash === object string = object.map { |k, v| "#{escape_hstore(k)}=>#{escape_hstore(v)}" }.join(',') string = escape_hstore(string) if array_member string else object end end |
#json_to_string(object) ⇒ Object
62 63 64 65 66 67 68 |
# File 'lib/active_record/connection_adapters/postgresql/cast.rb', line 62 def json_to_string(object) if Hash === object || Array === object ActiveSupport::JSON.encode(object) else object end end |
#point_to_string(point) ⇒ Object
5 6 7 |
# File 'lib/active_record/connection_adapters/postgresql/cast.rb', line 5 def point_to_string(point) "(#{point[0]},#{point[1]})" end |
#range_to_string(object) ⇒ Object
85 86 87 88 89 |
# File 'lib/active_record/connection_adapters/postgresql/cast.rb', line 85 def range_to_string(object) from = object.begin.respond_to?(:infinite?) && object.begin.infinite? ? '' : object.begin to = object.end.respond_to?(:infinite?) && object.end.infinite? ? '' : object.end "[#{from},#{to}#{object.exclude_end? ? ')' : ']'}" end |
#string_to_array(string, oid) ⇒ Object
121 122 123 |
# File 'lib/active_record/connection_adapters/postgresql/cast.rb', line 121 def string_to_array(string, oid) parse_pg_array(string).map {|val| type_cast_array(oid, val)} end |
#string_to_bit(value) ⇒ Object
29 30 31 32 33 34 35 36 |
# File 'lib/active_record/connection_adapters/postgresql/cast.rb', line 29 def string_to_bit(value) case value when /^0x/i value[2..-1].hex.to_s(2) # Hexadecimal notation else value # Bit-string notation end end |
#string_to_cidr(string) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/active_record/connection_adapters/postgresql/cast.rb', line 99 def string_to_cidr(string) if string.nil? nil elsif String === string begin IPAddr.new(string) rescue ArgumentError nil end else string end end |
#string_to_hstore(string) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/active_record/connection_adapters/postgresql/cast.rb', line 48 def string_to_hstore(string) if string.nil? nil elsif String === string Hash[string.scan(HstorePair).map { |k, v| v = v.upcase == 'NULL' ? nil : v.gsub(/\A"(.*)"\Z/m,'\1').gsub(/\\(.)/, '\1') k = k.gsub(/\A"(.*)"\Z/m,'\1').gsub(/\\(.)/, '\1') [k, v] }] else string end end |
#string_to_json(string) ⇒ Object
91 92 93 94 95 96 97 |
# File 'lib/active_record/connection_adapters/postgresql/cast.rb', line 91 def string_to_json(string) if String === string ActiveSupport::JSON.decode(string) else string end end |
#string_to_point(string) ⇒ Object
9 10 11 12 13 14 |
# File 'lib/active_record/connection_adapters/postgresql/cast.rb', line 9 def string_to_point(string) if string[0] == '(' && string[-1] == ')' string = string[1...-1] end string.split(',').map{ |v| Float(v) } end |
#string_to_time(string) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/active_record/connection_adapters/postgresql/cast.rb', line 16 def string_to_time(string) return string unless String === string case string when 'infinity'; Float::INFINITY when '-infinity'; -Float::INFINITY when / BC$/ super("-" + string.sub(/ BC$/, "")) else super end end |