SimpleAttrs
The goal is to provide a simple DSL to define attributes for your models.
Features
- Adds a reader/write for each attribute using
attr_accessor. - Adds an initializer that takes in an options hash to define intial values. The default initializer will ensure that the option hash only includes values defined as a simple_attr.
SimpleAttrs does not support type checking, coercion or default values. For a more complex solution, look at these other great libraries: Attrs, Attrio, Virtus
Installation
Add this line to your application's Gemfile:
gem 'simple_attrs'And then execute:
$ bundle
Or install it yourself as:
$ gem install simple_attrs
Usage
require 'simple_attrs'
class SimpleExample
include SimpleAttrs
has_simple_attr :attr1
has_simple_attr :attr2
has_simple_attr :attr3
end
ex = SimpleExample.new(attr1: 1, attr2: 2)
ex.attributes
=> { attr1: 1, attr2: 2, attr3: nil }
ex = SimpleExample.new(invalid_attr: 1)
ArgumentError: Cannot set invalid_attr through initializerPerformance
If you want a bare-bones attribute DSL, simple_attrs is the performant solution you've been looking for. Check out the benchmarking code here: simple_attrs_benchmark.
Ran on MBP, Processor: 2.4GHz i5, Memory: 8GB
| Gem | 1 attr / 1 obj | 25 attrs / 1 obj | 1 attr / 100,000 objs | 25 attrs / 100,000 objs |
|---|---|---|---|---|
| Attrio | 0.001390 |
0.000293 |
1.234200 |
22.420148 |
| Attrs | 0.000013 |
0.000104 |
0.177039 |
_4.367675 |
| Simple Attrs | 0.000012 |
0.000010 |
0.185468 |
_0.176154 |
| Virtus | 0.000256 |
0.000396 |
0.763091 |
11.319977 |
simple_attrs can provide a huge performance gain if you plan on instantiating many objects.
Contributing
- Fork it ( https://github.com/codeshoppe/simple_attrs/fork )
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request