module GenerateMethod::Generator

Public Instance Methods

generate_method(method_name, overrider: nil, &block) click to toggle source
# File lib/generate_method.rb, line 5
def generate_method(method_name, overrider: nil, &block)
  include generate_method_module(method_name, overrider: overrider, &block)
end
generate_methods(overrider: nil, &block) click to toggle source
# File lib/generate_method.rb, line 12
def generate_methods(overrider: nil, &block)
  include generate_block_module(overrider: overrider, &block)
end
generate_singleton_method(method_name, overrider: nil, &block) click to toggle source
# File lib/generate_method.rb, line 8
def generate_singleton_method(method_name, overrider: nil, &block)
  extend generate_method_module(method_name, overrider: overrider, &block)
end
generate_singleton_methods(overrider: nil, &block) click to toggle source
# File lib/generate_method.rb, line 15
def generate_singleton_methods(overrider: nil, &block)
  extend generate_block_module(overrider: overrider, &block)
end

Private Instance Methods

alias_generated_method(method_name, overrider: nil, m: nil) click to toggle source
# File lib/generate_method.rb, line 37
def alias_generated_method(method_name, overrider: nil, m: nil)
  return if overrider.nil?

  method_name_s, override_name_s = method_name.to_s, overrider.to_s
  # pushing one of [?=!] to the end of the _without_ method
  if method_name_s =~ /[\=\?\!]$/
    override_name_s.concat method_name_s[-1]
    method_name_s.chop!
  end
  override_method_name = :"#{method_name_s}_without_#{override_name_s}"

  begin
    alias_method :"_#{override_method_name}", method_name
  rescue NameError # method does not exist
  else
    m.instance_eval do
      define_method(override_method_name) do |*args, &block|
        send(:"_#{override_method_name}", *args, &block)
      end
    end
  end
end
generate_block_module(overrider: nil, &block) click to toggle source
# File lib/generate_method.rb, line 29
def generate_block_module(overrider: nil, &block)
  m = Module.new(&block)
  m.instance_methods.each do |method_name|
    alias_generated_method(method_name, overrider: overrider, m: m)
  end
  m
end
generate_method_module(method_name, overrider: nil, &block) click to toggle source
# File lib/generate_method.rb, line 21
def generate_method_module(method_name, overrider: nil, &block)
  m = Module.new do
    define_method(method_name, &block)
  end
  alias_generated_method(method_name, overrider: overrider, m: m)
  m
end