跳至内容 跳至搜索

属性加密选项的容器。

它验证并提供属性加密选项。

参见 EncryptedAttributeType, 上下文

方法
C
D
F
I
K
M
N
S
T
W

属性

[RW] previous_schemes

类公共方法

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)

# 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

实例公共方法

compatible_with?(other_scheme)

# File activerecord/lib/active_record/encryption/scheme.rb, line 78
def compatible_with?(other_scheme)
  deterministic? == other_scheme.deterministic?
end

deterministic?()

# File activerecord/lib/active_record/encryption/scheme.rb, line 44
def deterministic?
  !!@deterministic
end

downcase?()

# File activerecord/lib/active_record/encryption/scheme.rb, line 40
def downcase?
  @downcase
end

fixed?()

# 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

ignore_case?()

# File activerecord/lib/active_record/encryption/scheme.rb, line 36
def ignore_case?
  @ignore_case
end

key_provider()

# 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

merge(other_scheme)

# 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

support_unencrypted_data?()

# 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

to_h()

# 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

with_context(&block)

# 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