mort666-wongi-engine 0.2.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.hgignore +6 -0
  4. data/.hgtags +13 -0
  5. data/.ruby-gemset +1 -0
  6. data/.travis.yml +19 -0
  7. data/CHANGELOG.md +106 -0
  8. data/Gemfile +4 -0
  9. data/LICENSE +22 -0
  10. data/README.md +27 -0
  11. data/Rakefile +9 -0
  12. data/examples/ex01.rb +23 -0
  13. data/examples/ex02.rb +37 -0
  14. data/examples/graphviz.rb +16 -0
  15. data/examples/rdf.n3 +6 -0
  16. data/examples/rdf.rb +14 -0
  17. data/examples/timeline.rb +48 -0
  18. data/lib/wongi-engine.rb +36 -0
  19. data/lib/wongi-engine/alpha_memory.rb +60 -0
  20. data/lib/wongi-engine/beta.rb +11 -0
  21. data/lib/wongi-engine/beta/assignment_node.rb +40 -0
  22. data/lib/wongi-engine/beta/beta_memory.rb +49 -0
  23. data/lib/wongi-engine/beta/beta_node.rb +94 -0
  24. data/lib/wongi-engine/beta/filter_node.rb +48 -0
  25. data/lib/wongi-engine/beta/join_node.rb +140 -0
  26. data/lib/wongi-engine/beta/ncc_node.rb +67 -0
  27. data/lib/wongi-engine/beta/ncc_partner.rb +40 -0
  28. data/lib/wongi-engine/beta/neg_node.rb +115 -0
  29. data/lib/wongi-engine/beta/optional_node.rb +142 -0
  30. data/lib/wongi-engine/beta/or_node.rb +37 -0
  31. data/lib/wongi-engine/beta/production_node.rb +31 -0
  32. data/lib/wongi-engine/compiler.rb +115 -0
  33. data/lib/wongi-engine/core_ext.rb +63 -0
  34. data/lib/wongi-engine/data_overlay.rb +144 -0
  35. data/lib/wongi-engine/dsl.rb +132 -0
  36. data/lib/wongi-engine/dsl/action/base.rb +11 -0
  37. data/lib/wongi-engine/dsl/action/error_generator.rb +31 -0
  38. data/lib/wongi-engine/dsl/action/simple_action.rb +60 -0
  39. data/lib/wongi-engine/dsl/action/simple_collector.rb +52 -0
  40. data/lib/wongi-engine/dsl/action/statement_generator.rb +46 -0
  41. data/lib/wongi-engine/dsl/action/trace_action.rb +49 -0
  42. data/lib/wongi-engine/dsl/any_rule.rb +33 -0
  43. data/lib/wongi-engine/dsl/assuming.rb +31 -0
  44. data/lib/wongi-engine/dsl/builder.rb +44 -0
  45. data/lib/wongi-engine/dsl/clause/assign.rb +15 -0
  46. data/lib/wongi-engine/dsl/clause/fact.rb +71 -0
  47. data/lib/wongi-engine/dsl/clause/gen.rb +17 -0
  48. data/lib/wongi-engine/dsl/clause/generic.rb +38 -0
  49. data/lib/wongi-engine/dsl/generated.rb +43 -0
  50. data/lib/wongi-engine/dsl/ncc_subrule.rb +17 -0
  51. data/lib/wongi-engine/dsl/query.rb +24 -0
  52. data/lib/wongi-engine/dsl/rule.rb +84 -0
  53. data/lib/wongi-engine/enumerators.rb +21 -0
  54. data/lib/wongi-engine/error.rb +22 -0
  55. data/lib/wongi-engine/filter.rb +6 -0
  56. data/lib/wongi-engine/filter/asserting_test.rb +20 -0
  57. data/lib/wongi-engine/filter/equality_test.rb +36 -0
  58. data/lib/wongi-engine/filter/filter_test.rb +18 -0
  59. data/lib/wongi-engine/filter/greater_than_test.rb +36 -0
  60. data/lib/wongi-engine/filter/inequality_test.rb +36 -0
  61. data/lib/wongi-engine/filter/less_than_test.rb +36 -0
  62. data/lib/wongi-engine/graph.rb +73 -0
  63. data/lib/wongi-engine/network.rb +416 -0
  64. data/lib/wongi-engine/network/collectable.rb +42 -0
  65. data/lib/wongi-engine/network/debug.rb +85 -0
  66. data/lib/wongi-engine/ruleset.rb +74 -0
  67. data/lib/wongi-engine/template.rb +78 -0
  68. data/lib/wongi-engine/token.rb +114 -0
  69. data/lib/wongi-engine/version.rb +5 -0
  70. data/lib/wongi-engine/wme.rb +89 -0
  71. data/lib/wongi-engine/wme_match_data.rb +34 -0
  72. data/spec/beta_node_spec.rb +29 -0
  73. data/spec/bug_specs/issue_4_spec.rb +141 -0
  74. data/spec/dataset_spec.rb +27 -0
  75. data/spec/dsl_spec.rb +9 -0
  76. data/spec/filter_specs/assert_test_spec.rb +102 -0
  77. data/spec/filter_specs/less_test_spec.rb +41 -0
  78. data/spec/generation_spec.rb +116 -0
  79. data/spec/high_level_spec.rb +378 -0
  80. data/spec/network_spec.rb +182 -0
  81. data/spec/overlay_spec.rb +61 -0
  82. data/spec/rule_specs/any_rule_spec.rb +75 -0
  83. data/spec/rule_specs/assign_spec.rb +88 -0
  84. data/spec/rule_specs/assuming_spec.rb +66 -0
  85. data/spec/rule_specs/maybe_rule_spec.rb +101 -0
  86. data/spec/rule_specs/ncc_spec.rb +258 -0
  87. data/spec/rule_specs/negative_rule_spec.rb +105 -0
  88. data/spec/ruleset_spec.rb +54 -0
  89. data/spec/simple_action_spec.rb +40 -0
  90. data/spec/spec_helper.rb +3 -0
  91. data/spec/wme_spec.rb +83 -0
  92. data/wongi-engine.gemspec +40 -0
  93. metadata +212 -0
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+
3
+ describe "negative rule" do
4
+
5
+ before :each do
6
+ @engine = Wongi::Engine.create
7
+ end
8
+
9
+ def engine
10
+ @engine
11
+ end
12
+
13
+ it "should not introduce variables" do
14
+
15
+ proc = lambda {
16
+
17
+ engine << rule('one-option') {
18
+ forall {
19
+ neg :Foo, :bar, :_
20
+ }
21
+ make {
22
+ action { |tokens|
23
+ raise "This should never get executed #{tokens}"
24
+ }
25
+ }
26
+ }
27
+
28
+ }
29
+
30
+ expect( &proc ).to raise_error( Wongi::Engine::DefinitionError )
31
+
32
+ end
33
+
34
+ specify "variable example 1" do
35
+
36
+ prod = engine << rule {
37
+ forall {
38
+ has :x, :y, :Z
39
+ neg :a, :b, :Z
40
+ }
41
+ }
42
+
43
+ engine << [:x, :y, 1]
44
+ expect( prod ).to have(1).tokens
45
+
46
+ engine << [:a, :b, 1]
47
+ expect( prod ).to have(0).tokens
48
+
49
+ end
50
+
51
+ specify "variable example 1" do
52
+
53
+ prod = engine << rule {
54
+ forall {
55
+ has :x, :y, :Z
56
+ neg :a, :b, :Z
57
+ }
58
+ }
59
+
60
+ engine << [:a, :b, 1]
61
+ engine << [:x, :y, 1]
62
+ expect( prod ).to have(0).tokens
63
+
64
+ engine.retract [:a, :b, 1]
65
+ expect( prod ).to have(1).tokens
66
+
67
+ end
68
+
69
+ # it "should not create infinite feedback loops by default" do
70
+
71
+ # engine << rule('feedback') {
72
+ # forall {
73
+ # neg :a, :b, :_
74
+ # }
75
+ # make {
76
+ # gen :a, :b, :c
77
+ # }
78
+ # }
79
+
80
+ # engine.should have(1).facts
81
+
82
+ # end
83
+
84
+ it "should create infinite feedback loops with unsafe option" do
85
+
86
+ counter = 0
87
+ exception = Class.new( StandardError )
88
+
89
+ proc = lambda {
90
+ engine << rule('feedback') {
91
+ forall {
92
+ neg :a, :b, :_, unsafe: true
93
+ }
94
+ make {
95
+ action { counter += 1 ; if counter > 5 then raise exception.new end }
96
+ gen :a, :b, :c
97
+ }
98
+ }
99
+ }
100
+
101
+ expect( &proc ).to raise_error( exception )
102
+
103
+ end
104
+
105
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wongi::Engine::Ruleset do
4
+
5
+ before :each do
6
+ Wongi::Engine::Ruleset.reset
7
+ end
8
+
9
+ context 'initially' do
10
+
11
+ it 'should have no rules' do
12
+ expect( Wongi::Engine::Ruleset.rulesets ).to be_empty
13
+ end
14
+
15
+ end
16
+
17
+ context 'when creating' do
18
+
19
+ it 'should not register itself when not given a name' do
20
+ ruleset = Wongi::Engine::Ruleset.new
21
+ expect( ruleset.name ).to be_nil
22
+ expect( Wongi::Engine::Ruleset.rulesets ).to be_empty
23
+ end
24
+
25
+ it 'should have a name' do
26
+ ruleset = Wongi::Engine::Ruleset.new 'testing-ruleset'
27
+ expect( ruleset.name ).to be == 'testing-ruleset'
28
+ end
29
+
30
+ it 'should register itself when given a name' do
31
+ ruleset = Wongi::Engine::Ruleset.new 'testing-ruleset'
32
+ expect( Wongi::Engine::Ruleset.rulesets ).not_to be_empty
33
+ expect( Wongi::Engine::Ruleset[ruleset.name] ).to be == ruleset
34
+ end
35
+
36
+ end
37
+
38
+ it 'should be able to clear registered rulesets' do
39
+ ruleset = Wongi::Engine::Ruleset.new 'testing-ruleset'
40
+ Wongi::Engine::Ruleset.reset
41
+ expect( Wongi::Engine::Ruleset.rulesets ).to be_empty
42
+ end
43
+
44
+ it 'should install creating rules into a rete' do
45
+ rete = double 'rete'
46
+
47
+ ruleset = Wongi::Engine::Ruleset.new
48
+ rule = ruleset.rule( 'test-rule' ) { }
49
+
50
+ expect( rete ).to receive(:<<).with(rule).once
51
+ ruleset.install rete
52
+ end
53
+
54
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wongi::Engine::DSL::Action::SimpleAction do
4
+
5
+ before :each do
6
+ @rete = Wongi::Engine::Network.new
7
+ end
8
+
9
+ def rete
10
+ @rete
11
+ end
12
+
13
+ it 'should work with blocks' do
14
+
15
+ count = 0
16
+
17
+ rete.rule do
18
+ forall {
19
+ has 1, 2, :X
20
+ }
21
+ make {
22
+ action {
23
+ count += 1
24
+ }
25
+ }
26
+ end
27
+
28
+ expect(count).to eq(0)
29
+
30
+ rete << [1, 2, 3]
31
+
32
+ expect(count).to eq(1)
33
+
34
+ rete << [1, 2, 4]
35
+
36
+ expect(count).to eq(2)
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,3 @@
1
+ require 'pry'
2
+ require 'wongi-engine'
3
+ require 'rspec/collection_matchers'
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wongi::Engine::WME do
4
+
5
+ # def capitalizing_rete
6
+ # rete = double 'rete'
7
+ # expect( rete ).to receive(:import).with("b").and_return("B")
8
+ # expect( rete ).to receive(:import).with("a").and_return("A")
9
+ # expect( rete ).to receive(:import).with("c").and_return("C")
10
+ # rete
11
+ # end
12
+
13
+ subject {
14
+ Wongi::Engine::WME.new "a", "b", "c"
15
+ }
16
+
17
+ context 'a new WME' do
18
+
19
+ it 'should initialize and expose members' do
20
+ expect( subject.subject ).to be == "a"
21
+ expect( subject.predicate ).to be == "b"
22
+ expect( subject.object ).to be == "c"
23
+ end
24
+
25
+ # it 'should use the rete to import members' do
26
+
27
+ # rete = capitalizing_rete
28
+
29
+ # wme = Wongi::Engine::WME.new "a", "b", "c", rete
30
+
31
+ # expect( wme.subject ).to be == "A"
32
+ # expect( wme.predicate ).to be == "B"
33
+ # expect( wme.object ).to be == "C"
34
+
35
+ # end
36
+
37
+
38
+ it {
39
+ should be_manual
40
+ }
41
+
42
+ it {
43
+ should_not be_generated
44
+ }
45
+
46
+ end
47
+
48
+ # it 'should be able to import into rete' do
49
+
50
+ # rete = capitalizing_rete
51
+
52
+ # imported = subject.import_into rete
53
+
54
+ # expect( imported.subject ).to be == "A"
55
+ # expect( imported.predicate ).to be == "B"
56
+ # expect( imported.object ).to be == "C"
57
+
58
+ # end
59
+
60
+ it 'should compare instances' do
61
+
62
+ wme1 = Wongi::Engine::WME.new "a", "b", "c"
63
+ wme2 = Wongi::Engine::WME.new "a", "b", "c"
64
+ wme3 = Wongi::Engine::WME.new "a", "b", "d"
65
+
66
+ expect( wme1 ).to be == wme2
67
+ expect( wme1 ).not_to be == wme3
68
+
69
+ end
70
+
71
+ it 'should not match against non-templates' do
72
+ expect { subject =~ [1, 2, 3] }.to raise_error( Wongi::Engine::Error )
73
+ end
74
+
75
+ it 'should match against templates' do
76
+ t1 = Wongi::Engine::Template.new "a", :_, :_
77
+ t2 = Wongi::Engine::Template.new "b", :_, :_
78
+
79
+ expect( subject ).to be =~ t1
80
+ expect( subject ).not_to be =~ t2
81
+ end
82
+
83
+ end
@@ -0,0 +1,40 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/wongi-engine/version', __FILE__)
3
+
4
+ module GemHelper
5
+ def self.git?
6
+ File.exists?(".git")
7
+ end
8
+
9
+ def self.hg?
10
+ File.exists?(".hg")
11
+ end
12
+ end
13
+
14
+ Gem::Specification.new do |gem|
15
+ gem.authors = ["Valeri Sokolov"]
16
+ gem.email = ["ulfurinn@ulfurinn.net"]
17
+ gem.description = %q{A rule engine.}
18
+ gem.summary = %q{A forward-chaining rule engine in pure Ruby.}
19
+ gem.homepage = "https://github.com/ulfurinn/wongi-engine"
20
+ gem.licenses = %w(MIT)
21
+
22
+ if GemHelper.git?
23
+ gem.files = `git ls-files`.split($\)
24
+ elsif GemHelper.hg?
25
+ gem.files = `hg st -cn`.split($\)
26
+ else
27
+ raise "cannot enumerate files: not a git or hg repository"
28
+ end
29
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
30
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
31
+ gem.name = "mort666-wongi-engine"
32
+ gem.require_paths = ["lib"]
33
+ gem.version = Wongi::Engine::VERSION
34
+
35
+ gem.add_development_dependency 'rake', '~> 10.0'
36
+ gem.add_development_dependency 'pry', '~> 0.10'
37
+ # gem.add_development_dependency 'pry-byebug', '~> 2.0'
38
+ gem.add_development_dependency 'rspec', '~> 3.1'
39
+ gem.add_development_dependency 'rspec-collection_matchers', '~> 1.1'
40
+ end
metadata ADDED
@@ -0,0 +1,212 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mort666-wongi-engine
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.9
5
+ platform: ruby
6
+ authors:
7
+ - Valeri Sokolov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-01-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '10.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '10.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.10'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-collection_matchers
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.1'
69
+ description: A rule engine.
70
+ email:
71
+ - ulfurinn@ulfurinn.net
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - ".hgignore"
78
+ - ".hgtags"
79
+ - ".ruby-gemset"
80
+ - ".travis.yml"
81
+ - CHANGELOG.md
82
+ - Gemfile
83
+ - LICENSE
84
+ - README.md
85
+ - Rakefile
86
+ - examples/ex01.rb
87
+ - examples/ex02.rb
88
+ - examples/graphviz.rb
89
+ - examples/rdf.n3
90
+ - examples/rdf.rb
91
+ - examples/timeline.rb
92
+ - lib/wongi-engine.rb
93
+ - lib/wongi-engine/alpha_memory.rb
94
+ - lib/wongi-engine/beta.rb
95
+ - lib/wongi-engine/beta/assignment_node.rb
96
+ - lib/wongi-engine/beta/beta_memory.rb
97
+ - lib/wongi-engine/beta/beta_node.rb
98
+ - lib/wongi-engine/beta/filter_node.rb
99
+ - lib/wongi-engine/beta/join_node.rb
100
+ - lib/wongi-engine/beta/ncc_node.rb
101
+ - lib/wongi-engine/beta/ncc_partner.rb
102
+ - lib/wongi-engine/beta/neg_node.rb
103
+ - lib/wongi-engine/beta/optional_node.rb
104
+ - lib/wongi-engine/beta/or_node.rb
105
+ - lib/wongi-engine/beta/production_node.rb
106
+ - lib/wongi-engine/compiler.rb
107
+ - lib/wongi-engine/core_ext.rb
108
+ - lib/wongi-engine/data_overlay.rb
109
+ - lib/wongi-engine/dsl.rb
110
+ - lib/wongi-engine/dsl/action/base.rb
111
+ - lib/wongi-engine/dsl/action/error_generator.rb
112
+ - lib/wongi-engine/dsl/action/simple_action.rb
113
+ - lib/wongi-engine/dsl/action/simple_collector.rb
114
+ - lib/wongi-engine/dsl/action/statement_generator.rb
115
+ - lib/wongi-engine/dsl/action/trace_action.rb
116
+ - lib/wongi-engine/dsl/any_rule.rb
117
+ - lib/wongi-engine/dsl/assuming.rb
118
+ - lib/wongi-engine/dsl/builder.rb
119
+ - lib/wongi-engine/dsl/clause/assign.rb
120
+ - lib/wongi-engine/dsl/clause/fact.rb
121
+ - lib/wongi-engine/dsl/clause/gen.rb
122
+ - lib/wongi-engine/dsl/clause/generic.rb
123
+ - lib/wongi-engine/dsl/generated.rb
124
+ - lib/wongi-engine/dsl/ncc_subrule.rb
125
+ - lib/wongi-engine/dsl/query.rb
126
+ - lib/wongi-engine/dsl/rule.rb
127
+ - lib/wongi-engine/enumerators.rb
128
+ - lib/wongi-engine/error.rb
129
+ - lib/wongi-engine/filter.rb
130
+ - lib/wongi-engine/filter/asserting_test.rb
131
+ - lib/wongi-engine/filter/equality_test.rb
132
+ - lib/wongi-engine/filter/filter_test.rb
133
+ - lib/wongi-engine/filter/greater_than_test.rb
134
+ - lib/wongi-engine/filter/inequality_test.rb
135
+ - lib/wongi-engine/filter/less_than_test.rb
136
+ - lib/wongi-engine/graph.rb
137
+ - lib/wongi-engine/network.rb
138
+ - lib/wongi-engine/network/collectable.rb
139
+ - lib/wongi-engine/network/debug.rb
140
+ - lib/wongi-engine/ruleset.rb
141
+ - lib/wongi-engine/template.rb
142
+ - lib/wongi-engine/token.rb
143
+ - lib/wongi-engine/version.rb
144
+ - lib/wongi-engine/wme.rb
145
+ - lib/wongi-engine/wme_match_data.rb
146
+ - spec/beta_node_spec.rb
147
+ - spec/bug_specs/issue_4_spec.rb
148
+ - spec/dataset_spec.rb
149
+ - spec/dsl_spec.rb
150
+ - spec/filter_specs/assert_test_spec.rb
151
+ - spec/filter_specs/less_test_spec.rb
152
+ - spec/generation_spec.rb
153
+ - spec/high_level_spec.rb
154
+ - spec/network_spec.rb
155
+ - spec/overlay_spec.rb
156
+ - spec/rule_specs/any_rule_spec.rb
157
+ - spec/rule_specs/assign_spec.rb
158
+ - spec/rule_specs/assuming_spec.rb
159
+ - spec/rule_specs/maybe_rule_spec.rb
160
+ - spec/rule_specs/ncc_spec.rb
161
+ - spec/rule_specs/negative_rule_spec.rb
162
+ - spec/ruleset_spec.rb
163
+ - spec/simple_action_spec.rb
164
+ - spec/spec_helper.rb
165
+ - spec/wme_spec.rb
166
+ - wongi-engine.gemspec
167
+ homepage: https://github.com/ulfurinn/wongi-engine
168
+ licenses:
169
+ - MIT
170
+ metadata: {}
171
+ post_install_message:
172
+ rdoc_options: []
173
+ require_paths:
174
+ - lib
175
+ required_ruby_version: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ required_rubygems_version: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: '0'
185
+ requirements: []
186
+ rubyforge_project:
187
+ rubygems_version: 2.4.8
188
+ signing_key:
189
+ specification_version: 4
190
+ summary: A forward-chaining rule engine in pure Ruby.
191
+ test_files:
192
+ - spec/beta_node_spec.rb
193
+ - spec/bug_specs/issue_4_spec.rb
194
+ - spec/dataset_spec.rb
195
+ - spec/dsl_spec.rb
196
+ - spec/filter_specs/assert_test_spec.rb
197
+ - spec/filter_specs/less_test_spec.rb
198
+ - spec/generation_spec.rb
199
+ - spec/high_level_spec.rb
200
+ - spec/network_spec.rb
201
+ - spec/overlay_spec.rb
202
+ - spec/rule_specs/any_rule_spec.rb
203
+ - spec/rule_specs/assign_spec.rb
204
+ - spec/rule_specs/assuming_spec.rb
205
+ - spec/rule_specs/maybe_rule_spec.rb
206
+ - spec/rule_specs/ncc_spec.rb
207
+ - spec/rule_specs/negative_rule_spec.rb
208
+ - spec/ruleset_spec.rb
209
+ - spec/simple_action_spec.rb
210
+ - spec/spec_helper.rb
211
+ - spec/wme_spec.rb
212
+ has_rdoc: