module Mimic::DefineMethods

Constants

Error

Public Class Methods

body(record) click to toggle source
# File lib/mimic/define_methods.rb, line 68
    def self.body(record)
      body = ''
      if record
        body << <<~RECORD
          invocation = Invocation.build(binding)
          __record(invocation)
        RECORD
      end

      body << "Void.new"

      body
    end
call(cls, subject_methods=nil, record: nil) click to toggle source
# File lib/mimic/define_methods.rb, line 5
def self.call(cls, subject_methods=nil, record: nil)
  subject_methods ||= Mimic.subject_methods(cls)

  subject_methods.each do |mthd|
    define_method(cls, mthd, record)
  end

  nil
end
define_method(cls, mthd, record) click to toggle source
# File lib/mimic/define_methods.rb, line 15
def self.define_method(cls, mthd, record)
  method_definition = method_definition(mthd, record)
  cls.class_eval(method_definition)
end
method_definition(mthd, record) click to toggle source
# File lib/mimic/define_methods.rb, line 20
def self.method_definition(mthd, record)
  "
    #{signature(mthd)}
      #{body(record)}
    end
  "
end
parameter_list(parameters) click to toggle source
# File lib/mimic/define_methods.rb, line 34
def self.parameter_list(parameters)
  parameter_list = ''
  parameters.each do |parameter|
    parameter_signature = parameter_signature(parameter)
    parameter_list << "#{parameter_signature}, "
  end

  parameter_list[0...-2]
end
parameter_signature(parameter) click to toggle source
# File lib/mimic/define_methods.rb, line 44
def self.parameter_signature(parameter)
  type = parameter[0]
  name = parameter.fetch(1) { :args }

  case type
  when :opt
    return "#{name}=nil"
  when :req
    return "#{name}"
  when :key
    return "#{name}: nil"
  when :keyreq
    return "#{name}:"
  when :rest
    return "*#{name}"
  when :keyrest
    return "**#{name}"
  when :block
    return "&#{name}"
  else
    raise Error, "Unknown parameter type (Name: #{name.inspect}, Type: #{type.inspect})"
  end
end
signature(mthd) click to toggle source
# File lib/mimic/define_methods.rb, line 28
def self.signature(mthd)
  parameter_list = parameter_list(mthd.parameters)

  "def #{mthd.name}(#{parameter_list})"
end