class AttributeMapping module LocalCache class MappingCache < Struct.new(:namespace) include Traveller::LocalCache def fetch_value sql = %{ SELECT attribute_name, value, label FROM attribute_mappings WHERE namespace = #{AttributeMapping.connection.quote(namespace)} ORDER BY value; }.squish! AttributeMapping.connection.select_rows(sql).each_with_object({}) do |a, result| name, value, label = a result[name] ||= {} result[name][value] = label end end def cache_name "attribute_mapping_#{namespace}" end end extend ActiveSupport::Concern included do after_save { self.class.cached_mapping_for(namespace).expire! } after_destroy { self.class.cached_mapping_for(namespace).expire! } end module ClassMethods def cached_mapping_for(namespace) @cached_mappings ||= {} @cached_mappings[namespace] ||= MappingCache.new(namespace) end end end end