rails/rails — pull request #9791 by wangjohn (2013-03-19 03:21:41+00:00)
Title: Removing Railtie::Configurable and replacing it with class methods

I believe the reason ``Railtie::Configurable`` was created was so that the subclasses of the Railtie class would have the methods in the Configurable module (such as ``instance``, ``configure``, and ``method_missing``). However, the implementer of Railtie did not want Railtie itself to have these methods.

This was implemented by forcing all modules that inherit from Railtie to include the Configurable module like so:

```ruby
class Railtie
class << self
def inherited(base)
base.send(:include, Railtie::Configurable)
end
...
end
end
```

This isn't great because it forces all the subclasses of Railtie to have this module, which isn't ideal behavior. Instead, it would be nice to use inheritance to make sure these methods appear in subclasses of Railties.

I've made it so that the Railtie class has the methods from Railtie::Configurable, and that Railtie itself cannot be instantiated and is effectively an abstract class.