# frozen_string_literal: true require "bundler/inline" gemfile(true) do source "https://rubygems.org" gem "cancancan", "3.0.0" gem "rails", "5.2.3" gem "sqlite3" end require 'active_record' require 'cancancan' require 'cancan/model_adapters/active_record_adapter' require 'cancan/model_adapters/active_record_4_adapter' require 'minitest/autorun' require 'logger' # This connection will do for database-independent bug reports. ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:") ActiveRecord::Base.logger = Logger.new(STDOUT) ActiveRecord::Schema.define do create_table :tasks, force: true do |t| t.datetime :deleted_on end end class Task < ActiveRecord::Base # wrong number of arguments (given 1, expected 0) def deleted? deleted_on.present? end end class Ability include CanCan::Ability def initialize(user) can :edit, Task cannot :edit, Task, &:deleted? # Workaround: change the above to this form # # cannot :edit, Task do |t| # t.deleted? # end end end class BugTest < Minitest::Test def test_association_stuff task = Task.create! ability = Ability.new(nil) assert ability.can?(:edit, task) # Error: # BugTest#test_association_stuff: # ArgumentError: wrong number of arguments (given 1, expected 0) # # Exception `ArgumentError' at # .../cancancan-3.0.0/lib/cancan/conditions_matcher.rb:24 - # wrong number of arguments (given 1, expected 0) end end