Module: GraphQL::BackwardsCompatibility Private
- Defined in:
- lib/graphql/backwards_compatibility.rb
Overview
This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.
Helpers for migrating in a backwards-compatible way Remove this in GraphQL-Ruby 2.0, when all users of it will be gone.
Defined Under Namespace
Classes: FirstArgumentsWrapper, LastArgumentsWrapper
Class Method Summary collapse
- 
  
    
      .get_arity(callable)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  private
  
    
- 
  
    
      .wrap_arity(callable, from:, to:, name:, last: false)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  private
  
    Given a callable whose API used to take fromarguments, check its arity, and if needed, apply a wrapper so that it can be called withtoarguments.
Class Method Details
.get_arity(callable) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
| 33 34 35 36 37 38 39 40 | # File 'lib/graphql/backwards_compatibility.rb', line 33 def get_arity(callable) case callable when Method, Proc callable.arity else callable.method(:call).arity end end | 
.wrap_arity(callable, from:, to:, name:, last: false) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Given a callable whose API used to take from arguments,
check its arity, and if needed, apply a wrapper so that
it can be called with to arguments.
If a wrapper is applied, warn the application with name.
If last, then use the last arguments to call the function.
| 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # File 'lib/graphql/backwards_compatibility.rb', line 14 def wrap_arity(callable, from:, to:, name:, last: false) arity = get_arity(callable) if arity == to || arity < 0 # It already matches, return it as is callable elsif arity == from # It has the old arity, so wrap it with an arity converter ="#{name} with #{from} arguments is deprecated, it now accepts #{to} arguments, see:" backtrace = caller(0, 20) # Find the first line in the trace that isn't library internals: user_line = backtrace.find {|l| l !~ /lib\/graphql/ } GraphQL::Deprecation.warn( + "\n" + user_line + "\n") wrapper = last ? LastArgumentsWrapper : FirstArgumentsWrapper wrapper.new(callable, from) else raise "Can't wrap #{callable} (arity: #{arity}) to have arity #{to}" end end |