# File lib/chef/cookbook/metadata/version.rb, line 53
    def <=>(v)
      major, minor, patch = (
        [ :major, :minor, :patch ].collect do |method|
          self.send(method) <=> v.send(method)
        end
      )

      Chef::Log.debug "(#{self.to_s}/#{v.to_s}) major,minor,patch: #{[major,minor,patch].join(',')}"

      # all these returns feels like C, surely there is a better way!

      if major == 0 && minor == 0 && patch == 0
        comp = 0
      end

      if major == 1
        comp = 1
      end

      if major == 0 && minor == 1 && patch == -1
        comp = 1
      end

      if minor == 1 && major == 0 && patch == 0
        comp = 1
      end

      if patch == 1 && major == 0 && minor == 0
        comp = 1
      end

      return (comp || -1)
    end