ruleby 0.3 → 0.4

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.
@@ -0,0 +1,15 @@
1
+ # This file is part of the Ruleby project (http://ruleby.org)
2
+ #
3
+ # This application is free software; you can redistribute it and/or
4
+ # modify it under the terms of the Ruby license defined in the
5
+ # LICENSE.txt file.
6
+ #
7
+ # Copyright (c) 2008 Joe Kutner and Matt Smith. All rights reserved.
8
+ #
9
+ # * Authors: John Mettraux
10
+ #
11
+ require 'common'
12
+ require 'test_duck_type'
13
+ require 'test_self_reference'
14
+ require 'test_re'
15
+
metadata CHANGED
@@ -1,70 +1,66 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
3
- specification_version: 1
4
2
  name: ruleby
5
3
  version: !ruby/object:Gem::Version
6
- version: "0.3"
7
- date: 2007-09-03 00:00:00 -05:00
8
- summary: the Rule Engine for Ruby
9
- require_paths:
10
- - lib
11
- email: matt@ruleby.org
12
- homepage: http://www.ruleby.org
13
- rubyforge_project:
14
- description: ruleby is the Rule Engine for Ruby
15
- autorequire: ruleby
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: false
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 1.8.2
24
- version:
4
+ version: "0.4"
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
- - Joe Kutner, Matt Smith
31
- files:
32
- - ./lib/ruleby.rb
33
- - ./lib/rulebook.rb
34
- - ./lib/dsl/ferrari.rb
35
- - ./lib/dsl/letigre.rb
36
- - ./lib/dsl/steel.rb
37
- - ./lib/core/patterns.rb
38
- - ./lib/core/utils.rb
39
- - ./lib/core/atoms.rb
40
- - ./lib/core/engine.rb
41
- - ./lib/core/nodes.rb
42
- - ./benchmarks/model.rb
43
- - ./benchmarks/joined_rules.rb
44
- - ./benchmarks/basic_rules.rb
45
- - ./benchmarks/miss_manners/miss_manners.rb
46
- - ./benchmarks/miss_manners/model.rb
47
- - ./benchmarks/miss_manners/data.rb
48
- - ./benchmarks/miss_manners/rules.rb
49
- - ./examples/fibonacci_example1.rb
50
- - ./examples/fibonacci_example2.rb
51
- - ./examples/example_hello.rb
52
- - ./examples/example_ticket.rb
53
- - ./examples/fibonacci_rulebook.rb
54
- - ./examples/example_politician.rb
55
- - ./examples/test_self_reference.rb
56
- - ./examples/example_diagnosis.rb
57
- test_files: []
58
-
59
- rdoc_options: []
7
+ - Joe Kutner
8
+ - Matt Smith
9
+ autorequire: ruleby
10
+ bindir: bin
11
+ cert_chain: []
60
12
 
61
- extra_rdoc_files: []
13
+ date: 2008-05-18 00:00:00 -05:00
14
+ default_executable:
15
+ dependencies: []
62
16
 
17
+ description:
18
+ email: matt@ruleby.org
63
19
  executables: []
64
20
 
65
21
  extensions: []
66
22
 
67
- requirements: []
23
+ extra_rdoc_files: []
68
24
 
69
- dependencies: []
25
+ files:
26
+ - lib/core
27
+ - lib/core/atoms.rb
28
+ - lib/core/engine.rb
29
+ - lib/core/nodes.rb
30
+ - lib/core/patterns.rb
31
+ - lib/core/utils.rb
32
+ - lib/dsl
33
+ - lib/dsl/ferrari.rb
34
+ - lib/dsl/letigre.rb
35
+ - lib/dsl/steel.rb
36
+ - lib/dsl/yaml_dsl.rb
37
+ - lib/rulebook.rb
38
+ - lib/ruleby.rb
39
+ has_rdoc: true
40
+ homepage: http://ruleby.org
41
+ post_install_message:
42
+ rdoc_options: []
43
+
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 1.8.2
51
+ version:
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ version:
58
+ requirements: []
70
59
 
