From 8ea912be4b5b70d7d389c67028fa1b0d0c7214f7 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Fri, 23 Jan 2009 14:09:21 -0800 Subject: [PATCH] First run at a data checking task for the Budget plugin. #1924 --- lib/tasks/data.rake | 81 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 lib/tasks/data.rake diff --git a/lib/tasks/data.rake b/lib/tasks/data.rake new file mode 100644 index 0000000..29b016e --- /dev/null +++ b/lib/tasks/data.rake @@ -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