best_matching_service (OpenID)

    # File lib/openid/consumer/discovery.rb, line 305
      def self.best_matching_service(service, preferred_types)
        # Return the index of the first matching type, or something higher
        # if no type matches.
        #
        # This provides an ordering in which service elements that contain
        # a type that comes earlier in the preferred types list come
        # before service elements that come later. If a service element
        # has more than one type, the most preferred one wins.
        preferred_types.each_with_index { |value, index|
          if service.type_uris.member?(value)
            return index
          end
        }

        return preferred_types.length
      end