Sha256: e360a0f4063f18504f3b880ee2cf1516e9b76f98b7aa1128f63b679afd146de9

Contents?: true

Size: 827 Bytes

Versions: 1

Compression:

Stored size: 827 Bytes

Contents

module MongoidExt
  module Encryptor
    extend ActiveSupport::Concern

    included do
      require 'encryptor'
    end

    module ClassMethods
      def encrypted_field(name, options = {})
        key = options.delete(:key)
        raise ArgumentError, ":key option must be given" if key.nil?

        field(name, options)
        alias_method :"#{name}_encrypted", name

        define_method(name) do
          value = [send(:"#{name}_encrypted").to_s].pack('H*')

          return if value.blank?
          Marshal.load(::Encryptor.decrypt(value, :key => key))
        end

        define_method("#{name}=") do |v|
          marshaled = Marshal.dump(v)
          enc_value = ::Encryptor.encrypt(marshaled, :key => key).unpack('H*')[0]

          attributes[name.to_s] = enc_value
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mongoid_ext-0.9.0 lib/mongoid_ext/encryptor.rb