Class: RSpec::Support::MethodSignature
- Defined in:
- lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb,
lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb,
lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/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
rubocop:disable Metrics/ClassLength.
-
#min_non_kw_args ⇒ Object
readonly
rubocop:disable Metrics/ClassLength.
-
#optional_kw_args ⇒ Object
readonly
rubocop:disable Metrics/ClassLength.
-
#required_kw_args ⇒ Object
readonly
rubocop:disable Metrics/ClassLength.
Instance Method Summary collapse
- #arbitrary_kw_args? ⇒ Boolean
- #classify_arity(arity = @method.arity) ⇒ Object (also: #classify_parameters)
-
#could_contain_kw_args? ⇒ Boolean
Without considering what the last arg is, could it contain keyword arguments?.
- #description ⇒ Object
-
#has_kw_args_in?(_args) ⇒ Boolean
If the last argument is Hash, Ruby will treat only symbol keys as keyword arguments the rest will be grouped in another Hash and passed as positional argument.
-
#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
- #unlimited_args? ⇒ Boolean
- #valid_non_kw_args?(positional_arg_count, optional_max_arg_count = positional_arg_count) ⇒ Boolean
Constructor Details
#initialize(method) ⇒ MethodSignature
Returns a new instance of MethodSignature.
14 15 16 17 18 19 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 14 def initialize(method) @method = method @optional_kw_args = [] @required_kw_args = [] classify_parameters end |
Instance Attribute Details
#max_non_kw_args ⇒ Object (readonly)
rubocop:disable Metrics/ClassLength
12 13 14 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 12 def max_non_kw_args @max_non_kw_args end |
#min_non_kw_args ⇒ Object (readonly)
rubocop:disable Metrics/ClassLength
12 13 14 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 12 def min_non_kw_args @min_non_kw_args end |
#optional_kw_args ⇒ Object (readonly)
rubocop:disable Metrics/ClassLength
12 13 14 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 12 def optional_kw_args @optional_kw_args end |
#required_kw_args ⇒ Object (readonly)
rubocop:disable Metrics/ClassLength
12 13 14 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 12 def required_kw_args @required_kw_args end |
Instance Method Details
#arbitrary_kw_args? ⇒ Boolean
96 97 98 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 96 def arbitrary_kw_args? @allows_any_kw_args end |
#classify_arity(arity = @method.arity) ⇒ Object Also known as: classify_parameters
36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 36 def classify_arity(arity=@method.arity) if arity < 0 # `~` inverts the one's complement and gives us the # number of required args @min_non_kw_args = ~arity @max_non_kw_args = INFINITY else @min_non_kw_args = arity @max_non_kw_args = arity end end |
#could_contain_kw_args? ⇒ Boolean
Without considering what the last arg is, could it contain keyword arguments?
90 91 92 93 94 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 90 def could_contain_kw_args?(args) return false if args.count <= min_non_kw_args @allows_any_kw_args || @allowed_kw_args.any? end |
#description ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 49 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 parts << "any additional keyword args" if @allows_any_kw_args parts.join(" and ") end end |
#has_kw_args_in?(_args) ⇒ Boolean
If the last argument is Hash, Ruby will treat only symbol keys as keyword arguments the rest will be grouped in another Hash and passed as positional argument.
82 83 84 85 86 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 82 def has_kw_args_in?(args) Hash === args.last && could_contain_kw_args?(args) && (args.last.empty? || args.last.keys.any? { |x| x.is_a?(Symbol) }) end |
#invalid_kw_args_from(_given_kw_args) ⇒ Object
75 76 77 78 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 75 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
71 72 73 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 71 def missing_kw_args_from(given_kw_args) @required_kw_args - given_kw_args end |
#non_kw_args_arity_description ⇒ Object
21 22 23 24 25 26 27 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 21 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 |
#unlimited_args? ⇒ Boolean
100 101 102 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 100 def unlimited_args? @max_non_kw_args == INFINITY end |
#valid_non_kw_args?(positional_arg_count, optional_max_arg_count = positional_arg_count) ⇒ Boolean
29 30 31 32 33 34 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/rspec-support-3.12.0/lib/rspec/support/method_signature_verifier.rb', line 29 def valid_non_kw_args?(positional_arg_count, optional_max_arg_count=positional_arg_count) return true if positional_arg_count.nil? min_non_kw_args <= positional_arg_count && optional_max_arg_count <= max_non_kw_args end |