predicator 0.4.0 → 1.0.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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.travis.yml +3 -2
  4. data/HISTORY.md +9 -0
  5. data/README.md +7 -8
  6. data/Rakefile +14 -5
  7. data/lib/predicator.rb +18 -10
  8. data/lib/predicator/ast.rb +138 -0
  9. data/lib/predicator/context.rb +7 -63
  10. data/lib/predicator/evaluator.rb +108 -0
  11. data/lib/predicator/lexer.rex +51 -0
  12. data/lib/predicator/lexer.rex.rb +160 -0
  13. data/lib/predicator/parser.rb +291 -7
  14. data/lib/predicator/parser.y +66 -40
  15. data/lib/predicator/version.rb +1 -1
  16. data/lib/predicator/visitors.rb +5 -0
  17. data/lib/predicator/visitors/dot.rb +100 -0
  18. data/lib/predicator/visitors/each.rb +16 -0
  19. data/lib/predicator/visitors/instructions.rb +117 -0
  20. data/lib/predicator/visitors/string.rb +60 -0
  21. data/lib/predicator/visitors/visitor.rb +48 -0
  22. data/predicator.gemspec +3 -2
  23. metadata +29 -32
  24. data/lib/predicator/errors.rb +0 -5
  25. data/lib/predicator/generated_parser.rb +0 -335
  26. data/lib/predicator/lexer.rb +0 -125
  27. data/lib/predicator/nodes.rb +0 -6
  28. data/lib/predicator/nodes/base_node.rb +0 -53
  29. data/lib/predicator/nodes/date_node.rb +0 -13
  30. data/lib/predicator/nodes/fixnum_node.rb +0 -9
  31. data/lib/predicator/nodes/float_node.rb +0 -9
  32. data/lib/predicator/nodes/nil_class_node.rb +0 -25
  33. data/lib/predicator/nodes/string_node.rb +0 -13
  34. data/lib/predicator/predicates.rb +0 -14
  35. data/lib/predicator/predicates/and.rb +0 -20
  36. data/lib/predicator/predicates/between.rb +0 -31
  37. data/lib/predicator/predicates/equal.rb +0 -9
  38. data/lib/predicator/predicates/false.rb +0 -13
  39. data/lib/predicator/predicates/greater_than.rb +0 -9
  40. data/lib/predicator/predicates/greater_than_or_equal.rb +0 -9
  41. data/lib/predicator/predicates/less_than.rb +0 -9
  42. data/lib/predicator/predicates/less_than_or_equal.rb +0 -9
  43. data/lib/predicator/predicates/method.rb +0 -17
  44. data/lib/predicator/predicates/not.rb +0 -20
  45. data/lib/predicator/predicates/not_equal.rb +0 -9
  46. data/lib/predicator/predicates/or.rb +0 -20
  47. data/lib/predicator/predicates/relation.rb +0 -31
  48. data/lib/predicator/predicates/true.rb +0 -13
  49. data/lib/predicator/variable.rb +0 -26
data/predicator.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["ubergeek3141@gmail.com"]
11
11
 
12
12
  spec.summary = %q{Predicate Engine}
13
- spec.homepage = "https://github.com/johnnyt/predicator"
13
+ spec.homepage = "https://github.com/predicator/predicator"
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)/}) }
@@ -21,7 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler"
22
22
  spec.add_development_dependency "coveralls"
23
23
  spec.add_development_dependency "minitest", "= 5.4.2"
24
- spec.add_development_dependency "pry"
24
+ spec.add_development_dependency "oedipus_lex"
25
+ spec.add_development_dependency "pry-nav"
25
26
  spec.add_development_dependency "racc"
26
27
  spec.add_development_dependency "rake"
27
28
  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.4.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - JohnnyT
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-10 00:00:00.000000000 Z
11
+ date: 2017-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,7 +53,21 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: 5.4.2
55
55
  - !ruby/object:Gem::Dependency
