Class: ActiveRecord::Encryption::Scheme
- Inherits:
-
Object
- Object
- ActiveRecord::Encryption::Scheme
- Defined in:
- lib/active_record/encryption/scheme.rb
Overview
A container of attribute encryption options.
It validates and serves attribute encryption options.
See EncryptedAttributeType, Context
Instance Attribute Summary collapse
-
#previous_schemes ⇒ Object
Returns the value of attribute previous_schemes.
Instance Method Summary collapse
- #compatible_with?(other_scheme) ⇒ Boolean
- #deterministic? ⇒ Boolean
- #downcase? ⇒ Boolean
- #fixed? ⇒ Boolean
- #ignore_case? ⇒ Boolean
-
#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) ⇒ Scheme
constructor
A new instance of Scheme.
- #key_provider ⇒ Object
- #merge(other_scheme) ⇒ Object
- #support_unencrypted_data? ⇒ Boolean
- #to_h ⇒ Object
- #with_context(&block) ⇒ Object
Constructor Details
#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) ⇒ Scheme
Returns a new instance of Scheme.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File '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 |
Instance Attribute Details
#previous_schemes ⇒ Object
Returns the value of attribute previous_schemes.
11 12 13 |
# File 'lib/active_record/encryption/scheme.rb', line 11 def previous_schemes @previous_schemes end |
Instance Method Details
#compatible_with?(other_scheme) ⇒ Boolean
78 79 80 |
# File 'lib/active_record/encryption/scheme.rb', line 78 def compatible_with?(other_scheme) deterministic? == other_scheme.deterministic? end |
#deterministic? ⇒ Boolean
44 45 46 |
# File 'lib/active_record/encryption/scheme.rb', line 44 def deterministic? !!@deterministic end |
#downcase? ⇒ Boolean
40 41 42 |
# File 'lib/active_record/encryption/scheme.rb', line 40 def downcase? @downcase end |
#fixed? ⇒ Boolean
52 53 54 55 |
# File '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? ⇒ Boolean
36 37 38 |
# File 'lib/active_record/encryption/scheme.rb', line 36 def ignore_case? @ignore_case end |
#key_provider ⇒ Object
57 58 59 |
# File '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) ⇒ Object
61 62 63 |
# File '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? ⇒ Boolean
48 49 50 |
# File '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 ⇒ Object
65 66 67 68 |
# File '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) ⇒ Object
70 71 72 73 74 75 76 |
# File '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 |