oop/module_refinements.rb

tests/_examples/oop/module_refinements.rb in the metorex repository.

collected = []

Refiner = Module.new do
  refine String do
    collected << self
  end

  refine Array do
    collected << self
  end
end

Plain = Module.new do
  include Refiner
end

puts Refiner.refinements.length.inspect
puts (Refiner.refinements == collected).inspect
puts Plain.refinements.inspect
puts Module.new.refinements.inspect

ignore_all = -> * { :any }
puts ignore_all.call(1, 2, 3).inspect

named_rest = -> *rest { rest }
puts named_rest.call(4, 5).inspect

parenthesized = ->(*) { :parens }
puts parenthesized.call(6).inspect

Output:

2
true
[]
[]
:any
[4, 5]
:parens