def self.extract_fieldset_and_options arguments
orig_args = arguments
fieldset = :default
options = {
:visited_classes => [],
:fields => []
}
if arguments.size > 2 || (arguments.size == 2 && !arguments[0].is_a?(Symbol))
raise ArgumentError, "Don't know how to handle #{arguments.inspect}"
elsif arguments.size == 2 && arguments[0].is_a?(Symbol)
fieldset = arguments.shift
if arguments[0].is_a?(Array)
options.update({
:fields => arguments[0]
})
elsif arguments[0].is_a?(Hash)
options.update(arguments[0])
end
elsif arguments.size == 1 && (arguments[0].is_a?(Symbol) || arguments[0].is_a?(String))
fieldset = arguments.shift.to_sym
elsif arguments.size == 1 && arguments[0].is_a?(Hash)
fieldset = arguments[0].delete(:fieldset) || :default
options.update(arguments[0])
end
[fieldset, options]
end