Skip to content

Instantly share code, notes, and snippets.

@danielpclark
Last active May 31, 2023 06:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danielpclark/be5127f7e650af3bbf5d14396f113cf0 to your computer and use it in GitHub Desktop.
Save danielpclark/be5127f7e650af3bbf5d14396f113cf0 to your computer and use it in GitHub Desktop.
# Proof of Concept
class ArrayifyBehavior
def initialize(data)
@data = data
end
def self.call(data)
new(data)
end
def call(behavior)
p @data
behavior.call(action)
end
def action
Array(@data)
end
end
class DoubleBehavior
def initialize(data)
@data = data
end
def self.call(data)
new(data)
end
def call(behavior)
p @data
behavior.call(action)
end
def action
@data + @data
end
end
class EndOfLineBehavior
def initialize(data)
@data = data
end
def self.call(data)
new(data)
end
def call(behavior)
p @data
behavior.call(@data)
end
end
start_value = 123
[ArrayifyBehavior, DoubleBehavior, DoubleBehavior, EndOfLineBehavior].reduce(->(a){ a.(start_value) }) do |acc, a|
acc.call(a)
end.call(lambda{|a|a})
# OUTPUT: =>
# 123
# [123]
# [123, 123]
# [123, 123, 123, 123]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment