def source(name, param = nil, options = nil, &block)
if !(Hash === name) && [Array, Hash, Proc].any?{|c| c === param} && !options && !block
define_source_shortcut(name, param)
elsif !(Hash === name) && !param && !options
source = source_shortcuts[name]
scope_or_directive(block) do
@source = source
@sources = @sources.dup << source
end
else
name, param, options = *normalize_source_options(name, param, options || {})
source = source_from_params(name, param, options)
scope_or_directive(block) do
@source = source
@sources = @sources.dup << source
end
end
end