Sha256: ed4db8e37721c4c62eeb6c781768eea0876c58ec3d39fdf300c520f2d88d9ae3

Contents?: true

Size: 1.62 KB

Versions: 13

Compression:

Stored size: 1.62 KB

Contents

# -*- coding: utf-8 -*-


require 'xot/bit_flag'
require 'xot/block_util'


module Xot


  module BitFlagAccessor

    def bit_flag_accessor(name, bit_flag = nil, **flags, &block)
      bf = define_bit_flag name, bit_flag, flags, block
      define_bit_flag_writer name, bf
      define_bit_flag_reader name, bf
    end

    def bit_flag_writer(name, bit_flag = nil, **flags, &block)
      define_bit_flag_writer name, define_bit_flag(name, bit_flag, flags, block)
    end

    def bit_flag_reader(name, bit_flag = nil, **flags, &block)
      define_bit_flag_reader name, define_bit_flag(name, bit_flag, flags, block)
    end

    private

      def define_bit_flag(name, bit_flag, flags, block)
        bit_flag ||= Xot::BitFlag.new(**flags)
        Xot::BlockUtil.instance_eval_or_block_call bit_flag, &block if block

        define_singleton_method "#{name}_flag".intern do
          bit_flag
        end

        bit_flag
      end

      def define_bit_flag_writer(name, bit_flag)
        writer = "#{name}=".intern
        setter = "bf_set_#{name}__".intern

        alias_method setter, writer
        private setter

        define_method writer do |*symbols|
          __send__ setter, bit_flag.symbols2bits(symbols)
        end

        name
      end

      def define_bit_flag_reader(name, bit_flag)
        reader = name.intern
        getter = "bf_get_#{name}__".intern

        alias_method getter, reader
        private getter

        define_method reader do
          bit_flag.bits2symbols __send__(getter)
        end

        name
      end

  end# BitFlagAccessor


end# Xot


class Module

  include Xot::BitFlagAccessor

end# Module

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
xot-0.1.34 lib/xot/bit_flag_accessor.rb
xot-0.1.33 lib/xot/bit_flag_accessor.rb
xot-0.1.32 lib/xot/bit_flag_accessor.rb
xot-0.1.31 lib/xot/bit_flag_accessor.rb
xot-0.1.30 lib/xot/bit_flag_accessor.rb
xot-0.1.29 lib/xot/bit_flag_accessor.rb
xot-0.1.28 lib/xot/bit_flag_accessor.rb
xot-0.1.27 lib/xot/bit_flag_accessor.rb
xot-0.1.26 lib/xot/bit_flag_accessor.rb
xot-0.1.25 lib/xot/bit_flag_accessor.rb
xot-0.1.24 lib/xot/bit_flag_accessor.rb
xot-0.1.23 lib/xot/bit_flag_accessor.rb
xot-0.1.22 lib/xot/bit_flag_accessor.rb