predicator 0.3.0 → 1.2.1

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.
Files changed (40) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +46 -0
  4. data/.travis.yml +3 -2
  5. data/HISTORY.md +31 -0
  6. data/README.md +33 -12
  7. data/Rakefile +14 -5
  8. data/lib/predicator.rb +18 -4
  9. data/lib/predicator/ast.rb +190 -0
  10. data/lib/predicator/context.rb +7 -12
  11. data/lib/predicator/evaluator.rb +153 -0
  12. data/lib/predicator/lexer.rex +69 -0
  13. data/lib/predicator/lexer.rex.rb +187 -0
  14. data/lib/predicator/parser.rb +427 -26
  15. data/lib/predicator/parser.y +103 -35
  16. data/lib/predicator/version.rb +1 -1
  17. data/lib/predicator/visitors.rb +5 -0
  18. data/lib/predicator/visitors/dot.rb +113 -0
  19. data/lib/predicator/visitors/each.rb +16 -0
  20. data/lib/predicator/visitors/instructions.rb +183 -0
  21. data/lib/predicator/visitors/string.rb +76 -0
  22. data/lib/predicator/visitors/visitor.rb +100 -0
  23. data/predicator.gemspec +10 -2
  24. metadata +67 -28
  25. data/lib/predicator/generated_parser.rb +0 -307
  26. data/lib/predicator/lexer.rb +0 -117
  27. data/lib/predicator/predicates/and.rb +0 -20
  28. data/lib/predicator/predicates/between.rb +0 -23
  29. data/lib/predicator/predicates/equal.rb +0 -9
  30. data/lib/predicator/predicates/false.rb +0 -13
  31. data/lib/predicator/predicates/greater_than.rb +0 -9
  32. data/lib/predicator/predicates/greater_than_or_equal.rb +0 -9
  33. data/lib/predicator/predicates/less_than.rb +0 -9
  34. data/lib/predicator/predicates/less_than_or_equal.rb +0 -9
  35. data/lib/predicator/predicates/not.rb +0 -20
  36. data/lib/predicator/predicates/not_equal.rb +0 -9
  37. data/lib/predicator/predicates/or.rb +0 -20
  38. data/lib/predicator/predicates/relation.rb +0 -17
  39. data/lib/predicator/predicates/true.rb +0 -13
  40. data/lib/predicator/variable.rb +0 -26
