Skip to content

Instantly share code, notes, and snippets.

@claptimes5
Last active December 23, 2015 14:07
Show Gist options
  • Save claptimes5/f47502ccc378a748f861 to your computer and use it in GitHub Desktop.
Save claptimes5/f47502ccc378a748f861 to your computer and use it in GitHub Desktop.
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', github: 'rails/rails'
gem 'arel', github: 'rails/arel'
gem 'rack', github: 'rack/rack'
gem 'sprockets', github: 'rails/sprockets'
gem 'sprockets-rails', github: 'rails/sprockets-rails'
gem 'sass-rails', github: 'rails/sass-rails'
gem 'sqlite3'
end
require 'active_record'
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 :employees, force: true do |t|
t.string :first_name
t.string :last_name
t.boolean :enabled
end
create_table :employee_roles, force: true do |t|
t.integer :employee_id
t.integer :role_id
t.boolean :enabled
end
create_table :roles, force: true do |t|
t.string :name
t.boolean :enabled
end
create_table :related_employees, force: true do |t|
t.boolean :enabled
t.integer :employee_id
t.integer :related_employee_id
end
end
class Employee < ActiveRecord::Base
default_scope { where(enabled: true) }
has_many :roles, through: :employee_roles
has_many :employee_roles
has_many :related_employees,
primary_key: :id,
foreign_key: :employee_id
has_many :subordinates,
through: :related_employees,
source: :employee
end
class RelatedEmployee < ActiveRecord::Base
default_scope { where(enabled: true) }
belongs_to :employee,
primary_key: :id,
foreign_key: :related_employee_id
end
class Role < ActiveRecord::Base
default_scope { where(enabled: true) }
has_many :employees, through: :employee_roles
has_many :employee_roles
has_many :subordinates, through: :employees
end
class EmployeeRole < ActiveRecord::Base
default_scope { where(enabled: true) }
belongs_to :employee
belongs_to :role
end
class BugTest < Minitest::Test
def test_association_stuff
employee = Employee.create!(first_name: 'Peter', last_name: 'Parker', enabled: true)
employee_2 = Employee.create!(first_name: 'John', last_name: 'Parker', enabled: true)
role = Role.create!(name: 'Admin Role', enabled: true)
EmployeeRole.create!(employee_id: Employee.first.id, role_id: Role.first.id, enabled: true)
RelatedEmployee.create!(employee_id: Employee.first.id, related_employee_id: Employee.last.id, enabled: true)
assert_equal Role.first.subordinates.first.id, employee_2.id
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment