Class: Alchemy::Tidy

Inherits:
Object
  • Object
show all
Extended by:
Shell
Defined in:
lib/alchemy/tasks/tidy.rb

Class Method Summary collapse

Methods included from Shell

add_todo, desc, display_todos, log, silence!, silenced?, todo, todos, verbose!

Class Method Details

.create_missing_cells(page_layouts, cells) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/alchemy/tasks/tidy.rb', line 8

def create_missing_cells(page_layouts, cells)
  page_layouts.each do |layout|
    next if layout['cells'].blank?
    cells_for_layout = cells.select { |cell| layout['cells'].include? cell['name'] }
    Alchemy::Page.where(page_layout: layout['name']).each do |page|
      cells_for_layout.each do |cell_for_layout|
        cell = Alchemy::Cell.find_or_initialize_by(name: cell_for_layout['name'], page_id: page.id)
        if cell.new_record?
          log "Creating cell #{cell.name} for page #{page.name}"
        else
          log "Cell #{cell.name} for page #{page.name} already present", :skip
        end
      end
    end
  end
end

.remove_orphaned_cellsObject



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/alchemy/tasks/tidy.rb', line 64

def remove_orphaned_cells
  puts "\n## Removing orphaned cells"
  cells = Alchemy::Cell.unscoped.all
  if cells.any?
    orphaned_cells = cells.select do |cell|
      cell.page.nil? && cell.page_id.present?
    end
    if orphaned_cells.any?
      log "Found #{orphaned_cells.size} orphaned cells"
      destroy_orphaned_records(orphaned_cells, 'cell')
    else
      log "No orphaned cells found", :skip
    end
  else
    log "No cells found", :skip
  end
end

.remove_orphaned_contentsObject



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/alchemy/tasks/tidy.rb', line 101

def remove_orphaned_contents
  puts "\n## Removing orphaned contents"
  contents = Alchemy::Content.unscoped.all
  if contents.any?
    orphaned_contents = contents.select do |content|
      content.essence.nil? && content.essence_id.present? ||
        content.element.nil? && content.element_id.present?
    end
    if orphaned_contents.any?
      log "Found #{orphaned_contents.size} orphaned contents"
      destroy_orphaned_records(orphaned_contents, 'content')
    else
      log "No orphaned contents found", :skip
    end
  else
    log "No contents found", :skip
  end
end

.remove_orphaned_elementsObject



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/alchemy/tasks/tidy.rb', line 82

def remove_orphaned_elements
  puts "\n## Removing orphaned elements"
  elements = Alchemy::Element.unscoped.all
  if elements.any?
    orphaned_elements = elements.select do |element|
      element.page.nil? && element.page_id.present? ||
        element.cell.nil? && element.cell_id.present?
    end
    if orphaned_elements.any?
      log "Found #{orphaned_elements.size} orphaned elements"
      destroy_orphaned_records(orphaned_elements, 'element')
    else
      log "No orphaned elements found", :skip
    end
  else
    log "No elements found", :skip
  end
end

.update_content_positionsObject



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/alchemy/tasks/tidy.rb', line 44

def update_content_positions
  Alchemy::Element.all.each do |element|
    if element.contents.any?
      puts "\n## Updating content positions of element `#{element.name}`"
    end
    element.contents.group_by(&:essence_type).each do |essence_type, contents|
      puts "-> Contents of type `#{essence_type}`"
      contents.each_with_index do |content, idx|
        position = idx + 1
        if content.position != position
          log "Updating position for content ##{content.id} to #{position}"
          content.update_column(:position, position)
        else
          log "Position for content ##{content.id} is already correct (#{position})", :skip
        end
      end
    end
  end
end

.update_element_positionsObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/alchemy/tasks/tidy.rb', line 25

def update_element_positions
  Alchemy::Page.all.each do |page|
    if page.elements.any?
      puts "\n## Updating element positions of page `#{page.name}`"
    end
    page.elements.group_by(&:cell_id).each do |_cell_id, elements|
      elements.each_with_index do |element, idx|
        position = idx + 1
        if element.position != position
          log "Updating position for element ##{element.id} to #{position}"
          element.update_column(:position, position)
        else
          log "Position for element ##{element.id} is already correct (#{position})", :skip
        end
      end
    end
  end
end