# 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