Sha256: 45563aec3b0cce731339058acb665aef2896ffac748c18359634f0125eaf00f5
Contents?: true
Size: 1.07 KB
Versions: 10
Compression:
Stored size: 1.07 KB
Contents
module Lockbox module Calculations def pluck(*column_names) return super unless model.respond_to?(:lockbox_attributes) lockbox_columns = column_names.map.with_index { |c, i| [model.lockbox_attributes[c.to_sym], i] }.select { |la, _i| la && !la[:migrating] } return super unless lockbox_columns.any? # replace column with ciphertext column lockbox_columns.each do |la, i| column_names[i] = la[:encrypted_attribute] end # pluck result = super(*column_names) # decrypt result # handle pluck to single columns and multiple # # we can't pass context to decrypt method # so this won't work if any options are a symbol or proc if column_names.size == 1 la = lockbox_columns.first.first result.map! { |v| model.send("decrypt_#{la[:encrypted_attribute]}", v) } else lockbox_columns.each do |la, i| result.each do |v| v[i] = model.send("decrypt_#{la[:encrypted_attribute]}", v[i]) end end end result end end end
Version data entries
10 entries across 10 versions & 1 rubygems