# File lib/active_record/named_scope.rb, line 100 def scope(name, scope_options = {}, &block) name = name.to_sym valid_scope_name?(name) extension = Module.new(&block) if block_given? scopes[name] = lambda do |*args| options = scope_options.is_a?(Proc) ? scope_options.call(*args) : scope_options relation = if options.is_a?(Hash) scoped.apply_finder_options(options) elsif options scoped.merge(options) else scoped end extension ? relation.extending(extension) : relation end singleton_class.send(:redefine_method, name, &scopes[name]) end