criteria_operator 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6d6ba55f042935bb7b916c270c415c863d305565
4
- data.tar.gz: 51e3ace7e81abdddc0f52bfc816d33364d946c26
3
+ metadata.gz: 1eaabc0ba95046a9d84d5b3232829539f29ce3e6
4
+ data.tar.gz: c63f6abba970c73c9c61bcd1b912f39f33e3f0fa
5
5
  SHA512:
6
- metadata.gz: 2f2eed740d9047e1ee324e5261c75f84ed38f37bc3c655a975c611573ad8e8dd2077ccb9322c0d1d1fcdb634fa2ee3f585be988957b111d6f92b4320dceb2228
7
- data.tar.gz: 1f49583c147795674709284e630f86428de1a265d07fa4bfefc72cbd842095c3e9f91f9cd387527bf7c31464db26dacc86fcb2fe18249e9f5173e8a05900507d
6
+ metadata.gz: de96f70089d90c409bc411eabcac52d1f239955fff519125013efd6f483ed27721d08a75f6eb181a3d534a1a74c1b06d24103081d917085eed514559f10a2e29
7
+ data.tar.gz: 6c40216bfe50a557a4e1e736079ad92690b4a23ed9c1cbe6c6fc44a92db9e3abfe3e3ae42cb7f076b81f59322e9e9d9f72bce241c89287aee5c288850577e10e
data/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  # CriteriaOperator
12
12
 
13
- This gem provides classes to create arbitrary complex conditions, by building an expression tree. ...
13
+ This gem provides classes to create arbitrary complex conditions, by building an expression tree. Currently only basic operations are implemented.
14
14
 
15
15
  ## Installation
16
16
 
@@ -30,7 +30,72 @@ Or install it yourself as:
30
30
 
31
31
  ## Usage
32
32
 
33
- TODO: Write usage instructions here
33
+ For complete usage information, [read the docs](http://www.rubydoc.info/github/TheFlow0360/criteria_operator/master/frames)!
34
+
35
+ 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:
36
+
37
+ ### BinaryOperator
38
+
39
+ 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:
40
+ - Equal *(default)*
41
+ - Not Equal
42
+ - Greater
43
+ - Greater or Equal
44
+ - Less
45
+ - Less or Equal
46
+
47
+ These types are represented by constants in the module `BinaryOperatorType`.
48
+
49
+ Usage example:
50
+
51
+ # checks if the operands op1 and op2 are different
52
+ operator = CriteriaOperator::BinaryOperator.new op1, op2, CriteriaOperator::BinaryOperatorType::NOT_EQUAL
53
+
54
+
55
+ ### GroupOperator
56
+
57
+ The `GroupOperator` is used to connect an amount of conditions (`BaseOperator`s) with either `AND` *(default)* or `OR` (see `GroupOperatorType`).
58
+
59
+ Usage example:
60
+
61
+ # checks if any of the conditions represented by operands op1 through op3 is true
62
+ operator = CriteriaOperator::GroupOperator.new [op1, op2, op3], CriteriaOperator::GroupOperatorType::OR
63
+
64
+
65
+ ### UnaryOperator
66
+
67
+ 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:
68
+ - NOT *(default)*
69
+ - IS NULL
70
+ - Plus
71
+ - Minus
72
+
73
+ These types can be found in the `UnaryOperatorType` module.
74
+
75
+ Usage example:
76
+
77
+ # invert the sign of the result returned by operand op1
78
+ operator = CriteriaOperator::UnaryOperator.new op1, CriteriaOperator::UnaryOperatorType::MINUS
79
+
80
+
81
+ ### OperandProperty
82
+
83
+ 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.
84
+
85
+ Usage example:
86
+
87
+ # represents a column named 'integer_value' (without quotes)
88
+ operand = CriteriaOperator::OperandProperty.new 'integer_value'
89
+
90
+
91
+ ### OperandValue
92
+
93
+ The `OperandValue` is, just like the `OperandProperty`, an operand. It represents any kind of value.
94
+
95
+ Usage example:
96
+
97
+ # represents the numeric value forty-two
98
+ operand = CriteriaOperator::OperandValue.new 42
34
99
 
35
100
  ## Development
36
101
 
@@ -42,6 +107,8 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
42
107
 
43
108
  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](http://contributor-covenant.org) code of conduct.
44
109
 
110
+ 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.
111
+
45
112
 
46
113
  ## License
47
114
 
@@ -14,10 +14,33 @@ module CriteriaOperator
14
14
  raise NotImplementedError
15
15
  end
16
16
 
17
+ # Returns a string representation of the operator (including all sub-operators).
18
+ # YAML is used for serialization.
19
+ # @return [String] The serialized operator.
20
+ def serialize
21
+ BaseOperator.serialize(self)
22
+ end
23
+
24
+ # Returns a string representation of an operator (including all sub-operators).
25
+ # YAML is used for serialization.
26
+ # @param [BaseOperator] op The operator to serialize.
27
+ # @return [String] The serialized operator.
28
+ def self.serialize(op)
29
+ YAML.dump(op)
30
+ end
31
+
32
+ # Deserializes an operator from a string.
33
+ # String must be YAML-serialized.
34
+ # @param [String] serialized_op The serialized operator.
35
+ # @return [BaseOperator] The deserialized operator.
36
+ def self.deserialize(serialized_op)
37
+ YAML.safe_load(serialized_op, ObjectSpace.each_object(Class).select { |klass| klass < BaseOperator })
38
+ end
39
+
17
40
  protected
18
41
 
19
42
  # Clones the passed operator if it isn't nil.
20
- # @param [BaseOperator] op the operator to clone
43
+ # @param [BaseOperator] op The operator to clone.
21
44
  # @return [BaseOperator, nil] The cloned base operator, if it exists, or nil, otherwise.
22
45
  def clone_or_nil(op)
23
46
  return nil if op.nil? || !op.is_a?(BaseOperator)
@@ -1,5 +1,5 @@
1
1
  module CriteriaOperator
2
2
 
3
3
  # the gem version used in the gemspec
4
- VERSION = '0.2.0'
4
+ VERSION = '0.3.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: criteria_operator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Koch
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-11 00:00:00.000000000 Z
11
+ date: 2017-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler