Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- begin
- require 'bundler/inline'
- rescue LoadError => e
- $stderr.puts 'Bundler version 1.10 or later is required. Please update your Bundler'
- raise e
- end
- gemfile(true) do
- source 'https://rubygems.org'
- gem 'rails', '5.1.7' # use correct rails version
- gem 'cancancan', '3.0.1' # use correct cancancan version
- gem 'sqlite3', '1.3.9' # use another DB if necessary
- end
- require 'active_record'
- require 'cancancan'
- require 'cancan/model_adapters/active_record_adapter'
- require 'cancan/model_adapters/active_record_4_adapter'
- require 'cancan/model_adapters/active_record_5_adapter'
- require 'cancan/model_adapters/conditions_normalizer'
- 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)
- # create your tables here
- ActiveRecord::Schema.define do
- create_table :foos, force: true do |t|
- end
- create_table :connections, force: true do |t|
- t.references :foo
- t.references :holder, polymorphic: true
- end
- create_table :bars, force: true do |t|
- end
- end
- class A < ActiveRecord::Base
- end
- class B < ActiveRecord::Base
- end
- class Connection < ActiveRecord::Base
- has_one :self_ref, class_name: 'Connection', foreign_key: :id
- has_one :a, through: :self_ref, source: :owner, source_type: A
- has_one :b, through: :self_ref, source: :owner, source_type: B
- belongs_to :owner, polymorphic: true
- belongs_to :bar
- end
- class Bar < ActiveRecord::Base
- has_many :connections, as: :owner
- end
- class Ability
- include CanCan::Ability
- def initialize(user)
- can :read, Bar, connections: { a: { id: 1 } }
- end
- end
- class BugTest < Minitest::Test
- def test_bug
- ability = Ability.new(nil)
- Bar.accessible_by(ability)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement