module ActiveRecord::Postgres::Constraints::Types::Check

Public Class Methods

example_constraint() click to toggle source
# File lib/active_record/postgres/constraints/types/check.rb, line 21
def example_constraint
  "'price > 999'"
end
to_schema_dump(constraint) click to toggle source
# File lib/active_record/postgres/constraints/types/check.rb, line 15
def to_schema_dump(constraint)
  name = constraint['conname']
  conditions = constraint['definition'].gsub(/^CHECK\s*\((.*)\)\s*$/, '\\1')
  "    t.check_constraint :#{name}, #{conditions.inspect}"
end
to_sql(table, name_or_conditions, conditions = nil) click to toggle source
# File lib/active_record/postgres/constraints/types/check.rb, line 9
def to_sql(table, name_or_conditions, conditions = nil)
  name, conditions = ActiveRecord::Postgres::Constraints.
    normalize_name_and_conditions(table, name_or_conditions, conditions)
  "CONSTRAINT #{name} CHECK (#{normalize_conditions(conditions)})"
end

Private Class Methods

normalize_conditions(conditions) click to toggle source
# File lib/active_record/postgres/constraints/types/check.rb, line 27
def normalize_conditions(conditions)
  conditions = [conditions] unless conditions.is_a?(Array)
  conditions = conditions.map do |condition|
    if condition.is_a?(Hash)
      normalize_conditions_hash(condition)
    else
      condition
    end
  end

  return conditions.first if 1 == conditions.length

  "(#{conditions.join(') AND (')})"
end
normalize_conditions_hash(hash) click to toggle source
# File lib/active_record/postgres/constraints/types/check.rb, line 42
def normalize_conditions_hash(hash)
  hash = hash.reduce([]) do |array, (column, predicate)|
    predicate = predicate.join("', '") if predicate.is_a?(Array)
    array << "#{column} IN ('#{predicate}')"
  end
  "(#{hash.join(') AND (')})"
end