predicator 0.4.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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