A container of attribute encryption options.

It validates and serves attribute encryption options.

See EncryptedAttributeType, Context

Methods

Attributes

[RW] previous_schemes

Class Public methods

new(key_provider: nil, key: nil, deterministic: nil, support_unencrypted_data: nil, downcase: nil, ignore_case: nil, previous_schemes: nil, **context_properties)

📝 Source code
# 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, **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

        validate_config!
      end
🔎 See on GitHub

Instance Public methods

compatible_with?(other_scheme)

📝 Source code
# File activerecord/lib/active_record/encryption/scheme.rb, line 73
      def compatible_with?(other_scheme)
        deterministic? == other_scheme.deterministic?
      end
🔎 See on GitHub

deterministic?()

📝 Source code
# File activerecord/lib/active_record/encryption/scheme.rb, line 39
      def deterministic?
        !!@deterministic
      end
🔎 See on GitHub

downcase?()

📝 Source code
# File activerecord/lib/active_record/encryption/scheme.rb, line 35
      def downcase?
        @downcase
      end
🔎 See on GitHub

fixed?()

📝 Source code
# File activerecord/lib/active_record/encryption/scheme.rb, line 47
      def fixed?
        # by default deterministic encryption is fixed
        @fixed ||= @deterministic && (!@deterministic.is_a?(Hash) || @deterministic[:fixed])
      end
🔎 See on GitHub

ignore_case?()

📝 Source code
# File activerecord/lib/active_record/encryption/scheme.rb, line 31
      def ignore_case?
        @ignore_case
      end
🔎 See on GitHub

key_provider()

📝 Source code
# File activerecord/lib/active_record/encryption/scheme.rb, line 52
      def key_provider
        @key_provider_param || key_provider_from_key || deterministic_key_provider || default_key_provider
      end
🔎 See on GitHub

merge(other_scheme)

📝 Source code
# File activerecord/lib/active_record/encryption/scheme.rb, line 56
      def merge(other_scheme)
        self.class.new(**to_h.merge(other_scheme.to_h))
      end
🔎 See on GitHub

support_unencrypted_data?()

📝 Source code
# File activerecord/lib/active_record/encryption/scheme.rb, line 43
      def support_unencrypted_data?
        @support_unencrypted_data.nil? ? ActiveRecord::Encryption.config.support_unencrypted_data : @support_unencrypted_data
      end
🔎 See on GitHub

to_h()

📝 Source code
# File activerecord/lib/active_record/encryption/scheme.rb, line 60
      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
🔎 See on GitHub

with_context(&block)

📝 Source code
# File activerecord/lib/active_record/encryption/scheme.rb, line 65
      def with_context(&block)
        if @context_properties.present?
          ActiveRecord::Encryption.with_encryption_context(**@context_properties, &block)
        else
          block.call
        end
      end
🔎 See on GitHub