arrange_by_type (OpenID)

    # File lib/openid/consumer/discovery.rb, line 329
      def self.arrange_by_type(service_list, preferred_types)
        # Rearrange service_list in a new list so services are ordered by
        # types listed in preferred_types.  Return the new list.

        # Build a list with the service elements in tuples whose
        # comparison will prefer the one with the best matching service
        prio_services = []

        service_list.each_with_index { |s, index|
          prio_services << [best_matching_service(s, preferred_types), index, s]
        }

        prio_services.sort!

        # Now that the services are sorted by priority, remove the sort
        # keys from the list.
        (0...prio_services.length).each { |i|
          prio_services[i] = prio_services[i][2]
        }

        return prio_services
      end