Module: Activerecord::Multirange::Quoting

Defined in:
lib/activerecord-multirange/quoting.rb

Instance Method Summary collapse

Instance Method Details

#encode_multirange(range_data) ⇒ Object



65
66
67
68
69
# File 'lib/activerecord-multirange/quoting.rb', line 65

def encode_multirange(range_data)
  collection = range_data.ranges.map { |r| encode_range(r) }.join(",")

  "{#{collection}}"
end

#quote(value) ⇒ Object



6
7
8
9
10
11
# File 'lib/activerecord-multirange/quoting.rb', line 6

def quote(value)
  return quote(encode_multirange(value)) if value.is_a?(::Activerecord::Multirange::OID::MultiRange::Data)
  return quote_array_as_multirange(value) if array_of_ranges?(value)

  super
end

#quote_bound_value(value) ⇒ Object

Override quote_bound_value for newer Rails versions



30
31
32
33
34
35
36
# File 'lib/activerecord-multirange/quoting.rb', line 30

def quote_bound_value(value)
  if array_of_ranges?(value)
    "'#{encode_array_as_multirange(value)}'"
  else
    super
  end
end

#quote_default_expression(value, column) ⇒ Object

Override for default expression quoting



39
40
41
42
43
44
45
# File 'lib/activerecord-multirange/quoting.rb', line 39

def quote_default_expression(value, column)
  if array_of_ranges?(value)
    "'#{encode_array_as_multirange(value)}'"
  else
    super
  end
end

#quoted_literal(value) ⇒ Object

Override the bound value quoting for parameter binding in WHERE clauses



21
22
23
24
25
26
27
# File 'lib/activerecord-multirange/quoting.rb', line 21

def quoted_literal(value)
  if array_of_ranges?(value)
    encode_array_as_multirange(value)
  else
    super
  end
end

#sanitize_sql_array(ary) ⇒ Object

Override sanitize_sql_array to catch arrays of ranges at parameter binding level



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/activerecord-multirange/quoting.rb', line 48

def sanitize_sql_array(ary)
  statement, *values = ary
  if statement.respond_to?(:to_str)
    # Convert arrays of ranges to multirange format in the values
    converted_values = values.map do |value|
      if array_of_ranges?(value)
        encode_array_as_multirange(value)
      else
        value
      end
    end
    sanitize_sql_for_conditions([statement, *converted_values])
  else
    super
  end
end

#type_cast(value) ⇒ Object



13
14
15
16
17
18
# File 'lib/activerecord-multirange/quoting.rb', line 13

def type_cast(value)
  return encode_multirange(value) if value.is_a?(::Activerecord::Multirange::OID::MultiRange::Data)
  return encode_array_as_multirange(value) if array_of_ranges?(value)

  super
end