@@ -0,0 +1,76 @@
1
+ module Predicator
2
+ module Visitors
3
+ class String < Visitor
4
+ private
5
+
6
+ def terminal node
7
+ node.left.to_s
8
+ end
9
+
10
+ def visit_STRING node
11
+ "'#{node.left}'"
12
+ end
13
+
14
+ def visit_ARRAY node
15
+ contents = node.left.map{ |item| visit item }.join(", ")
16
+ "[#{contents}]"
17
+ end
18
+
19
+ def visit_NOT node
20
+ "!#{visit node.left}"
21
+ end
22
+
23
+ def visit_GROUP node
24
+ "(#{visit node.left})"
25
+ end
26
+
27
+ def visit_EQ node
28
+ [visit(node.left), " = ", visit(node.right)].join
29
+ end
30
+
31
+ def visit_GT node
32
+ [visit(node.left), " > ", visit(node.right)].join
33
+ end
34
+
35
+ def visit_LT node
36
+ [visit(node.left), " < ", visit(node.right)].join
37
+ end
38
+
39
+ def visit_AND node
40
+ [visit(node.left), " and ", visit(node.right)].join
41
+ end
42
+
43
+ def visit_OR node
44
+ [visit(node.left), " or ", visit(node.right)].join
45
+ end
46
+
47
+ def visit_BETWEEN node
48
+ [visit(node.left), " between ", visit(node.middle), " and ", visit(node.right)].join
49
+ end
50
+
51
+ def visit_IN node
52
+ [visit(node.left), " in ", visit(node.right)].join
53
+ end
54
+
55
+ def visit_NOTIN node
56
+ [visit(node.left), " not in ", visit(node.right)].join
57
+ end
58
+
59
+ def visit_STRSTARTSWITH node
60
+ [visit(node.left), " starts with ", visit(node.right)].join
61
+ end
62
+
63
+ def visit_STRENDSWITH node
64
+ [visit(node.left), " ends with ", visit(node.right)].join
65
+ end
66
+
67
+ def visit_DATEAGO node
68
+ visit(node.left) + " ago"
69
+ end
70
+
71
+ def visit_DATEFROMNOW node
72
+ visit(node.left) + " from now"
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,100 @@
1
+ module Predicator
2
+ module Visitors
3
+ class Visitor
4
+ DISPATCH_CACHE = Hash.new { |h,k|
5
+ h[k] = "visit_#{k}"
6
+ }
7
+
8
+ def accept node
9
+ visit node
10
+ end
11
+
12
+ private
13
+
14
+ def visit node
15
+ send DISPATCH_CACHE[node.type], node
16
+ end
17
+
18
+ def visit_children node
19
+ node.children.each {|child| visit child}
20
+ end
21
+
22
+ def terminal node; end
23
+
24
+ def visit_ARRAY node
25
+ node.left.each{ |item| visit item }
26
+ end
27
+
28
+ visit_children_methods = %w(
29
+ visit_EQ visit_GT visit_LT
30
+ visit_NOT visit_GROUP visit_BOOL
31
+ visit_IN visit_NOTIN visit_BETWEEN
32
+ visit_DATEAGO visit_DATEFROMNOW
33
+ visit_AND visit_OR
34
+ visit_STRSTARTSWITH visit_STRENDSWITH
35
+ )
36
+ visit_children_methods.each do |method_name|
37
+ define_method method_name do |node|
38
+ visit_children node
39
+ end
40
+ end
41
+
42
+ %w( visit_INTEQ visit_STREQ visit_DATEQ ).each do |method_name|
43
+ define_method method_name do |node|
44
+ visit_EQ node
45
+ end
46
+ end
47
+
48
+ %w( visit_INTGT visit_STRGT visit_DATGT ).each do |method_name|
49
+ define_method method_name do |node|
50
+ visit_GT node
51
+ end
52
+ end
53
+
54
+ %w( visit_INTLT visit_STRLT visit_DATLT ).each do |method_name|
55
+ define_method method_name do |node|
56
+ visit_LT node
57
+ end
58
+ end
59
+
60
+ %w( visit_INTIN visit_STRIN ).each do |method_name|
61
+ define_method method_name do |node|
62
+ visit_IN node
63
+ end
64
+ end
65
+
66
+ %w( visit_INTNOTIN visit_STRNOTIN ).each do |method_name|
67
+ define_method method_name do |node|
68
+ visit_NOTIN node
69
+ end
70
+ end
71
+
72
+ %w( visit_INTBETWEEN visit_DATBETWEEN ).each do |method_name|
73
+ define_method method_name do |node|
74
+ visit_BETWEEN node
75
+ end
76
+ end
77
+
78
+ terminal_methods = %w(
79
+ visit_TRUE visit_FALSE
80
+ visit_DATE visit_DURATION
81
+ visit_INTEGER visit_STRING visit_VARIABLE
82
+ visit_BLANK visit_PRESENT
83
+ )
84
+ terminal_methods.each do |method_name|
85
+ define_method method_name do |node|
86
+ terminal node
87
+ end
88
+ end
89
+
90
+ array_methods = %w(
91
+ visit_INTARRAY visit_STRARRAY
92
+ )
93
+ array_methods.each do |method_name|
94
+ define_method method_name do |node|
95
+ visit_ARRAY node
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["JohnnyT"]
10
10
  spec.email = ["ubergeek3141@gmail.com"]
11
11
 
12
- spec.summary = %q{Predicate Engine}
13
- spec.homepage = "https://github.com/johnnyt/predicator"
12
+ spec.summary = %q{A secure, non-evaling condition (boolean predicate) engine for end users}
13
+ spec.homepage = "https://github.com/riddler/predicator/tree/master/impl/rb"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(bin|test|spec|features)/}) }
@@ -18,9 +18,17 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename f }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
22
+ spec.metadata["changelog_uri"] = "https://github.com/riddler/predicator/blob/master/impl/rb/HISTORY.md"
23
+ spec.metadata["source_code_uri"] = "https://github.com/riddler/predicator/tree/master/impl/rb"
24
+ spec.metadata["bug_tracker_uri"] = "https://github.com/riddler/predicator/issues"
25
+
21
26
  spec.add_development_dependency "bundler"
