module Surus::Array::Scope

Public Instance Methods

array_has(column, *values) click to toggle source

Adds where condition that requires column to contain all values

Examples:

User.array_has(:permissions, "manage_users")
User.array_has(:permissions, "manage_users", "manage_roles")
User.array_has(:permissions, ["manage_users", "manage_roles"])
# File lib/surus/array/scope.rb, line 10
def array_has(column, *values)
  where("#{connection.quote_table_name(table_name)}.#{connection.quote_column_name(column)} @> ARRAY[?]#{array_cast(column)}", values.flatten)
end
array_has_any(column, *values) click to toggle source

Adds where condition that requires column to contain any values

Examples:

User.array_has_any(:permissions, "manage_users")
User.array_has_any(:permissions, "manage_users", "manage_roles")
User.array_has_any(:permissions, ["manage_users", "manage_roles"])
# File lib/surus/array/scope.rb, line 20
def array_has_any(column, *values)
  where("#{connection.quote_table_name(table_name)}.#{connection.quote_column_name(column)} && ARRAY[?]#{array_cast(column)}", values.flatten)
end

Private Instance Methods

array_cast(column_name) click to toggle source
# File lib/surus/array/scope.rb, line 25
def array_cast(column_name)
  column = columns_hash[column_name.to_s]
  "::#{column.sql_type}[]"
end