Sha256: 41c08ad172a25bdf901859de3d61ef143b55857d71e79b90ac1b181c33bc2f18

Contents?: true

Size: 1.28 KB

Versions: 15

Compression:

Stored size: 1.28 KB

Contents

require 'ardm/property/object'
require 'ardm/property/support/flags'

module Ardm
  class Property
    class Flag < Object
      include Flags

      load_as ::Object
      dump_as ::Integer

      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? || 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 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 typecast(value)
        case value
          when nil     then nil
          when ::Array then value.map { |v| v.to_sym }
          else [value.to_sym]
        end
      end

    end # class Flag
  end # class Property
end # module Ardm

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
ardm-0.4.0.ar427 lib/ardm/property/flag.rb
ardm-0.4.0 lib/ardm/property/flag.rb
ardm-0.3.2 lib/ardm/property/flag.rb
ardm-0.3.1 lib/ardm/property/flag.rb
ardm-0.3.0 lib/ardm/property/flag.rb
ardm-0.2.7 lib/ardm/property/flag.rb
ardm-0.2.6 lib/ardm/property/flag.rb
ardm-0.2.5 lib/ardm/property/flag.rb
ardm-0.2.4 lib/ardm/property/flag.rb
ardm-0.2.3 lib/ardm/property/flag.rb
ardm-0.2.2 lib/ardm/property/flag.rb
ardm-0.2.1 lib/ardm/property/flag.rb
ardm-0.2.0 lib/ardm/property/flag.rb
ardm-0.1.0 lib/ardm/property/flag.rb
ardm-0.0.1 lib/ardm/property/flag.rb