[WIP] Selector
Composable multi-type conditions.
Synopsis
White Lists
selector = Selector.new only: [:foo, :qux]
selector[:foo] # => true
selector[:bar] # => false
selector = Selector.new only: /foo/
selector[:foobar] # => true
selector[:bar] # => false
selector = Selector.new only: 1..3
selector[2.4] # => true
selector[0] # => false
selector = Selector.new only: -> value { value.is_a? Hash }
selector[foo: :FOO] # => true
selector[:foo] # => false
Black Lists
selector = Selector.new except: [:bar, :qux]
selector[:foo] # => true
selector[:bar] # => false
Negation
blacklist = Selector.new except: /bar/
selector = !blacklist
selector[:bar] # => true
selector[:foo] # => false
Algebra
blacklist = Selector.new except: /bar/
whitelist = Selector.new only: /foo/
selector = whitelist & blacklist
selector[:foobaz] # => true
selector[:foobar] # => false
blacklist = Selector.new except: /bar/
whitelist = Selector.new only: /foo/
selector = whitelist - blacklist # = whitelist + !blacklist
selector[:foobar] # => true
selector[:foo] # => false
selector[:bar] # => false
blacklist = Selector.new except: 1..5
whitelist = Selector.new only: 4..8
selector = whitelist | blacklist # = !(!whitelist + !blacklist)
selector[0.5] # => true
selector[5.5] # => true
selector[2.5] # => false
Immutability:
Selector.new.frozen? # => true
Installation
Add this line to your application's Gemfile:
# Gemfile
gem "selector"
Then execute:
bundle
Or add it manually:
gem install selector
Compatibility
Tested under rubies compatible to MRI 1.9.3+.
Uses RSpec 3.0+ for testing and hexx-suit for dev/test tools collection.
Contributing
- Read the STYLEGUIDE
- Fork the project
- Create your feature branch (
git checkout -b my-new-feature
) - Add tests for it
- Commit your changes (
git commit -am '[UPDATE] Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
License
See the MIT LICENSE.