Sha256: d5d9ebffd15b68c72f3f3a01ed3cffd067d0432340a6f5941cb43a48d18ccc3b

Contents?: true

Size: 1.15 KB

Versions: 11

Compression:

Stored size: 1.15 KB

Contents

# typed: false
require 'sorbet-runtime'

module SorbetRails::CustomParamsMethods
  include Kernel
  extend T::Sig
  extend T::Helpers

  # methods exists on ActionController::Parameter
  # def require(key); super; end
  # def fetch(key, *args); super; end

  sig {
    type_parameters(:U).
    params(key: Symbol, ta: ITypeAssert[T.type_parameter(:U)]).
    returns(T.type_parameter(:U))
  }
  def require_typed(key, ta)
    val = require(key)
    ta.assert(val)
  rescue TypeError
    raise ActionController::BadRequest.new(
      "Expected parameter #{key} to be an instance of type #{ta.get_type}, got `#{val}`"
    )
  end

  # Note: when default value is a hash, it'll be converted into an ActionController::Parameters
  sig {
    type_parameters(:U).
    params(
      key: Symbol,
      ta: ITypeAssert[T.type_parameter(:U)],
      args: T.untyped,
    ).
    returns(T.type_parameter(:U))
  }
  def fetch_typed(key, ta, *args)
    val = fetch(key, *args)
    ta.assert(val)
  rescue TypeError
    raise ActionController::BadRequest.new(
      "Expected parameter #{key} to be an instance of type T.nilable(#{ta.get_type}),
      got `#{val}`".squish!
    )
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
sorbet-rails-0.6.2 lib/sorbet-rails/rails_mixins/custom_params_methods.rb
sorbet-rails-0.6.1 lib/sorbet-rails/rails_mixins/custom_params_methods.rb
sorbet-rails-0.6.0 lib/sorbet-rails/rails_mixins/custom_params_methods.rb
sorbet-rails-0.5.9.1 lib/sorbet-rails/rails_mixins/custom_params_methods.rb
sorbet-rails-0.5.9 lib/sorbet-rails/rails_mixins/custom_params_methods.rb
sorbet-rails-0.5.8.1 lib/sorbet-rails/rails_mixins/custom_params_methods.rb
sorbet-rails-0.5.8 lib/sorbet-rails/rails_mixins/custom_params_methods.rb
sorbet-rails-0.5.7 lib/sorbet-rails/rails_mixins/custom_params_methods.rb
sorbet-rails-0.5.6 lib/sorbet-rails/rails_mixins/custom_params_methods.rb
sorbet-rails-0.5.5.1 lib/sorbet-rails/rails_mixins/custom_params_methods.rb
sorbet-rails-0.5.5 lib/sorbet-rails/rails_mixins/custom_params_methods.rb