• G
    Don't publicize Kernel core extensions · 5a4e8788
    Genadi Samokovarov 提交于
    This is a reaction to a [bug] we hit in web-console. The cause of it was
    a `Kernel` extension called `#console` that was public and was fighting
    over Railties with console block to be run on `rails console`. We solved
    it by making the method private. We did that through `module_function`
    so `::Kernel.console` can be invoked even in `BasicObject`.
    
    I'm proposing to make most of the core Active Support `Kernel`
    extensions `module_function` as well. Those are currently public and we
    are polluting every `Object` public interface with them.
    
    ```ruby
    >> Object.new.respond_to? :silence_warnings
    => true
    
    >> Object.new.respond_to? :with_warnings
    => true
    
    >> Object.new.respond_to? :enable_warnings
    => true
    
    >> Object.new.respond_to? :suppress
    => true
    ``
    
    Some extensions like `Kernel#class_eval` should be public, but most of
    them don't really need to be.
    
    [bug]: https://github.com/rails/web-console/issues/184
    5a4e8788
reporting.rb 1.0 KB