Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/edge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ jobs:
strategy:
fail-fast: false
matrix:
ruby: ['3.1', '3.2', '3.3', '3.4', ruby-head, truffleruby-head, jruby-head]
ruby: ['3.1', '3.2', '3.3', '3.4', '4.0', ruby-head, truffleruby-head, jruby-head]
gemfile: [rails_edge, rack_edge]
exclude:
- ruby: '3.1'
Expand Down
36 changes: 21 additions & 15 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,28 +23,34 @@ jobs:
strategy:
fail-fast: false
matrix:
ruby: ['3.1', '3.2', '3.3', '3.4']
gemfile: [Gemfile, gemfiles/rack_2_0.gemfile, gemfiles/rack_3_0.gemfile, gemfiles/rack_3_1.gemfile, gemfiles/rack_3_2.gemfile, gemfiles/rails_7_1.gemfile, gemfiles/rails_7_2.gemfile, gemfiles/rails_8_0.gemfile, gemfiles/rails_8_1.gemfile]
specs: ['spec --exclude-pattern=spec/integration/**/*_spec.rb']
ruby: ['3.1', '3.2', '3.3', '3.4', '4.0']
gemfile:
- Gemfile
- gemfiles/rack_2_2.gemfile
- gemfiles/rack_3_0.gemfile
- gemfiles/rack_3_1.gemfile
- gemfiles/rack_3_2.gemfile
- gemfiles/rails_7_1.gemfile
- gemfiles/rails_7_2.gemfile
- gemfiles/rails_8_0.gemfile
- gemfiles/rails_8_1.gemfile
specs: ['spec --exclude-pattern=spec/integration/{grape_entity,hashie,dry_validation,multi_*}/*_spec.rb']
include:
- ruby: '3.3'
- ruby: '4.0'
gemfile: gemfiles/grape_entity.gemfile
specs: 'spec/integration/grape_entity'
- ruby: '3.3'
- ruby: '4.0'
gemfile: gemfiles/hashie.gemfile
specs: 'spec/integration/hashie'
- ruby: '3.3'
- ruby: '4.0'
gemfile: gemfiles/dry_validation.gemfile
specs: 'spec/integration/dry_validation'
- ruby: '3.3'
gemfile: gemfiles/rails_7_1.gemfile
specs: 'spec/integration/rails'
- ruby: '3.3'
gemfile: gemfiles/rails_7_2.gemfile
specs: 'spec/integration/rails'
- ruby: '3.3'
gemfile: gemfiles/rails_8_0.gemfile
specs: 'spec/integration/rails'
- ruby: '4.0'
gemfile: gemfiles/multi_json.gemfile
specs: 'spec/integration/multi_json'
- ruby: '4.0'
gemfile: gemfiles/multi_xml.gemfile
specs: 'spec/integration/multi_xml'
exclude:
- ruby: '3.1'
gemfile: gemfiles/rails_8_0.gemfile
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ services:
context: .
dockerfile: docker/Dockerfile
args:
- RUBY_VERSION=${RUBY_VERSION:-3}
- RUBY_VERSION=${RUBY_VERSION:-4.0}
stdin_open: true
tty: true
volumes:
Expand Down
14 changes: 8 additions & 6 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
ARG RUBY_VERSION=3
FROM ruby:${RUBY_VERSION}-alpine
ARG RUBY_VERSION=4
FROM ruby:${RUBY_VERSION}-slim

ENV BUNDLE_PATH /usr/local/bundle/gems
ENV LIB_PATH /var/grape
ENV RUBYOPT --enable-frozen-string-literal --yjit
ENV LD_PRELOAD libjemalloc.so.2
ENV MALLOC_CONF dirty_decay_ms:1000,narenas:2,background_thread:true

RUN apk add --update --no-cache make gcc git libc-dev yaml-dev gcompat jemalloc && \
RUN apt-get update && \
apt-get install -y --no-install-recommends build-essential curl git pkg-config libyaml-dev libjemalloc2 && \
gem update --system && gem install bundler

ENV LD_PRELOAD libjemalloc.so.2
ENV MALLOC_CONF dirty_decay_ms:1000,narenas:2,background_thread:true
ENV RUBYOPT --enable-frozen-string-literal --yjit

WORKDIR $LIB_PATH

COPY /docker/entrypoint.sh /usr/local/bin/docker-entrypoint.sh
Expand Down
2 changes: 1 addition & 1 deletion gemfiles/rack_2_0.gemfile → gemfiles/rack_2_2.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

