Sha256: 893dc6ec4327c12b2d219df69352619ff69da471b94427923845974da3311cee
Contents?: true
Size: 1.31 KB
Versions: 3
Compression:
Stored size: 1.31 KB
Contents
# encoding: UTF-8 module Maintain class BitmaskValue < Value include Enumerable def to_a @state.states.select {|key, options| options[:value] & @value > 0}.map(&:first) end def each(&block) to_a.each {|state| yield state } end def initialize(state, value = nil) @state = state @value = value end def set_value(value) @value = bitmask_for(value) end protected def bitmask_for(states) Array(states).compact.map{|value| value_for(value) }.compact.sort.inject(0) {|total, mask| total | mask.to_i } end def compare_value @value ||= 0 end def compare_value_for(state) bitmask_for(state) end def method_missing(method, *args) if (method.to_s =~ /^(.+)(\?|!)$/) && @state.states.has_key?($1.to_sym) compare = value_for($1) if $2 == '?' self.class.class_eval <<-EOC def #{method} value_for(@value) & #{compare.inspect} != 0 end EOC value_for(@value) & compare != 0 else self.class.class_eval <<-EOC def #{method} @value = (@value || 0) | #{compare.inspect} end EOC @value = (@value || 0) | compare end else super end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
maintain-0.2.23 | lib/maintain/bitmask_value.rb |
maintain-0.2.22 | lib/maintain/bitmask_value.rb |
maintain-0.2.21 | lib/maintain/bitmask_value.rb |