cirrocumulus 0.6.1 → 0.6.2
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.
- data/.idea/workspace.xml +116 -130
- data/VERSION +1 -1
- data/cirrocumulus.gemspec +6 -4
- data/lib/cirrocumulus/rules/engine.rb +125 -51
- data/lib/cirrocumulus/rules/run_queue.rb +23 -16
- data/test/Gemfile +3 -0
- data/test/Gemfile.lock +27 -0
- data/{lib → test}/test.rb +25 -8
- data/{lib → test}/test2.rb +0 -0
- metadata +28 -26
data/.idea/workspace.xml
CHANGED
|
@@ -2,8 +2,11 @@
|
|
|
2
2
|
<project version="4">
|
|
3
3
|
<component name="ChangeListManager">
|
|
4
4
|
<list default="true" id="e3b220a8-b188-4d05-b90e-58a7fdef7470" name="Default" comment="">
|
|
5
|
+
<change type="DELETED" beforePath="$PROJECT_DIR$/lib/test.rb" afterPath="" />
|
|
6
|
+
<change type="DELETED" beforePath="$PROJECT_DIR$/lib/test2.rb" afterPath="" />
|
|
5
7
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
|
6
|
-
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/cirrocumulus/
|
|
8
|
+
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/cirrocumulus/rules/engine.rb" afterPath="$PROJECT_DIR$/lib/cirrocumulus/rules/engine.rb" />
|
|
9
|
+
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/cirrocumulus/rules/run_queue.rb" afterPath="$PROJECT_DIR$/lib/cirrocumulus/rules/run_queue.rb" />
|
|
7
10
|
</list>
|
|
8
11
|
<ignored path="cirrocumulus.iws" />
|
|
9
12
|
<ignored path=".idea/workspace.xml" />
|
|
@@ -25,53 +28,44 @@
|
|
|
25
28
|
</component>
|
|
26
29
|
<component name="FileEditorManager">
|
|
27
30
|
<leaf>
|
|
28
|
-
<file leaf-file-name="
|
|
29
|
-
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/
|
|
31
|
+
<file leaf-file-name="engine.rb" pinned="false" current="true" current-in-tab="true">
|
|
32
|
+
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/rules/engine.rb">
|
|
30
33
|
<provider selected="true" editor-type-id="text-editor">
|
|
31
|
-
<state line="
|
|
32
|
-
<folding />
|
|
33
|
-
</state>
|
|
34
|
-
</provider>
|
|
35
|
-
</entry>
|
|
36
|
-
</file>
|
|
37
|
-
<file leaf-file-name="agent.rb" pinned="false" current="true" current-in-tab="true">
|
|
38
|
-
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/agent.rb">
|
|
39
|
-
<provider selected="true" editor-type-id="text-editor">
|
|
40
|
-
<state line="277" column="81" selection-start="8294" selection-end="8294" vertical-scroll-proportion="0.55518943">
|
|
34
|
+
<state line="31" column="34" selection-start="695" selection-end="695" vertical-scroll-proportion="0.48969072">
|
|
41
35
|
<folding>
|
|
42
|
-
<element signature="e#
|
|
43
|
-
<element signature="e#
|
|
44
|
-
<element signature="e#
|
|
45
|
-
<element signature="e#
|
|
46
|
-
<element signature="e#
|
|
47
|
-
<element signature="e#
|
|
48
|
-
<element signature="e#
|
|
49
|
-
<element signature="e#
|
|
50
|
-
<element signature="e#
|
|
36
|
+
<element signature="e#135#414#0" expanded="false" />
|
|
37
|
+
<element signature="e#1123#1253#0" expanded="false" />
|
|
38
|
+
<element signature="e#1259#1381#0" expanded="false" />
|
|
39
|
+
<element signature="e#1387#1610#0" expanded="false" />
|
|
40
|
+
<element signature="e#1616#1856#0" expanded="false" />
|
|
41
|
+
<element signature="e#2026#2265#0" expanded="false" />
|
|
42
|
+
<element signature="e#3920#4010#0" expanded="false" />
|
|
43
|
+
<element signature="e#4904#4941#0" expanded="false" />
|
|
44
|
+
<element signature="e#6358#6981#0" expanded="false" />
|
|
45
|
+
<element signature="e#8221#8546#0" expanded="false" />
|
|
46
|
+
<element signature="e#9218#10074#0" expanded="false" />
|
|
47
|
+
<element signature="e#10376#10492#0" expanded="false" />
|
|
48
|
+
<element signature="e#10498#10618#0" expanded="false" />
|
|
49
|
+
<element signature="e#10624#10750#0" expanded="false" />
|
|
51
50
|
</folding>
|
|
52
51
|
</state>
|
|
53
52
|
</provider>
|
|
54
53
|
</entry>
|
|
55
54
|
</file>
|
|
56
|
-
<file leaf-file-name="
|
|
57
|
-
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/
|
|
55
|
+
<file leaf-file-name="run_queue.rb" pinned="false" current="false" current-in-tab="false">
|
|
56
|
+
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/rules/run_queue.rb">
|
|
58
57
|
<provider selected="true" editor-type-id="text-editor">
|
|
59
|
-
<state line="
|
|
58
|
+
<state line="73" column="0" selection-start="1905" selection-end="1905" vertical-scroll-proportion="0.0">
|
|
60
59
|
<folding />
|
|
61
60
|
</state>
|
|
62
61
|
</provider>
|
|
63
62
|
</entry>
|
|
64
63
|
</file>
|
|
65
|
-
<file leaf-file-name="
|
|
66
|
-
<entry file="file://$PROJECT_DIR$/
|
|
64
|
+
<file leaf-file-name="test.rb" pinned="false" current="false" current-in-tab="false">
|
|
65
|
+
<entry file="file://$PROJECT_DIR$/test/test.rb">
|
|
67
66
|
<provider selected="true" editor-type-id="text-editor">
|
|
68
|
-
<state line="
|
|
69
|
-
<folding
|
|
70
|
-
<element signature="e#102#215#0" expanded="false" />
|
|
71
|
-
<element signature="e#279#364#0" expanded="false" />
|
|
72
|
-
<element signature="e#1242#1404#0" expanded="false" />
|
|
73
|
-
<element signature="e#1410#1457#0" expanded="false" />
|
|
74
|
-
</folding>
|
|
67
|
+
<state line="37" column="48" selection-start="1106" selection-end="1106" vertical-scroll-proportion="0.0">
|
|
68
|
+
<folding />
|
|
75
69
|
</state>
|
|
76
70
|
</provider>
|
|
77
71
|
</entry>
|
|
@@ -89,10 +83,7 @@
|
|
|
89
83
|
<component name="IdeDocumentHistory">
|
|
90
84
|
<option name="changedFiles">
|
|
91
85
|
<list>
|
|
92
|
-
<option value="$PROJECT_DIR$/lib/cirrocumulus/master_agent.rb" />
|
|
93
86
|
<option value="$PROJECT_DIR$/lib/cirrocumulus/rule_engine.rb" />
|
|
94
|
-
<option value="$PROJECT_DIR$/lib/test.rb" />
|
|
95
|
-
<option value="$PROJECT_DIR$/lib/cirrocumulus/rules/run_queue.rb" />
|
|
96
87
|
<option value="$PROJECT_DIR$/lib/cirrocumulus/engine.rb" />
|
|
97
88
|
<option value="$PROJECT_DIR$/lib/cirrocumulus/agent_wrapper.rb" />
|
|
98
89
|
<option value="$PROJECT_DIR$/lib/cirrocumulus/message.rb" />
|
|
@@ -101,17 +92,20 @@
|
|
|
101
92
|
<option value="$PROJECT_DIR$/Rakefile" />
|
|
102
93
|
<option value="$PROJECT_DIR$/Gemfile" />
|
|
103
94
|
<option value="$PROJECT_DIR$/lib/cirrocumulus/jabber_bus.rb" />
|
|
104
|
-
<option value="$PROJECT_DIR$/lib/cirrocumulus/rules/engine.rb" />
|
|
105
95
|
<option value="$PROJECT_DIR$/lib/cirrocumulus/ontology.rb" />
|
|
106
96
|
<option value="$PROJECT_DIR$/lib/cirrocumulus/saga.rb" />
|
|
107
97
|
<option value="$PROJECT_DIR$/lib/cirrocumulus/agent.rb" />
|
|
98
|
+
<option value="$PROJECT_DIR$/lib/test.rb" />
|
|
99
|
+
<option value="$PROJECT_DIR$/lib/cirrocumulus/rules/engine.rb" />
|
|
100
|
+
<option value="$PROJECT_DIR$/lib/cirrocumulus/rules/run_queue.rb" />
|
|
101
|
+
<option value="$PROJECT_DIR$/test/test.rb" />
|
|
108
102
|
</list>
|
|
109
103
|
</option>
|
|
110
104
|
</component>
|
|
111
105
|
<component name="ProjectFrameBounds">
|
|
112
|
-
<option name="x" value="-
|
|
106
|
+
<option name="x" value="-2" />
|
|
113
107
|
<option name="y" value="-3" />
|
|
114
|
-
<option name="width" value="
|
|
108
|
+
<option name="width" value="1284" />
|
|
115
109
|
<option name="height" value="769" />
|
|
116
110
|
</component>
|
|
117
111
|
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
|
@@ -140,23 +134,23 @@
|
|
|
140
134
|
<sortByType />
|
|
141
135
|
</navigator>
|
|
142
136
|
<panes>
|
|
143
|
-
<pane id="
|
|
144
|
-
<subPane
|
|
137
|
+
<pane id="ProjectPane">
|
|
138
|
+
<subPane>
|
|
145
139
|
<PATH>
|
|
146
|
-
<PATH_ELEMENT
|
|
147
|
-
<option name="myItemId" value="" />
|
|
148
|
-
<option name="myItemType" value="" />
|
|
140
|
+
<PATH_ELEMENT>
|
|
141
|
+
<option name="myItemId" value="cirrocumulus" />
|
|
142
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
|
149
143
|
</PATH_ELEMENT>
|
|
150
144
|
</PATH>
|
|
151
|
-
</subPane>
|
|
152
|
-
</pane>
|
|
153
|
-
<pane id="ProjectPane">
|
|
154
|
-
<subPane>
|
|
155
145
|
<PATH>
|
|
156
146
|
<PATH_ELEMENT>
|
|
157
147
|
<option name="myItemId" value="cirrocumulus" />
|
|
158
148
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
|
159
149
|
</PATH_ELEMENT>
|
|
150
|
+
<PATH_ELEMENT>
|
|
151
|
+
<option name="myItemId" value="cirrocumulus" />
|
|
152
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
153
|
+
</PATH_ELEMENT>
|
|
160
154
|
</PATH>
|
|
161
155
|
<PATH>
|
|
162
156
|
<PATH_ELEMENT>
|
|
@@ -167,6 +161,10 @@
|
|
|
167
161
|
<option name="myItemId" value="cirrocumulus" />
|
|
168
162
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
169
163
|
</PATH_ELEMENT>
|
|
164
|
+
<PATH_ELEMENT>
|
|
165
|
+
<option name="myItemId" value="test" />
|
|
166
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
167
|
+
</PATH_ELEMENT>
|
|
170
168
|
</PATH>
|
|
171
169
|
<PATH>
|
|
172
170
|
<PATH_ELEMENT>
|
|
@@ -224,6 +222,16 @@
|
|
|
224
222
|
</PATH>
|
|
225
223
|
</subPane>
|
|
226
224
|
</pane>
|
|
225
|
+
<pane id="Scope">
|
|
226
|
+
<subPane subId="Project Files">
|
|
227
|
+
<PATH>
|
|
228
|
+
<PATH_ELEMENT USER_OBJECT="Root">
|
|
229
|
+
<option name="myItemId" value="" />
|
|
230
|
+
<option name="myItemType" value="" />
|
|
231
|
+
</PATH_ELEMENT>
|
|
232
|
+
</PATH>
|
|
233
|
+
</subPane>
|
|
234
|
+
</pane>
|
|
227
235
|
<pane id="Favorites" />
|
|
228
236
|
</panes>
|
|
229
237
|
</component>
|
|
@@ -427,14 +435,14 @@
|
|
|
427
435
|
<servers />
|
|
428
436
|
</component>
|
|
429
437
|
<component name="ToolWindowManager">
|
|
430
|
-
<frame x="-
|
|
438
|
+
<frame x="-2" y="-3" width="1284" height="769" extended-state="6" />
|
|
431
439
|
<editor active="true" />
|
|
432
440
|
<layout>
|
|
433
441
|
<window_info id="Data Sources" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
|
434
442
|
<window_info id="Changes" active="false" anchor="bottom" auto_hide="true" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3287879" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
|
435
443
|
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
|
436
444
|
<window_info id="Structure" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.67121214" order="4" side_tool="false" content_ui="tabs" />
|
|
437
|
-
<window_info id="Project" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.
|
|
445
|
+
<window_info id="Project" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.33468395" sideWeight="0.0" order="3" side_tool="false" content_ui="combo" />
|
|
438
446
|
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
|
439
447
|
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
|
|
440
448
|
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
|
|
@@ -504,141 +512,119 @@
|
|
|
504
512
|
<breakpoint-manager />
|
|
505
513
|
</component>
|
|
506
514
|
<component name="editorHistoryManager">
|
|
507
|
-
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/
|
|
508
|
-
<provider selected="true" editor-type-id="text-editor">
|
|
509
|
-
<state line="85" column="0" selection-start="2221" selection-end="2221" vertical-scroll-proportion="0.29725364" />
|
|
510
|
-
</provider>
|
|
511
|
-
</entry>
|
|
512
|
-
<entry file="file://$APPLICATION_HOME_DIR$/rubystubs18/kernel.rb">
|
|
515
|
+
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/message.rb">
|
|
513
516
|
<provider selected="true" editor-type-id="text-editor">
|
|
514
|
-
<state line="
|
|
517
|
+
<state line="4" column="4" selection-start="125" selection-end="125" vertical-scroll-proportion="0.0" />
|
|
515
518
|
</provider>
|
|
516
519
|
</entry>
|
|
517
|
-
<entry file="file
|
|
520
|
+
<entry file="file:///usr/local/rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/thread.rb">
|
|
518
521
|
<provider selected="true" editor-type-id="text-editor">
|
|
519
|
-
<state line="
|
|
522
|
+
<state line="182" column="6" selection-start="3565" selection-end="3565" vertical-scroll-proportion="0.33278957" />
|
|
520
523
|
</provider>
|
|
521
524
|
</entry>
|
|
522
|
-
<entry file="file://$PROJECT_DIR$/
|
|
525
|
+
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/jabber_bus.rb">
|
|
523
526
|
<provider selected="true" editor-type-id="text-editor">
|
|
524
|
-
<state line="
|
|
527
|
+
<state line="115" column="34" selection-start="3354" selection-end="3354" vertical-scroll-proportion="1.375" />
|
|
525
528
|
</provider>
|
|
526
529
|
</entry>
|
|
527
|
-
<entry file="file://$PROJECT_DIR$/cirrocumulus.
|
|
530
|
+
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/saga.rb">
|
|
528
531
|
<provider selected="true" editor-type-id="text-editor">
|
|
529
|
-
<state line="
|
|
532
|
+
<state line="43" column="45" selection-start="837" selection-end="837" vertical-scroll-proportion="0.0" />
|
|
530
533
|
</provider>
|
|
531
534
|
</entry>
|
|
532
|
-
<entry file="file://$PROJECT_DIR$/
|
|
535
|
+
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/rule_engine.rb">
|
|
533
536
|
<provider selected="true" editor-type-id="text-editor">
|
|
534
|
-
<state line="
|
|
537
|
+
<state line="2" column="0" selection-start="73" selection-end="73" vertical-scroll-proportion="0.050675675">
|
|
538
|
+
<folding />
|
|
539
|
+
</state>
|
|
535
540
|
</provider>
|
|
536
541
|
</entry>
|
|
537
542
|
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus.rb">
|
|
538
543
|
<provider selected="true" editor-type-id="text-editor">
|
|
539
|
-
<state line="2" column="0" selection-start="55" selection-end="55" vertical-scroll-proportion="0.
|
|
544
|
+
<state line="2" column="0" selection-start="55" selection-end="55" vertical-scroll-proportion="0.050675675">
|
|
545
|
+
<folding />
|
|
546
|
+
</state>
|
|
540
547
|
</provider>
|
|
541
548
|
</entry>
|
|
542
|
-
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/
|
|
549
|
+
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/agent.rb">
|
|
543
550
|
<provider selected="true" editor-type-id="text-editor">
|
|
544
|
-
<state line="
|
|
551
|
+
<state line="277" column="81" selection-start="8294" selection-end="8294" vertical-scroll-proportion="0.45634267">
|
|
552
|
+
<folding />
|
|
553
|
+
</state>
|
|
545
554
|
</provider>
|
|
546
555
|
</entry>
|
|
547
|
-
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/
|
|
556
|
+
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/agent_wrapper.rb">
|
|
548
557
|
<provider selected="true" editor-type-id="text-editor">
|
|
549
|
-
<state line="
|
|
558
|
+
<state line="13" column="0" selection-start="302" selection-end="302" vertical-scroll-proportion="0.024193548">
|
|
550
559
|
<folding />
|
|
551
560
|
</state>
|
|
552
561
|
</provider>
|
|
553
562
|
</entry>
|
|
554
|
-
<entry file="file
|
|
563
|
+
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/ontology.rb">
|
|
564
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
565
|
+
<state line="25" column="50" selection-start="536" selection-end="536" vertical-scroll-proportion="0.0" />
|
|
566
|
+
</provider>
|
|
567
|
+
</entry>
|
|
568
|
+
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/logger.rb">
|
|
555
569
|
<provider selected="true" editor-type-id="text-editor">
|
|
556
|
-
<state line="
|
|
570
|
+
<state line="4" column="0" selection-start="123" selection-end="123" vertical-scroll-proportion="0.09677419">
|
|
557
571
|
<folding />
|
|
558
572
|
</state>
|
|
559
573
|
</provider>
|
|
560
574
|
</entry>
|
|
561
|
-
<entry file="file://$
|
|
575
|
+
<entry file="file://$APPLICATION_HOME_DIR$/rubystubs19/class.rb">
|
|
562
576
|
<provider selected="true" editor-type-id="text-editor">
|
|
563
|
-
<state line="
|
|
564
|
-
<folding
|
|
565
|
-
<element signature="e#259#408#0" expanded="false" />
|
|
566
|
-
<element signature="e#742#864#0" expanded="false" />
|
|
567
|
-
<element signature="e#870#1093#0" expanded="false" />
|
|
568
|
-
<element signature="e#1099#1339#0" expanded="false" />
|
|
569
|
-
<element signature="e#2795#2885#0" expanded="false" />
|
|
570
|
-
<element signature="e#2891#3047#0" expanded="false" />
|
|
571
|
-
<element signature="e#3093#3249#0" expanded="false" />
|
|
572
|
-
<element signature="e#3362#3399#0" expanded="false" />
|
|
573
|
-
<element signature="e#3531#3766#0" expanded="false" />
|
|
574
|
-
<element signature="e#3772#4023#0" expanded="false" />
|
|
575
|
-
<element signature="e#4029#4462#0" expanded="false" />
|
|
576
|
-
<element signature="e#4468#5068#0" expanded="false" />
|
|
577
|
-
<element signature="e#5074#5480#0" expanded="false" />
|
|
578
|
-
<element signature="e#5486#6058#0" expanded="false" />
|
|
579
|
-
<element signature="e#6064#6389#0" expanded="false" />
|
|
580
|
-
<element signature="e#6395#6707#0" expanded="false" />
|
|
581
|
-
<element signature="e#6713#7055#0" expanded="false" />
|
|
582
|
-
<element signature="e#7061#7917#0" expanded="false" />
|
|
583
|
-
<element signature="e#7923#7996#0" expanded="false" />
|
|
584
|
-
<element signature="e#8002#8220#0" expanded="false" />
|
|
585
|
-
<element signature="e#8226#8322#0" expanded="false" />
|
|
586
|
-
<element signature="e#8328#8428#0" expanded="false" />
|
|
587
|
-
<element signature="e#8434#8553#0" expanded="false" />
|
|
588
|
-
</folding>
|
|
577
|
+
<state line="67" column="13" selection-start="1999" selection-end="1999" vertical-scroll-proportion="0.3467742">
|
|
578
|
+
<folding />
|
|
589
579
|
</state>
|
|
590
580
|
</provider>
|
|
591
581
|
</entry>
|
|
592
|
-
<entry file="file://$
|
|
582
|
+
<entry file="file://$APPLICATION_HOME_DIR$/rubystubs19/thread.rb">
|
|
593
583
|
<provider selected="true" editor-type-id="text-editor">
|
|
594
|
-
<state line="
|
|
595
|
-
<folding
|
|
596
|
-
<element signature="e#2941#2999#0" expanded="false" />
|
|
597
|
-
<element signature="e#3014#3318#0" expanded="false" />
|
|
598
|
-
<element signature="e#3322#4341#0" expanded="false" />
|
|
599
|
-
</folding>
|
|
584
|
+
<state line="7" column="6" selection-start="208" selection-end="208" vertical-scroll-proportion="0.0">
|
|
585
|
+
<folding />
|
|
600
586
|
</state>
|
|
601
587
|
</provider>
|
|
602
588
|
</entry>
|
|
603
|
-
<entry file="file://$
|
|
589
|
+
<entry file="file://$APPLICATION_HOME_DIR$/rubystubs19/array.rb">
|
|
604
590
|
<provider selected="true" editor-type-id="text-editor">
|
|
605
|
-
<state line="
|
|
591
|
+
<state line="734" column="8" selection-start="26966" selection-end="26966" vertical-scroll-proportion="0.2596774">
|
|
606
592
|
<folding />
|
|
607
593
|
</state>
|
|
608
594
|
</provider>
|
|
609
595
|
</entry>
|
|
610
|
-
<entry file="file://$PROJECT_DIR$/
|
|
596
|
+
<entry file="file://$PROJECT_DIR$/test/test.rb">
|
|
611
597
|
<provider selected="true" editor-type-id="text-editor">
|
|
612
|
-
<state line="
|
|
598
|
+
<state line="37" column="48" selection-start="1106" selection-end="1106" vertical-scroll-proportion="0.0">
|
|
613
599
|
<folding />
|
|
614
600
|
</state>
|
|
615
601
|
</provider>
|
|
616
602
|
</entry>
|
|
617
|
-
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/
|
|
603
|
+
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/rules/run_queue.rb">
|
|
618
604
|
<provider selected="true" editor-type-id="text-editor">
|
|
619
|
-
<state line="
|
|
620
|
-
<folding
|
|
621
|
-
<element signature="e#102#215#0" expanded="false" />
|
|
622
|
-
<element signature="e#279#364#0" expanded="false" />
|
|
623
|
-
<element signature="e#1242#1404#0" expanded="false" />
|
|
624
|
-
<element signature="e#1410#1457#0" expanded="false" />
|
|
625
|
-
</folding>
|
|
605
|
+
<state line="73" column="0" selection-start="1905" selection-end="1905" vertical-scroll-proportion="0.0">
|
|
606
|
+
<folding />
|
|
626
607
|
</state>
|
|
627
608
|
</provider>
|
|
628
609
|
</entry>
|
|
629
|
-
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/
|
|
610
|
+
<entry file="file://$PROJECT_DIR$/lib/cirrocumulus/rules/engine.rb">
|
|
630
611
|
<provider selected="true" editor-type-id="text-editor">
|
|
631
|
-
<state line="
|
|
612
|
+
<state line="31" column="34" selection-start="695" selection-end="695" vertical-scroll-proportion="0.48969072">
|
|
632
613
|
<folding>
|
|
633
|
-
<element signature="e#
|
|
634
|
-
<element signature="e#
|
|
635
|
-
<element signature="e#
|
|
636
|
-
<element signature="e#
|
|
637
|
-
<element signature="e#
|
|
638
|
-
<element signature="e#
|
|
639
|
-
<element signature="e#
|
|
640
|
-
<element signature="e#
|
|
641
|
-
<element signature="e#
|
|
614
|
+
<element signature="e#135#414#0" expanded="false" />
|
|
615
|
+
<element signature="e#1123#1253#0" expanded="false" />
|
|
616
|
+
<element signature="e#1259#1381#0" expanded="false" />
|
|
617
|
+
<element signature="e#1387#1610#0" expanded="false" />
|
|
618
|
+
<element signature="e#1616#1856#0" expanded="false" />
|
|
619
|
+
<element signature="e#2026#2265#0" expanded="false" />
|
|
620
|
+
<element signature="e#3920#4010#0" expanded="false" />
|
|
621
|
+
<element signature="e#4904#4941#0" expanded="false" />
|
|
622
|
+
<element signature="e#6358#6981#0" expanded="false" />
|
|
623
|
+
<element signature="e#8221#8546#0" expanded="false" />
|
|
624
|
+
<element signature="e#9218#10074#0" expanded="false" />
|
|
625
|
+
<element signature="e#10376#10492#0" expanded="false" />
|
|
626
|
+
<element signature="e#10498#10618#0" expanded="false" />
|
|
627
|
+
<element signature="e#10624#10750#0" expanded="false" />
|
|
642
628
|
</folding>
|
|
643
629
|
</state>
|
|
644
630
|
</provider>
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.6.
|
|
1
|
+
0.6.2
|
data/cirrocumulus.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = "cirrocumulus"
|
|
8
|
-
s.version = "0.6.
|
|
8
|
+
s.version = "0.6.2"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Anton Kosyakin"]
|
|
12
|
-
s.date = "2012-
|
|
12
|
+
s.date = "2012-05-22"
|
|
13
13
|
s.description = "Engine for building your own agents, providing you base functionality for loading ontologies, communicating with other agents and parsing FIPA-ACL messages"
|
|
14
14
|
s.email = "deil@mneko.net"
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -47,9 +47,11 @@ Gem::Specification.new do |s|
|
|
|
47
47
|
"lib/cirrocumulus/rules/engine.rb",
|
|
48
48
|
"lib/cirrocumulus/rules/run_queue.rb",
|
|
49
49
|
"lib/cirrocumulus/saga.rb",
|
|
50
|
-
"
|
|
51
|
-
"
|
|
50
|
+
"test/Gemfile",
|
|
51
|
+
"test/Gemfile.lock",
|
|
52
52
|
"test/helper.rb",
|
|
53
|
+
"test/test.rb",
|
|
54
|
+
"test/test2.rb",
|
|
53
55
|
"test/test_cirrocumulus.rb"
|
|
54
56
|
]
|
|
55
57
|
s.homepage = "http://github.com/deil/cirrocumulus"
|
|
@@ -17,6 +17,34 @@ module RuleEngine
|
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
class Fact
|
|
21
|
+
def initialize(data, time, options)
|
|
22
|
+
@data = data
|
|
23
|
+
@time = time
|
|
24
|
+
@options = options
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
attr_reader :data
|
|
28
|
+
attr_accessor :is_deleted
|
|
29
|
+
|
|
30
|
+
def timed_out?
|
|
31
|
+
return false if @options[:expires] == nil
|
|
32
|
+
@time + @options[:expires] < Time.now
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class MatchResult
|
|
37
|
+
def initialize(rule)
|
|
38
|
+
@rule = rule
|
|
39
|
+
@matched_facts = []
|
|
40
|
+
@parameters = nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
attr_reader :rule
|
|
44
|
+
attr_reader :matched_facts
|
|
45
|
+
attr_accessor :parameters
|
|
46
|
+
end
|
|
47
|
+
|
|
20
48
|
# Core class for Cirrocumulus Rule Engine.
|
|
21
49
|
# All the magic about asserting/retracting facts and pattern-matching is performed here.
|
|
22
50
|
class Base
|
|
@@ -51,13 +79,20 @@ module RuleEngine
|
|
|
51
79
|
log "Empty ruleset" if self.class.current_ruleset.empty?
|
|
52
80
|
end
|
|
53
81
|
|
|
82
|
+
def transaction
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
|
|
54
86
|
# Asserts new fact. If 'silent' is set to true, does not perform any associated rules
|
|
55
87
|
#
|
|
56
88
|
# * *Returns* :
|
|
57
89
|
# - nothing
|
|
58
|
-
def assert(fact, silent = false)
|
|
90
|
+
def assert(fact, options = {}, silent = false)
|
|
91
|
+
silent = options unless options.is_a?(Hash)
|
|
92
|
+
options = {} unless options.is_a?(Hash)
|
|
93
|
+
|
|
59
94
|
@mutex.synchronize do
|
|
60
|
-
assert_nonblocking(fact, silent)
|
|
95
|
+
assert_nonblocking(fact, options, silent)
|
|
61
96
|
end
|
|
62
97
|
end
|
|
63
98
|
|
|
@@ -71,34 +106,47 @@ module RuleEngine
|
|
|
71
106
|
end
|
|
72
107
|
end
|
|
73
108
|
|
|
74
|
-
# Replaces fact value
|
|
109
|
+
# Replaces fact value. If fact was not found - asserts it
|
|
75
110
|
#
|
|
76
111
|
# * *Returns* :
|
|
77
112
|
# - nothing
|
|
78
|
-
def replace(pattern, values)
|
|
113
|
+
def replace(pattern, values, options = {})
|
|
79
114
|
@mutex.synchronize do
|
|
80
115
|
data = match(pattern)
|
|
81
|
-
|
|
82
|
-
|
|
116
|
+
|
|
117
|
+
if data.empty?
|
|
83
118
|
new_fact = pattern.clone
|
|
119
|
+
|
|
84
120
|
pattern.each_with_index do |item,i|
|
|
85
|
-
if
|
|
86
|
-
old_fact[i] = match_data[item]
|
|
121
|
+
if item.is_a?(Symbol) && item.to_s.upcase == item.to_s
|
|
87
122
|
new_fact[i] = values.is_a?(Hash) ? values[item] : values
|
|
88
123
|
end
|
|
89
124
|
end
|
|
90
125
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
126
|
+
assert_nonblocking(new_fact, options, false)
|
|
127
|
+
else
|
|
128
|
+
data.each do |match_data|
|
|
129
|
+
old_fact = pattern.clone
|
|
130
|
+
new_fact = pattern.clone
|
|
131
|
+
pattern.each_with_index do |item,i|
|
|
132
|
+
if match_data.include? item
|
|
133
|
+
old_fact[i] = match_data[item]
|
|
134
|
+
new_fact[i] = values.is_a?(Hash) ? values[item] : values
|
|
135
|
+
end
|
|
136
|
+
end
|
|
96
137
|
|
|
97
|
-
|
|
98
|
-
|
|
138
|
+
facts_are_same = true
|
|
139
|
+
old_fact.each_with_index do |item, idx|
|
|
140
|
+
new_item = new_fact[idx]
|
|
141
|
+
facts_are_same = false if new_item != item
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
unless facts_are_same
|
|
145
|
+
debug "replace #{pattern.inspect} for #{values.inspect}"
|
|
99
146
|
|
|
100
|
-
|
|
101
|
-
|
|
147
|
+
retract_nonblocking(old_fact, true)
|
|
148
|
+
assert_nonblocking(new_fact, {}, false)
|
|
149
|
+
end
|
|
102
150
|
end
|
|
103
151
|
end
|
|
104
152
|
end
|
|
@@ -111,8 +159,8 @@ module RuleEngine
|
|
|
111
159
|
|
|
112
160
|
def match(pattern)
|
|
113
161
|
res = []
|
|
114
|
-
|
|
115
|
-
res << bind_parameters(pattern, fact, {})
|
|
162
|
+
find_matches_for_condition(pattern).each do |fact|
|
|
163
|
+
res << bind_parameters(pattern, fact.data, {})
|
|
116
164
|
end
|
|
117
165
|
|
|
118
166
|
res
|
|
@@ -121,11 +169,25 @@ module RuleEngine
|
|
|
121
169
|
# Starts this rule engine instance.
|
|
122
170
|
def start()
|
|
123
171
|
@worker_thread = Thread.new do
|
|
172
|
+
engine = nil
|
|
124
173
|
while true do
|
|
174
|
+
engine = Thread.current[:engine] if engine.nil?
|
|
175
|
+
engine.tick() if engine
|
|
125
176
|
@queue.run_queued_rules()
|
|
126
177
|
sleep 0.1
|
|
127
178
|
end
|
|
128
179
|
end
|
|
180
|
+
|
|
181
|
+
@worker_thread[:engine] = self
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def tick()
|
|
185
|
+
to_retract = []
|
|
186
|
+
@facts.each {|fact| to_retract << fact if fact.timed_out? }
|
|
187
|
+
to_retract.each {|fact| retract(fact.data, true) }
|
|
188
|
+
process() unless to_retract.empty?
|
|
189
|
+
rescue Exception => ex
|
|
190
|
+
p ex
|
|
129
191
|
end
|
|
130
192
|
|
|
131
193
|
# Executes all associated with current KB rules. Normally, this shouldn't be called by the programmer.
|
|
@@ -141,26 +203,36 @@ module RuleEngine
|
|
|
141
203
|
return @@loaded_rules[self.name] ||= []
|
|
142
204
|
end
|
|
143
205
|
|
|
144
|
-
def assert_nonblocking(fact, silent
|
|
145
|
-
return if @facts.
|
|
146
|
-
|
|
147
|
-
time = DateTime.now
|
|
148
|
-
log "assert: %s" % fact.inspect
|
|
206
|
+
def assert_nonblocking(fact, options, silent)
|
|
207
|
+
return if @facts.any? {|f| f.data == fact}
|
|
149
208
|
|
|
150
|
-
|
|
151
|
-
|
|
209
|
+
if !options.empty?
|
|
210
|
+
debug "assert: %s (%s)" % [fact.inspect, options.inspect]
|
|
211
|
+
else
|
|
212
|
+
debug "assert: %s" % fact.inspect
|
|
213
|
+
end
|
|
214
|
+
@facts << Fact.new(fact, DateTime.now, options)
|
|
152
215
|
|
|
153
216
|
process() if !silent
|
|
154
217
|
end
|
|
155
218
|
|
|
156
219
|
def retract_nonblocking(fact, silent = false)
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
220
|
+
@facts.each_with_index do |item, idx|
|
|
221
|
+
next if item.data != fact
|
|
222
|
+
@facts.delete_at(idx)
|
|
223
|
+
|
|
224
|
+
if item.timed_out?
|
|
225
|
+
debug "retract: #{item.data.inspect} (timeout)"
|
|
226
|
+
else
|
|
227
|
+
debug "retract: #{item.data.inspect}"
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
item.is_deleted = true # TODO: should force GC for this object or smth like that
|
|
231
|
+
|
|
232
|
+
break
|
|
163
233
|
end
|
|
234
|
+
|
|
235
|
+
process() if !silent
|
|
164
236
|
end
|
|
165
237
|
|
|
166
238
|
def matches?(rule)
|
|
@@ -168,29 +240,28 @@ module RuleEngine
|
|
|
168
240
|
|
|
169
241
|
pattern_candidates = []
|
|
170
242
|
rule.conditions.each do |pattern|
|
|
171
|
-
pattern_candidates <<
|
|
243
|
+
pattern_candidates << find_matches_for_condition(pattern)
|
|
172
244
|
end
|
|
173
245
|
|
|
174
246
|
return nil if !pattern_candidates.all? {|c| c.size > 0}
|
|
175
247
|
|
|
176
248
|
trace "Result: rule '#{rule.name}' has candidates for each pattern"
|
|
177
|
-
|
|
178
|
-
match_parameters(rule, pattern_candidates)
|
|
249
|
+
intersect_matches_for_each_condition(rule, pattern_candidates)
|
|
179
250
|
end
|
|
180
251
|
|
|
181
|
-
def
|
|
252
|
+
def find_matches_for_condition(pattern)
|
|
182
253
|
trace "=> attempting to match pattern #{pattern.inspect}"
|
|
183
254
|
fact_matches = true
|
|
184
255
|
candidates = []
|
|
185
256
|
|
|
186
257
|
@facts.each do |fact|
|
|
187
|
-
next if fact.size != pattern.size
|
|
258
|
+
next if fact.data.size != pattern.size
|
|
188
259
|
fact_matches = true
|
|
189
260
|
|
|
190
261
|
pattern.each_with_index do |el,i|
|
|
191
262
|
if el.is_a?(Symbol) && el.to_s.upcase == el.to_s # parameter
|
|
192
263
|
else
|
|
193
|
-
fact_matches = false if el != fact[i]
|
|
264
|
+
fact_matches = false if el != fact.data[i]
|
|
194
265
|
end
|
|
195
266
|
end
|
|
196
267
|
|
|
@@ -201,25 +272,28 @@ module RuleEngine
|
|
|
201
272
|
candidates
|
|
202
273
|
end
|
|
203
274
|
|
|
204
|
-
def
|
|
275
|
+
def intersect_matches_for_each_condition(rule, candidates)
|
|
205
276
|
trace "Attempting to match parameters:"
|
|
206
277
|
|
|
207
278
|
result = []
|
|
208
279
|
attempt = []
|
|
209
280
|
while (attempt = generate_combination(rule, candidates, attempt)) != [] do
|
|
210
|
-
bindings =
|
|
281
|
+
bindings = test_condition_parameters_combination(rule, candidates, attempt)
|
|
211
282
|
if bindings
|
|
212
283
|
trace "Found: %s" % bindings.inspect
|
|
213
|
-
|
|
284
|
+
match_data = MatchResult.new(rule)
|
|
285
|
+
attempt.each_with_index {|a,i| match_data.matched_facts << candidates[i][a]}
|
|
286
|
+
match_data.parameters = bindings
|
|
287
|
+
result << match_data
|
|
214
288
|
end
|
|
215
289
|
end
|
|
216
290
|
|
|
217
291
|
result
|
|
218
292
|
end
|
|
219
293
|
|
|
220
|
-
def
|
|
294
|
+
def test_condition_parameters_combination(rule, candidates, attempt)
|
|
221
295
|
facts = []
|
|
222
|
-
attempt.each_with_index {|a,i| facts << candidates[i][a]}
|
|
296
|
+
attempt.each_with_index {|a,i| facts << candidates[i][a].data}
|
|
223
297
|
trace "=> testing combination #{attempt.inspect}: %s" % facts.inspect
|
|
224
298
|
|
|
225
299
|
binded_params = {}
|
|
@@ -305,35 +379,35 @@ module RuleEngine
|
|
|
305
379
|
binded_params
|
|
306
380
|
end
|
|
307
381
|
|
|
308
|
-
def execute_rule(
|
|
309
|
-
@queue.enqueue(
|
|
382
|
+
def execute_rule(match_data)
|
|
383
|
+
@queue.enqueue(match_data)
|
|
310
384
|
end
|
|
311
385
|
|
|
312
386
|
def process()
|
|
313
387
|
self.class.current_ruleset.each do |rule|
|
|
314
388
|
binded_params = matches?(rule)
|
|
315
|
-
next if binded_params.
|
|
316
|
-
|
|
389
|
+
next if binded_params.blank?
|
|
390
|
+
|
|
391
|
+
binded_params.each {|params| execute_rule(params)}
|
|
317
392
|
end
|
|
318
393
|
end
|
|
319
394
|
|
|
320
395
|
def log(msg)
|
|
321
396
|
Log4r::Logger['kb'].info(msg)
|
|
322
397
|
rescue
|
|
323
|
-
puts "[INFO] %s" % msg
|
|
398
|
+
puts "%s [INFO] %s" % [Time.now.to_s, msg]
|
|
324
399
|
end
|
|
325
400
|
|
|
326
401
|
def debug(msg)
|
|
327
402
|
Log4r::Logger['kb'].debug(msg)
|
|
328
403
|
rescue
|
|
329
|
-
puts "[DEBUG] %s" % msg
|
|
404
|
+
puts "%s [DEBUG] %s" % [Time.now.to_s, msg]
|
|
330
405
|
end
|
|
331
406
|
|
|
332
407
|
def trace(msg)
|
|
333
|
-
return
|
|
334
408
|
Log4r::Logger['kb_trace'].debug(msg)
|
|
335
409
|
rescue
|
|
336
|
-
puts "[TRACE] %s" % msg
|
|
410
|
+
puts "%s [TRACE] %s" % [Time.now.to_s, msg]
|
|
337
411
|
end
|
|
338
412
|
end
|
|
339
413
|
|
|
@@ -2,14 +2,16 @@ require 'thread'
|
|
|
2
2
|
|
|
3
3
|
module RuleEngine
|
|
4
4
|
class QueueEntry
|
|
5
|
+
attr_reader :run_data
|
|
5
6
|
attr_reader :rule
|
|
6
7
|
attr_reader :params
|
|
7
8
|
attr_reader :run_at
|
|
8
9
|
attr_accessor :state
|
|
9
10
|
|
|
10
|
-
def initialize(
|
|
11
|
-
@
|
|
12
|
-
@
|
|
11
|
+
def initialize(run_data, run_at = nil)
|
|
12
|
+
@run_data = run_data
|
|
13
|
+
@rule = run_data.rule
|
|
14
|
+
@params = run_data.parameters
|
|
13
15
|
@run_at = run_at
|
|
14
16
|
@state = :queued
|
|
15
17
|
end
|
|
@@ -23,18 +25,18 @@ module RuleEngine
|
|
|
23
25
|
@mutex = Mutex.new
|
|
24
26
|
end
|
|
25
27
|
|
|
26
|
-
def enqueue(
|
|
28
|
+
def enqueue(match_data)
|
|
27
29
|
@mutex.synchronize do
|
|
28
|
-
if !already_queued?(rule,
|
|
29
|
-
debug "Enqueueing rule #{rule.name}#{
|
|
30
|
+
if !already_queued?(match_data.rule, match_data.parameters)
|
|
31
|
+
debug "Enqueueing rule #{match_data.rule.name}#{match_data.parameters.inspect}"
|
|
30
32
|
|
|
31
|
-
if !rule.options.blank? && rule.options.include?(:for)
|
|
32
|
-
delay = rule.options[:for]
|
|
33
|
+
if !match_data.rule.options.blank? && match_data.rule.options.include?(:for)
|
|
34
|
+
delay = match_data.rule.options[:for]
|
|
33
35
|
run_at = Time.now + delay
|
|
34
36
|
debug "Will run this rule after #{delay.to_s} sec (at #{run_at.strftime("%H:%M:%S %d.%m.%Y")})"
|
|
35
|
-
@queue << QueueEntry.new(
|
|
37
|
+
@queue << QueueEntry.new(match_data, run_at)
|
|
36
38
|
else
|
|
37
|
-
@queue << QueueEntry.new(
|
|
39
|
+
@queue << QueueEntry.new(match_data)
|
|
38
40
|
end
|
|
39
41
|
end
|
|
40
42
|
end
|
|
@@ -69,12 +71,17 @@ module RuleEngine
|
|
|
69
71
|
|
|
70
72
|
while !rules_for_running.empty? do
|
|
71
73
|
entry = rules_for_running.pop
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
if entry.run_data.matched_facts.all? {|fact| !fact.is_deleted} # TODO: there should be smth like WeakReference
|
|
75
|
+
begin
|
|
76
|
+
debug "Executing #{entry.rule.name}#{entry.params.inspect}"
|
|
77
|
+
entry.rule.code.call(@engine, entry.params)
|
|
78
|
+
entry.state = :finished # TODO: cleanup @queue from this entries
|
|
79
|
+
|
|
80
|
+
rescue Exception => e
|
|
81
|
+
Log4r::Logger['kb'].warn "Exception while executing rule: %s\n%s" % [e.to_s, e.backtrace.to_s]
|
|
82
|
+
end
|
|
83
|
+
else
|
|
84
|
+
entry.state = :finished
|
|
78
85
|
end
|
|
79
86
|
end
|
|
80
87
|
end
|
data/test/Gemfile
ADDED
data/test/Gemfile.lock
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
GEM
|
|
2
|
+
remote: http://rubygems.org/
|
|
3
|
+
specs:
|
|
4
|
+
activesupport (2.3.14)
|
|
5
|
+
cirrocumulus (0.6.1)
|
|
6
|
+
activesupport (~> 2.3.11)
|
|
7
|
+
deil_sexpistol
|
|
8
|
+
eventmachine
|
|
9
|
+
guid
|
|
10
|
+
log4r (~> 1.1.9)
|
|
11
|
+
systemu
|
|
12
|
+
xmpp4r (~> 0.5)
|
|
13
|
+
xmpp4r-simple
|
|
14
|
+
deil_sexpistol (0.0.8)
|
|
15
|
+
eventmachine (0.12.10)
|
|
16
|
+
guid (0.1.1)
|
|
17
|
+
log4r (1.1.10)
|
|
18
|
+
systemu (2.4.2)
|
|
19
|
+
xmpp4r (0.5)
|
|
20
|
+
xmpp4r-simple (0.8.8)
|
|
21
|
+
xmpp4r (>= 0.3.2)
|
|
22
|
+
|
|
23
|
+
PLATFORMS
|
|
24
|
+
ruby
|
|
25
|
+
|
|
26
|
+
DEPENDENCIES
|
|
27
|
+
cirrocumulus
|
data/{lib → test}/test.rb
RENAMED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
require 'bundler/setup'
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
puts Cirrocumulus::PLATFORM
|
|
6
|
-
exit 0
|
|
7
|
-
#require_relative 'cirrocumulus/rule_engine.rb'
|
|
2
|
+
require 'active_support'
|
|
3
|
+
require 'cirrocumulus/rule_engine'
|
|
8
4
|
|
|
9
5
|
class Test < RuleEngine::Base
|
|
10
6
|
rule 'convert', [[:temperature, :X, 'F']] do |engine, params|
|
|
@@ -14,8 +10,13 @@ class Test < RuleEngine::Base
|
|
|
14
10
|
y = 5*(x - 32)/9
|
|
15
11
|
engine.assert([:temperature, y, 'C'])
|
|
16
12
|
end
|
|
17
|
-
|
|
18
|
-
rule '
|
|
13
|
+
|
|
14
|
+
rule 'test', [ [:a, :B, :c], [:c, :B, :a]], :for => 5.seconds do |engine, params|
|
|
15
|
+
p "test"
|
|
16
|
+
p params
|
|
17
|
+
end
|
|
18
|
+
=begin
|
|
19
|
+
rule 'guest_powered_off', [[:guest, :X, :powered_off]], :for => 5.seconds do |engine, params|
|
|
19
20
|
puts "guest_powered_off"
|
|
20
21
|
end
|
|
21
22
|
|
|
@@ -24,11 +25,27 @@ class Test < RuleEngine::Base
|
|
|
24
25
|
p params
|
|
25
26
|
puts "virtual disk #{params[:X]} should be up, but corresponding md devices is failed!"
|
|
26
27
|
end
|
|
28
|
+
=end
|
|
27
29
|
end
|
|
28
30
|
|
|
29
31
|
#RuleEngine::Server.run()
|
|
30
32
|
|
|
31
33
|
e = Test.new
|
|
34
|
+
|
|
35
|
+
#e.assert [:i, :will, :expire, :soon], :expires => 10.seconds
|
|
36
|
+
#e.replace [:guest, :X, :powered_off], "q1w2", :expires => 2.seconds
|
|
37
|
+
e.assert [:a, 'b', :c]
|
|
38
|
+
e.assert [:a, 'haha', :c], :expires => 3.seconds
|
|
39
|
+
e.assert [:c, 'b', :a], :expires => 6.seconds
|
|
40
|
+
|
|
41
|
+
e.start()
|
|
42
|
+
|
|
43
|
+
while true
|
|
44
|
+
sleep 1
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
exit 0
|
|
48
|
+
|
|
32
49
|
e.assert [:guest, "233bed174ab0802fd908f981d64d185b", :powered_off]
|
|
33
50
|
e.assert [:guest, "233bed174ab0802fd908f981d64d185b", :running]
|
|
34
51
|
e.assert [:guest, "233bed174ab0802fd908f981d64d185b", :state, :powered_on]
|
data/{lib → test}/test2.rb
RENAMED
|
File without changes
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cirrocumulus
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.
|
|
4
|
+
version: 0.6.2
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,11 +9,11 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-
|
|
12
|
+
date: 2012-05-22 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: activesupport
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &73627510 !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - ~>
|
|
@@ -21,10 +21,10 @@ dependencies:
|
|
|
21
21
|
version: 2.3.11
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements: *
|
|
24
|
+
version_requirements: *73627510
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
26
26
|
name: log4r
|
|
27
|
-
requirement: &
|
|
27
|
+
requirement: &73643310 !ruby/object:Gem::Requirement
|
|
28
28
|
none: false
|
|
29
29
|
requirements:
|
|
30
30
|
- - ~>
|
|
@@ -32,10 +32,10 @@ dependencies:
|
|
|
32
32
|
version: 1.1.9
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
|
-
version_requirements: *
|
|
35
|
+
version_requirements: *73643310
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
37
37
|
name: systemu
|
|
38
|
-
requirement: &
|
|
38
|
+
requirement: &73642400 !ruby/object:Gem::Requirement
|
|
39
39
|
none: false
|
|
40
40
|
requirements:
|
|
41
41
|
- - ! '>='
|
|
@@ -43,10 +43,10 @@ dependencies:
|
|
|
43
43
|
version: '0'
|
|
44
44
|
type: :runtime
|
|
45
45
|
prerelease: false
|
|
46
|
-
version_requirements: *
|
|
46
|
+
version_requirements: *73642400
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: xmpp4r
|
|
49
|
-
requirement: &
|
|
49
|
+
requirement: &73641880 !ruby/object:Gem::Requirement
|
|
50
50
|
none: false
|
|
51
51
|
requirements:
|
|
52
52
|
- - ~>
|
|
@@ -54,10 +54,10 @@ dependencies:
|
|
|
54
54
|
version: '0.5'
|
|
55
55
|
type: :runtime
|
|
56
56
|
prerelease: false
|
|
57
|
-
version_requirements: *
|
|
57
|
+
version_requirements: *73641880
|
|
58
58
|
- !ruby/object:Gem::Dependency
|
|
59
59
|
name: xmpp4r-simple
|
|
60
|
-
requirement: &
|
|
60
|
+
requirement: &73641210 !ruby/object:Gem::Requirement
|
|
61
61
|
none: false
|
|
62
62
|
requirements:
|
|
63
63
|
- - ! '>='
|
|
@@ -65,10 +65,10 @@ dependencies:
|
|
|
65
65
|
version: '0'
|
|
66
66
|
type: :runtime
|
|
67
67
|
prerelease: false
|
|
68
|
-
version_requirements: *
|
|
68
|
+
version_requirements: *73641210
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: eventmachine
|
|
71
|
-
requirement: &
|
|
71
|
+
requirement: &73640730 !ruby/object:Gem::Requirement
|
|
72
72
|
none: false
|
|
73
73
|
requirements:
|
|
74
74
|
- - ! '>='
|
|
@@ -76,10 +76,10 @@ dependencies:
|
|
|
76
76
|
version: '0'
|
|
77
77
|
type: :runtime
|
|
78
78
|
prerelease: false
|
|
79
|
-
version_requirements: *
|
|
79
|
+
version_requirements: *73640730
|
|
80
80
|
- !ruby/object:Gem::Dependency
|
|
81
81
|
name: deil_sexpistol
|
|
82
|
-
requirement: &
|
|
82
|
+
requirement: &73640160 !ruby/object:Gem::Requirement
|
|
83
83
|
none: false
|
|
84
84
|
requirements:
|
|
85
85
|
- - ! '>='
|
|
@@ -87,10 +87,10 @@ dependencies:
|
|
|
87
87
|
version: '0'
|
|
88
88
|
type: :runtime
|
|
89
89
|
prerelease: false
|
|
90
|
-
version_requirements: *
|
|
90
|
+
version_requirements: *73640160
|
|
91
91
|
- !ruby/object:Gem::Dependency
|
|
92
92
|
name: guid
|
|
93
|
-
requirement: &
|
|
93
|
+
requirement: &73639900 !ruby/object:Gem::Requirement
|
|
94
94
|
none: false
|
|
95
95
|
requirements:
|
|
96
96
|
- - ! '>='
|
|
@@ -98,10 +98,10 @@ dependencies:
|
|
|
98
98
|
version: '0'
|
|
99
99
|
type: :runtime
|
|
100
100
|
prerelease: false
|
|
101
|
-
version_requirements: *
|
|
101
|
+
version_requirements: *73639900
|
|
102
102
|
- !ruby/object:Gem::Dependency
|
|
103
103
|
name: rdoc
|
|
104
|
-
requirement: &
|
|
104
|
+
requirement: &73639300 !ruby/object:Gem::Requirement
|
|
105
105
|
none: false
|
|
106
106
|
requirements:
|
|
107
107
|
- - ~>
|
|
@@ -109,10 +109,10 @@ dependencies:
|
|
|
109
109
|
version: '3.12'
|
|
110
110
|
type: :development
|
|
111
111
|
prerelease: false
|
|
112
|
-
version_requirements: *
|
|
112
|
+
version_requirements: *73639300
|
|
113
113
|
- !ruby/object:Gem::Dependency
|
|
114
114
|
name: bundler
|
|
115
|
-
requirement: &
|
|
115
|
+
requirement: &73638710 !ruby/object:Gem::Requirement
|
|
116
116
|
none: false
|
|
117
117
|
requirements:
|
|
118
118
|
- - ~>
|
|
@@ -120,10 +120,10 @@ dependencies:
|
|
|
120
120
|
version: 1.0.0
|
|
121
121
|
type: :development
|
|
122
122
|
prerelease: false
|
|
123
|
-
version_requirements: *
|
|
123
|
+
version_requirements: *73638710
|
|
124
124
|
- !ruby/object:Gem::Dependency
|
|
125
125
|
name: jeweler
|
|
126
|
-
requirement: &
|
|
126
|
+
requirement: &73638370 !ruby/object:Gem::Requirement
|
|
127
127
|
none: false
|
|
128
128
|
requirements:
|
|
129
129
|
- - ~>
|
|
@@ -131,7 +131,7 @@ dependencies:
|
|
|
131
131
|
version: 1.8.3
|
|
132
132
|
type: :development
|
|
133
133
|
prerelease: false
|
|
134
|
-
version_requirements: *
|
|
134
|
+
version_requirements: *73638370
|
|
135
135
|
description: Engine for building your own agents, providing you base functionality
|
|
136
136
|
for loading ontologies, communicating with other agents and parsing FIPA-ACL messages
|
|
137
137
|
email: deil@mneko.net
|
|
@@ -171,9 +171,11 @@ files:
|
|
|
171
171
|
- lib/cirrocumulus/rules/engine.rb
|
|
172
172
|
- lib/cirrocumulus/rules/run_queue.rb
|
|
173
173
|
- lib/cirrocumulus/saga.rb
|
|
174
|
-
-
|
|
175
|
-
-
|
|
174
|
+
- test/Gemfile
|
|
175
|
+
- test/Gemfile.lock
|
|
176
176
|
- test/helper.rb
|
|
177
|
+
- test/test.rb
|
|
178
|
+
- test/test2.rb
|
|
177
179
|
- test/test_cirrocumulus.rb
|
|
178
180
|
homepage: http://github.com/deil/cirrocumulus
|
|
179
181
|
licenses:
|