rules_engine_templates 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. data/VERSION +1 -1
  2. data/rails_generators/manifests/plan_start.rb +26 -0
  3. data/rails_generators/manifests/plan_start.yml +20 -0
  4. data/rails_generators/manifests/tweet_filter.rb +2 -4
  5. data/rails_generators/manifests/tweet_filter.yml +2 -5
  6. data/rails_generators/manifests/tweet_reader.rb +26 -0
  7. data/rails_generators/manifests/tweet_reader.yml +20 -0
  8. data/rails_generators/manifests/workflow_start.rb +26 -0
  9. data/rails_generators/manifests/workflow_start.yml +20 -0
  10. data/rails_generators/manifests/workflow_stop.rb +26 -0
  11. data/rails_generators/manifests/workflow_stop.yml +20 -0
  12. data/rails_generators/templates/app/rules/plan_start.rb +89 -0
  13. data/rails_generators/templates/app/rules/tweet_filter.rb +6 -3
  14. data/rails_generators/templates/app/rules/tweet_reader.rb +99 -0
  15. data/rails_generators/templates/app/rules/workflow_start.rb +84 -0
  16. data/rails_generators/templates/app/rules/workflow_stop.rb +80 -0
  17. data/rails_generators/templates/app/views/re_rule_definitions/plan_start/_edit.html.erb +1 -0
  18. data/rails_generators/templates/app/views/re_rule_definitions/plan_start/_form.html.erb +21 -0
  19. data/rails_generators/templates/app/views/re_rule_definitions/plan_start/_help.html.erb +1 -0
  20. data/rails_generators/templates/app/views/re_rule_definitions/plan_start/_new.html.erb +1 -0
  21. data/rails_generators/templates/app/views/re_rule_definitions/tweet_filter/_edit.html.erb +1 -5
  22. data/rails_generators/templates/app/views/re_rule_definitions/tweet_filter/_form.html.erb +34 -0
  23. data/rails_generators/templates/app/views/re_rule_definitions/tweet_filter/{_word.html.erb → _form_word.html.erb} +0 -0
  24. data/rails_generators/templates/app/views/re_rule_definitions/tweet_filter/_help.html.erb +1 -1
  25. data/rails_generators/templates/app/views/re_rule_definitions/tweet_filter/_new.html.erb +1 -5
  26. data/rails_generators/templates/app/views/re_rule_definitions/tweet_reader/_edit.html.erb +1 -0
  27. data/rails_generators/templates/app/views/re_rule_definitions/tweet_reader/_form.html.erb +29 -0
  28. data/rails_generators/templates/app/views/re_rule_definitions/tweet_reader/_help.html.erb +1 -0
  29. data/rails_generators/templates/app/views/re_rule_definitions/tweet_reader/_new.html.erb +1 -0
  30. data/rails_generators/templates/app/views/re_rule_definitions/workflow_start/_edit.html.erb +1 -0
  31. data/rails_generators/templates/app/views/re_rule_definitions/workflow_start/_form.html.erb +21 -0
  32. data/rails_generators/templates/app/views/re_rule_definitions/workflow_start/_help.html.erb +1 -0
  33. data/rails_generators/templates/app/views/re_rule_definitions/workflow_start/_new.html.erb +1 -0
  34. data/rails_generators/templates/app/views/re_rule_definitions/workflow_stop/_edit.html.erb +1 -0
  35. data/rails_generators/templates/app/views/re_rule_definitions/workflow_stop/_form.html.erb +25 -0
  36. data/rails_generators/templates/app/views/re_rule_definitions/workflow_stop/_help.html.erb +1 -0
  37. data/rails_generators/templates/app/views/re_rule_definitions/workflow_stop/_new.html.erb +1 -0
  38. data/rails_generators/templates/spec/lib/rules/plan_start_spec.rb +237 -0
  39. data/rails_generators/templates/spec/lib/rules/tweet_filter_spec.rb +61 -10
  40. data/rails_generators/templates/spec/lib/rules/tweet_reader_spec.rb +272 -0
  41. data/rails_generators/templates/spec/lib/rules/workflow_start_spec.rb +223 -0
  42. data/rails_generators/templates/spec/lib/rules/workflow_stop_spec.rb +212 -0
  43. metadata +38 -8
  44. data/rails_generators/templates/app/views/re_rule_definitions/tweet_filter/_script.html.erb +0 -8
  45. data/rails_generators/templates/app/views/re_rule_definitions/tweet_filter/_title.html.erb +0 -7
  46. data/rails_generators/templates/app/views/re_rule_definitions/tweet_filter/_words.html.erb +0 -16
@@ -0,0 +1,84 @@
1
+ module RulesEngine
2
+ module Rule
3
+ class <%=rule_class%> < RulesEngine::Rule::Definition
4
+
5
+ attr_reader :workflow
6
+
7
+ ##################################################################
8
+ # class options
9
+ self.options =
10
+ {
11
+ :group => 'Workflow',
12
+ :display_name => 'Workflow Start',
13
+ :help_partial => '/re_rule_definitions/<%=rule_name%>/help',
14
+ :new_partial => '/re_rule_definitions/<%=rule_name%>/new',
15
+ :edit_partial => '/re_rule_definitions/<%=rule_name%>/edit'
16
+ }
17
+
18
+ ##################################################################
19
+ # set the rule data
20
+ def data= data
21
+ if data.nil?
22
+ @title = nil
23
+ @workflow = nil
24
+ else
25
+ @title, @workflow = ActiveSupport::JSON.decode(data)
26
+ end
27
+ end
28
+
29
+ ##################################################################
30
+ # get the rule attributes
31
+ def title
32
+ @title
33
+ end
34
+
35
+ def summary
36
+ "Start the workflow : #{workflow}"
37
+ end
38
+
39
+ def data
40
+ [title, workflow].to_json
41
+ end
42
+
43
+ def expected_outcomes
44
+ [:outcome => RulesEngine::Rule::Outcome::START_WORKFLOW, :workflow_code => workflow]
45
+ end
46
+
47
+ ##################################################################
48
+ # set the rule attributes
49
+ def attributes=(params)
50
+ param_hash = params.symbolize_keys
51
+
52
+ @title = param_hash[:<%=rule_name%>_title]
53
+ @workflow = param_hash[:<%=rule_name%>_workflow]
54
+ end
55
+
56
+ ##################################################################
57
+ # validation and errors
58
+ def valid?
59
+ @errors = {}
60
+ @errors[:<%=rule_name%>_title] = "Title required" if title.blank?
61
+ @errors[:<%=rule_name%>_workflow] = "Workflow required" if workflow.blank?
62
+ return @errors.empty?
63
+ end
64
+
65
+ ##################################################################
66
+ # callbacks when the rule is added and removed from a workflow
67
+ def before_create()
68
+ end
69
+
70
+ def before_update()
71
+ end
72
+
73
+ def before_destroy()
74
+ end
75
+
76
+ ##################################################################
77
+ # execute the rule
78
+ # start the workflow
79
+ def process(process_id, data)
80
+ return RulesEngine::Rule::Outcome.new(RulesEngine::Rule::Outcome::START_WORKFLOW, workflow)
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,80 @@
1
+ module RulesEngine
2
+ module Rule
3
+ class <%=rule_class%> < RulesEngine::Rule::Definition
4
+
5
+ attr_reader :description
6
+ ##################################################################
7
+ # class options
8
+ self.options =
9
+ {
10
+ :group => 'Workflow',
11
+ :display_name => 'Workflow Stop',
12
+ :help_partial => '/re_rule_definitions/<%=rule_name%>/help',
13
+ :new_partial => '/re_rule_definitions/<%=rule_name%>/new',
14
+ :edit_partial => '/re_rule_definitions/<%=rule_name%>/edit'
15
+ }
16
+
17
+ ##################################################################
18
+ # set the rule data
19
+ def data= data
20
+ if data.nil?
21
+ @title = nil
22
+ @description = nil
23
+ else
24
+ @title, @description = ActiveSupport::JSON.decode(data)
25
+ end
26
+ end
27
+
28
+ ##################################################################
29
+ # get the rule attributes
30
+ def title
31
+ @title
32
+ end
33
+
34
+ def summary
35
+ description || "Does Nothing"
36
+ end
37
+
38
+ def data
39
+ [title, description].to_json
40
+ end
41
+
42
+ def expected_outcomes
43
+ [:outcome => RulesEngine::Rule::Outcome::STOP_SUCCESS]
44
+ end
45
+
46
+ ##################################################################
47
+ # set the rule attributes
48
+ def attributes=(params)
49
+ param_hash = params.symbolize_keys
50
+
51
+ @title = param_hash[:<%=rule_name%>_title]
52
+ @description = param_hash[:<%=rule_name%>_description]
53
+ end
54
+
55
+ ##################################################################
56
+ # validation and errors
57
+ def valid?
58
+ @errors = {}
59
+ @errors[:<%=rule_name%>_title] = "Title required" if title.blank?
60
+ return @errors.empty?
61
+ end
62
+
63
+ ##################################################################
64
+ # callbacks when the rule is added and removed from a workflow
65
+ def before_add_to_workflow()
66
+ end
67
+
68
+ def before_remove_from_workflow()
69
+ end
70
+
71
+ ##################################################################
72
+ # execute the rule
73
+ # this rule stops the plan
74
+ def process(process_id, data)
75
+ RulesEngine::Process.auditor.audit(process_id, "Inside Rule #{title}", RulesEngine::Process::AUDIT_INFO)
76
+ RulesEngine::Rule::Outcome.new(RulesEngine::Rule::Outcome::STOP_SUCCESS)
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1 @@
1
+ <%%= render '/re_rule_definitions/<%=rule_name%>/form' %>
@@ -0,0 +1,21 @@
1
+ <%% javascript_tag do %>
2
+
3
+ $(document).ready(function() {
4
+ $('#<%=rule_name%>_title').focus();
5
+ });
6
+
7
+ <%% end %>
8
+
9
+ <%%= re_text_field "Title",
10
+ "<%=rule_name%>_title",
11
+ params[:<%=rule_name%>_title] || @re_rule.rule.title,
12
+ :size => 30,
13
+ :required => true,
14
+ :error => @re_rule.rule.errors[:<%=rule_name%>_title],
15
+ :span => '4x13' %>
16
+
17
+ <%%= re_text_field "Plan Code", "<%=rule_name%>_plan", @re_rule.rule.plan || params[:<%=rule_name%>_plan],
18
+ :size => 20,
19
+ :required => true,
20
+ :span => '4x13',
21
+ :error => @re_rule.rule.errors[:<%=rule_name%>_plan] %>
@@ -0,0 +1 @@
1
+ <p>Run the plan passing the data to the new plan</p>
@@ -0,0 +1 @@
1
+ <%%= render '/re_rule_definitions/<%=rule_name%>/form' %>
@@ -1,5 +1 @@
1
- <%%= render '/re_rule_definitions/<%=rule_name%>/script' %>
2
-
3
- <%%= render '/re_rule_definitions/<%=rule_name%>/title' %>
4
-
5
- <%%= render '/re_rule_definitions/<%=rule_name%>/words', :f => f %>
1
+ <%%= render '/re_rule_definitions/<%=rule_name%>/form', :f => f %>
@@ -0,0 +1,34 @@
1
+ <%% javascript_tag do %>
2
+ var new_<%=rule_name%> = '<%%=escape_javascript(render("/re_rule_definitions/<%=rule_name%>/form_word"))%>'
3
+
4
+ $(document).ready(function() {
5
+ $('#<%=rule_name%>_title').focus();
6
+ });
7
+
8
+ <%% end %>
9
+
10
+
11
+ <%%= re_text_field "Title",
12
+ "<%=rule_name%>_title",
13
+ params[:<%=rule_name%>_title] || @re_rule.rule.title,
14
+ :size => 30,
15
+ :required => true,
16
+ :error => @re_rule.rule.errors[:<%=rule_name%>_title],
17
+ :span => '4x13' %>
18
+
19
+ <%% position = 0 %>
20
+ <%% (@re_rule.rule.words || []).each do | word | %>
21
+ <%% f.fields_for :rule_data, {:first => false} do |frd| %>
22
+ <%%= render '/re_rule_definitions/<%=rule_name%>/form_word', :f => frd, :position => position, :word => word %>
23
+ <%% position += 1 %>
24
+ <%% end %>
25
+ <%% end %>
26
+ <%% if position == 0 %>
27
+ <%% f.fields_for :rule_data, {:first => false} do |frd| %>
28
+ <%%= render '/re_rule_definitions/<%=rule_name%>/form_word', :f => frd, :position => position %>
29
+ <%% end %>
30
+ <%% end %>
31
+
32
+ <div id="new_position_<%=rule_name%>"></div>
33
+ <%%= re_form_text "", re_add_link('Add another word to filter', '<%=rule_name%>') %>
34
+
@@ -1 +1 @@
1
- <p>Twitter Filter : This will filter out any tweets with the matching text</p>
1
+ <p>This will filter out any tweets with the matching text</p>
@@ -1,5 +1 @@
1
- <%%= render '/re_rule_definitions/<%=rule_name%>/script' %>
2
-
3
- <%%= render '/re_rule_definitions/<%=rule_name%>/title' %>
4
-
5
- <%%= render '/re_rule_definitions/<%=rule_name%>/words', :f => f %>
1
+ <%%= render '/re_rule_definitions/<%=rule_name%>/form', :f => f %>
@@ -0,0 +1 @@
1
+ <%%= render '/re_rule_definitions/<%=rule_name%>/form' %>
@@ -0,0 +1,29 @@
1
+ <%% javascript_tag do %>
2
+
3
+ $(document).ready(function() {
4
+ $('#<%=rule_name%>_title').focus();
5
+ });
6
+
7
+ <%% end %>
8
+
9
+ <%%= re_text_field "Title",
10
+ "<%=rule_name%>_title",
11
+ params[:<%=rule_name%>_title] || @re_rule.rule.title,
12
+ :size => 30,
13
+ :required => true,
14
+ :error => @re_rule.rule.errors[:<%=rule_name%>_title],
15
+ :span => '4x13' %>
16
+
17
+ <%%= re_text_field "Message",
18
+ "<%=rule_name%>_message",
19
+ params[:<%=rule_name%>_message] || @re_rule.rule.message,
20
+ :size => 60,
21
+ :required => true,
22
+ :error => @re_rule.rule.errors[:<%=rule_name%>_message],
23
+ :span => '4x13' %>
24
+
25
+ <%%= re_text_field "Plan Code", "<%=rule_name%>_plan", @re_rule.rule.plan || params[:<%=rule_name%>_plan],
26
+ :size => 20,
27
+ :required => true,
28
+ :span => '4x13',
29
+ :error => @re_rule.rule.errors[:<%=rule_name%>_plan] %>
@@ -0,0 +1 @@
1
+ <p>This read the tweet message and send each tweet to the defined plan</p>
@@ -0,0 +1 @@
1
+ <%%= render '/re_rule_definitions/<%=rule_name%>/form' %>
@@ -0,0 +1 @@
1
+ <%%= render '/re_rule_definitions/<%=rule_name%>/form' %>
@@ -0,0 +1,21 @@
1
+ <%% javascript_tag do %>
2
+
3
+ $(document).ready(function() {
4
+ $('#<%=rule_name%>_title').focus();
5
+ });
6
+
7
+ <%% end %>
8
+
9
+ <%%= re_text_field "Title",
10
+ "<%=rule_name%>_title",
11
+ params[:<%=rule_name%>_title] || @re_rule.rule.title,
12
+ :size => 30,
13
+ :required => true,
14
+ :error => @re_rule.rule.errors[:<%=rule_name%>_title],
15
+ :span => '4x13' %>
16
+
17
+ <%%= re_text_field "Workflow Code", "<%=rule_name%>_workflow", @re_rule.rule.workflow || params[:<%=rule_name%>_workflow],
18
+ :size => 20,
19
+ :required => true,
20
+ :span => '4x13',
21
+ :error => @re_rule.rule.errors[:<%=rule_name%>_workflow] %>
@@ -0,0 +1 @@
1
+ <p>This will start the given workflow</p>
@@ -0,0 +1 @@
1
+ <%%= render '/re_rule_definitions/<%=rule_name%>/form' %>
@@ -0,0 +1 @@
1
+ <%%= render '/re_rule_definitions/<%=rule_name%>/form' %>
@@ -0,0 +1,25 @@
1
+ <%% javascript_tag do %>
2
+
3
+ $(document).ready(function() {
4
+ $('#<%=rule_name%>_title').focus();
5
+ });
6
+
7
+ <%% end %>
8
+
9
+
10
+ <%%= re_text_field "Title",
11
+ "<%=rule_name%>_title",
12
+ params[:<%=rule_name%>_title] || @re_rule.rule.title,
13
+ :size => 30,
14
+ :required => true,
15
+ :error => @re_rule.rule.errors[:<%=rule_name%>_title],
16
+ :span => '4x13' %>
17
+
18
+
19
+ <%%= re_text_field "Description",
20
+ "<%=rule_name%>_description",
21
+ params[:<%=rule_name%>_description] || @re_rule.rule.description,
22
+ :size => 40,
23
+ :required => false,
24
+ :error => @re_rule.rule.errors[:<%=rule_name%>_description],
25
+ :span => '4x13' %>
@@ -0,0 +1 @@
1
+ <p> stop the workflow and plan </p>
@@ -0,0 +1 @@
1
+ <%%= render '/re_rule_definitions/<%=rule_name%>/form' %>
@@ -0,0 +1,237 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ def valid_<%=rule_name%>_rule_data
4
+ '["Rule Title", "Other Plan"]'
5
+ end
6
+
7
+
8
+ describe RulesEngine::Rule::<%=rule_class%> do
9
+
10
+ def valid_attributes
11
+ {
12
+ :<%=rule_name%>_title => 'Rule Title',
13
+ :<%=rule_name%>_plan => 'Next Plan'
14
+ }
15
+ end
16
+
17
+ it "should be discoverable" do
18
+ RulesEngine::Discovery.rule_class("RulesEngine::Rule::<%=rule_class%>").should == RulesEngine::Rule::<%=rule_class%>
19
+ end
20
+
21
+ describe "the expected class options" do
22
+ it "should be in the 'General' group" do
23
+ RulesEngine::Rule::<%=rule_class%>.options[:group].should == "Workflow"
24
+ end
25
+
26
+ it "should have the diplay name of '<%=rule_class%> Rule'" do
27
+ RulesEngine::Rule::<%=rule_class%>.options[:display_name].should == "Plan Start"
28
+ end
29
+
30
+ it "should have the help template of '/re_rule_definitions/<%=rule_name%>/help'" do
31
+ RulesEngine::Rule::<%=rule_class%>.options[:help_partial].should == '/re_rule_definitions/<%=rule_name%>/help'
32
+ end
33
+
34
+ it "should have the new template of '/re_rule_definitions/<%=rule_name%>/new'" do
35
+ RulesEngine::Rule::<%=rule_class%>.options[:new_partial].should == '/re_rule_definitions/<%=rule_name%>/new'
36
+ end
37
+
38
+ it "should have the edit view partial template of '/re_rule_definitions/<%=rule_name%>/edit'" do
39
+ RulesEngine::Rule::<%=rule_class%>.options[:edit_partial].should == '/re_rule_definitions/<%=rule_name%>/edit'
40
+ end
41
+ end
42
+
43
+ describe "setting the rule data" do
44
+ before(:each) do
45
+ @<%=rule_name%> = RulesEngine::Rule::<%=rule_class%>.new
46
+ @<%=rule_name%>.data = valid_<%=rule_name%>_rule_data
47
+ end
48
+
49
+ describe "the json data is valid" do
50
+ it "should be valid" do
51
+ @<%=rule_name%>.should be_valid
52
+ end
53
+
54
+ it "should set the title" do
55
+ @<%=rule_name%>.title.should == "Rule Title"
56
+ end
57
+
58
+ it "should set the plan" do
59
+ @<%=rule_name%>.plan.should == "Other Plan"
60
+ end
61
+ end
62
+
63
+ describe "the data is nil" do
64
+ it "should set the title to nil" do
65
+ @<%=rule_name%>.title.should_not be_nil
66
+ @<%=rule_name%>.data = nil
67
+ @<%=rule_name%>.title.should be_nil
68
+ end
69
+
70
+ it "should set the 'plan' to nil" do
71
+ @<%=rule_name%>.plan.should_not be_nil
72
+ @<%=rule_name%>.data = nil
73
+ @<%=rule_name%>.plan.should be_nil
74
+ end
75
+ end
76
+ end
77
+
78
+ describe "the summary" do
79
+ it "should show the plan" do
80
+ <%=rule_name%> = RulesEngine::Rule::<%=rule_class%>.new
81
+ <%=rule_name%>.stub!(:plan).and_return("mock")
82
+ <%=rule_name%>.summary.should == "Run the plan : mock"
83
+ end
84
+ end
85
+
86
+ describe "the data" do
87
+ it "should be converted to a json string" do
88
+ <%=rule_name%> = RulesEngine::Rule::<%=rule_class%>.new
89
+ <%=rule_name%>.should_receive(:title).and_return("mock title")
90
+ <%=rule_name%>.should_receive(:plan).and_return("plan")
91
+ <%=rule_name%>.data.should == '["mock title","plan"]'
92
+ end
93
+ end
94
+
95
+ describe "the expected_outcomes" do
96
+ it "should be next and stop failure" do
97
+ <%=rule_name%> = RulesEngine::Rule::<%=rule_class%>.new
98
+ <%=rule_name%>.expected_outcomes.should include(:outcome => RulesEngine::Rule::Outcome::NEXT)
99
+ <%=rule_name%>.expected_outcomes.should include(:outcome => RulesEngine::Rule::Outcome::STOP_FAILURE)
100
+ end
101
+ end
102
+
103
+ describe "setting the rule attributes" do
104
+ before(:each) do
105
+ @<%=rule_name%> = RulesEngine::Rule::<%=rule_class%>.new
106
+ end
107
+
108
+ it "should be valid with valid attributes" do
109
+ @<%=rule_name%>.attributes = valid_attributes
110
+ @<%=rule_name%>.should be_valid
111
+ end
112
+
113
+ describe "setting the <%=rule_name%>_title" do
114
+ it "should set the title" do
115
+ @<%=rule_name%>.attributes = valid_attributes
116
+ @<%=rule_name%>.title.should == 'Rule Title'
117
+ end
118
+
119
+ it "should not be valid if the '<%=rule_name%>_title' attribute is missing" do
120
+ @<%=rule_name%>.attributes = valid_attributes.except(:<%=rule_name%>_title)
121
+ @<%=rule_name%>.should_not be_valid
122
+ @<%=rule_name%>.errors.should include(:<%=rule_name%>_title)
123
+ end
124
+
125
+ it "should not be valid if the '<%=rule_name%>_title' attribute is blank" do
126
+ @<%=rule_name%>.attributes = valid_attributes.merge(:<%=rule_name%>_title => "")
127
+ @<%=rule_name%>.should_not be_valid
128
+ @<%=rule_name%>.errors.should include(:<%=rule_name%>_title)
129
+ end
130
+ end
131
+
132
+ describe "setting the <%=rule_name%>_plan" do
133
+ it "should be valid with valid '<%=rule_name%>_plan'" do
134
+ @<%=rule_name%>.attributes = valid_attributes
135
+ @<%=rule_name%>.should be_valid
136
+ @<%=rule_name%>.plan.should == 'Next Plan'
137
+ end
138
+
139
+ it "should not be valid if the '<%=rule_name%>_plan' attribute is missing" do
140
+ @<%=rule_name%>.attributes = valid_attributes.except(:<%=rule_name%>_plan)
141
+ @<%=rule_name%>.should_not be_valid
142
+ @<%=rule_name%>.errors.should include(:<%=rule_name%>_plan)
143
+ end
144
+
145
+ it "should not be valid if the '<%=rule_name%>_plan' attribute is blank" do
146
+ @<%=rule_name%>.attributes = valid_attributes.merge(:<%=rule_name%>_plan => "")
147
+ @<%=rule_name%>.should_not be_valid
148
+ @<%=rule_name%>.errors.should include(:<%=rule_name%>_plan)
149
+ end
150
+ end
151
+ end
152
+
153
+ describe "after a rule is created" do
154
+ # xit "There is nothing to do here"
155
+ end
156
+
157
+ describe "after a rule is created" do
158
+ # xit "There is nothing to do here"
159
+ end
160
+
161
+ describe "processing the rule" do
162
+ before(:each) do
163
+ @<%=rule_name%> = RulesEngine::Rule::<%=rule_class%>.new
164
+ @<%=rule_name%>.stub!(:plan).and_return('sub_plan')
165
+
166
+ RulesEngine::Process.runner.stub!(:create).and_return(1003)
167
+ RulesEngine::Process.runner.stub!(:run)
168
+ end
169
+
170
+ it "should create a rules process to run" do
171
+ RulesEngine::Process.runner.should_receive(:create).and_return(1003)
172
+ RulesEngine::Process.runner.should_receive(:run).with(1003, 'sub_plan', {:origional => "data"})
173
+ @<%=rule_name%>.process(1003, {:origional => "data"})
174
+ end
175
+
176
+ it "should return outcome next if the plan was successful" do
177
+ RulesEngine::Process.runner.stub!(:run).and_return(true)
178
+ @<%=rule_name%>.process(1003, {}).outcome.should == RulesEngine::Rule::Outcome::NEXT
179
+ end
180
+
181
+ it "should return outcome stop failure if the plan failed" do
182
+ RulesEngine::Process.runner.stub!(:run).and_return(false)
183
+ @<%=rule_name%>.process(1003, {}).outcome.should == RulesEngine::Rule::Outcome::STOP_FAILURE
184
+ end
185
+ end
186
+ end
187
+
188
+
189
+ describe ReWorkflowRulesController, :type => :controller do
190
+ integrate_views
191
+
192
+ before(:each) do
193
+ controller.instance_eval { flash.stub!(:sweep) }
194
+
195
+ RulesEngine::Discovery.discover!
196
+
197
+ controller.stub!(:rules_engine_reader_access_required).and_return(true)
198
+ controller.stub!(:rules_engine_editor_access_required).and_return(true)
199
+
200
+ @re_workflow = ReWorkflow.make
201
+ ReWorkflow.stub!(:find).and_return(@re_workflow)
202
+ end
203
+
204
+ describe "help" do
205
+ it "should assign the tweet reader_rule class" do
206
+ get :help, :rule_class_name => "RulesEngine::Rule::<%=rule_class%>"
207
+ assigns[:rule_class].should == RulesEngine::Rule::<%=rule_class%>
208
+ end
209
+ end
210
+
211
+ describe "new" do
212
+ it "show the new form class" do
213
+ get :new, :rule_class_name => "RulesEngine::Rule::<%=rule_class%>"
214
+ response.should have_tag("form#re_rule_new_form") do
215
+ with_tag("input#<%=rule_name%>_title")
216
+ with_tag("input#<%=rule_name%>_plan")
217
+ end
218
+ end
219
+ end
220
+
221
+ describe "edit" do
222
+ it "show the edit form" do
223
+ re_rule = ReRule.make(:re_workflow_id => @re_workflow.id,
224
+ :rule_class_name => "RulesEngine::Rule::<%=rule_class%>",
225
+ :data => valid_<%=rule_name%>_rule_data)
226
+ ReRule.stub!(:find).and_return(re_rule)
227
+
228
+ get :edit, :re_workflow_id => @re_workflow.id, :re_rule_id => 1001, :rule_class_name => "RulesEngine::Rule::<%=rule_class%>"
229
+ response.should have_tag("form#re_rule_edit_form") do
230
+ with_tag("input#<%=rule_name%>_title", :value => 'Rule Title')
231
+ with_tag("input#<%=rule_name%>_plan", :value => 'Other Plan')
232
+ end
233
+ end
234
+ end
235
+
236
+ end
237
+