lib/nil_conditional.rb in nil_conditional-0.0.1 vs lib/nil_conditional.rb in nil_conditional-1.0.0

- old
+ new

@@ -1,17 +1,47 @@ -require "nil_conditional/version" +# NilConditional Operator in Ruby -module NilConditional +class Object + def method_missing(name, *params) + if name =~ /^__.+$/ + original = name.to_s.sub(/^__/, '').to_sym - class ::Object - def method_missing(name, *params) - if name =~ /^.+_\?$/ - original_method = name.to_s.sub(/_\?$/, '').to_sym - return send(original_method, *params) if respond_to?(original_method) - nil - else - super + if block_given? && original =~ /^\w+$/ + binding = Proc.new.binding + if binding.local_variable_defined?(original) + var = binding.local_variable_get(original) + return var unless var.nil? + end end + + if respond_to?(original) + return_value = block_given? ? send(original, *params, &Proc.new) : + send(original, *params) + return return_value unless return_value.nil? + end + + NilConditional.new + else + super end end +end +class NilConditional + def method_missing(name, *params) + return self.class.new + end + + def nil? + true + end + + def ==(other) + return true if other == nil + super + end + + def eql?(other) + return true if other.eql?(nil) + super + end end