Created
January 31, 2009 14:29
-
-
Save saturnflyer/55556 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
task :census => ['census:snippets', 'census:layouts'] | |
namespace :census do | |
desc "Show usage stats for Snippets" | |
task :snippets => :environment do | |
snippets, missing_snippets = snippet_usage | |
longest_name = snippets.keys.inject(0) do |max, name| | |
max = name.to_s.size > max ? name.to_s.size : max | |
end | |
puts print_snippet_headings(longest_name) | |
if ENV['ORDER'] == "name" | |
sorted_snippets = snippets.to_a.sort {|a,b| a.first.to_s <=> b.first.to_s } | |
else | |
sorted_snippets = snippets.to_a.sort {|a,b| b.last[:total] <=> a.last[:total] } | |
end | |
sorted_snippets.each do |snippet| | |
puts print_row(snippet, longest_name) | |
end | |
unless missing_snippets.empty? | |
puts "\nThe following snippets have been called, but they do not exist!" | |
missing_snippets.to_a.sort {|a,b| a.first.to_s <=> b.first.to_s }.each do |snippet| | |
puts print_row(snippet, longest_name) | |
end | |
end | |
end | |
desc "Show usage stats for Layouts" | |
task :layouts => :environment do | |
layouts = {} | |
Layout.find(:all).each { |l| layouts[l.name] = 0 } | |
Page.find(:all).each do |page| | |
layouts[page.layout.name] += 1 | |
end | |
longest_name = layouts.keys.inject(0) { |max, name| max = name.size > max ? name.size : max } | |
puts "Layout".ljust(longest_name) + "Usage".rjust(5) | |
puts "------".ljust(longest_name) + "-----".rjust(5) | |
layouts.to_a.sort {|a,b| b.last <=> a.last }.each do |layout| | |
puts layout.first.ljust(longest_name) + layout.last.to_s.rjust(5) | |
end | |
end | |
end | |
task :usage => ['usage:snippets','usage:layouts'] | |
namespace :usage do | |
desc "Show usage stats for Snippets" | |
task :snippets => :environment do | |
snippets, missing_snippets = snippet_usage | |
longest_name = snippets.keys.inject(0) do |max, name| | |
max = name.to_s.size > max ? name.to_s.size : max | |
end | |
if ENV['ORDER'] == "name" | |
sorted_snippets = snippets.to_a.sort {|a,b| a.first.to_s <=> b.first.to_s } | |
else | |
sorted_snippets = snippets.to_a.sort {|a,b| b.last[:total] <=> a.last[:total] } | |
end | |
padding = 3 | |
sp = " " * padding | |
sorted_snippets.to_a.each do |snippet| | |
layouts = snippet.last[:layouts]; snippets = snippet.last[:snippets]; pages = snippet.last[:pages] | |
next if layouts.empty? and snippets.empty? and pages.empty? | |
puts snippet.first | |
puts "-" * longest_name | |
unless layouts.empty? | |
puts "\n#{sp}layouts:" | |
layouts.each{ |l| puts "#{sp*2}#{l.name}" } | |
end | |
unless snippets.empty? | |
puts "\n#{sp}snippets:" | |
snippets.each{ |s| puts "#{sp*2}#{s.name}" } | |
end | |
unless pages.empty? | |
puts "\n#{sp}pages" | |
pages.each{ |p| puts "#{sp*2}#{p.url}"} | |
end | |
puts "\n\n" | |
end | |
end | |
desc "List all layouts, with each page that uses the layout" | |
task :layouts => :environment do | |
layouts = {} | |
Layout.find(:all).each { |l| layouts[l.name] = [] } | |
Page.find(:all).each do |page| | |
layouts[page.layout.name] << page | |
end | |
layouts.to_a.sort {|a,b| b.last.size <=> a.last.size }.each do |layout| | |
next if layout.last.empty? | |
puts layout.first | |
layout.last.each do |page| | |
puts "#{page.id.to_s.rjust(4)} #{page.url}" | |
end | |
puts '' | |
end | |
end | |
end | |
def snippet_usage | |
snippets = {}; missing_snippets = {} | |
Snippet.find(:all).each do |s| | |
snippets[s.name.to_sym] = snippet_statistic_hash | |
end | |
pattern = /<r\:snippet\s+name\=[\"|\'](\S+)[\"\']/ | |
[Layout, Snippet, PagePart].each do |model| | |
model.find(:all).each do |item| | |
item.content.grep(pattern).each do |match| | |
match =~ pattern | |
snippet_name = $1 | |
if model == PagePart | |
model_name = item.page | |
model_type = :pages | |
else | |
model_name = item | |
model_type = model.to_s.downcase.pluralize.to_sym | |
end | |
if snippets.has_key?(snippet_name.to_sym) | |
snippets[snippet_name.to_sym][model_type] << model_name | |
snippets[snippet_name.to_sym][:total] += 1 | |
else | |
unless missing_snippets.has_key?(snippet_name.to_sym) | |
missing_snippets[snippet_name.to_sym] = snippet_statistic_hash | |
end | |
missing_snippets[snippet_name.to_sym][model_type] << model_name | |
missing_snippets[snippet_name.to_sym][:total] += 1 | |
end | |
end | |
end | |
end | |
[snippets, missing_snippets] | |
end | |
def snippet_statistic_hash | |
{ | |
:pages => [], | |
:layouts => [], | |
:snippets => [], | |
:total => 0 | |
} | |
end | |
def print_row(snippet, longest_name, padding=3) | |
row = snippet.first.to_s.ljust(longest_name) | |
total_pages = snippet.last[:pages].size | |
row += total_pages.to_s.rjust("pages".length + padding) | |
total_layouts = snippet.last[:layouts].size | |
row += total_layouts.to_s.rjust("layouts".length + padding) | |
total_snippets = snippet.last[:snippets].size | |
row += total_snippets.to_s.rjust("snippets".length + padding) | |
total = snippet.last[:total] | |
row += total.to_s.rjust("total".length + padding) | |
end | |
def print_snippet_headings(longest_name, padding=3) | |
sp = " " * padding | |
s = "Snippet".ljust(longest_name) + "#{sp}Pages#{sp}Layouts#{sp}Snippets#{sp}Total\n" | |
s += "-------".ljust(longest_name) + "#{sp}-----#{sp}-------#{sp}--------#{sp}-----" | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment