def process_fields(*params)
fields = []
if params.size == 1 && params.last.is_a?(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)
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)
fields << f.values[0].update(:name => f.keys[0])
elsif f.has_key?(:name)
fields << f
else
raise ArgumentError, "encountered a Hash that I don't know anything to do with `#{f.inspect}:#{f.class}`"
end
else
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