# Beautity fixtures # Enrico Franchi 2006(c) # # This file is under MIT licence. # # Contributors: # "Mike" has contributed to this program too. desc "Labels Roles, Permissions and PermissionsRoles after their value so that the fixture becomes more readable. You can specify the DIR where fixtures we want to modify are." require 'yaml' class Hash def find_item(key, value, default=nil) each do |k, v| return k if (v[key] == value) || (v[key] == value.to_i) end default end end task :beautify_fixtures => :environment do dir = ENV['DIR'] || "#{RAILS_ROOT}/test/fixtures" db = ENV['DB'] || 'development' File.cp "#{dir}/roles.yml", "#{dir}/roles.bkp.yml" File.cp "#{dir}/permissions.yml", "#{dir}/permissions.bkp.yml" File.cp "#{dir}/permissions_roles.yml", "#{dir}/permissions_roles.bkp.yml" permissions = YAML.load_file("#{dir}/permissions.bkp.yml") roles = YAML.load_file("#{dir}/roles.bkp.yml") File.open("#{dir}/permissions.yml", 'w') do |file| permissions.each do |k, v| controller = v['controller'] action =v['action'] file.write "#{controller}_#{action}:\n" v.each {|key, value| file.write " #{key}: #{value}\n"} end end File.open("#{dir}/roles.yml", 'w') do |file| roles.each do |k, record| file.write "#{record['name'].downcase.gsub(/\s/, '_')}:\n" record.each {|key, value| file.write " #{key}: #{value}\n"} end end permissions = YAML.load_file("#{dir}/permissions.yml") roles = YAML.load_file("#{dir}/roles.yml") prs = YAML.load_file("#{dir}/permissions_roles.bkp.yml") File.open("#{dir}/permissions_roles.yml", 'w') do |file| prs.each do |k, record| permission = permissions.find_item('id', record['permission_id']) role = roles.find_item('id', record['role_id']) role = role.gsub(/\s/, '_') file.write "#{role}_#{permission}:\n" record.each {|key, value| file.write " #{key}: #{value}\n"} end end end