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

Version Path
lockbox-0.6.8 lib/lockbox/calculations.rb
lockbox-0.6.7 lib/lockbox/calculations.rb
lockbox-0.6.6 lib/lockbox/calculations.rb
lockbox-0.6.5 lib/lockbox/calculations.rb
lockbox-0.6.4 lib/lockbox/calculations.rb
lockbox-0.6.3 lib/lockbox/calculations.rb
lockbox-0.6.2 lib/lockbox/calculations.rb
lockbox-0.6.1 lib/lockbox/calculations.rb
lockbox-0.6.0 lib/lockbox/calculations.rb
lockbox-0.5.0 lib/lockbox/calculations.rb