The second chunk of code you tried is almost right. The problem is private
is operating in the context of instance methods instead of class methods.
To get private
or private :new
to work, you just need to force it to be in the context of class methods like this:
class A
class << self
private :new
end
end
Or, if you truly want to redefine new
and call super
class A
class << self
private
def new(*args)
super(*args)
# additional code here
end
end
end
Class-level factory methods can access the private new
just fine, but trying to instantiate directly using new
will fail because new
is private.