First run at a data checking task for the Budget plugin. #1924

This commit is contained in:
Eric Davis
2009-01-23 14:09:21 -08:00
parent 6aa00eeeb9
commit 8ea912be4b

81
lib/tasks/data.rake Normal file
View File

@@ -0,0 +1,81 @@
def compare_values(pre, post, message)
puts "ERROR: #{message} (pre: #{pre}, post: #{post})" unless pre == post
return pre == post
end
namespace :rate_plugin do
namespace :budget do
desc "Export the values of the Budget plugin to a file"
task :pre => :environment do
# TODO: make sure the user is on v 0.1.0 of Budget
rates = ''
# Rate for members
Member.find(:all, :conditions => ['rate IS NOT NULL']).each do |member|
rates << {
:user_id => member.user_id,
:project_id => member.project_id,
:rate => member.rate
}.to_yaml
end
File.open("#{RAILS_ROOT}/tmp/budget_member_rate_data.yml", 'w') do |file|
file.puts rates
end
# HourlyDeliverable.spent and FixedDeliverable.spent
deliverables = ''
Deliverable.find(:all).each do |deliverable|
deliverables << {
:id => deliverable.id,
:spent => deliverable.spent
}.to_yaml
end
File.open("#{RAILS_ROOT}/tmp/budget_deliverable_data.yml", 'w') do |file|
file.puts deliverables
end
end
desc "Check the values of the export"
task :post => :environment do
# TODO: make sure the user is on v 0.2.0 of Budget
# TODO: make sure the rate migrations are done
counter = 0
# Member Rates
File.open("#{RAILS_ROOT}/tmp/budget_member_rate_data.yml") do |file|
YAML::load_documents(file) { |member_export|
user_id = member_export[:user_id]
project_id = member_export[:project_id]
rate = Rate.find_by_user_id_and_project_id(user_id, project_id)
if rate.nil?
puts "ERROR: No Rate found for User: #{user_id}, Project: #{project_id}"
counter += 1
else
counter += 1 unless compare_values(member_export[:rate], rate.amount, "Rate #{rate.id}'s amount is off")
end
}
end
# Deliverables
File.open("#{RAILS_ROOT}/tmp/budget_deliverable_data.yml") do |file|
YAML::load_documents(file) { |deliverable_export|
id = deliverable_export[:id]
spent = deliverable_export[:spent]
deliverable = Deliverable.find(id)
counter += 1 unless compare_values(spent, deliverable.spent, "Deliverable #{id}'s spent is off")
}
end
if counter > 0
puts "#{counter} errors found."
else
puts "No conversation errors found, congrats."
end
end
end
end