Module: BanditMask::Banditry

Defined in:
lib/banditmask/banditry.rb

Instance Method Summary collapse

Instance Method Details

#bandit_mask(attribute, as:, with: BanditMask) ⇒ Object

Creates wrapper methods for reading, writing, and querying the bitmask stored in attribute using the class with. with defaults to BanditMask, but you can (and probably should) define your own class inheriting from BanditMask to fill this role. The name of the accessor methods will be derived from as, e.g., if as is :foo, the methods will be named :foo, :foo=, and :foo?.

The reader method will return a BanditMask representation of attribute.

The writer method overwrites the current bitmask if with an Array of bits, or it updates the current bitmask if sent an individual bit, e.g., using #|.

In addition to the accessor methods, a query method that delegates to BanditMask#include? will be added.

class FileMask < BanditMask
  bit :r, 0b001
  bit :w, 0b010
  bit :e, 0b100
end

class FileObject
  attr_accessor :mode_mask

  extend BanditMask::Banditry
  bandit_mask :mode_mask, as: :mode, with: FileMask
end

file = FileObject.new
file.mode_mask       # => nil
file.mode |= :r
file.mode_mask       # => 1
file.mode |= :w
file.mode_mask       # => 3
file.mode = [:r, :x]
file.mode_mask       # => 5


44
45
46
47
48
49
50
# File 'lib/banditmask/banditry.rb', line 44

def bandit_mask(attribute, as:, with: BanditMask)
  class_eval do
    generate_reader attribute, as, with
    generate_writer attribute, as, with
    generate_query attribute, as, with
  end
end