Module: Mimic::DefineMethods
- Defined in:
- lib/mimic/define_methods.rb
Constant Summary collapse
- Error =
::Class.new(RuntimeError)
Class Method Summary collapse
- .body(record) ⇒ Object
- .call(cls, subject_methods = nil, record: nil) ⇒ Object
- .define_method(cls, mthd, record) ⇒ Object
- .method_definition(mthd, record) ⇒ Object
- .parameter_list(parameters) ⇒ Object
- .parameter_signature(parameter) ⇒ Object
- .signature(mthd) ⇒ Object
Class Method Details
.body(record) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/mimic/define_methods.rb', line 64 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) ⇒ Object
5 6 7 8 9 10 11 12 13 |
# 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) ⇒ Object
15 16 17 18 |
# 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) ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/mimic/define_methods.rb', line 20 def self.method_definition(mthd, record) " #{signature(mthd)} #{body(record)} end " end |
.parameter_list(parameters) ⇒ Object
34 35 36 37 38 39 40 41 42 |
# 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) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/mimic/define_methods.rb', line 44 def self.parameter_signature(parameter) type = parameter[0] name = parameter.fetch(1) { :args } case type when :req return "#{name}" 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) ⇒ Object
28 29 30 31 32 |
# File 'lib/mimic/define_methods.rb', line 28 def self.signature(mthd) parameter_list = parameter_list(mthd.parameters) "def #{mthd.name}(#{parameter_list})" end |