Class: NamedParameter::DefaultsExtractor::DefaultParametersExtractor

Inherits:
Object
  • Object
show all
Defined in:
lib/named_parameter/defaults_extractor/default_parameters_extractor.rb

Instance Method Summary collapse

Instance Method Details

#call_with_required_params(method) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/named_parameter/defaults_extractor/default_parameters_extractor.rb', line 33

def call_with_required_params(method)
  required = method.parameters
    .find_all{|(tag, _)| tag == :req}
    .map{|(_, name)| name}

  args = [nil] * required.size
  method.call(*args)
end

#defaults_of(method) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/named_parameter/defaults_extractor/default_parameters_extractor.rb', line 4

def defaults_of(method)
  filepath = method.source_location[0]
  linenumber = method.source_location[1]

  if filepath.downcase == "(irb)"
      msg = NamedParameter::Errors::OnIrbException::MESSAGE
      raise NamedParameter::Errors::OnIrbException, msg
  end

  rb_content = File.read(filepath)

  extractor = SignatureExtractor.new
  signature = extractor.signature_of(rb_content, linenumber);

  created_method = method_with_signature(signature, method)

  defaults = call_with_required_params(created_method)

  defaults
end

#method_with_signature(signature, original) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/named_parameter/defaults_extractor/default_parameters_extractor.rb', line 25

def method_with_signature(signature, original)
  argnames = original.parameters.map{|(_, name)| name}
  method_code = "#{signature}; return [#{argnames.join(",")}];end"
  eval(method_code)

  method(original.name)
end