56
- name: pry
56
+ name: oedipus_lex
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: pry-nav
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ">="
@@ -110,38 +124,22 @@ files:
110
124
  - README.md
111
125
  - Rakefile
112
126
  - lib/predicator.rb
127
+ - lib/predicator/ast.rb
113
128
  - lib/predicator/context.rb
114
- - lib/predicator/errors.rb
115
- - lib/predicator/generated_parser.rb
116
- - lib/predicator/lexer.rb
117
- - lib/predicator/nodes.rb
118
- - lib/predicator/nodes/base_node.rb
119
- - lib/predicator/nodes/date_node.rb
120
- - lib/predicator/nodes/fixnum_node.rb
121
- - lib/predicator/nodes/float_node.rb
122
- - lib/predicator/nodes/nil_class_node.rb
123
- - lib/predicator/nodes/string_node.rb
129
+ - lib/predicator/evaluator.rb
130
+ - lib/predicator/lexer.rex
131
+ - lib/predicator/lexer.rex.rb
124
132
  - lib/predicator/parser.rb
125
133
  - lib/predicator/parser.y
126
- - lib/predicator/predicates.rb
127
- - lib/predicator/predicates/and.rb
128
- - lib/predicator/predicates/between.rb
129
- - lib/predicator/predicates/equal.rb
130
- - lib/predicator/predicates/false.rb
131
- - lib/predicator/predicates/greater_than.rb
132
- - lib/predicator/predicates/greater_than_or_equal.rb
133
- - lib/predicator/predicates/less_than.rb
134
- - lib/predicator/predicates/less_than_or_equal.rb
135
- - lib/predicator/predicates/method.rb
136
- - lib/predicator/predicates/not.rb
137
- - lib/predicator/predicates/not_equal.rb
138
- - lib/predicator/predicates/or.rb
139
- - lib/predicator/predicates/relation.rb
140
- - lib/predicator/predicates/true.rb
141
- - lib/predicator/variable.rb
142
134
  - lib/predicator/version.rb
135
+ - lib/predicator/visitors.rb
136
+ - lib/predicator/visitors/dot.rb
137
+ - lib/predicator/visitors/each.rb
138
+ - lib/predicator/visitors/instructions.rb
139
+ - lib/predicator/visitors/string.rb
140
+ - lib/predicator/visitors/visitor.rb
143
141
  - predicator.gemspec
144
- homepage: https://github.com/johnnyt/predicator
142
+ homepage: https://github.com/predicator/predicator
145
143
  licenses:
146
144
  - MIT
147
145
  metadata: {}
@@ -161,9 +159,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
161
159
  version: '0'
162
160
  requirements: []
163
161
  rubyforge_project:
164
- rubygems_version: 2.4.5
162
+ rubygems_version: 2.5.2
165
163
  signing_key:
166
164
  specification_version: 4
167
165
  summary: Predicate Engine
168
166
  test_files: []
