Sha256: 6030edca385a1baa4318d549cae64d97c933668fc6f1ead143866426f595b1b4

Contents?: true

Size: 1.77 KB

Versions: 49

Compression:

Stored size: 1.77 KB

Contents

require 'dm-core'

module DataMapper
  class Property
    class CryptFlags < DataMapper::Property::Integer
      def self.flags
        PatronusFati::SSID_CRYPT_MAP.values.map(&:to_sym)
      end

      attr_reader :flag_map

      def custom?
        true
      end

      #def dump(value)
      #  unless value.nil?
      #    flags = Array(value).map(&:to_s)
      #    flags.uniq!

      #    valid_values = flags & PatronusFati::SSID_CRYPT_MAP.values
      #    PatronusFati::SSID_CRYPT_MAP.map { |k, v| valid_values.include?(v) ? k : 0 }.inject(&:+)
      #  end
      #end

      def dump(value)
        unless value.nil?
          flags = Array(value).map { |flag| flag.to_sym }
          flags.uniq!

          flag = 0

          flag_map.invert.values_at(*flags).each do |i|
            next if i.nil?
            flag += (1 << i)
          end

          flag
        end
      end

      def initialize(model, name, options = {})
        super

        @flag_map = {}

        flags = options.fetch(:flags, self.class.flags)
        flags.each_with_index do |flag, i|
          flag_map[i] = flag
        end
      end

      #def load(value)
      #  return [] if value.nil?
      #  PatronusFati::SSID_CRYPT_MAP.select { |k, v| (k & value) == k }.map { |k, v| v }
      #end

      def load(value)
        return [] if value.nil? || value <= 0

        begin
          matches = []

          0.upto(flag_map.size - 1) do |i|
            matches << flag_map[i] if value[i] == 1
          end

          matches.compact
        rescue TypeError, Errno::EDOM
          []
        end
      end

      def typecast(value)
        case value
          when nil     then nil
          when ::Array then value.map { |v| v.to_sym }
          else [value.to_sym]
        end
      end
    end
  end
end

Version data entries

49 entries across 49 versions & 1 rubygems

Version Path
patronus_fati-1.0.1 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-1.0.0 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.32 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.31 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.30 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.24 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.23 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.22 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.21 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.20 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.19 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.18 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.17 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.16 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.15 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.14 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.13 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.12 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.11 lib/patronus_fati/data_mapper/crypt_flags.rb
patronus_fati-0.9.10 lib/patronus_fati/data_mapper/crypt_flags.rb