Created
April 17, 2012 03:42
-
-
Save kmdsbng/2403241 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class Never | |
| attr_accessor :value | |
| instance_methods.each do |v| | |
| undef_method(v) unless %w(object_id __id__ __send__).include?(v.to_s) | |
| end | |
| def method_missing(*args) | |
| self | |
| end | |
| def end | |
| nil | |
| end | |
| def maybe | |
| self | |
| end | |
| def maybe? | |
| true | |
| end | |
| end | |
| class Maybe < Never | |
| def initialize(value) | |
| @value = value | |
| end | |
| def method_missing(*args, &block) | |
| @value ? Maybe.new(@value.__send__(*args, &block)) : Never.new | |
| end | |
| def end | |
| @value | |
| end | |
| end | |
| class Object | |
| def maybe | |
| Maybe.new(block_given? ? yield : self) | |
| rescue Exception | |
| Never.new | |
| end | |
| def maybe? | |
| false | |
| end | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment