Module: ActiveRecord::Persistence::ClassMethods

Defined in:
lib/composite_primary_keys/persistence.rb

Instance Method Summary collapse

Instance Method Details

#_delete_record(constraints) ⇒ Object

:nodoc:



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/composite_primary_keys/persistence.rb', line 49

def _delete_record(constraints) # :nodoc:
  # CPK
  if self.composite? && constraints[primary_key]
    primary_key_values = constraints.delete(primary_key)
    primary_key.each_with_index do |key, i|
      constraints[key] = primary_key_values[i]
    end
  end

  constraints = constraints.map { |name, value| predicate_builder[name, value] }

  default_constraint = build_default_constraint
  constraints << default_constraint if default_constraint

  if current_scope = self.global_current_scope
    constraints << current_scope.where_clause.ast
  end

  dm = Arel::DeleteManager.new(arel_table)
  dm.wheres = constraints

  connection.delete(dm, "#{self} Destroy")
end

#_update_record(values, constraints) ⇒ Object

:nodoc:



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/composite_primary_keys/persistence.rb', line 24

def _update_record(values, constraints) # :nodoc:
  # CPK
  if self.composite? && constraints[primary_key]
    primary_key_values = constraints.delete(primary_key)
    primary_key.each_with_index do |key, i|
     constraints[key] = primary_key_values[i]
    end
  end

  constraints = constraints.map { |name, value| predicate_builder[name, value] }

  default_constraint = build_default_constraint
  constraints << default_constraint if default_constraint

  if current_scope = self.global_current_scope
    constraints << current_scope.where_clause.ast
  end

  um = Arel::UpdateManager.new(arel_table)
  um.set(values.transform_keys { |name| arel_table[name] })
  um.wheres = constraints

  connection.update(um, "#{self} Update")
end

#delete(id_or_array) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/composite_primary_keys/persistence.rb', line 4

def delete(id_or_array)
  # CPK
  if self.composite?
    id_or_array = if id_or_array.is_a?(CompositePrimaryKeys::CompositeKeys)
                    [id_or_array]
                  else
                    Array(id_or_array)
                  end

    # Delete should return the number of deleted records
    id_or_array.map do |id|
      # Is the passed in id actually a record?
      id = id.kind_of?(::ActiveRecord::Base) ? id.id : id
      delete_by(cpk_id_predicate(self.arel_table, self.primary_key, id))
    end.sum
  else
    delete_by(primary_key => id_or_array)
  end
end