brendon / acts_as_list

An ActiveRecord plugin for managing lists.
http://brendon.github.io/acts_as_list/
MIT License
2.04k stars 355 forks source link

DEPRECATION WARNING: Class level methods will no longer inherit scoping from `create!` in Rails 6.1. #385

Closed bbarberBPL closed 3 years ago

bbarberBPL commented 3 years ago

System specs Rails 6.0.3.4 Acts As List 1.0.2 Ruby 2.6.6 + 2.5.8

This started popping up while I was testing my specs on models that use acts_as_list

Setting ActiveSupport::Deprecation.debug = true in rails_helper.rb revealed the following stack trace

DEPRECATION WARNING: Class level methods will no longer inherit scoping from `create!` in Rails 6.1. To continue using the scoped relation, pass it into the block directly. To instead access the full set of models, as Rails 6.1 will, use `Curator::Filestreams::Image.default_scoped`. (called from block in call at /home/sca-ben/curator/app/services/curator/filestreams/file_set_factory_service.rb:18)
/home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/scoping.rb:18:in `scope_attributes'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/scoping.rb:38:in `populate_with_current_scope_attributes'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/scoping.rb:44:in `initialize_internals_callback'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/core.rb:323:in `initialize'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/inheritance.rb:70:in `new'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/inheritance.rb:70:in `new'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/inheritance.rb:68:in `new'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/acts_as_list-1.0.2/lib/acts_as_list/active_record/acts/position_column_method_definer.rb:53:in `block (2 levels) in define_class_methods'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/acts_as_list-1.0.2/lib/acts_as_list/active_record/acts/position_column_method_definer.rb:46:in `block (2 levels) in define_class_methods'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/acts_as_list-1.0.2/lib/acts_as_list/active_record/acts/position_column_method_definer.rb:42:in `block (2 levels) in define_class_methods'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/relation/delegation.rb:66:in `block in increment_all'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:407:in `block in scoping'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:784:in `_scoping'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:407:in `scoping'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/relation/delegation.rb:66:in `increment_all'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/acts_as_list-1.0.2/lib/acts_as_list/active_record/acts/list.rb:318:in `increment_positions_on_lower_items'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/acts_as_list-1.0.2/lib/acts_as_list/active_record/acts/list.rb:254:in `add_to_list_bottom'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:428:in `block in make_lambda'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:181:in `block (2 levels) in halting_and_conditional'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:605:in `block (2 levels) in default_terminator'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:604:in `catch'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:604:in `block in default_terminator'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:182:in `block in halting_and_conditional'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:513:in `block in invoke_before'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:513:in `each'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:513:in `invoke_before'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:134:in `run_callbacks'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:825:in `_run_create_callbacks'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/callbacks.rb:331:in `_create_record'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/timestamp.rb:110:in `_create_record'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/persistence.rb:905:in `create_or_update'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/callbacks.rb:327:in `block in create_or_update'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:135:in `run_callbacks'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:825:in `_run_save_callbacks'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/callbacks.rb:327:in `create_or_update'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/timestamp.rb:128:in `create_or_update'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/persistence.rb:503:in `save!'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/validations.rb:53:in `save!'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/transactions.rb:318:in `block in save!'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/transactions.rb:375:in `block in with_transaction_returning_status'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/database_statements.rb:278:in `transaction'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/transactions.rb:212:in `transaction'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/transactions.rb:366:in `with_transaction_returning_status'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/transactions.rb:318:in `save!'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/suppressor.rb:48:in `save!'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/persistence.rb:55:in `create!'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:115:in `block in create!'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:407:in `block in scoping'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:784:in `_scoping'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:407:in `scoping'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:115:in `create!'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:124:in `first_or_create!'
  /home/sca-ben/curator/app/services/curator/filestreams/file_set_factory_service.rb:18:in `block in call'
  /home/sca-ben/curator/lib/curator/services/transaction_handler.rb:42:in `block (2 levels) in with_transaction'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/database_statements.rb:280:in `block in transaction'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/transaction.rb:280:in `block in within_new_transaction'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activesupport-6.0.3.4/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/transaction.rb:278:in `within_new_transaction'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/database_statements.rb:280:in `transaction'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/transactions.rb:212:in `transaction'
  /home/sca-ben/curator/lib/curator/services/transaction_handler.rb:41:in `block in with_transaction'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:471:in `with_connection'
  /home/sca-ben/curator/lib/curator/services/transaction_handler.rb:40:in `with_transaction'
  /home/sca-ben/curator/app/services/curator/filestreams/file_set_factory_service.rb:15:in `call'
  /home/sca-ben/curator/lib/curator/services/base.rb:8:in `call'
  /home/sca-ben/curator/spec/support/factory_helpers.rb:19:in `handle_factory_result'
  /home/sca-ben/curator/spec/services/curator/filestreams/file_set_factory_service_spec.rb:21:in `block (3 levels) in <top (required)>'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/change.rb:373:in `perform_change'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/change.rb:141:in `matches?'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/handler.rb:50:in `block in handle_matcher'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/handler.rb:27:in `with_matcher'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/handler.rb:48:in `handle_matcher'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/expectation_target.rb:65:in `to'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/expectation_target.rb:101:in `to'
  /home/sca-ben/curator/spec/services/curator/filestreams/file_set_factory_service_spec.rb:20:in `block (2 levels) in <top (required)>'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/hooks.rb:360:in `instance_exec'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/hooks.rb:360:in `run'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/hooks.rb:524:in `block in run_owned_hooks_for'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/hooks.rb:523:in `each'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/hooks.rb:523:in `run_owned_hooks_for'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/hooks.rb:475:in `run'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:553:in `block in run_before_context_hooks'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/memoized_helpers.rb:186:in `block in isolate_for_context_hook'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/memoized_helpers.rb:182:in `instance_exec'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/memoized_helpers.rb:182:in `isolate_for_context_hook'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:552:in `run_before_context_hooks'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb:605:in `run'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:121:in `block (3 levels) in run_specs'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:121:in `map'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:121:in `block (2 levels) in run_specs'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/configuration.rb:2058:in `with_suite_hooks'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:116:in `block in run_specs'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/reporter.rb:74:in `report'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:115:in `run_specs'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:89:in `run'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:71:in `run'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:45:in `invoke'
  /home/sca-ben/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/exe/rspec:4:in `<main>'

Methods in list.rb and position_column_method_definer.rb are causing these warnings to be triggered( as shown in stack trace)

Based on my search for a solution I found answers in the following links

Solution 1 Solution 2

Basically calls for using default_scoped when accessing the class directly.

brendon commented 3 years ago

Hi @bbarberBPL, check out: https://github.com/brendon/acts_as_list/pull/384

We haven't really come up with a solution last time I checked. I don't really have time to deep-dive into this one, so if you do that'd be great! :D

kbrock commented 3 years ago

is this all set?

brendon commented 3 years ago

I'd say so :) I need to go through and close off a bunch of issues at some point 🧹