Skip to content

Instantly share code, notes, and snippets.

@jfahrenkrug
Created January 29, 2013 14:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jfahrenkrug/4664843 to your computer and use it in GitHub Desktop.
Save jfahrenkrug/4664843 to your computer and use it in GitHub Desktop.
A small script to find unused or invalid snippets in Radiant CMS.
# encoding: utf-8
# Find unused and invalid Radiant CMS snippets
# @author Johannes Fahrenkrug
class DeadSnippetsFinder
SNIPPET_REGEX = /\<r\:snippet\s+name\=[\"\']([\w\d\:\-]+)[\"\']/
def self.scan(obj, field = 'id')
puts " #{field}: #{obj.send(field)} name='#{obj.name}'"
(obj.content || '').scan(SNIPPET_REGEX) do |m|
puts " Snippet: #{$1}"
@@used_snippets << [$1, obj]
end
end
def self.run
@@used_snippets = []
puts "\nAnalyzing Page Parts..."
PagePart.find(:all, :order => :page_id).each do |pp|
scan(pp, 'page_id')
end
puts "\nAnalyzing Snippets..."
Snippet.find(:all, :order => 'name').each do |sn|
scan(sn)
end
puts "\nAnalyzing Layouts..."
Layout.find(:all, :order => 'name').each do |l|
scan(l)
end
@@used_snippets.uniq!
puts "\nDead Snippets:"
used_snippet_names = @@used_snippets.transpose[0]
all_snippet_names = []
Snippet.find(:all, :order => 'name').each do |sn|
all_snippet_names << sn.name
if !used_snippet_names.include?(sn.name)
puts sn.name
end
end
puts "\nInvalid Snippets:"
@@used_snippets.each do |sn_array|
if !all_snippet_names.include?(sn_array[0])
obj = sn_array[1]
puts "#{sn_array[0]} in #{obj.class} #{obj.kind_of?(PagePart) ? "on page with id #{obj.page_id}" : "with id #{obj.id}"}"
end
end
end
end
DeadSnippetsFinder.run
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment