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