Class: SimpleMaster::Master::Column::BitmaskColumn

Inherits:
SimpleMaster::Master::Column show all
Defined in:
lib/simple_master/master/column/bitmask_column.rb

Instance Attribute Summary collapse

Attributes inherited from SimpleMaster::Master::Column

#group_key, #options

Instance Method Summary collapse

Methods inherited from SimpleMaster::Master::Column

column_type, column_types, #db_column_name, inherited, register

Constructor Details

#initialize(name, options) ⇒ BitmaskColumn

Returns a new instance of BitmaskColumn.



11
12
13
14
15
16
# File 'lib/simple_master/master/column/bitmask_column.rb', line 11

def initialize(name, options)
  @bitmask = options[:bitmask]
  @const_name = "BITMASK_FOR_#{name.upcase}"

  super
end

Instance Attribute Details

#bitmaskObject (readonly)

Returns the value of attribute bitmask.



8
9
10
# File 'lib/simple_master/master/column/bitmask_column.rb', line 8

def bitmask
  @bitmask
end

#const_nameObject (readonly)

Returns the value of attribute const_name.



9
10
11
# File 'lib/simple_master/master/column/bitmask_column.rb', line 9

def const_name
  @const_name
end

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/simple_master/master/column/bitmask_column.rb', line 7

def name
  @name
end

Instance Method Details

#init(master_class, for_test = false) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/simple_master/master/column/bitmask_column.rb', line 18

def init(master_class, for_test = false)
  super

  master_class.simple_master_module.const_set(const_name, bitmask) unless master_class.const_defined?(const_name)

  master_class.simple_master_module.class_eval <<-RUBY, __FILE__, __LINE__ + 1
    def #{name}
      return EMPTY_ARRAY if @#{name}.nil?
      #{const_name}.filter_map.with_index {
        _1 if (1 << _2) & @#{name} != 0
      }
    end

    def #{name}_value
      @#{name}
    end

    def #{name}_value=(value)
      #{code_for_dirty_check if for_test}
      @#{name} = value&.to_i
    end
  RUBY
end