22
27
  spec.add_development_dependency "coveralls"
23
28
  spec.add_development_dependency "minitest", "= 5.4.2"
29
+ spec.add_development_dependency "minitest-focus"
30
+ spec.add_development_dependency "oedipus_lex"
31
+ spec.add_development_dependency "pry-nav"
24
32
  spec.add_development_dependency "racc"
25
33
  spec.add_development_dependency "rake"
26
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: predicator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - JohnnyT
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-11 00:00:00.000000000 Z
11
+ date: 2020-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,48 @@ dependencies:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 5.4.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest-focus
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: oedipus_lex
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry-nav
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: racc
57
99
  requirement: !ruby/object:Gem::Requirement
@@ -80,7 +122,7 @@ dependencies:
80
122
  - - ">="
81
123
  - !ruby/object:Gem::Version
82
124
  version: '0'
83
- description:
125
+ description:
84
126
  email:
85
127
  - ubergeek3141@gmail.com
86
128
  executables: []
@@ -88,6 +130,7 @@ extensions: []
88
130
  extra_rdoc_files: []
89
131
  files:
90
132
  - ".gitignore"
133
+ - ".rubocop.yml"
91
134
  - ".travis.yml"
92
135
  - CODE_OF_CONDUCT.md
93
136
  - Gemfile
@@ -96,32 +139,30 @@ files:
96
139
  - README.md
97
140
  - Rakefile
98
141
  - lib/predicator.rb
142
+ - lib/predicator/ast.rb
99
143
  - lib/predicator/context.rb
100
- - lib/predicator/generated_parser.rb
101
- - lib/predicator/lexer.rb
144
+ - lib/predicator/evaluator.rb
145
+ - lib/predicator/lexer.rex
146
+ - lib/predicator/lexer.rex.rb
102
147
  - lib/predicator/parser.rb
103
148
  - lib/predicator/parser.y
104
- - lib/predicator/predicates/and.rb
105
- - lib/predicator/predicates/between.rb
106
- - lib/predicator/predicates/equal.rb
107
- - lib/predicator/predicates/false.rb
108
- - lib/predicator/predicates/greater_than.rb
109
- - lib/predicator/predicates/greater_than_or_equal.rb
110
- - lib/predicator/predicates/less_than.rb
111
- - lib/predicator/predicates/less_than_or_equal.rb
112
- - lib/predicator/predicates/not.rb
113
- - lib/predicator/predicates/not_equal.rb
114
- - lib/predicator/predicates/or.rb
115
- - lib/predicator/predicates/relation.rb
116
- - lib/predicator/predicates/true.rb
117
- - lib/predicator/variable.rb
118
149
  - lib/predicator/version.rb
150
+ - lib/predicator/visitors.rb
151
+ - lib/predicator/visitors/dot.rb
152
+ - lib/predicator/visitors/each.rb
153
+ - lib/predicator/visitors/instructions.rb
154
+ - lib/predicator/visitors/string.rb
155
+ - lib/predicator/visitors/visitor.rb
119
156
  - predicator.gemspec
120
- homepage: https://github.com/johnnyt/predicator
157
+ homepage: https://github.com/riddler/predicator/tree/master/impl/rb
121
158
  licenses:
122
159
  - MIT
123
- metadata: {}
124
- post_install_message:
160
+ metadata:
161
+ allowed_push_host: https://rubygems.org
162
+ changelog_uri: https://github.com/riddler/predicator/blob/master/impl/rb/HISTORY.md
163
+ source_code_uri: https://github.com/riddler/predicator/tree/master/impl/rb
164
+ bug_tracker_uri: https://github.com/riddler/predicator/issues
165
+ post_install_message:
125
166
  rdoc_options: []
126
167
  require_paths:
