From 9a51682f01b03b2f7067a2d752d9e484a4b7711c Mon Sep 17 00:00:00 2001 From: Derek Cannon Date: Fri, 22 Oct 2021 18:25:30 -0700 Subject: [PATCH 1/5] Add Rails 6 to Appraisal --- Appraisals | 6 ++++++ gemfiles/rails_6.gemfile | 17 +++++++++++++++++ jsonapi_compliable.gemspec | 2 +- 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 gemfiles/rails_6.gemfile diff --git a/Appraisals b/Appraisals index dea1f0a..3fcff26 100644 --- a/Appraisals +++ b/Appraisals @@ -9,3 +9,9 @@ appraise "rails-5" do gem 'jsonapi-rails', '~> 0.3.1', require: 'jsonapi/rails' gem 'rspec-rails' end + +appraise "rails-6" do + gem "rails", "~> 6.1.4" + gem 'jsonapi-rails', '~> 0.3.1', require: 'jsonapi/rails' + gem 'rspec-rails' +end diff --git a/gemfiles/rails_6.gemfile b/gemfiles/rails_6.gemfile new file mode 100644 index 0000000..e004407 --- /dev/null +++ b/gemfiles/rails_6.gemfile @@ -0,0 +1,17 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rails", "~> 6.1.4" +gem "jsonapi-rails", "~> 0.4.0", :require => "jsonapi/rails" +gem "rspec-rails" + +group :test do + gem "pry" + gem "pry-byebug", :platform => [:mri] + gem "appraisal" + gem "guard" + gem "guard-rspec" +end + +gemspec :path => "../" diff --git a/jsonapi_compliable.gemspec b/jsonapi_compliable.gemspec index 7ba5ffb..7fb6eff 100644 --- a/jsonapi_compliable.gemspec +++ b/jsonapi_compliable.gemspec @@ -20,7 +20,7 @@ Gem::Specification.new do |spec| # Pinning this version until backwards-incompatibility is addressed spec.add_dependency 'jsonapi-serializable', '~> 0.3.0' - spec.add_development_dependency "activerecord", ['>= 4.1', '< 6'] + spec.add_development_dependency "activerecord", ['>= 4.1', '< 7'] spec.add_development_dependency "kaminari", '~> 0.17' spec.add_development_dependency "bundler", "~> 2.1.4" spec.add_development_dependency "rake", "~> 10.0" From de47f5c319969fc3d0012cd2c1dac67d640c7b74 Mon Sep 17 00:00:00 2001 From: Derek Cannon Date: Fri, 22 Oct 2021 18:26:35 -0700 Subject: [PATCH 2/5] Fix Rails 6 breakages --- lib/jsonapi_compliable/adapters/active_record.rb | 4 ++-- lib/jsonapi_compliable/adapters/active_record_sideloading.rb | 4 ++-- lib/jsonapi_compliable/extensions/temp_id.rb | 2 +- lib/jsonapi_compliable/query.rb | 4 ++-- lib/jsonapi_compliable/sideload.rb | 2 +- lib/jsonapi_compliable/util/persistence.rb | 2 +- spec/sideload_spec.rb | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/jsonapi_compliable/adapters/active_record.rb b/lib/jsonapi_compliable/adapters/active_record.rb index d08d4f7..e1b446c 100644 --- a/lib/jsonapi_compliable/adapters/active_record.rb +++ b/lib/jsonapi_compliable/adapters/active_record.rb @@ -108,7 +108,7 @@ def create(model_class, create_params) # (see Adapters::Abstract#update) def update(model_class, update_params) instance = model_class.find(update_params.delete(:id)) - instance.update_attributes(update_params) + instance.update(update_params) instance end @@ -123,7 +123,7 @@ def destroy(model_class, id) def associate_many(parent, child, association_name) parent.association(association_name).loaded! - parent.association(association_name).add_to_target(child, :skip_callbacks) + parent.association(association_name).add_to_target(child, skip_callbacks: true) end end end diff --git a/lib/jsonapi_compliable/adapters/active_record_sideloading.rb b/lib/jsonapi_compliable/adapters/active_record_sideloading.rb index b7eece4..8386f1d 100644 --- a/lib/jsonapi_compliable/adapters/active_record_sideloading.rb +++ b/lib/jsonapi_compliable/adapters/active_record_sideloading.rb @@ -16,7 +16,7 @@ def has_many(association_name, scope: nil, resource:, foreign_key:, primary_key: parent.association(association_name).loaded! relevant_children = children_hash[parent.send(primary_key)] || [] relevant_children.each do |c| - parent.association(association_name).add_to_target(c, :skip_callbacks) + parent.association(association_name).add_to_target(c, skip_callbacks: true) end end end @@ -111,7 +111,7 @@ def has_and_belongs_to_many(association_name, scope: nil, resource:, foreign_key parent.association(association_name).loaded! relevant_children = children.select { |c| c.send(through).any? { |ct| ct.send(fk) == parent.send(primary_key) } } relevant_children.each do |c| - parent.association(association_name).add_to_target(c, :skip_callbacks) + parent.association(association_name).add_to_target(c, skip_callbacks: true) end end end diff --git a/lib/jsonapi_compliable/extensions/temp_id.rb b/lib/jsonapi_compliable/extensions/temp_id.rb index 63d600b..18dedab 100644 --- a/lib/jsonapi_compliable/extensions/temp_id.rb +++ b/lib/jsonapi_compliable/extensions/temp_id.rb @@ -11,7 +11,7 @@ module JsonapiCompliable # reference it directly. module SerializableTempId # Common interface for jsonapi-rb extensions - def as_jsonapi(*) + def as_jsonapi(**) super.tap do |hash| if temp_id = @object.instance_variable_get(:'@_jsonapi_temp_id') hash[:'temp-id'] = temp_id diff --git a/lib/jsonapi_compliable/query.rb b/lib/jsonapi_compliable/query.rb index f7b1225..8c6f7e9 100644 --- a/lib/jsonapi_compliable/query.rb +++ b/lib/jsonapi_compliable/query.rb @@ -226,7 +226,7 @@ def parse_sort(hash) sorts.each do |s| if s.include?('.') type, attr = s.split('.') - if type.starts_with?('-') + if type.start_with?('-') type = type.sub('-', '') attr = "-#{attr}" end @@ -254,7 +254,7 @@ def parse_pagination(hash) end def sort_attr(attr) - value = attr.starts_with?('-') ? :desc : :asc + value = attr.start_with?('-') ? :desc : :asc key = attr.sub('-', '').to_sym { key => value } diff --git a/lib/jsonapi_compliable/sideload.rb b/lib/jsonapi_compliable/sideload.rb index e45a58f..6926dfe 100644 --- a/lib/jsonapi_compliable/sideload.rb +++ b/lib/jsonapi_compliable/sideload.rb @@ -311,7 +311,7 @@ def resolve(parents, query, namespace) # @see #scope # @return void def allow_sideload(name, opts = {}, &blk) - sideload = Sideload.new(name, opts) + sideload = Sideload.new(name, **opts) sideload.instance_eval(&blk) if blk if polymorphic? diff --git a/lib/jsonapi_compliable/util/persistence.rb b/lib/jsonapi_compliable/util/persistence.rb index 6993317..9bd79af 100644 --- a/lib/jsonapi_compliable/util/persistence.rb +++ b/lib/jsonapi_compliable/util/persistence.rb @@ -171,7 +171,7 @@ def iterate(only: [], except: []) relationships: @relationships, }.merge(only: only, except: except) - JsonapiCompliable::Util::RelationshipPayload.iterate(opts) do |x| + JsonapiCompliable::Util::RelationshipPayload.iterate(**opts) do |x| yield x end end diff --git a/spec/sideload_spec.rb b/spec/sideload_spec.rb index 8826d04..6bf5ac6 100644 --- a/spec/sideload_spec.rb +++ b/spec/sideload_spec.rb @@ -2,7 +2,7 @@ RSpec.describe JsonapiCompliable::Sideload do let(:opts) { {} } - let(:instance) { described_class.new(:foo, opts) } + let(:instance) { described_class.new(:foo, **opts) } describe '.new' do it 'assigns a resource class' do From eb1f82069797aafaaa458a60ae2e56be301adebd Mon Sep 17 00:00:00 2001 From: Derek Cannon Date: Fri, 22 Oct 2021 19:32:38 -0700 Subject: [PATCH 3/5] Bump version --- lib/jsonapi_compliable/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jsonapi_compliable/version.rb b/lib/jsonapi_compliable/version.rb index 4240134..ddfbaaf 100644 --- a/lib/jsonapi_compliable/version.rb +++ b/lib/jsonapi_compliable/version.rb @@ -1,3 +1,3 @@ module JsonapiCompliable - VERSION = "0.11.34" + VERSION = "0.11.35" end From 2faba73ce1e348cefdc9bfd8dea5a71822b517d6 Mon Sep 17 00:00:00 2001 From: Derek Cannon Date: Sat, 23 Oct 2021 02:00:56 -0700 Subject: [PATCH 4/5] Gemfile configuration updates --- .travis.yml | 1 + Appraisals | 2 +- gemfiles/rails_4.gemfile | 4 +++- gemfiles/rails_5.gemfile | 2 ++ gemfiles/rails_6.gemfile | 2 ++ jsonapi_compliable.gemspec | 2 +- 6 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index d8c0cfd..983909e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,7 @@ install: bundle install --retry=3 --jobs=3 gemfile: - gemfiles/rails_4.gemfile - gemfiles/rails_5.gemfile + - gemfiles/rails_6.gemfile deploy: provider: rubygems diff --git a/Appraisals b/Appraisals index 3fcff26..728c09b 100644 --- a/Appraisals +++ b/Appraisals @@ -1,5 +1,5 @@ appraise "rails-4" do - gem "rails", "~> 4.1" + gem "rails", "~> 4.2" gem 'jsonapi-rails', '~> 0.3.1', require: 'jsonapi/rails' gem 'rspec-rails' end diff --git a/gemfiles/rails_4.gemfile b/gemfiles/rails_4.gemfile index c16ad43..a645d49 100644 --- a/gemfiles/rails_4.gemfile +++ b/gemfiles/rails_4.gemfile @@ -2,9 +2,11 @@ source "https://rubygems.org" -gem "rails", "~> 4.1" +gem "rails", "~> 4.2" gem "jsonapi-rails", "~> 0.3.1", :require => "jsonapi/rails" gem "rspec-rails" +gem "sqlite3", "~> 1.3" +gem "bundler", "~> 1.17" group :test do gem "pry" diff --git a/gemfiles/rails_5.gemfile b/gemfiles/rails_5.gemfile index 73d22b9..b12e918 100644 --- a/gemfiles/rails_5.gemfile +++ b/gemfiles/rails_5.gemfile @@ -5,6 +5,8 @@ source "https://rubygems.org" gem "rails", "~> 5.2" gem "jsonapi-rails", "~> 0.3.1", :require => "jsonapi/rails" gem "rspec-rails" +gem "sqlite3", "~> 1.3" +gem "bundler", "~> 2" group :test do gem "pry" diff --git a/gemfiles/rails_6.gemfile b/gemfiles/rails_6.gemfile index e004407..a4e2c15 100644 --- a/gemfiles/rails_6.gemfile +++ b/gemfiles/rails_6.gemfile @@ -5,6 +5,8 @@ source "https://rubygems.org" gem "rails", "~> 6.1.4" gem "jsonapi-rails", "~> 0.4.0", :require => "jsonapi/rails" gem "rspec-rails" +gem "sqlite3", "~> 1.4" +gem "bundler", "~> 2" group :test do gem "pry" diff --git a/jsonapi_compliable.gemspec b/jsonapi_compliable.gemspec index 7fb6eff..41771a9 100644 --- a/jsonapi_compliable.gemspec +++ b/jsonapi_compliable.gemspec @@ -24,6 +24,6 @@ Gem::Specification.new do |spec| spec.add_development_dependency "kaminari", '~> 0.17' spec.add_development_dependency "bundler", "~> 2.1.4" spec.add_development_dependency "rake", "~> 10.0" - spec.add_development_dependency "sqlite3" + spec.add_development_dependency "sqlite3", ['~> 1.3', '< 1.5'] spec.add_development_dependency "database_cleaner" end From a18519e91d5a593657eda66c87406517d94c1cc0 Mon Sep 17 00:00:00 2001 From: Derek Cannon Date: Sat, 23 Oct 2021 02:03:07 -0700 Subject: [PATCH 5/5] Monkey-patch fix for failing specs on Rails 4.2 --- spec/rails_spec_helper.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/spec/rails_spec_helper.rb b/spec/rails_spec_helper.rb index f16c8e5..26ec1e0 100644 --- a/spec/rails_spec_helper.rb +++ b/spec/rails_spec_helper.rb @@ -68,3 +68,19 @@ def fix_params! end require 'rspec/rails' + +# https://github.com/rails/rails/issues/34790#issuecomment-450502805 +if RUBY_VERSION>='2.6.0' + if Rails.version < '5' + class ActionController::TestResponse < ActionDispatch::TestResponse + def recycle! + # hack to avoid MonitorMixin double-initialize error: + @mon_mutex_owner_object_id = nil + @mon_mutex = nil + initialize + end + end + else + puts "Monkeypatch for ActionController::TestResponse no longer needed" + end +end