Module: ActiveRecord::Encryption::ExtendedDeterministicQueries::EncryptedQuery
Do not use. This module is for internal use only.
Relationships & Source Files | |
Defined in: | activerecord/lib/active_record/encryption/extended_deterministic_queries.rb |
Overview
When modifying this file run performance tests in activerecord/test/cases/encryption/performance/extended_deterministic_queries_performance_test.rb
to make sure performance overhead is acceptable.
Class Method Summary
Class Method Details
.additional_values_for(value, type) (private)
[ GitHub ]# File 'activerecord/lib/active_record/encryption/extended_deterministic_queries.rb', line 89
def additional_values_for(value, type) type.previous_types.collect do |additional_type| AdditionalValue.new(value, additional_type) end end
.process_arguments(owner, args, check_for_additional_values)
[ GitHub ]# File 'activerecord/lib/active_record/encryption/extended_deterministic_queries.rb', line 43
def process_arguments(owner, args, check_for_additional_values) owner = owner.model if owner.is_a?(Relation) return args if owner.deterministic_encrypted_attributes&.empty? if args.is_a?(Array) && ( = args.first).is_a?(Hash) = .transform_keys do |key| if key.is_a?(Array) key.map(&:to_s) else key.to_s end end args[0] = owner.deterministic_encrypted_attributes&.each do |attribute_name| attribute_name = attribute_name.to_s type = owner.type_for_attribute(attribute_name) if !type.previous_types.empty? && value = [attribute_name] [attribute_name] = process_encrypted_query_argument(value, check_for_additional_values, type) end end end args end
.process_encrypted_query_argument(value, check_for_additional_values, type) (private)
[ GitHub ]# File 'activerecord/lib/active_record/encryption/extended_deterministic_queries.rb', line 71
def process_encrypted_query_argument(value, check_for_additional_values, type) return value if check_for_additional_values && value.is_a?(Array) && value.last.is_a?(AdditionalValue) case value when String, Array list = Array(value) list + list.flat_map do |each_value| if check_for_additional_values && each_value.is_a?(AdditionalValue) each_value else additional_values_for(each_value, type) end end else value end end