# File lib/model/base.rb, line 246
      def process_fields(*params)
        fields = []
        if params.size == 1 && params.last.is_a?(Hash) # peek into argument to see if its an option hash
          options = params.last
          if options.has_key?(:additional) && options[:additional].is_a?(Array)
            return self.process_fields(*(self.extjs_column_names + options[:additional].map(&:to_sym)))
          elsif options.has_key?(:exclude) && options[:exclude].is_a?(Array)
            return self.process_fields(*(self.extjs_column_names - options[:exclude].map(&:to_sym)))
          elsif options.has_key?(:only) && options[:only].is_a?(Array)
            return self.process_fields(*options[:only])
          end
        end
        
        params = self.extjs_column_names if params.empty?
        
        associations = extjs_associations
        
        params.each do |f|
          if f.kind_of?(Hash)
            if f.keys.size == 1 && f.keys[0].is_a?(Symbol) && f.values[0].is_a?(Array) # {:association => [:field1, :field2]}
              fields << {
                :name => f.keys[0],
                :fields => process_fields(*f.values[0])
              }
            elsif f.keys.size == 1 && f.keys[0].is_a?(Symbol) && f.values[0].is_a?(Hash) # {:field => {:sortDir => 'ASC'}}
              fields << f.values[0].update(:name => f.keys[0])
            elsif f.has_key?(:name) # already a valid Hash, just copy it over
              fields << f
            else
              raise ArgumentError, "encountered a Hash that I don't know anything to do with `#{f.inspect}:#{f.class}`"
            end
          else # should be a String or Symbol
            raise ArgumentError, "encountered a fields Array that I don't understand: #{params.inspect} -- `#{f.inspect}:#{f.class}` is not a Symbol or String" unless f.is_a?(Symbol) || f.is_a?(String)
            fields << {:name => f.to_sym}
          end
        end
        
        fields
      end