Class: InOrder::Aux::Repair

Inherits:
Object
  • Object
show all
Defined in:
app/models/in_order/aux/repair.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(_dry_run = false, dry_run: _dry_run) ⇒ Repair

Returns a new instance of Repair.



8
9
10
11
12
13
# File 'app/models/in_order/aux/repair.rb', line 8

def initialize(_dry_run=false, dry_run: _dry_run)
  self.dry_run = dry_run

  self.owners = []
  self.elements = []
end

Instance Attribute Details

#dry_runObject Also known as: dry_run?

Returns the value of attribute dry_run.



5
6
7
# File 'app/models/in_order/aux/repair.rb', line 5

def dry_run
  @dry_run
end

#elementsObject

Returns the value of attribute elements.



5
6
7
# File 'app/models/in_order/aux/repair.rb', line 5

def elements
  @elements
end

#ownersObject

Returns the value of attribute owners.



5
6
7
# File 'app/models/in_order/aux/repair.rb', line 5

def owners
  @owners
end

Class Method Details

.icObject



34
35
36
37
38
39
# File 'app/models/in_order/aux/repair.rb', line 34

def ic
  owners, elements = new(true).call

  puts show 'Owners', owners
  puts show 'Elements', elements
end

.show(name, list) ⇒ Object



41
42
43
44
45
# File 'app/models/in_order/aux/repair.rb', line 41

def show(name, list)
  out = name << ' ' << list.size.to_s << "\n"

  out << list.map(&:to_param) * " " << "\n"
end

Instance Method Details

#callObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/models/in_order/aux/repair.rb', line 15

def call
  InOrder::Element.transaction do
    unreferenced :owner do |type_id|
      owners << type_id * '-'

      InOrder::Element.by_owner_keys(*type_id).delete_all unless dry_run?
    end

    unlinked :subject do |element|
      elements << element

      InOrder::Remove.new(element).call unless dry_run?
    end
  end

  return owners, elements
end

#linked(name) ⇒ Object



62
63
64
65
66
# File 'app/models/in_order/aux/repair.rb', line 62

def linked(name)
  fields = [ :"#{name}_type", :"#{name}_id" ]

  InOrder::Element.select(*fields).distinct.pluck(*fields)
end

#unlinked(name) ⇒ Object



48
49
50
51
52
53
54
# File 'app/models/in_order/aux/repair.rb', line 48

def unlinked(name)
  unreferenced(name).map do |type_id|
    InOrder::Element.by_subject_keys(*type_id).first.tap do |element|
      yield element if block_given?
    end
  end
end

#unreferenced(name) ⇒ Object



56
57
58
59
60
# File 'app/models/in_order/aux/repair.rb', line 56

def unreferenced(name)
  linked(name).reject do |(type, id)|
    type.constantize.where(id: id).exists?
  end
end