oop/refined_operators.rb
tests/_examples/oop/refined_operators.rb in the metorex repository.
module CharClassSubtraction
refine Regexp do
def -(other)
/[#{source}&&[^#{other.source}]]/n
end
end
end
module ShiftMinutes
refine Integer do
def +(other)
other.is_a?(String) ? "#{self} #{other}" : super(other)
end
end
end
def outside_the_refinement(left, right)
left - right
rescue NoMethodError => error
error.class
end
p(outside_the_refinement(/[a-z]/, /[aeiou]/))
using CharClassSubtraction
using ShiftMinutes
consonant = /[a-z]/ - /[aeiou]/
p(consonant)
p("rates"[consonant])
p(30 + "minutes")
p(30 + 15)
Output:
NoMethodError
/[[a-z]&&[^[aeiou]]]/n
"r"
"30 minutes"
45