def attributes_description
      grouped_attributes = @attributes.group_by { |key, value| !!value }

      make_sentence(
        # Yes, this is functionally equivalent to grouped_attributes.map, except this forces the
        # keys to be evalutated in the order [true, false]. This is necessary to maintain
        # compatibility with Ruby 1.8.7, because hashes in 1.8.7 aren't ordered.
        [true, false].reduce([]) do |memo, group_key|
          attributes = grouped_attributes[group_key]

          if attributes
            memo << grouped_attributes_prefix(group_key, attributes.count > 1) +
              grouped_attributes_description(attributes)
          end

          memo
        end
      )
    end
def attributes_description
      grouped_attributes = @attributes.group_by { |key, value| !!value }

      make_sentence(
        # Yes, this is functionally equivalent to grouped_attributes.map, except this forces the
        # keys to be evalutated in the order [true, false]. This is necessary to maintain
        # compatibility with Ruby 1.8.7, because hashes in 1.8.7 aren't ordered.
        [true, false].reduce([]) do |memo, group_key|
          attributes = grouped_attributes[group_key]

          if attributes
            memo << grouped_attributes_prefix(group_key, attributes.count > 1) +
              grouped_attributes_description(attributes)
          end

          memo
        end
      )
    end
Returns a description of the attribute criteria. For example, the description of an attribute
 criteria of <tt>with_attribute(:foo => "bar")</tt> will look like <tt>'with attribute
 foo="bar"'</tt>.

 @return [String]