127
168
  - lib
@@ -136,10 +177,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
177
  - !ruby/object:Gem::Version
137
178
  version: '0'
138
179
  requirements: []
139
- rubyforge_project:
140
- rubygems_version: 2.4.5
141
- signing_key:
180
+ rubygems_version: 3.0.6
181
+ signing_key:
142
182
  specification_version: 4
143
- summary: Predicate Engine
183
+ summary: A secure, non-evaling condition (boolean predicate) engine for end users
144
184
  test_files: []
145
- has_rdoc:
@@ -1,307 +0,0 @@
1
- #
2
- # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.4.14
4
- # from Racc grammer file "".
5
- #
6
-
7
- require 'racc/parser.rb'
8
- module Predicator
9
- class GeneratedParser < Racc::Parser
10
- ##### State transition tables begin ###
11
-
12
- racc_action_table = [
13
- 9, 31, 32, 7, 8, 14, 15, 16, 17, 18,
14
- 9, 43, 6, 7, 8, 14, 15, 16, 17, 18,
15
- 9, 44, 6, 7, 8, 14, 15, 16, 17, 18,
16
- 9, nil, 6, 7, 8, 14, 15, 16, 17, 18,
17
- 9, nil, 6, 7, 8, 14, 15, 16, 17, 18,
18
- 20, 21, 6, 19, nil, nil, 20, 21, nil, 22,
19
- nil, nil, 42, 23, 28, 27, 26, 25, 24, 14,
20
- 15, 16, 17, 18, 14, 15, 16, 17, 18, 14,
21
- 15, 16, 17, 18, 14, 15, 16, 17, 18, 14,
22
- 15, 16, 17, 18, 14, 15, 16, 17, 18, 14,
23
- 15, 16, 17, 18, 14, 15, 16, 17, 18 ]
24
-
25
- racc_action_check = [
26
- 0, 18, 19, 0, 0, 0, 0, 0, 0, 0,
27
- 6, 31, 0, 6, 6, 6, 6, 6, 6, 6,
28
- 9, 35, 6, 9, 9, 9, 9, 9, 9, 9,
29
- 20, nil, 9, 20, 20, 20, 20, 20, 20, 20,
30
- 21, nil, 20, 21, 21, 21, 21, 21, 21, 21,
31
- 29, 29, 21, 1, nil, nil, 1, 1, nil, 5,
32
- nil, nil, 29, 5, 5, 5, 5, 5, 5, 22,
33
- 22, 22, 22, 22, 23, 23, 23, 23, 23, 24,
34
- 24, 24, 24, 24, 25, 25, 25, 25, 25, 26,
35
- 26, 26, 26, 26, 27, 27, 27, 27, 27, 28,
36
- 28, 28, 28, 28, 44, 44, 44, 44, 44 ]
37
-
38
- racc_action_pointer = [
39
- -2, 53, nil, nil, nil, 47, 8, nil, nil, 18,
40
- nil, nil, nil, nil, nil, nil, nil, nil, -12, 2,
41
- 28, 38, 62, 67, 72, 77, 82, 87, 92, 47,
42
- nil, 0, nil, nil, nil, 18, nil, nil, nil, nil,
43
- nil, nil, nil, nil, 97, nil ]
44
-
45
- racc_action_default = [
46
- -26, -26, -1, -2, -3, -26, -26, -12, -13, -26,
47
- -17, -18, -19, -20, -21, -22, -23, -24, -26, -26,
48
- -26, -26, -26, -26, -26, -26, -26, -26, -26, -26,
49
- -16, -26, 46, -14, -15, -26, -6, -7, -8, -9,
50
- -10, -11, -5, -25, -26, -4 ]
51
-
52
- racc_goto_table = [
53
- 35, 36, 37, 38, 39, 40, 41, 1, nil, nil,
54
- nil, nil, nil, 29, nil, nil, 30, nil, nil, nil,
55
- nil, nil, 45, nil, nil, nil, nil, 33, 34 ]
56
-
57
- racc_goto_check = [
58
- 5, 5, 5, 5, 5, 5, 5, 1, nil, nil,
59
- nil, nil, nil, 1, nil, nil, 1, nil, nil, nil,
60
- nil, nil, 5, nil, nil, nil, nil, 1, 1 ]
61
-
62
- racc_goto_pointer = [
63
- nil, 7, nil, nil, nil, -22, nil, nil, nil, nil ]
64
-
65
- racc_goto_default = [
66
- nil, nil, 2, 3, 4, 5, 10, 11, 12, 13 ]
67
-
68
- racc_reduce_table = [
69
- 0, 0, :racc_error,
70
- 1, 23, :_reduce_none,
71
- 1, 23, :_reduce_none,
72
- 1, 23, :_reduce_none,
73
- 5, 23, :_reduce_4,
74
- 3, 23, :_reduce_none,
75
- 3, 24, :_reduce_6,
76
- 3, 24, :_reduce_7,
77
- 3, 24, :_reduce_8,
78
- 3, 24, :_reduce_9,
79
- 3, 24, :_reduce_10,
80
- 3, 24, :_reduce_11,
81
- 1, 25, :_reduce_12,
82
- 1, 25, :_reduce_13,
83
- 3, 26, :_reduce_14,
84
- 3, 26, :_reduce_15,
85
- 2, 26, :_reduce_16,
86
- 1, 27, :_reduce_none,
87
- 1, 27, :_reduce_none,
88
- 1, 28, :_reduce_none,
89
- 1, 28, :_reduce_none,
90
- 1, 30, :_reduce_21,
91
- 1, 31, :_reduce_22,
92
- 1, 31, :_reduce_23,
93
- 1, 31, :_reduce_24,
94
- 3, 29, :_reduce_25 ]
95
-
96
- racc_reduce_n = 26
97
-
98
- racc_shift_n = 46
99
-
100
- racc_token_table = {
101
- false => 0,
102
- :error => 1,
103
- :tBANG => 2,
104
- :tAND => 3,
105
- :tOR => 4,
106
- :tTRUE => 5,
107
- :tFALSE => 6,
108
- :tSTRING => 7,
109
- :tFLOAT => 8,
110
- :tINTEGER => 9,
111
- :tDATE => 10,
112
- :tIDENTIFIER => 11,
113
- :tBETWEEN => 12,
114
- :tDOT => 13,
115
- :tLPAREN => 14,
116
- :tRPAREN => 15,
117
- :tEQ => 16,
118
- :tNEQ => 17,
119
- :tLEQ => 18,
120
- :tGEQ => 19,
121
- :tLT => 20,
122
- :tGT => 21 }
123
-
124
- racc_nt_base = 22
125
-
126
- racc_use_result_var = false
127
-
128
- Racc_arg = [
129
- racc_action_table,
130
- racc_action_check,
131
- racc_action_default,
132
- racc_action_pointer,
133
- racc_goto_table,
134
- racc_goto_check,
135
- racc_goto_default,
136
- racc_goto_pointer,
137
- racc_nt_base,
138
- racc_reduce_table,
139
- racc_token_table,
140
- racc_shift_n,
141
- racc_reduce_n,
142
- racc_use_result_var ]
143
-
144
- Racc_token_to_s_table = [
145
- "$end",
146
- "error",
147
- "tBANG",
148
- "tAND",
149
- "tOR",
150
- "tTRUE",
151
- "tFALSE",
152
- "tSTRING",
153
- "tFLOAT",
154
- "tINTEGER",
155
- "tDATE",
156
- "tIDENTIFIER",
157
- "tBETWEEN",
158
- "tDOT",
159
- "tLPAREN",
160
- "tRPAREN",
161
- "tEQ",
162
- "tNEQ",
163
- "tLEQ",
164
- "tGEQ",
165
- "tLT",
166
- "tGT",
167
- "$start",
168
- "predicate",
169
- "relation_predicate",
170
- "boolean_predicate",
171
- "logical_predicate",
172
- "value",
173
- "scalar",
174
- "variable",
175
- "string",
176
- "literal" ]
177
-
178
- Racc_debug_parser = false
179
-
180
- ##### State transition tables end #####
181
-
182
- # reduce 0 omitted
183
-
184
- # reduce 1 omitted
185
-
186
- # reduce 2 omitted
187
-
188
- # reduce 3 omitted
189
-
190
- module_eval(<<'.,.,', 'parser.y', 13)
191
- def _reduce_4(val, _values)
192
- Predicator::Predicates::Between.new val[0], val[2], val[4]
193
- end
194
- .,.,
195
-
196
- # reduce 5 omitted
197
-
198
- module_eval(<<'.,.,', 'parser.y', 17)
199
- def _reduce_6(val, _values)
200
- Predicator::Predicates::Equal.new val[0], val[2]
201
- end
202
- .,.,
203
-
204
- module_eval(<<'.,.,', 'parser.y', 18)
205
- def _reduce_7(val, _values)
206
- Predicator::Predicates::GreaterThan.new val[0], val[2]
207
- end
208
- .,.,
209
-
210
- module_eval(<<'.,.,', 'parser.y', 19)
211
- def _reduce_8(val, _values)
212
- Predicator::Predicates::LessThan.new val[0], val[2]
213
- end
214
- .,.,
215
-
216
- module_eval(<<'.,.,', 'parser.y', 20)
217
- def _reduce_9(val, _values)
218
- Predicator::Predicates::GreaterThanOrEqual.new val[0], val[2]
219
- end
220
- .,.,
221
-
222
- module_eval(<<'.,.,', 'parser.y', 21)
223
- def _reduce_10(val, _values)
224
- Predicator::Predicates::LessThanOrEqual.new val[0], val[2]
225
- end
226
- .,.,
227
-
228
- module_eval(<<'.,.,', 'parser.y', 22)
229
- def _reduce_11(val, _values)
230
- Predicator::Predicates::NotEqual.new val[0], val[2]
231
- end
232
- .,.,
233
-
234
- module_eval(<<'.,.,', 'parser.y', 25)
235
- def _reduce_12(val, _values)
236
- Predicator::Predicates::True.new
237
- end
238
- .,.,
239
-
240
- module_eval(<<'.,.,', 'parser.y', 26)
241
- def _reduce_13(val, _values)
242
- Predicator::Predicates::False.new
243
- end
244
- .,.,
245
-
246
- module_eval(<<'.,.,', 'parser.y', 29)
247
- def _reduce_14(val, _values)
248
- Predicator::Predicates::And.new [val[0], val[2]]
249
- end
250
- .,.,
251
-
252
- module_eval(<<'.,.,', 'parser.y', 30)
253
- def _reduce_15(val, _values)
254
- Predicator::Predicates::Or.new [val[0], val[2]]
255
- end
256
- .,.,
257
-
258
- module_eval(<<'.,.,', 'parser.y', 31)
259
- def _reduce_16(val, _values)
260
- Predicator::Predicates::Not.new val[0]
261
- end
262
- .,.,
263
-
264
- # reduce 17 omitted
265
-
266
- # reduce 18 omitted
267
-
268
- # reduce 19 omitted
269
-
270
- # reduce 20 omitted
271
-
272
- module_eval(<<'.,.,', 'parser.y', 42)
273
- def _reduce_21(val, _values)
274
- val[0]
275
- end
276
- .,.,
277
-
278
- module_eval(<<'.,.,', 'parser.y', 45)
279
- def _reduce_22(val, _values)
280
- val[0].to_f
281
- end
282
- .,.,
283
-
284
- module_eval(<<'.,.,', 'parser.y', 46)
285
- def _reduce_23(val, _values)
286
- val[0].to_i
287
- end
288
- .,.,
289
-
290
- module_eval(<<'.,.,', 'parser.y', 47)
291
- def _reduce_24(val, _values)
292
- Date.new *val[0]
293
- end
294
- .,.,
295
-
296
- module_eval(<<'.,.,', 'parser.y', 50)
297
- def _reduce_25(val, _values)
298
- Predicator::Variable.new val[0], val[2]
299
- end
300
- .,.,
301
-
302
- def _reduce_none(val, _values)
303
- val[0]
304
- end
305
-
306
- end # class GeneratedParser
307
- end # module Predicator