No release in over 3 years
Low commit activity in last 3 years
This gem provides classes to create arbitrary complex chains respectively trees of conditions. This enables handling filter statements as objects.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.15
~> 0.8
~> 5.0
~> 12.0
 Project Readme

Gem Version License Build Status Dependency Status Code Climate Coverage Status Inline docs CII Best Practices

CriteriaOperator

This gem provides classes to create arbitrary complex conditions, by building an expression tree. Currently only basic operations are implemented.

Installation

Add this line to your application's Gemfile:

gem 'criteria_operator'

And then execute:

$ bundle

Or install it yourself as:

$ gem install criteria_operator

Usage

For complete usage information, read the docs!

All relevant classes inherit from BaseOperator. Generally, you'll want to have a root node of this type, which will in turn contain the whole expression tree. Currently, there are the following operators:

BinaryOperator

The BinaryOperator is the most commonly used. It represents a binary operation, meaning an operator with a left and right hand side operand, each. The operands can be any BaseOperator. The operator has to be one of the following types:

  • Equal (default)
  • Not Equal
  • Greater
  • Greater or Equal
  • Less
  • Less or Equal

These types are represented by constants in the module BinaryOperatorType.

Usage example:

 # checks if the operands op1 and op2 are different
 operator = CriteriaOperator::BinaryOperator.new op1, op2, CriteriaOperator::BinaryOperatorType::NOT_EQUAL

GroupOperator

The GroupOperator is used to connect an amount of conditions (BaseOperators) with either AND (default) or OR (see GroupOperatorType).

Usage example:

# checks if any of the conditions represented by operands op1 through op3 is true
operator = CriteriaOperator::GroupOperator.new [op1, op2, op3], CriteriaOperator::GroupOperatorType::OR

UnaryOperator

The UnaryOperator is used to perform simple checks or transform a value represented by an operand (BaseOperator). It takes on operand as well and has one of the following types:

  • NOT (default)
  • IS NULL
  • Plus
  • Minus

These types can be found in the UnaryOperatorType module.

Usage example:

# invert the sign of the result returned by operand op1
operator = CriteriaOperator::UnaryOperator.new op1, CriteriaOperator::UnaryOperatorType::MINUS

OperandProperty

The OperandProperty is, as the name implies, an operand. This means, it does not work with any other operands like operators do. If presented as a tree, operands always are leaves. The OperandProperty describes a property through it's name.

Usage example:

# represents a column named 'integer_value' (without quotes)
operand = CriteriaOperator::OperandProperty.new 'integer_value'

OperandValue

The OperandValue is, just like the OperandProperty, an operand. It represents any kind of value.

Usage example:

# represents the numeric value forty-two
operand = CriteriaOperator::OperandValue.new 42

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests. You can also 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, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/TheFlow0360/criteria_operator. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

Prerequisite to the acceptance of any pull requests is a successful build (this will be checked automatically) as well as test coverage and complete documentation.

License

The gem is available as open source under the terms of the MIT License.