DEV Community

loading...

Procable Classes

Kelly Stannard
Developer. Design pattern enthusiast. Tilting at Agile practices.
・1 min read

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

Discussion (0)