# File lib/couchrest/model/design.rb, line 134
      def checksum!
        # Get a deep copy of hash to compare with
        @_original_hash = Marshal.load(Marshal.dump(to_hash))
        # create a copy of basic elements
        base = self.dup
        base.delete('_id')
        base.delete('_rev')
        base.delete('couchrest-hash')
        flatten =
          lambda {|r|
            (recurse = lambda {|v|
              if v.is_a?(Hash) || v.is_a?(CouchRest::Document)
                v.to_a.map{|p| recurse.call(p)}.flatten
              elsif v.is_a?(Array)
                v.flatten.map{|p| recurse.call(p)}
              else
                v.to_s
              end
            }).call(r)
          }
        self['couchrest-hash'] = Digest::MD5.hexdigest(flatten.call(base).sort.join(''))
      end