W3cubDocs

/Ruby on Rails 7.0

class ActiveRecord::Encryption::Scheme

Parent:
Object

A container of attribute encryption options.

It validates and serves attribute encryption options.

See EncryptedAttributeType, Context

Attributes

previous_schemes[RW]

Public Class Methods

new(key_provider: nil, key: nil, deterministic: nil, downcase: nil, ignore_case: nil, previous_schemes: nil, **context_properties) Show source
# File activerecord/lib/active_record/encryption/scheme.rb, line 13
def initialize(key_provider: nil, key: nil, deterministic: nil, downcase: nil, ignore_case: nil,
               previous_schemes: 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
  @downcase = downcase || ignore_case
  @ignore_case = ignore_case
  @previous_schemes_param = previous_schemes
  @previous_schemes = Array.wrap(previous_schemes)
  @context_properties = context_properties

  validate_config!
end

Public Instance Methods

deterministic?() Show source
# File activerecord/lib/active_record/encryption/scheme.rb, line 38
def deterministic?
  @deterministic
end
downcase?() Show source
# File activerecord/lib/active_record/encryption/scheme.rb, line 34
def downcase?
  @downcase
end
fixed?() Show source
# File activerecord/lib/active_record/encryption/scheme.rb, line 42
def fixed?
  # by default deterministic encryption is fixed
  @fixed ||= @deterministic && ([email protected]_a?(Hash) || @deterministic[:fixed])
end
ignore_case?() Show source
# File activerecord/lib/active_record/encryption/scheme.rb, line 30
def ignore_case?
  @ignore_case
end
key_provider() Show source
# File activerecord/lib/active_record/encryption/scheme.rb, line 47
def key_provider
  @key_provider ||= begin
    validate_keys!
    @key_provider_param || build_key_provider
  end
end
merge(other_scheme) Show source
# File activerecord/lib/active_record/encryption/scheme.rb, line 54
def merge(other_scheme)
  self.class.new(**to_h.merge(other_scheme.to_h))
end
to_h() Show source
# File activerecord/lib/active_record/encryption/scheme.rb, line 58
def to_h
  { key_provider: @key_provider_param, key: @key, deterministic: @deterministic, downcase: @downcase, ignore_case: @ignore_case,
    previous_schemes: @previous_schemes_param, **@context_properties }.compact
end
with_context(&block) Show source
# File activerecord/lib/active_record/encryption/scheme.rb, line 63
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.