class Naught::NullClassBuilder::Commands::PredicatesReturn

Public Class Methods

new(builder, return_value) click to toggle source
Calls superclass method Naught::NullClassBuilder::Command.new
# File lib/naught/null_class_builder/commands/predicates_return.rb, line 7
def initialize(builder, return_value)
  super(builder)
  @predicate_return_value = return_value
end

Public Instance Methods

call() click to toggle source
# File lib/naught/null_class_builder/commands/predicates_return.rb, line 12
def call
  defer do |subject|
    define_method_missing(subject)
    define_predicate_methods(subject)
  end
end

Private Instance Methods

define_method_missing(subject) click to toggle source
# File lib/naught/null_class_builder/commands/predicates_return.rb, line 21
def define_method_missing(subject)
  subject.module_exec(@predicate_return_value) do |return_value|
    next unless subject.method_defined?(:method_missing)
    original_method_missing = instance_method(:method_missing)
    define_method(:method_missing) do |method_name, *args, &block|
      if method_name.to_s.end_with?('?')
        return_value
      else
        original_method_missing.bind(self).call(method_name, *args, &block)
      end
    end
  end
end
define_predicate_methods(subject) click to toggle source
# File lib/naught/null_class_builder/commands/predicates_return.rb, line 35
def define_predicate_methods(subject)
  subject.module_exec(@predicate_return_value) do |return_value|
    instance_methods.each do |method_name|
      next unless method_name.to_s.end_with?('?')
      define_method(method_name) do |*|
        return_value
      end
    end
  end
end