169
- has_rdoc:
@@ -1,5 +0,0 @@
1
- module Predicator
2
- class UnknownNodeTypeError < StandardError; end
3
- class NilValueError < StandardError; end
4
- class ParseError < StandardError; end
5
- end
@@ -1,335 +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
- 10, 21, 22, 8, 9, 15, 16, 17, 18, 19,
14
- 47, 10, 6, 37, 8, 9, 15, 16, 17, 18,
15
- 19, 10, 34, 6, 8, 9, 15, 16, 17, 18,
16
- 19, 10, 48, 6, 8, 9, 15, 16, 17, 18,
17
- 19, 10, 33, 6, 8, 9, 15, 16, 17, 18,
18
- 19, 24, 31, 6, nil, 25, 30, 29, 28, 27,
19
- 26, 15, 16, 17, 18, 19, 15, 16, 17, 18,
20
- 19, 20, 45, 46, 21, 22, 15, 16, 17, 18,
21
- 19, 15, 16, 17, 18, 19, 15, 16, 17, 18,
22
- 19, 15, 16, 17, 18, 19, 15, 16, 17, 18,
23
- 19, 15, 16, 17, 18, 19 ]
24
-
25
- racc_action_check = [
26
- 0, 23, 23, 0, 0, 0, 0, 0, 0, 0,
27
- 33, 6, 0, 23, 6, 6, 6, 6, 6, 6,
28
- 6, 22, 20, 6, 22, 22, 22, 22, 22, 22,
29
- 22, 10, 38, 22, 10, 10, 10, 10, 10, 10,
30
- 10, 21, 19, 10, 21, 21, 21, 21, 21, 21,
31
- 21, 7, 7, 21, nil, 7, 7, 7, 7, 7,
32
- 7, 24, 24, 24, 24, 24, 48, 48, 48, 48,
33
- 48, 1, 31, 31, 1, 1, 30, 30, 30, 30,
34
- 30, 25, 25, 25, 25, 25, 26, 26, 26, 26,
35
- 26, 27, 27, 27, 27, 27, 29, 29, 29, 29,
36
- 29, 28, 28, 28, 28, 28 ]
37
-
38
- racc_action_pointer = [
39
- -2, 71, nil, nil, nil, nil, 9, 39, nil, nil,
40
- 29, nil, nil, nil, nil, nil, nil, nil, nil, 29,
41
- 22, 39, 19, -2, 54, 74, 79, 84, 94, 89,
42
- 69, 50, nil, -1, nil, nil, nil, nil, 29, nil,
43
- nil, nil, nil, nil, nil, nil, nil, nil, 59, nil ]
44
-
45
- racc_action_default = [
46
- -29, -29, -1, -2, -3, -4, -29, -29, -7, -8,
47
- -29, -20, -21, -22, -23, -24, -25, -26, -27, -29,
48
- -29, -29, -29, -29, -29, -29, -29, -29, -29, -29,
49
- -29, -29, -11, -29, 50, -9, -10, -5, -29, -12,
50
- -13, -14, -15, -16, -17, -18, -19, -28, -29, -6 ]
51
-
52
- racc_goto_table = [
53
- 38, 39, 40, 41, 42, 43, 44, 1, nil, nil,
54
- nil, nil, nil, 23, nil, nil, nil, 32, nil, nil,
55
- nil, nil, nil, nil, 49, nil, nil, nil, 35, 36 ]
56
-
57
- racc_goto_check = [
58
- 6, 6, 6, 6, 6, 6, 6, 1, nil, nil,
59
- nil, nil, nil, 1, nil, nil, nil, 1, nil, nil,
60
- nil, nil, nil, nil, 6, nil, nil, nil, 1, 1 ]
61
-
62
- racc_goto_pointer = [
63
- nil, 7, nil, nil, nil, nil, -24, nil, nil, nil,
64
- nil ]
65
-
66
- racc_goto_default = [
67
- nil, nil, 2, 3, 4, 5, 7, 11, 12, 13,
68
- 14 ]
69
-
70
- racc_reduce_table = [
71
- 0, 0, :racc_error,
72
- 1, 25, :_reduce_none,
73
- 1, 25, :_reduce_none,
74
- 1, 25, :_reduce_none,
75
- 1, 25, :_reduce_none,
76
- 3, 25, :_reduce_5,
77
- 5, 25, :_reduce_6,
78
- 1, 26, :_reduce_7,
79
- 1, 26, :_reduce_8,
80
- 3, 27, :_reduce_9,
81
- 3, 27, :_reduce_10,
82
- 2, 27, :_reduce_11,
83
- 3, 28, :_reduce_12,
84
- 3, 28, :_reduce_13,
85
- 3, 28, :_reduce_14,
86
- 3, 28, :_reduce_15,
87
- 3, 28, :_reduce_16,
88
- 3, 28, :_reduce_17,
89
- 3, 29, :_reduce_18,
90
- 3, 29, :_reduce_19,
91
- 1, 30, :_reduce_none,
92
- 1, 30, :_reduce_none,
93
- 1, 31, :_reduce_none,
94
- 1, 31, :_reduce_none,
95
- 1, 33, :_reduce_24,
96
- 1, 34, :_reduce_25,
97
- 1, 34, :_reduce_26,
98
- 1, 34, :_reduce_27,
99
- 3, 32, :_reduce_28 ]
100
-
101
- racc_reduce_n = 29
102
-
103
- racc_shift_n = 50
104
-
105
- racc_token_table = {
106
- false => 0,
107
- :error => 1,
108
- :tBANG => 2,
109
- :tAND => 3,
110
- :tOR => 4,
111
- :tTRUE => 5,
112
- :tFALSE => 6,
113
- :tSTRING => 7,
114
- :tFLOAT => 8,
115
- :tINTEGER => 9,
116
- :tDATE => 10,
117
- :tIDENTIFIER => 11,
118
- :tBETWEEN => 12,
119
- :tDOT => 13,
120
- :tLPAREN => 14,
121
- :tRPAREN => 15,
122
- :tEQ => 16,
123
- :tNEQ => 17,
124
- :tLEQ => 18,
125
- :tGEQ => 19,
126
- :tLT => 20,
127
- :tGT => 21,
128
- :tBLANK => 22,
129
- :tPRESENT => 23 }
130
-
131
- racc_nt_base = 24
132
-
133
- racc_use_result_var = false
134
-
135
- Racc_arg = [
136
- racc_action_table,
137
- racc_action_check,
138
- racc_action_default,
139
- racc_action_pointer,
140
- racc_goto_table,
141
- racc_goto_check,
142
- racc_goto_default,
143
- racc_goto_pointer,
144
- racc_nt_base,
145
- racc_reduce_table,
146
- racc_token_table,
147
- racc_shift_n,
148
- racc_reduce_n,
149
- racc_use_result_var ]
150
-
151
- Racc_token_to_s_table = [
152
- "$end",
153
- "error",
154
- "tBANG",
155
- "tAND",
156
- "tOR",
157
- "tTRUE",
158
- "tFALSE",
159
- "tSTRING",
160
- "tFLOAT",
161
- "tINTEGER",
162
- "tDATE",
163
- "tIDENTIFIER",
164
- "tBETWEEN",
165
- "tDOT",
166
- "tLPAREN",
167
- "tRPAREN",
168
- "tEQ",
169
- "tNEQ",
170
- "tLEQ",
171
- "tGEQ",
172
- "tLT",
173
- "tGT",
174
- "tBLANK",
175
- "tPRESENT",
176
- "$start",
177
- "predicate",
178
- "boolean_predicate",
179
- "logical_predicate",
180
- "relation_predicate",
181
- "method_predicate",
182
- "value",
183
- "scalar",
184
- "variable",
185
- "string",
186
- "literal" ]
187
-
188
- Racc_debug_parser = false
189
-
190
- ##### State transition tables end #####
191
-
192
- # reduce 0 omitted
193
-
194
- # reduce 1 omitted
195
-
196
- # reduce 2 omitted
197
-
198
- # reduce 3 omitted
199
-
200
- # reduce 4 omitted
201
-
202
- module_eval(<<'.,.,', 'parser.y', 14)
203
- def _reduce_5(val, _values)
204
- val[1]
205
- end
206
- .,.,
207
-
208
- module_eval(<<'.,.,', 'parser.y', 15)
209
- def _reduce_6(val, _values)
210
- Predicator::Predicates::Between.new val[0], val[2], val[4]
211
- end
212
- .,.,
213
-
214
- module_eval(<<'.,.,', 'parser.y', 18)
215
- def _reduce_7(val, _values)
216
- Predicator::Predicates::True.new
217
- end
218
- .,.,
219
-
220
- module_eval(<<'.,.,', 'parser.y', 19)
221
- def _reduce_8(val, _values)
222
- Predicator::Predicates::False.new
223
- end
224
- .,.,
225
-
226
- module_eval(<<'.,.,', 'parser.y', 22)
227
- def _reduce_9(val, _values)
228
- Predicator::Predicates::And.new [val[0], val[2]]
229
- end
230
- .,.,
231
-
232
- module_eval(<<'.,.,', 'parser.y', 23)
233
- def _reduce_10(val, _values)
234
- Predicator::Predicates::Or.new [val[0], val[2]]
235
- end
236
- .,.,
237
-
238
- module_eval(<<'.,.,', 'parser.y', 24)
239
- def _reduce_11(val, _values)
240
- Predicator::Predicates::Not.new val[0]
241
- end
242
- .,.,
243
-
244
- module_eval(<<'.,.,', 'parser.y', 27)
245
- def _reduce_12(val, _values)
246
- Predicator::Predicates::Equal.new val[0], val[2]
247
- end
248
- .,.,
249
-
250
- module_eval(<<'.,.,', 'parser.y', 28)
251
- def _reduce_13(val, _values)
252
- Predicator::Predicates::GreaterThan.new val[0], val[2]
253
- end
254
- .,.,
255
-
256
- module_eval(<<'.,.,', 'parser.y', 29)
257
- def _reduce_14(val, _values)
258
- Predicator::Predicates::LessThan.new val[0], val[2]
259
- end
260
- .,.,
261
-
262
- module_eval(<<'.,.,', 'parser.y', 30)
263
- def _reduce_15(val, _values)
264
- Predicator::Predicates::GreaterThanOrEqual.new val[0], val[2]
265
- end
266
- .,.,
267
-
268
- module_eval(<<'.,.,', 'parser.y', 31)
269
- def _reduce_16(val, _values)
270
- Predicator::Predicates::LessThanOrEqual.new val[0], val[2]
271
- end
272
- .,.,
273
-
274
- module_eval(<<'.,.,', 'parser.y', 32)
275
- def _reduce_17(val, _values)
276
- Predicator::Predicates::NotEqual.new val[0], val[2]
277
- end
278
- .,.,
279
-
280
- module_eval(<<'.,.,', 'parser.y', 35)
281
- def _reduce_18(val, _values)
282
- Predicator::Predicates::Method.new val[0], val[2]
283
- end
284
- .,.,
285
-
286
- module_eval(<<'.,.,', 'parser.y', 36)
287
- def _reduce_19(val, _values)
288
- Predicator::Predicates::Method.new val[0], val[2]
289
- end
290
- .,.,
291
-
292
- # reduce 20 omitted
293
-
294
- # reduce 21 omitted
295
-
296
- # reduce 22 omitted
297
-
298
- # reduce 23 omitted
299
-
300
- module_eval(<<'.,.,', 'parser.y', 47)
301
- def _reduce_24(val, _values)
302
- val[0]
303
- end
304
- .,.,
305
-
306
- module_eval(<<'.,.,', 'parser.y', 50)
307
- def _reduce_25(val, _values)
308
- val[0].to_f
309
- end
310
- .,.,
311
-
312
- module_eval(<<'.,.,', 'parser.y', 51)
313
- def _reduce_26(val, _values)
314
- val[0].to_i
315
- end
316
- .,.,
317
-
318
- module_eval(<<'.,.,', 'parser.y', 52)
319
- def _reduce_27(val, _values)
320
- Date.new *val[0]
321
- end
322
- .,.,
323
-
324
- module_eval(<<'.,.,', 'parser.y', 55)
325
- def _reduce_28(val, _values)
326
- Predicator::Variable.new val[0], val[2]
327
- end
328
- .,.,
329
-
330
- def _reduce_none(val, _values)
331
- val[0]
332
- end
333
-
334
- end # class GeneratedParser
335
- end # module Predicator