Module: ActiveRecord::Postgres::Constraints

Defined in:
lib/active_record/postgres/constraints.rb,
lib/active_record/postgres/constraints/railtie.rb,
lib/active_record/postgres/constraints/version.rb,
lib/active_record/postgres/constraints/schema_dumper.rb,
lib/active_record/postgres/constraints/schema_creation.rb,
lib/active_record/postgres/constraints/command_recorder.rb,
lib/active_record/postgres/constraints/table_definition.rb,
lib/active_record/postgres/constraints/postgresql_adapter.rb

Defined Under Namespace

Modules: CommandRecorder, PostgreSQLAdapter, SchemaCreation, SchemaDumper, TableDefinition Classes: Railtie

Constant Summary collapse

VERSION =
'0.1.2'

Class Method Summary collapse

Class Method Details

.normalize_conditions(conditions) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/active_record/postgres/constraints.rb', line 14

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) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/active_record/postgres/constraints.rb', line 28

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

.to_sql(table, name_or_conditions, conditions = nil) ⇒ Object



36
37
38
39
40
41
42
43
44
45
# File 'lib/active_record/postgres/constraints.rb', line 36

def to_sql(table, name_or_conditions, conditions = nil)
  if conditions
    name = name_or_conditions
  else
    name = "#{table}_#{Time.zone.now.nsec}"
    conditions = name_or_conditions
  end

  "CONSTRAINT #{name} CHECK (#{normalize_conditions(conditions)})"
end