eval_gemfile '../Gemfile'

gem 'rack', '~> 2.0'
gem 'rack', '~> 2.2.0'
2 changes: 1 addition & 1 deletion gemfiles/rack_3_1.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

eval_gemfile '../Gemfile'

gem 'rack', '~> 3.1'
gem 'rack', '~> 3.1.0'
2 changes: 1 addition & 1 deletion gemfiles/rack_3_2.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

eval_gemfile '../Gemfile'

gem 'rack', '~> 3.2'
gem 'rack', '~> 3.2.0'
2 changes: 1 addition & 1 deletion gemfiles/rails_8_0.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

eval_gemfile '../Gemfile'

gem 'rails', '~> 8.0'
gem 'rails', '~> 8.0.0'
gem 'tzinfo-data', require: false
2 changes: 1 addition & 1 deletion gemfiles/rails_8_1.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

eval_gemfile '../Gemfile'

gem 'rails', '~> 8.1'
gem 'rails', '~> 8.1.0'
gem 'tzinfo-data', require: false
2 changes: 1 addition & 1 deletion lib/grape.rb
Original file line number Diff line number Diff line change
Expand Up @@ -71,5 +71,5 @@ def self.deprecator

# https://api.rubyonrails.org/classes/ActiveSupport/Deprecation.html
# adding Grape.deprecator to Rails App if any
require 'grape/railtie' if defined?(Rails::Railtie) && ActiveSupport.gem_version >= Gem::Version.new('7.1')
require 'grape/railtie' if defined?(Rails::Railtie)
loader.eager_load
2 changes: 1 addition & 1 deletion lib/grape/dsl/declared.rb
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ def handle_passed_param(params_nested_path, has_passed_children: false, &_block)
{}
elsif type == 'Array' || (type&.start_with?('[') && !type.include?(','))
[]
elsif type == 'Set' || type&.start_with?('#<Set')
elsif type == 'Set' || type&.start_with?('#<Set', 'Set')
Set.new
else
yield
Expand Down
9 changes: 5 additions & 4 deletions spec/grape/endpoint/declared_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -196,12 +196,13 @@
it 'sets objects with type=Set to be a set' do
get '/declared?first=present'
expect(last_response).to be_successful
json_empty_set = JSON.parse(Set.new.to_json)

body = JSON.parse(last_response.body)
expect(['#<Set: {}>', []]).to include(body['empty_set'])
expect(['#<Set: {}>', []]).to include(body['empty_typed_set'])
expect(['#<Set: {}>', []]).to include(body['nested']['empty_set'])
expect(['#<Set: {}>', []]).to include(body['nested']['empty_typed_set'])
expect(body['empty_set']).to eq(json_empty_set)
expect(body['empty_typed_set']).to eq(json_empty_set)
expect(body['nested']['empty_set']).to eq(json_empty_set)
expect(body['nested']['empty_typed_set']).to eq(json_empty_set)
end

it 'sets objects with type=Array to be an array' do
Expand Down
2 changes: 1 addition & 1 deletion spec/grape/validations/validators/coerce_validator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1119,7 +1119,7 @@ def self.parse(_val)

get '/', d: %w[1 two]
expect(last_response).to be_successful
expect(last_response.body).to eq('#<Set: {1, "two"}>')
expect(last_response.body).to eq([1, 'two'].to_set.to_s)
end
end

Expand Down
3 changes: 2 additions & 1 deletion spec/integration/hashie/hashie_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,8 @@

get '/', d: %w[1 two]
expect(last_response).to be_successful
expect(last_response.body).to eq('#<Set: {1, "two"}>')
json_set = JSON.parse([1, 'two'].to_set.to_json)
expect(last_response.body).to eq(json_set)
end
end
end
Expand Down
77 changes: 0 additions & 77 deletions spec/integration/rack_3_0/headers_spec.rb

This file was deleted.

5 changes: 0 additions & 5 deletions spec/integration/rack_3_0/version_spec.rb

This file was deleted.

2 changes: 1 addition & 1 deletion spec/integration/rails/railtie_spec.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# frozen_string_literal: true

if defined?(Rails) && ActiveSupport.gem_version >= Gem::Version.new('7.1')
if defined?(Rails)
describe Grape::Railtie do
describe '.railtie' do
subject { test_app.deprecators[:grape] }
Expand Down
Loading