Class: FlagShihTzu::TriStateEncoder

Inherits:
Object
  • Object
show all
Defined in:
lib/flag_shih_tzu.rb

Class Method Summary collapse

Class Method Details

.bit_widthObject



136
137
138
# File 'lib/flag_shih_tzu.rb', line 136

def bit_width
  2
end

.changed?(from_bits, to_bits, flag_mask) ⇒ Boolean

Returns:

  • (Boolean)


161
162
163
# File 'lib/flag_shih_tzu.rb', line 161

def changed?(from_bits, to_bits, flag_mask)
  (from_bits & flag_mask) != (to_bits & flag_mask)
end

.disabled_sql_value(_flag_mask) ⇒ Object



169
170
171
# File 'lib/flag_shih_tzu.rb', line 169

def disabled_sql_value(_flag_mask)
  0
end

.disabled_value(bits, flag_mask) ⇒ Object



156
157
158
159
# File 'lib/flag_shih_tzu.rb', line 156

def disabled_value(bits, flag_mask)
  value = read(bits, flag_mask)
  value.nil? ? nil : !value
end

.enabled_sql_value(flag_mask) ⇒ Object



165
166
167
# File 'lib/flag_shih_tzu.rb', line 165

def enabled_sql_value(flag_mask)
  low_bit(flag_mask)
end

.mask(flag_key) ⇒ Object



140
141
142
# File 'lib/flag_shih_tzu.rb', line 140

def mask(flag_key)
  ((1 << bit_width) - 1) << ((flag_key - 1) * bit_width)
end

.matches?(bits, flag_mask, enabled) ⇒ Boolean

Returns:

  • (Boolean)


191
192
193
# File 'lib/flag_shih_tzu.rb', line 191

def matches?(bits, flag_mask, enabled)
  (bits & flag_mask) == sql_value_for(flag_mask, enabled)
end

.nil_sql_value(flag_mask) ⇒ Object



173
174
175
# File 'lib/flag_shih_tzu.rb', line 173

def nil_sql_value(flag_mask)
  flag_mask
end

.read(bits, flag_mask) ⇒ Object



144
145
146
147
148
149
# File 'lib/flag_shih_tzu.rb', line 144

def read(bits, flag_mask)
  raw_value = bits & flag_mask
  return if raw_value == flag_mask

  raw_value != 0
end

.sql_operand_for(flag_mask, enabled) ⇒ Object



187
188
189
# File 'lib/flag_shih_tzu.rb', line 187

def sql_operand_for(flag_mask, enabled)
  "#{flag_mask} | #{sql_value_for(flag_mask, enabled)}"
end

.sql_operator_for(_enabled) ⇒ Object



183
184
185
# File 'lib/flag_shih_tzu.rb', line 183

def sql_operator_for(_enabled)
  "& ~"
end

.sql_value_for(flag_mask, enabled) ⇒ Object



177
178
179
180
181
# File 'lib/flag_shih_tzu.rb', line 177

def sql_value_for(flag_mask, enabled)
  return nil_sql_value(flag_mask) if enabled.nil?

  enabled ? enabled_sql_value(flag_mask) : disabled_sql_value(flag_mask)
end

.write(bits, flag_mask, value) ⇒ Object



151
152
153
154
# File 'lib/flag_shih_tzu.rb', line 151

def write(bits, flag_mask, value)
  cleared_bits = bits & ~flag_mask
  cleared_bits | encoded_value(flag_mask, value)
end