Module: ConcernsOnRails::Models::Encryptable::ClassMethods

Includes:
Support::ColumnGuard
Defined in:
lib/concerns_on_rails/models/encryptable.rb

Instance Method Summary collapse

Methods included from Support::ColumnGuard

#ensure_columns!

Instance Method Details

#encryptable(*fields, type: :string, key: nil) ⇒ Object

Declare one or more encrypted fields. Repeatable; per-field options.

Raises:

  • (ArgumentError)


214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# File 'lib/concerns_on_rails/models/encryptable.rb', line 214

def encryptable(*fields, type: :string, key: nil)
  raise ArgumentError, "#{LABEL}: at least one field is required" if fields.empty?

  type = type.to_sym
  raise ArgumentError, "#{LABEL}: unknown type ':#{type}' (valid: #{VALID_TYPES.join(', ')})" unless VALID_TYPES.include?(type)

  ensure_columns!(LABEL, *fields)

  fields.each do |field|
    field = field.to_sym
    encryptable_guard_auditable!(field)
    self.encryptable_rules = encryptable_rules.merge(field => { type: type, key: key })
    attribute field, EncryptedType.new(type: type, key: key)
    encryptable_define_helpers(field)
    encryptable_register_filter_parameter(field)
  end
end