class ActiveRecord::Encryption::Scheme
A container of attribute encryption options.
It validates and serves attribute encryption options.
Attributes
previous_schemes[RW]
Public Class Methods
new(key_provider: nil, key: nil, deterministic: nil, support_unencrypted_data: nil, downcase: nil, ignore_case: nil, previous_schemes: nil, compress: true, compressor: nil, **context_properties) Show source
# File activerecord/lib/active_record/encryption/scheme.rb, line 13
def initialize(key_provider: nil, key: nil, deterministic: nil, support_unencrypted_data: nil, downcase: nil, ignore_case: nil,
previous_schemes: nil, compress: true, compressor: nil, **context_properties)
# Initializing all attributes to +nil+ as we want to allow a "not set" semantics so that we
# can merge schemes without overriding values with defaults. See +#merge+
@key_provider_param = key_provider
@key = key
@deterministic = deterministic
@support_unencrypted_data = support_unencrypted_data
@downcase = downcase || ignore_case
@ignore_case = ignore_case
@previous_schemes_param = previous_schemes
@previous_schemes = Array.wrap(previous_schemes)
@context_properties = context_properties
@compress = compress
@compressor = compressor
validate_config!
@context_properties[:encryptor] = Encryptor.new(compress: @compress) unless @compress
@context_properties[:encryptor] = Encryptor.new(compressor: compressor) if compressor
end Public Instance Methods
# File activerecord/lib/active_record/encryption/scheme.rb, line 78 def compatible_with?(other_scheme) deterministic? == other_scheme.deterministic? end
# File activerecord/lib/active_record/encryption/scheme.rb, line 44 def deterministic? !!@deterministic end
# File activerecord/lib/active_record/encryption/scheme.rb, line 40 def downcase? @downcase end
# File activerecord/lib/active_record/encryption/scheme.rb, line 52 def fixed? # by default deterministic encryption is fixed @fixed ||= @deterministic && (!@deterministic.is_a?(Hash) || @deterministic[:fixed]) end
# File activerecord/lib/active_record/encryption/scheme.rb, line 36 def ignore_case? @ignore_case end
# File activerecord/lib/active_record/encryption/scheme.rb, line 57 def key_provider @key_provider_param || key_provider_from_key || deterministic_key_provider || default_key_provider end
# File activerecord/lib/active_record/encryption/scheme.rb, line 61 def merge(other_scheme) self.class.new(**to_h.merge(other_scheme.to_h)) end
# File activerecord/lib/active_record/encryption/scheme.rb, line 48 def support_unencrypted_data? @support_unencrypted_data.nil? ? ActiveRecord::Encryption.config.support_unencrypted_data : @support_unencrypted_data end
# File activerecord/lib/active_record/encryption/scheme.rb, line 65
def to_h
{ key_provider: @key_provider_param, deterministic: @deterministic, downcase: @downcase, ignore_case: @ignore_case,
previous_schemes: @previous_schemes_param, **@context_properties }.compact
end # File activerecord/lib/active_record/encryption/scheme.rb, line 70
def with_context(&block)
if @context_properties.present?
ActiveRecord::Encryption.with_encryption_context(**@context_properties, &block)
else
block.call
end
end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.