#!/usr/bin/env ruby require 'yaml' core_order = [ "username", "fullname", "email", # ordered list "groups", # unordered list "pgp_keyid", "pgp_revoked_keyids", # unordered list "ssh_keys", # unordered map "extra" ] # unordered map extra_order = [ "alias", "other_contact", "roles", "website", "occupation", "yob", "location", "languages", "interests", "favorite_distros" ] _core_order = Hash[[*core_order.map.with_index]] _extra_order = Hash[[*extra_order.map.with_index]] user = YAML::load(STDIN) user = Hash[user.sort_by{|k,v| _core_order[k]}]} user["groups"] = user["groups"].sort if user["groups"]} user["pgp_revoked_keyids"] = user["pgp_revoked_keyids"].sort if user["extra"]} user["ssh_keys"] = Hash[user["ssh_keys"].sort_by{|k,v| k}] if user["ssh_keys"]} user["extra"] = Hash[user["extra"].sort_by{|k,v| _extra_order[k]}] if user["extra"]} print user.to_yaml