4 comments

[ 3.3 ms ] story [ 22.0 ms ] thread
While I agree with the sentiment, I don't believe it's necessarily cutting corners. Rather, it's by design. Rails values "elegance," and leans towards monolithism. Monkey patching is the means to those ends.

So even though I agree with you, I think it's going to be very difficult changing the philosophy of the Rails' ecosystem.

What if you could require() your patch just where you needed it? You'd have the utility and elegance of the simple solution, without abusing the global namespace.

That's exactly what you'd do in Scala.

  implicit class HtmlHelpers(node: Node) {

    def id: String = node \ "@id" text

    def name: String = node \ "@name" text

    def cssClass: String = node \ "@class" text

    def href: String = node \ "@href" text
  }
And I haven't abused anything. Whenever I need it, even within another method, I can just import until.HtmlHelpers.
refines are coming soon into ruby-core (2.2.0 IIRC).