Add user filters scaffolding

This commit is contained in:
2018-11-17 21:55:35 -03:00
parent 1251c10494
commit 7a0edb5070
12 changed files with 213 additions and 28 deletions
@@ -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
+14
View File
@@ -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
+30 -27
View File
@@ -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