Project

banditry

0.0
No commit activity in last 3 years
No release in over 3 years
Banditry provides a generic wrapper class to manage a bitmask attribute. Formerly known as "banditmask".
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.15
~> 5.7
>= 0
~> 12.0
 Project Readme

Gem Version Build Status

Banditry

Banditry provides a generic wrapper for working with bitmasks.

Installation

Add this line to your application's Gemfile:

gem 'banditry'

And then execute:

$ bundle

Or install it yourself as:

$ gem install banditry

NB: Banditry likely works on earlier versions of Ruby, but is only tested against versions 2.3 and above.

Usage

Banditry::BanditMask

Create a class which inherits from Banditry::BanditMask, and declare the available bit names and their corresponding values.

class ChmodMask < Banditry::BanditMask
  bit :read,    0b001
  bit :write,   0b010
  bit :execute, 0b100
end

ChmodMask.bits # => { :read => 1, :write => 2, :execute => 4 }

Instantiate a new mask class:

mask = ChmodMask.new
# or
current_bitmask = 0b001 | 0b010
mask = ChmodMask.new current_bitmask

Enable bits by name.

mask << :read << :execute

Ask whether specific bits are enabled.

mask.include? :read           # => true
mask.include? :write          # => false
mask.include? :execute        # => true
mask.include? :read, :write   # => false
mask.include? :read, :execute # => true

Retrieve a list of all currently enabled bits.

mask.bits # => [:read, :execute]

Banditry

In a class with a bitmask attribute, extend Banditry and call Banditry.bandit_mask to add accessor methods for working with the bitmask attribute.

class ObjectWithBitmaskAttribute
  attr_accessor :bitmask

  extend Banditry
  bandit_mask :bitmask, as: :bits, with: ChmodMask
end

obj = ObjectWithBitmaskAttribute.new
obj.bitmask = 0b001

This gives you a reader method which returns the Banditry::BanditMask representation of the bitmask attribute.

obj.bits # => #<ChmodMask:0x007f941b9518c8 @bitmask=1>

It also gives you a writer method which lets you modify the bitmask. The writer accepts Banditry::BanditMask objects or an Array of bits.

obj.bits |= :write
obj.bitmask # => 3
obj.bits = [:read, :execute]
obj.bitmask # => 5

Finally, it gives you a query method for checking whether particular bits are set on the bitmask.

obj.bits? :read           # => true
obj.bits? :write          # => false
obj.bits? :execute        # => true
obj.bits? :read, :write   # => false
obj.bits? :read, :execute # => true

Development

After checking out the repo, run bin/setup to install dependencies. Then, run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release to create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

  1. Fork it ( https://github.com/jparker/banditry/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request