class Anytick::DefineMethod

Public Class Methods

new(trailing_arguments_forwarding: true) click to toggle source
# File lib/anytick/defmethod.rb, line 4
def initialize(trailing_arguments_forwarding: true)
  @trailing_arguments_forwarding = trailing_arguments_forwarding
  @trailing_arguments_forwarding_mark = (@trailing_arguments_forwarding.is_a? String) ? @trailing_arguments_forwarding : '[...]'
end

Public Instance Methods

execute(namespace, expr, _match_result) click to toggle source
# File lib/anytick/defmethod.rb, line 41
def execute(namespace, expr, _match_result)
  location = backtick_caller
  if (namespace.respond_to? :module_eval) then
    namespace.module_eval(arg_fwd(expr), location.path, location.lineno)
  else
    namespace.instance_eval(arg_fwd(expr), location.path, location.lineno)
  end
end
match?(expr) click to toggle source
# File lib/anytick/defmethod.rb, line 9
def match?(expr)
  (/\A \s* def \s+/x.match? expr) && (/\b end \s* \z/x.match? expr)
end

Private Instance Methods

arg_fwd(expr) click to toggle source
# File lib/anytick/defmethod.rb, line 19
def arg_fwd(expr)
  first_line = first_line(expr)
  if (@trailing_arguments_forwarding && (first_line.include? @trailing_arguments_forwarding_mark)) then
    expr.gsub(@trailing_arguments_forwarding_mark, '*__args__, **__kw_args__, &__block__')
  else
    expr
  end
end
first_line(expr) click to toggle source
# File lib/anytick/defmethod.rb, line 13
def first_line(expr)
  expr.lstrip.each_line.first
end