This is I think a good combination of cheap and simple for use in a more functional style of ruby.
Very simple cases
class AddOne
  singleton_class.attr_accessor :to_proc
  self.to_proc = ->(x) { x + 1 }
  define_singleton_method(:call, to_proc)
end
1.then(&AddOne) #=> 2
AddOne.call(1) #=> 2
More complex cases
Most times you will want to use Object instances as they make refactoring easier.
class AddTwo
  singleton_class.attr_accessor :to_proc
  self.to_proc = ->(x) { new(x).call }
  define_singleton_method(:call, to_proc)
  def initialize(x)
    @x = x
  end
  def call
    @x + 2
  end
end
1.then(&AddTwo) #=> 3
AddTwo.call(1) #=> 3
edit: changed class << self to singleton_class
 

 
    
Top comments (0)