60
+ rubyforge_project:
61
+ rubygems_version: 1.0.1
62
+ signing_key:
63
+ specification_version: 2
64
+ summary: Rete based Ruby Rule Engine
65
+ test_files:
66
+ - tests/test.rb
@@ -1,66 +0,0 @@
1
- # This file is part of the Ruleby project (http://ruleby.org)
2
- #
3
- # This application is free software; you can redistribute it and/or
4
- # modify it under the terms of the Ruby license defined in the
5
- # LICENSE.txt file.
6
- #
7
- # Copyright (c) 2007 Joe Kutner and Matt Smith. All rights reserved.
8
- #
9
- # * Authors: Joe Kutner, Matt Smith
10
- #
11
-
12
- $LOAD_PATH << File.join(File.dirname(__FILE__), '../lib/')
13
- require 'ruleby'
14
- require 'model'
15
-
16
- include Ruleby
17
-
18
- class TestRulebook < Rulebook
19
- def rules(n)
20
- (0..n).each do |index|
21
- rule "Rule-#{index}".to_sym do |r|
22
- r.when do |has|
23
- has.a Account
24
- has.a.status = 'standard'
25
- has.a.title = 'mr'
26
- has.a.account_id = "acc#{index}"
27
- end
28
-
29
- r.then do |e,vars|
30
- # puts "rule #{index} fired"
31
- end
32
- end
33
- end
34
- end
35
- end
36
-
37
- def run_benchmark(rules, facts)
38
- puts "running benchmark for: #{rules} rules and #{facts} facts"
39
-
40
- t1 = Time.new
41
- engine :engine do |e|
42
- TestRulebook.new(e).rules(rules)
43
-
44
- t2 = Time.new
45
- diff = t2.to_f - t1.to_f
46
- puts 'time to create rule set: ' + diff.to_s
47
- for k in (0..facts)
48
- e.assert Account.new('standard', 'mr', ('acc'+k.to_s))
49
- end
50
-
51
- t3 = Time.new
52
- diff = t3.to_f - t2.to_f
53
- puts 'time to assert facts: ' + diff.to_s
54
- e.match
55
-
56
- t4 = Time.new
57
- diff = t4.to_f - t3.to_f
58
- puts 'time to run agenda: ' + diff.to_s
59
- end
60
- end
61
-
62
- run_benchmark(5, 500)
63
- puts '-------'
64
- run_benchmark(50, 500)
65
- puts '-------'
66
- run_benchmark(500, 500)
@@ -1,73 +0,0 @@
1
- # This file is part of the Ruleby project (http://ruleby.org)
2
- #
3
- # This application is free software; you can redistribute it and/or
4
- # modify it under the terms of the Ruby license defined in the
5
- # LICENSE.txt file.
6
- #
7
- # Copyright (c) 2007 Joe Kutner and Matt Smith. All rights reserved.
8
- #
9
- # * Authors: Joe Kutner, Matt Smith
10
- #
11
-
12
- $LOAD_PATH << File.join(File.dirname(__FILE__), '../lib/')
13
- require 'ruleby'
14
- require 'model'
15
-
16
- include Ruleby
17
-
18
- class TestRulebook < Rulebook
19
- def rules(n)
20
- (0..n).each do |index|
21
- rule "Rule-#{index}".to_sym do |r|
22
- r.when do |has|
23
- has.a Account
24
- has.a.status = 'standard'
25
- has.a.account_id :id
26
-
27
- has.addr Address
28
- has.addr.addr_id = :id, :%
29
- has.addr.city = 'Foobar'
30
- has.addr.state = 'FB'
31
- has.addr.zip = '12345'
32
- end
33
-
34
- r.then do |e,vars|
35
- # puts "rule #{index} fired"
36
- end
37
- end
38
- end
39
- end
40
- end
41
-
42
- def run_benchmark(rules,facts)
43
- puts "running benchmark for: #{rules} rules and #{facts} facts"
44
-
45
- t1 = Time.new
46
- engine :engine do |e|
47
- TestRulebook.new(e).rules(rules)
48
-
49
- t2 = Time.new
50
- diff = t2.to_f - t1.to_f
51
- puts 'time to create rule set: ' + diff.to_s
52
-
53
-
54
- for k in (0..facts)
55
- e.assert Account.new('standard', nil, "acc#{k}")
56
- e.assert Address.new("acc#{k}",'Foobar', 'FB', '12345')
57
- end
58
-
59
- t3 = Time.new
60
- diff = t3.to_f - t2.to_f
61
- puts 'time to assert facts: ' + diff.to_s
62
-
63
- e.match
64
-
65
- t4 = Time.new
66
- diff = t4.to_f - t3.to_f
67
- puts 'time to run agenda: ' + diff.to_s
68
- end
69
- end
70
-
71
- run_benchmark(5, 50)
72
- puts '-------'
73
- run_benchmark(50, 50)
@@ -1,146 +0,0 @@
1
- # This file is part of the Ruleby project (http://ruleby.org)
2
- #
3
- # This application is free software; you can redistribute it and/or
4
- # modify it under the terms of the Ruby license defined in the
5
- # LICENSE.txt file.
6
- #
7
- # Copyright (c) 2007 Joe Kutner and Matt Smith. All rights reserved.
8
- #
9
- # * Authors: Joe Kutner, Matt Smith
10
- #
11
-
12
- module MissManners
13
- class MannersData
14
- def initialize
15
- @guests16 = [
16
- Guest.new(:n1, :f, :h3),
17
- Guest.new(:n1, :f, :h1),
18
- Guest.new(:n1, :f, :h2),
19
- Guest.new(:n2, :f, :h3),
20
- Guest.new(:n2, :f, :h2),
21
- Guest.new(:n3, :m, :h1),
22
- Guest.new(:n3, :m, :h3),
23
- Guest.new(:n4, :m, :h2),
24
- Guest.new(:n4, :m, :h1),
25
- Guest.new(:n5, :m, :h2),
26
- Guest.new(:n5, :m, :h3),
27
- Guest.new(:n6, :m, :h2),
28
- Guest.new(:n6, :m, :h1),
29
- Guest.new(:n7, :f, :h2),
30
- Guest.new(:n7, :f, :h1),
31
- Guest.new(:n7, :f, :h3),
32
- Guest.new(:n8, :f, :h3),
33
- Guest.new(:n8, :f, :h2),
34
- Guest.new(:n9, :f, :h1),
35
- Guest.new(:n9, :f, :h3),
36
- Guest.new(:n9, :f, :h2),
37
- Guest.new(:n10, :m, :h2),
38
- Guest.new(:n10, :m, :h3),
39
- Guest.new(:n11, :m, :h3),
40
- Guest.new(:n11, :m, :h2),
41
- Guest.new(:n11, :m, :h1),
42
- Guest.new(:n12, :m, :h3),
43
- Guest.new(:n12, :m, :h1),
44
- Guest.new(:n13, :m, :h2),
45
- Guest.new(:n13, :m, :h3),
46
- Guest.new(:n13, :m, :h1),
47
- Guest.new(:n14, :f, :h3),
48
- Guest.new(:n14, :f, :h1),
49
- Guest.new(:n15, :f, :h3),
50
- Guest.new(:n15, :f, :h2),
51
- Guest.new(:n15, :f, :h1),
52
- Guest.new(:n16, :f, :h3),
53
- Guest.new(:n16, :f, :h2),
54
- Guest.new(:n16, :f, :h1),
55
- LastSeat.new(16)]
56
-
57
- @guests32 = [
58
- Guest.new(:n1, :m, :h1),
59
- Guest.new(:n1, :m, :h3),
60
- Guest.new(:n2, :f, :h3),
61
- Guest.new(:n2, :f, :h2),
62
- Guest.new(:n2, :f, :h1),
63
- Guest.new(:n3, :f, :h1),
64
- Guest.new(:n3, :f, :h2),
65
- Guest.new(:n4, :f, :h3),
66
- Guest.new(:n4, :f, :h1),
67
- Guest.new(:n5, :f, :h1),
68
- Guest.new(:n5, :f, :h2),
69
- Guest.new(:n6, :m, :h1),
70
- Guest.new(:n6, :m, :h2),
71
- Guest.new(:n6, :m, :h3),
72
- Guest.new(:n7, :f, :h2),
73
- Guest.new(:n7, :f, :h1),
74
- Guest.new(:n7, :f, :h3),
75
- Guest.new(:n8, :f, :h1),
76
- Guest.new(:n8, :f, :h3),
77
- Guest.new(:n8, :f, :h2),
78
- Guest.new(:n9, :f, :h1),
79
- Guest.new(:n9, :f, :h3),
80
- Guest.new(:n9, :f, :h2),
81
- Guest.new(:n10, :m, :h2),
82
- Guest.new(:n10, :m, :h1),
83
- Guest.new(:n11, :m, :h2),
84
- Guest.new(:n11, :m, :h1),
85
- Guest.new(:n12, :m, :h3),
86
- Guest.new(:n12, :m, :h2),
87
- Guest.new(:n13, :m, :h1),
88
- Guest.new(:n13, :m, :h3),
89
- Guest.new(:n14, :m, :h3),
90
- Guest.new(:n14, :m, :h2),
91
- Guest.new(:n15, :f, :h2),
92
- Guest.new(:n15, :f, :h1),
93
- Guest.new(:n15, :f, :h3),
94
- Guest.new(:n16, :f, :h3),
95
- Guest.new(:n16, :f, :h2),
96
- Guest.new(:n16, :f, :h1),
97
- Guest.new(:n17, :m, :h3),
98
- Guest.new(:n17, :m, :h2),
99
- Guest.new(:n18, :f, :h2),
100
- Guest.new(:n18, :f, :h1),
101
- Guest.new(:n19, :f, :h1),
102
- Guest.new(:n19, :f, :h2),
103
- Guest.new(:n19, :f, :h3),
104
- Guest.new(:n20, :f, :h1),
105
- Guest.new(:n20, :f, :h2),
106
- Guest.new(:n20, :f, :h3),
107
- Guest.new(:n21, :m, :h2),
108
- Guest.new(:n21, :m, :h3),
109
- Guest.new(:n21, :m, :h1),
110
- Guest.new(:n22, :f, :h1),
111
- Guest.new(:n22, :f, :h2),
112
- Guest.new(:n22, :f, :h3),
113
- Guest.new(:n23, :f, :h3),
114
- Guest.new(:n23, :f, :h1),
115
- Guest.new(:n23, :f, :h2),
116
- Guest.new(:n24, :m, :h1),
117
- Guest.new(:n24, :m, :h3),
118
- Guest.new(:n25, :f, :h3),
119
- Guest.new(:n25, :f, :h2),
120
- Guest.new(:n25, :f, :h1),
121
- Guest.new(:n26, :f, :h3),
122
- Guest.new(:n26, :f, :h2),
123
- Guest.new(:n26, :f, :h1),
124
- Guest.new(:n27, :m, :h3),
125
- Guest.new(:n27, :m, :h1),
126
- Guest.new(:n27, :m, :h2),
127
- Guest.new(:n28, :m, :h3),
128
- Guest.new(:n28, :m, :h1),
129
- Guest.new(:n29, :m, :h3),
130
- Guest.new(:n29, :m, :h2),
131
- Guest.new(:n29, :m, :h1),
132
- Guest.new(:n30, :m, :h2),
133
- Guest.new(:n30, :m, :h1),
134
- Guest.new(:n30, :m, :h3),
135
- Guest.new(:n31, :m, :h2),
136
- Guest.new(:n31, :m, :h1),
137
- Guest.new(:n32, :m, :h1),
138
- Guest.new(:n32, :m, :h3),
139
- Guest.new(:n32, :m, :h2),
140
- LastSeat.new(32)]
141
- end
142
-
143
- attr_reader :guests16
144
- attr_reader :guests32
145
- end
146
- end
@@ -1,33 +0,0 @@
1
- # This file is part of the Ruleby project (http://ruleby.org)
2
- #
3
- # This application is free software; you can redistribute it and/or
4
- # modify it under the terms of the Ruby license defined in the
5
- # LICENSE.txt file.
6
- #
7
- # Copyright (c) 2007 Joe Kutner and Matt Smith. All rights reserved.
8
- #
9
- # * Authors: Joe Kutner, Matt Smith
10
- #
11
-
12
- $LOAD_PATH << File.join(File.dirname(__FILE__), '../../lib/')
13
- require 'ruleby'
14
- require 'model'
15
- require 'data'
16
- require 'rules'
17
-
18
- include Ruleby
19
- include MissManners
20
-
21
- t1 = Time.new
22
- engine :e do |e|
23
- MannersRulebook.new(e).rules
24
- MannersData.new.guests16.each do |g|
25
- e.assert g
26
- end
27
- e.assert Context.new(:start)
28
- e.assert Count.new(1)
29
- e.match
30
- end
31
- t2 = Time.new
32
- diff = t2.to_f - t1.to_f
33
- puts diff.to_s