trabajo-afectivo/app/models/application_model/can_lookup_search_index_attributes.rb

67 lines
1.6 KiB
Ruby
Raw Normal View History

# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
module ApplicationModel::CanLookupSearchIndexAttributes
extend ActiveSupport::Concern
=begin
lookup name of ref. objects
ticket = Ticket.find(3)
attributes = ticket.search_index_attribute_lookup
returns
attributes # object with lookup data
=end
def search_index_attribute_lookup
attributes = self.attributes
self.attributes.each { |key, value|
next if !value
# get attribute name
attribute_name_with_id = key.to_s
attribute_name = key.to_s
next if attribute_name[-3, 3] != '_id'
attribute_name = attribute_name[ 0, attribute_name.length - 3 ]
# check if attribute method exists
next if !respond_to?(attribute_name)
# check if method has own class
relation_class = send(attribute_name).class
next if !relation_class
# lookup ref object
relation_model = relation_class.lookup(id: value)
next if !relation_model
# get name of ref object
value = nil
if relation_model.respond_to?('search_index_data')
value = relation_model.send('search_index_data')
end
if relation_model.respond_to?('name')
value = relation_model.send('name')
end
next if !value
# save name of ref object
attributes[ attribute_name ] = value
}
ignored_attributes = self.class.instance_variable_get(:@search_index_attributes_ignored) || []
return attributes if ignored_attributes.empty?
ignored_attributes.each { |attribute|
attributes.delete(attribute.to_s)
}
attributes
end
end