79 lines
1.6 KiB
Ruby
79 lines
1.6 KiB
Ruby
class UserIndexer < Indexer
|
|
def self.klass
|
|
"User"
|
|
end
|
|
|
|
def self.klass_with_includes
|
|
User.includes(:pseuds, :roles, :audits)
|
|
end
|
|
|
|
def self.index_all(options = {})
|
|
unless options[:skip_delete]
|
|
delete_index
|
|
create_index(shards: ArchiveConfig.USER_SHARDS)
|
|
end
|
|
options[:skip_delete] = true
|
|
super(options)
|
|
end
|
|
|
|
def self.mapping
|
|
{
|
|
properties: {
|
|
login: {
|
|
type: "keyword",
|
|
normalizer: "keyword_normalizer"
|
|
},
|
|
email: {
|
|
type: "keyword",
|
|
normalizer: "keyword_normalizer"
|
|
},
|
|
names: {
|
|
type: "keyword",
|
|
normalizer: "keyword_normalizer"
|
|
},
|
|
all_names: {
|
|
type: "keyword",
|
|
normalizer: "keyword_normalizer"
|
|
},
|
|
all_emails: {
|
|
type: "keyword",
|
|
normalizer: "keyword_normalizer"
|
|
}
|
|
}
|
|
}
|
|
end
|
|
|
|
def self.settings
|
|
{
|
|
analysis: {
|
|
normalizer: {
|
|
keyword_normalizer: {
|
|
type: "custom",
|
|
filter: %w[lowercase asciifolding]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
end
|
|
|
|
def document(object)
|
|
object.as_json(
|
|
root: false,
|
|
only: [:id, :login, :email, :created_at],
|
|
methods: [:role_ids]
|
|
).merge(extra_info(object))
|
|
end
|
|
|
|
def extra_info(object)
|
|
names = ([object.login] + object.pseuds.map(&:name)).uniq
|
|
past_names = object.historic_values("login")
|
|
past_emails = object.historic_values("email")
|
|
|
|
{
|
|
active: object.active?,
|
|
names: names,
|
|
all_names: (names + past_names).uniq,
|
|
all_emails: ([object.email] + past_emails).uniq
|
|
}
|
|
end
|
|
end
|