From 92ce80cc327e2df5838ae1c331a98a0701030d8f Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 5 Apr 2025 12:34:39 +0200 Subject: [PATCH] Extract User::Accessor concern Our User model is getting overloaded --- app/models/user.rb | 11 +---------- app/models/user/accessor.rb | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 app/models/user/accessor.rb diff --git a/app/models/user.rb b/app/models/user.rb index 2eb87913f..0fec0faed 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,15 +1,11 @@ class User < ApplicationRecord - include Avatar, Role, Transferable + include Accessor, Avatar, Role, Transferable belongs_to :account has_many :sessions, dependent: :destroy has_secure_password validations: false - has_many :accesses, dependent: :destroy - has_many :buckets, through: :accesses - has_many :accessible_bubbles, through: :buckets, source: :bubbles - has_many :filters, foreign_key: :creator_id, inverse_of: :creator, dependent: :destroy has_many :pops, dependent: :nullify @@ -27,8 +23,6 @@ class User < ApplicationRecord normalizes :email_address, with: ->(value) { value.strip.downcase } - after_create_commit :grant_access_to_buckets - scope :alphabetically, -> { order("lower(name)") } scope :sorted_with_user_first, ->(user) { order(Arel.sql("users.id != ?, lower(name)", user.id)) } @@ -53,7 +47,4 @@ class User < ApplicationRecord email_address.sub(/@/, "-deactivated-#{SecureRandom.uuid}@") end - def grant_access_to_buckets - Access.insert_all account.buckets.all_access.pluck(:id).collect { |bucket_id| { bucket_id: bucket_id, user_id: id } } - end end diff --git a/app/models/user/accessor.rb b/app/models/user/accessor.rb new file mode 100644 index 000000000..5615f9976 --- /dev/null +++ b/app/models/user/accessor.rb @@ -0,0 +1,16 @@ +module User::Accessor + extend ActiveSupport::Concern + + included do + has_many :accesses, dependent: :destroy + has_many :buckets, through: :accesses + has_many :accessible_bubbles, through: :buckets, source: :bubbles + + after_create_commit :grant_access_to_buckets + end + + private + def grant_access_to_buckets + Access.insert_all account.buckets.all_access.pluck(:id).collect { |bucket_id| { bucket_id: bucket_id, user_id: id } } + end +end