Class: NamedParameter::DefaultsExtractor::DefaultParametersExtractor
- Inherits:
-
Object
- Object
- NamedParameter::DefaultsExtractor::DefaultParametersExtractor
- Defined in:
- lib/named_parameter/defaults_extractor/default_parameters_extractor.rb
Instance Method Summary collapse
- #call_with_required_params(method) ⇒ Object
- #defaults_of(method) ⇒ Object
- #method_with_signature(signature, original) ⇒ Object
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 |