Project

General

Profile

Actions

Bug #21341

open

`Namespace is not a module (TypeError)` without enabling the namespace

Added by yahonda (Yasuo Honda) 22 days ago. Updated 3 days ago.

Status:
Open
Assignee:
-
Target version:
-
ruby -v:
ruby 3.5.0dev (2025-05-15T08:25:56Z master 427ede2dde) +PRISM [x86_64-linux]
[ruby-core:122114]

Description

Ruby on Rails test case has the module Namespace.

https://github.com/rails/rails/blob/main/activemodel/test/validators/namespace/email_validator.rb#L5

module Namespace
  class EmailValidator < ::EmailValidator
  end
end

This code fails against Ruby 3.5.0dev without enabling the namespace feature.

Steps to reproduce

$ ruby -ve 'module Namespace; end'

Expected behavior

It should run without errors.

Actual behavior

It raises the TypeError.

$ ruby -ve 'module Namespace; end'
ruby 3.5.0dev (2025-05-15T08:25:56Z master 427ede2dde) +PRISM [x86_64-linux]
-e:1:in '<main>': Namespace is not a module (TypeError)
ruby:0: previous definition of Namespace was here

Raising this TypeError with RUBY_NAMESPACE=1 looks expected to me.

$ RUBY_NAMESPACE=1 ruby -ve 'module Namespace; end'
ruby 3.5.0dev (2025-05-15T08:25:56Z master 427ede2dde) +PRISM [x86_64-linux]
ruby: warning: Namespace is experimental, and the behavior may change in the future!
See doc/namespace.md for known issues, etc.
-e:1:in '<main>': Namespace is not a module (TypeError)
ruby:0: previous definition of Namespace was here

Related issues 1 (1 open0 closed)

Related to Ruby - Misc #21385: Namespace: Suggesting a renameOpenActions

Updated by yahonda (Yasuo Honda) 22 days ago

This code comes from a Rails test case, so we can change it if needed. However, there might be other cases to consider.

Updated by yahonda (Yasuo Honda) 22 days ago

This only triggers the TypeError for the top-level module Namespace, not when it’s nested inside another module.

$ ruby -ve 'module Foo; module Namespace; end; end'
ruby 3.5.0dev (2025-05-15T08:25:56Z master 427ede2dde) +PRISM [x86_64-linux]
$ RUBY_NAMESPACE=1 ruby -ve 'module Foo; module Namespace; end; end'
ruby 3.5.0dev (2025-05-15T08:25:56Z master 427ede2dde) +PRISM [x86_64-linux]
ruby: warning: Namespace is experimental, and the behavior may change in the future!
See doc/namespace.md for known issues, etc.
$

Updated by Earlopain (Earlopain _) 17 days ago

It looks intentional to me:

Namespace.new
(irb):1:in 'Namespace#initialize': Namespace is disabled. Set RUBY_NAMESPACE=1 environment variable to use Namespace. (RuntimeError)

But the incompatibility may not have been considered since toplevel Ruby used to warn in 3.4 for Ruby::VERSION and others.

Updated by byroot (Jean Boussier) 17 days ago

But the incompatibility may not have been considered since toplevel Ruby used to warn in 3.4 for Ruby::VERSION and others.

Yes, we likely need to emit a deprecation warning when a top-level Namespace constant is defined.

Updated by matsuda (Akira Matsuda) 17 days ago · Edited

I guess I found a widely used real-world app that defines a toplevel Namespace class, and it seems very difficult for them to resolve this conflict...
https://github.com/gitlabhq/gitlabhq/blob/master/app/models/namespace.rb

Perhaps we should better rename our namespace to Ruby::Namespace or something?

Updated by tagomoris (Satoshi Tagomori) 17 days ago

I want to let Matz determine how to handle this problem :D

Actions #7

Updated by hsbt (Hiroshi SHIBATA) 3 days ago

  • Related to Misc #21385: Namespace: Suggesting a rename added
Actions #8

Updated by hsbt (Hiroshi SHIBATA) 3 days ago

  • Tags set to namespace
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like1Like0Like0Like0