Class: RSpec::Support::MethodSignature
- Inherits:
-
Object
- Object
- RSpec::Support::MethodSignature
- Defined in:
- lib/rspec/support/method_signature_verifier.rb
Overview
Extracts info about the number of arguments and allowed/required keyword args of a given method.
Direct Known Subclasses
Constant Summary collapse
- INFINITY =
1/0.0
Instance Attribute Summary collapse
-
#max_non_kw_args ⇒ Object
readonly
Returns the value of attribute max_non_kw_args.
-
#min_non_kw_args ⇒ Object
readonly
Returns the value of attribute min_non_kw_args.
Instance Method Summary collapse
- #classify_parameters ⇒ Object
- #description ⇒ Object
- #has_kw_args_in?(args) ⇒ Boolean
-
#initialize(method) ⇒ MethodSignature
constructor
A new instance of MethodSignature.
- #invalid_kw_args_from(given_kw_args) ⇒ Object
- #missing_kw_args_from(given_kw_args) ⇒ Object
- #non_kw_args_arity_description ⇒ Object
Constructor Details
#initialize(method) ⇒ MethodSignature
Returns a new instance of MethodSignature.
13 14 15 16 |
# File 'lib/rspec/support/method_signature_verifier.rb', line 13 def initialize(method) @method = method classify_parameters end |
Instance Attribute Details
#max_non_kw_args ⇒ Object (readonly)
Returns the value of attribute max_non_kw_args.
11 12 13 |
# File 'lib/rspec/support/method_signature_verifier.rb', line 11 def max_non_kw_args @max_non_kw_args end |
#min_non_kw_args ⇒ Object (readonly)
Returns the value of attribute min_non_kw_args.
11 12 13 |
# File 'lib/rspec/support/method_signature_verifier.rb', line 11 def min_non_kw_args @min_non_kw_args end |
Instance Method Details
#classify_parameters ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/rspec/support/method_signature_verifier.rb', line 67 def classify_parameters optional_non_kw_args = @min_non_kw_args = 0 @optional_kw_args, @required_kw_args = [], [] @allows_any_kw_args = false @method.parameters.each do |(type, name)| case type # def foo(a:) when :keyreq then @required_kw_args << name # def foo(a: 1) when :key then @optional_kw_args << name # def foo(**kw_args) when :keyrest then @allows_any_kw_args = true # def foo(a) when :req then @min_non_kw_args += 1 # def foo(a = 1) when :opt then optional_non_kw_args += 1 # def foo(*a) when :rest then optional_non_kw_args = INFINITY end end @max_non_kw_args = @min_non_kw_args + optional_non_kw_args @allowed_kw_args = @required_kw_args + @optional_kw_args end |
#description ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/rspec/support/method_signature_verifier.rb', line 27 def description @description ||= begin parts = [] unless non_kw_args_arity_description == "0" parts << "arity of #{non_kw_args_arity_description}" end if @optional_kw_args.any? parts << "optional keyword args (#{@optional_kw_args.map(&:inspect).join(", ")})" end if @required_kw_args.any? parts << "required keyword args (#{@required_kw_args.map(&:inspect).join(", ")})" end if @allows_any_kw_args parts << "any additional keyword args" end parts.join(" and ") end end |
#has_kw_args_in?(args) ⇒ Boolean
60 61 62 63 64 65 |
# File 'lib/rspec/support/method_signature_verifier.rb', line 60 def has_kw_args_in?(args) return false unless Hash === args.last return false if args.count <= min_non_kw_args @allows_any_kw_args || @allowed_kw_args.any? end |
#invalid_kw_args_from(given_kw_args) ⇒ Object
55 56 57 58 |
# File 'lib/rspec/support/method_signature_verifier.rb', line 55 def invalid_kw_args_from(given_kw_args) return [] if @allows_any_kw_args given_kw_args - @allowed_kw_args end |
#missing_kw_args_from(given_kw_args) ⇒ Object
51 52 53 |
# File 'lib/rspec/support/method_signature_verifier.rb', line 51 def missing_kw_args_from(given_kw_args) @required_kw_args - given_kw_args end |
#non_kw_args_arity_description ⇒ Object
18 19 20 21 22 23 24 |
# File 'lib/rspec/support/method_signature_verifier.rb', line 18 def non_kw_args_arity_description case max_non_kw_args when min_non_kw_args then min_non_kw_args.to_s when INFINITY then "#{min_non_kw_args} or more" else "#{min_non_kw_args} to #{max_non_kw_args}" end end |