Upgrade Grape v1.1.0 to v1.3.2

Merged Stan Hu requested to merge sh-update-grape-gem into master

This brings in Ruby 2.7 support and a number of fixes: https://github.com/ruby-grape/grape/blob/master/CHANGELOG.md

  1. Move all inherited Grape::API -> Grape::API::Instance
  2. Remove use of Virtus since this has been removed from Grape.
  3. Extract Rack::Response from API error
  4. Grape v1.2.3 pulled in a fix used in SafeFile: https://github.com/ruby-grape/grape/pull/1844, so we no longer need to maintain our custom type.
  5. Adapt WorkhorseFile with the latest changes to make custom types work with Grape and dry-types.
  6. Ensure Array[String] is coerced properly.

The change from Virtus to dry-types now requires all strings to be coerced to arrays. Before this was done within Virtus.

  1. Coerce Array[Integer] types to arrays of integers

The change from Virtus to dry-types now requires all strings to be coerced to arrays of integers. Before this was done within Virtus.

Rubocop

This merge request also introduces two Rubocop rules for Grape v1.3:

  1. Grape::API::Instance instead of Grape::API is required, unless we solve #215230.

  2. Grape parameters defined with Array types (e.g. Array[String], Array[Integer]) must have a coerce_with block or they will fail to parse properly. See https://github.com/ruby-grape/grape/blob/master/UPGRADING.md for more details.

Closes #195960 (closed)

Edited by Stan Hu