Acts As Bytefield :: ActiveRecord Bytefield Plugin
Posted by admin Tue, 24 Apr 2007 02:58:00 GMT
We needed a convenient way to store a series of values in a single field. A bitfield would not do because it would only allow a value of 1 or 0 for each field, and we wanted to be able to store at least 3 values for each field.
So I found Gabriel Gironda’s acts_as_bitfield plugin and made a few tweaks. ActsAsBytefield is the result. It allows storage of 256 values in each field, or 255 discrete values ranging from 0-255 (unsigned char or byte) for each value in a MySQL varchar(255) field.
NOTE: Gabriel’s site has been down for some time. My own repository has also been down but is now back up. Sorry for the inconvenience.
Values greater than 255, or less than 0 wrap around. For example, setting a bytefield column to -1 will actually set it to 255, and setting it to -2 will actually set it to 254, etc.
Installation
./script/plugin install acts_as_bytefieldOR
./script/plugin install https://svn.cbciweb.com/svn/plugins/acts_as_bytefieldDocumentation (RDoc)
rake rdocTesting
The tests require rspec
rake testUsage
- Create a string column in your table – varchar(255)
- Add this directive to your model:
acts_as_bytefield :bytefield_column_name, :fields => [:field_name_one, :field_name_two]You will then be able to use the model in the following manner, for example:
class SomeModel < ActiveRecord::Base
acts_as_bytefield :bfield, :fields => [:test, :production]
end
obj = SomeModel.new(:test => 1)
obj.test #=> 1
obj.test? #=> 1
obj.production? #=> 0
obj.test = 0
obj.production = 65
obj.save
obj.test? #=> 0
obj.production? #=> 65
# The field that's storing the value:
obj.bfield #=> "\000A"
Sounds very useful. It seems the SVN server is down though. The original bitfield version also doesn’t seem to be around either. Anyone know another URL for either?
Yes. The original plugin site of Gironda (bitfield) is down. And here, the svn repository is down. Wonder why this blog post exists, at all.
Chris, it will be great if you could get your repository up.
Sorry folks. It is available now using the URL in the original article.