Ruby refinements: Difference between revisions
From wikinotes
No edit summary |
|||
Line 1: | Line 1: | ||
Refinements let you limit the scope of Monkey-Patches.<br> | Refinements let you limit the scope of Monkey-Patches.<br> | ||
You can override methods, or add new ones, and they will only be applied to classes/modules in files where the refinement is used. | You can override methods, or add new ones, and they will only be applied to classes/modules in files where the refinement is used. | ||
I could see this being useful for patching 3rd party libraries. | |||
= Documentation = | = Documentation = |
Revision as of 15:29, 14 May 2022
Refinements let you limit the scope of Monkey-Patches.
You can override methods, or add new ones, and they will only be applied to classes/modules in files where the refinement is used.
I could see this being useful for patching 3rd party libraries.
Documentation
official docs https://docs.ruby-lang.org/en/3.0.0/doc/syntax/refinements_rdoc.html
Example
class User def firstname; end def lastname; end end module Passenger refine User def buckle_seatbelt; end # method added to 'User' instances if 'using Passenger' end end# has_refinement.rb using Passenger # User instances gain 'buckle_seatbelt' -- but only in this file user = User.new user.buckle_seatbelt# no_refinement.rb user = User.new user.buckle_seatbelt # raises exception -- 'buckle_seatbelt not defined'