Add user filters scaffolding
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
class Dunlop::UserFiltersController < Dunlop::ApplicationController
|
||||
include Dunlop::Ember::ApiBaseController # Ugly to require a non dependency here, but for now only used in application explicitly including dunlop-ember
|
||||
before_action :check_current_user
|
||||
|
||||
private
|
||||
|
||||
def serialize_options
|
||||
{key_transform: :unaltered}
|
||||
end
|
||||
|
||||
def permitted_params
|
||||
[:scope_key, :is_default, filters: {}]
|
||||
end
|
||||
|
||||
def check_current_user
|
||||
head 404 unless current_user.present?
|
||||
end
|
||||
|
||||
def record_scope
|
||||
current_user.user_filters
|
||||
end
|
||||
|
||||
def index_pagination?
|
||||
false
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,14 @@
|
||||
module Dunlop
|
||||
class UserFilter < ApplicationRecord
|
||||
belongs_to :user
|
||||
if Rails.application.config.database_configuration[Rails.env]['adapter'] != 'postgesql' # postgesql uses jsonb
|
||||
serialize :filters, JSONColumnCoder.new(Hash)
|
||||
end
|
||||
|
||||
before_save do
|
||||
if changes['is_default'] == [false, true]
|
||||
self.class.where(scope_key: scope_key).update_all(is_default: false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,33 +1,36 @@
|
||||
module Dunlop::UserModel
|
||||
extend ActiveSupport::Concern
|
||||
module Dunlop
|
||||
module UserModel
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
serialize :role_names, JSONColumnCoder.new(Array)
|
||||
serialize :role_names_admin, JSONColumnCoder.new(Array)
|
||||
serialize :settings_storage, JSONColumnCoder.new(Hash)
|
||||
has_many :source_files, as: :creator
|
||||
end
|
||||
|
||||
def settings
|
||||
@settings ||= Dunlop::UserSettings.new(self, settings_storage)
|
||||
end
|
||||
|
||||
def all_role_names
|
||||
role_names + role_names_admin
|
||||
end
|
||||
|
||||
def presentation_name
|
||||
email
|
||||
end
|
||||
|
||||
module ClassMethods
|
||||
|
||||
def current
|
||||
RequestStore.store[:current_user]
|
||||
included do
|
||||
serialize :role_names, JSONColumnCoder.new(Array)
|
||||
serialize :role_names_admin, JSONColumnCoder.new(Array)
|
||||
serialize :settings_storage, JSONColumnCoder.new(Hash)
|
||||
has_many :source_files, as: :creator
|
||||
has_many :user_filters, class_name: 'Dunlop::UserFilter'
|
||||
end
|
||||
|
||||
def current=(user)
|
||||
RequestStore.store[:current_user] = user
|
||||
def settings
|
||||
@settings ||= Dunlop::UserSettings.new(self, settings_storage)
|
||||
end
|
||||
|
||||
def all_role_names
|
||||
role_names + role_names_admin
|
||||
end
|
||||
|
||||
def presentation_name
|
||||
email
|
||||
end
|
||||
|
||||
module ClassMethods
|
||||
|
||||
def current
|
||||
RequestStore.store[:current_user]
|
||||
end
|
||||
|
||||
def current=(user)
|
||||
RequestStore.store[:current_user] = user
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
module Dunlop
|
||||
class UserFilterSerializer < ActiveModel::Serializer
|
||||
# manual key transform to preserve filters lowercases
|
||||
type 'dunlop/user-filter'
|
||||
attribute :scope_key, key: 'scope-key'
|
||||
attribute :filters
|
||||
attribute :is_default, key: 'is-default'
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user