rules_engine 0.1.3 → 0.1.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.
- data/VERSION +1 -1
- data/lib/rules_engine.rb +2 -2
- data/lib/rules_engine/discovery.rb +1 -1
- data/lib/rules_engine/process/runner.rb +3 -3
- data/lib/rules_engine/rule/definition.rb +85 -0
- data/lib/rules_engine/rule/outcome.rb +19 -0
- data/rails_generators/manifests/complex.rb +30 -0
- data/rails_generators/manifests/complex.yml +24 -0
- data/rails_generators/manifests/simple.rb +26 -0
- data/rails_generators/manifests/simple.yml +21 -0
- data/rails_generators/rules_engine_generator.rb +2 -2
- data/rails_generators/templates/app/models/re_rule.rb +4 -4
- data/rails_generators/templates/app/models/re_rule_expected_outcome.rb +1 -1
- data/rails_generators/templates/app/rules/complex.rb +133 -0
- data/rails_generators/templates/app/rules/simple.rb +83 -0
- data/rails_generators/templates/app/views/re_rule_definitions/{rule_complex → complex}/_edit.html.erb +0 -0
- data/rails_generators/templates/app/views/re_rule_definitions/{rule_complex → complex}/_help.html.erb +0 -0
- data/rails_generators/templates/app/views/re_rule_definitions/{rule_complex → complex}/_new.html.erb +0 -0
- data/rails_generators/templates/app/views/re_rule_definitions/{rule_complex → complex}/_script.html.erb +0 -0
- data/rails_generators/templates/app/views/re_rule_definitions/{rule_complex → complex}/_title.html.erb +0 -0
- data/rails_generators/templates/app/views/re_rule_definitions/{rule_complex → complex}/_word.html.erb +0 -0
- data/rails_generators/templates/app/views/re_rule_definitions/{rule_complex → complex}/_words.html.erb +0 -0
- data/rails_generators/templates/app/views/re_rule_definitions/{rule_complex → complex}/_workflow.html.erb +0 -0
- data/rails_generators/templates/app/views/re_rule_definitions/simple/_edit.html.erb +1 -0
- data/rails_generators/templates/app/views/re_rule_definitions/simple/_form.html.erb +16 -0
- data/rails_generators/templates/app/views/re_rule_definitions/simple/_help.html.erb +1 -0
- data/rails_generators/templates/app/views/re_rule_definitions/simple/_new.html.erb +1 -0
- data/rails_generators/templates/doc/README.rules_engine +1 -1
- data/rails_generators/templates/spec/lib/rules/{rule_complex_spec.rb → complex_spec.rb} +30 -30
- data/rails_generators/templates/spec/lib/rules/simple_spec.rb +161 -0
- data/rails_generators/templates/spec/models/re_rule_expected_outcome_spec.rb +3 -3
- data/rails_generators/templates/spec/models/re_rule_spec.rb +11 -11
- data/spec/railsenv/app/rules/mock_rule.rb +9 -10
- data/spec/railsenv/log/debug.log +1356 -0
- data/spec/railsenv/log/test.log +78 -0
- data/spec/rules_engine/discovery_spec.rb +17 -7
- data/spec/rules_engine/process/runner_spec.rb +8 -8
- data/spec/rules_engine/{rule_spec.rb → rule/definition_spec.rb} +17 -17
- metadata +27 -27
- data/lib/rules_engine/rule.rb +0 -84
- data/lib/rules_engine/rule_outcome.rb +0 -17
- data/rails_generators/manifests/rule_complex.rb +0 -30
- data/rails_generators/manifests/rule_complex.yml +0 -24
- data/rails_generators/manifests/rule_simple.rb +0 -26
- data/rails_generators/manifests/rule_simple.yml +0 -21
- data/rails_generators/templates/app/rules/rule_complex.rb +0 -130
- data/rails_generators/templates/app/rules/rule_simple.rb +0 -79
- data/rails_generators/templates/app/views/re_rule_definitions/rule_simple/_edit.html.erb +0 -1
- data/rails_generators/templates/app/views/re_rule_definitions/rule_simple/_form.html.erb +0 -16
- data/rails_generators/templates/app/views/re_rule_definitions/rule_simple/_help.html.erb +0 -1
- data/rails_generators/templates/app/views/re_rule_definitions/rule_simple/_new.html.erb +0 -1
- data/rails_generators/templates/spec/lib/rules/rule_simple_spec.rb +0 -161
@@ -1,17 +0,0 @@
|
|
1
|
-
module RulesEngine
|
2
|
-
class RuleOutcome
|
3
|
-
|
4
|
-
def initialize(outcome, workflow_code = nil)
|
5
|
-
@outcome = outcome
|
6
|
-
@workflow_code = workflow_code
|
7
|
-
end
|
8
|
-
|
9
|
-
OUTCOME_NEXT = 0
|
10
|
-
OUTCOME_STOP_SUCCESS = 1
|
11
|
-
OUTCOME_STOP_FAILURE = 2
|
12
|
-
OUTCOME_START_WORKFLOW = 3
|
13
|
-
|
14
|
-
attr_accessor :outcome
|
15
|
-
attr_accessor :workflow_code
|
16
|
-
end
|
17
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
class RuleComplexManifest
|
2
|
-
def self.populate_record(m, rule_name ,rule_class)
|
3
|
-
|
4
|
-
%W(
|
5
|
-
app/rules
|
6
|
-
app/views/re_rule_definitions/#{rule_name}
|
7
|
-
lib/tasks
|
8
|
-
spec/lib/rules
|
9
|
-
).each do |dirname|
|
10
|
-
m.directory dirname
|
11
|
-
end
|
12
|
-
|
13
|
-
%W(
|
14
|
-
).each do |filename|
|
15
|
-
m.file filename, filename
|
16
|
-
end
|
17
|
-
|
18
|
-
m.template "app/rules/rule_complex.rb", "app/rules/#{rule_name}.rb"
|
19
|
-
m.template "app/views/re_rule_definitions/rule_complex/_edit.html.erb", "app/views/re_rule_definitions/#{rule_name}/_edit.html.erb"
|
20
|
-
m.template "app/views/re_rule_definitions/rule_complex/_help.html.erb", "app/views/re_rule_definitions/#{rule_name}/_help.html.erb"
|
21
|
-
m.template "app/views/re_rule_definitions/rule_complex/_new.html.erb", "app/views/re_rule_definitions/#{rule_name}/_new.html.erb"
|
22
|
-
m.template "app/views/re_rule_definitions/rule_complex/_script.html.erb", "app/views/re_rule_definitions/#{rule_name}/_script.html.erb"
|
23
|
-
m.template "app/views/re_rule_definitions/rule_complex/_title.html.erb", "app/views/re_rule_definitions/#{rule_name}/_title.html.erb"
|
24
|
-
m.template "app/views/re_rule_definitions/rule_complex/_word.html.erb", "app/views/re_rule_definitions/#{rule_name}/_word.html.erb"
|
25
|
-
m.template "app/views/re_rule_definitions/rule_complex/_words.html.erb", "app/views/re_rule_definitions/#{rule_name}/_words.html.erb"
|
26
|
-
m.template "app/views/re_rule_definitions/rule_complex/_workflow.html.erb", "app/views/re_rule_definitions/#{rule_name}/_workflow.html.erb"
|
27
|
-
m.template "spec/lib/rules/rule_complex_spec.rb", "spec/lib/rules/#{rule_name}_spec.rb"
|
28
|
-
|
29
|
-
end
|
30
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
directories :
|
2
|
-
- app/rules
|
3
|
-
- spec/lib/rules
|
4
|
-
- lib/tasks
|
5
|
-
|
6
|
-
templates :
|
7
|
-
replacements :
|
8
|
-
- rule_complex : rule_name
|
9
|
-
- RuleComplex : rule_class
|
10
|
-
|
11
|
-
directories :
|
12
|
-
- app/views/re_rule_definitions/rule_complex
|
13
|
-
|
14
|
-
files :
|
15
|
-
- app/rules/rule_complex.rb
|
16
|
-
- app/views/re_rule_definitions/rule_complex/_edit.html.erb
|
17
|
-
- app/views/re_rule_definitions/rule_complex/_help.html.erb
|
18
|
-
- app/views/re_rule_definitions/rule_complex/_workflow.html.erb
|
19
|
-
- app/views/re_rule_definitions/rule_complex/_script.html.erb
|
20
|
-
- app/views/re_rule_definitions/rule_complex/_title.html.erb
|
21
|
-
- app/views/re_rule_definitions/rule_complex/_new.html.erb
|
22
|
-
- app/views/re_rule_definitions/rule_complex/_word.html.erb
|
23
|
-
- app/views/re_rule_definitions/rule_complex/_words.html.erb
|
24
|
-
- spec/lib/rules/rule_complex_spec.rb
|
@@ -1,26 +0,0 @@
|
|
1
|
-
class RuleSimpleManifest
|
2
|
-
def self.populate_record(m, rule_name ,rule_class)
|
3
|
-
|
4
|
-
%W(
|
5
|
-
app/rules
|
6
|
-
app/views/re_rule_definitions/#{rule_name}
|
7
|
-
lib/tasks
|
8
|
-
spec/lib/rules
|
9
|
-
).each do |dirname|
|
10
|
-
m.directory dirname
|
11
|
-
end
|
12
|
-
|
13
|
-
%W(
|
14
|
-
).each do |filename|
|
15
|
-
m.file filename, filename
|
16
|
-
end
|
17
|
-
|
18
|
-
m.template "app/rules/rule_simple.rb", "app/rules/#{rule_name}.rb"
|
19
|
-
m.template "app/views/re_rule_definitions/rule_simple/_edit.html.erb", "app/views/re_rule_definitions/#{rule_name}/_edit.html.erb"
|
20
|
-
m.template "app/views/re_rule_definitions/rule_simple/_form.html.erb", "app/views/re_rule_definitions/#{rule_name}/_form.html.erb"
|
21
|
-
m.template "app/views/re_rule_definitions/rule_simple/_help.html.erb", "app/views/re_rule_definitions/#{rule_name}/_help.html.erb"
|
22
|
-
m.template "app/views/re_rule_definitions/rule_simple/_new.html.erb", "app/views/re_rule_definitions/#{rule_name}/_new.html.erb"
|
23
|
-
m.template "spec/lib/rules/rule_simple_spec.rb", "spec/lib/rules/#{rule_name}_spec.rb"
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
directories :
|
2
|
-
- app/rules
|
3
|
-
- spec/lib/rules
|
4
|
-
- lib/tasks
|
5
|
-
|
6
|
-
templates :
|
7
|
-
replacements :
|
8
|
-
- rule_simple : rule_name
|
9
|
-
- RuleSimple : rule_class
|
10
|
-
|
11
|
-
directories :
|
12
|
-
- app/views/re_rule_definitions/rule_simple
|
13
|
-
|
14
|
-
files :
|
15
|
-
- app/rules/rule_simple.rb
|
16
|
-
- app/views/re_rule_definitions/rule_simple/_edit.html.erb
|
17
|
-
- app/views/re_rule_definitions/rule_simple/_help.html.erb
|
18
|
-
- app/views/re_rule_definitions/rule_simple/_new.html.erb
|
19
|
-
- app/views/re_rule_definitions/rule_simple/_form.html.erb
|
20
|
-
- spec/lib/rules/rule_simple_spec.rb
|
21
|
-
|
@@ -1,130 +0,0 @@
|
|
1
|
-
class <%=rule_class%> < RulesEngine::Rule
|
2
|
-
|
3
|
-
attr_reader :words
|
4
|
-
attr_reader :workflow_action
|
5
|
-
attr_reader :workflow
|
6
|
-
|
7
|
-
##################################################################
|
8
|
-
# class options
|
9
|
-
self.options =
|
10
|
-
{
|
11
|
-
:group => 'General',
|
12
|
-
:display_name => '<%=rule_class%> Rule',
|
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
|
-
@words = nil
|
24
|
-
@workflow_action = 'continue'
|
25
|
-
@workflow = nil
|
26
|
-
else
|
27
|
-
@title, @words, @workflow_action, @workflow = ActiveSupport::JSON.decode(data)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
##################################################################
|
32
|
-
# get the rule attributes
|
33
|
-
def title
|
34
|
-
@title
|
35
|
-
end
|
36
|
-
|
37
|
-
def summary
|
38
|
-
"Match the #{words.size == 1 ? 'word' : 'words'} #{words.join(', ')}"
|
39
|
-
end
|
40
|
-
|
41
|
-
def data
|
42
|
-
[title, words, workflow_action, workflow].to_json
|
43
|
-
end
|
44
|
-
|
45
|
-
def expected_outcomes
|
46
|
-
case workflow_action
|
47
|
-
when 'next'
|
48
|
-
[:outcome => RulesEngine::RuleOutcome::OUTCOME_NEXT]
|
49
|
-
when 'stop_success'
|
50
|
-
[:outcome => RulesEngine::RuleOutcome::OUTCOME_STOP_SUCCESS]
|
51
|
-
when 'stop_failure'
|
52
|
-
[:outcome => RulesEngine::RuleOutcome::OUTCOME_STOP_FAILURE]
|
53
|
-
when 'start_workflow'
|
54
|
-
[:outcome => RulesEngine::RuleOutcome::OUTCOME_START_WORKFLOW, :workflow_code => workflow]
|
55
|
-
else
|
56
|
-
[:outcome => RulesEngine::RuleOutcome::OUTCOME_NEXT]
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
##################################################################
|
61
|
-
# set the rule attributes
|
62
|
-
def attributes=(params)
|
63
|
-
param_hash = params.symbolize_keys
|
64
|
-
|
65
|
-
@title = param_hash[:<%=rule_name%>_title]
|
66
|
-
|
67
|
-
@words = []
|
68
|
-
return if param_hash[:<%=rule_name%>_words].nil?
|
69
|
-
param_hash[:<%=rule_name%>_words].each do |key, values|
|
70
|
-
if values.is_a?(Hash)
|
71
|
-
word_hash = values.symbolize_keys
|
72
|
-
@words << word_hash[:word].downcase unless word_hash[:word].blank? || word_hash[:_delete] == '1'
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
@workflow_action = param_hash[:<%=rule_name%>_workflow_action] || 'continue'
|
77
|
-
@workflow = param_hash[:<%=rule_name%>_workflow] || ''
|
78
|
-
end
|
79
|
-
|
80
|
-
##################################################################
|
81
|
-
# validation and errors
|
82
|
-
def valid?
|
83
|
-
@errors = {}
|
84
|
-
@errors[:<%=rule_name%>_words] = "At least one word must be defined" if words.nil? || words.empty?
|
85
|
-
@errors[:<%=rule_name%>_title] = "Title required" if title.blank?
|
86
|
-
@errors[:<%=rule_name%>_workflow] = "Workflow required" if workflow_action == 'start_workflow' && workflow.blank?
|
87
|
-
return @errors.empty?
|
88
|
-
end
|
89
|
-
|
90
|
-
##################################################################
|
91
|
-
# callbacks when the rule is added and removed from a workflow
|
92
|
-
def after_add_to_workflow(workflow_code)
|
93
|
-
end
|
94
|
-
|
95
|
-
def before_remove_from_workflow(workflow_code)
|
96
|
-
end
|
97
|
-
|
98
|
-
##################################################################
|
99
|
-
# execute the rule
|
100
|
-
# if a match is found procees to the expected outcome
|
101
|
-
# it gets the data parameter :tweet
|
102
|
-
# it sets the data parameter :match
|
103
|
-
def process(process_id, data)
|
104
|
-
tweet = data[:tweet] || data["tweet"]
|
105
|
-
if tweet.blank?
|
106
|
-
return RulesEngine::RuleOutcome.new(RulesEngine::RuleOutcome::OUTCOME_NEXT)
|
107
|
-
end
|
108
|
-
|
109
|
-
words.each do |word|
|
110
|
-
if /#{word}/i =~ tweet
|
111
|
-
RulesEngine::Process.auditor.audit(process_id, "#{title} Found #{word}", RulesEngine::Process::AUDIT_INFO)
|
112
|
-
data[:match] = word
|
113
|
-
|
114
|
-
case workflow_action
|
115
|
-
when 'stop_success'
|
116
|
-
return RulesEngine::RuleOutcome.new(RulesEngine::RuleOutcome::OUTCOME_STOP_SUCCESS)
|
117
|
-
when 'stop_failure'
|
118
|
-
return RulesEngine::RuleOutcome.new(RulesEngine::RuleOutcome::OUTCOME_STOP_FAILURE)
|
119
|
-
when 'start_workflow'
|
120
|
-
return RulesEngine::RuleOutcome.new(RulesEngine::RuleOutcome::OUTCOME_START_WORKFLOW, workflow)
|
121
|
-
else #'next'
|
122
|
-
return RulesEngine::RuleOutcome.new(RulesEngine::RuleOutcome::OUTCOME_NEXT)
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
RulesEngine::RuleOutcome.new(RulesEngine::RuleOutcome::OUTCOME_NEXT)
|
128
|
-
end
|
129
|
-
|
130
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
class <%=rule_class%> < RulesEngine::Rule
|
2
|
-
|
3
|
-
attr_reader :description
|
4
|
-
##################################################################
|
5
|
-
# class options
|
6
|
-
self.options =
|
7
|
-
{
|
8
|
-
:group => 'General',
|
9
|
-
:display_name => '<%=rule_class%> Rule',
|
10
|
-
:help_partial => '/re_rule_definitions/<%=rule_name%>/help',
|
11
|
-
:new_partial => '/re_rule_definitions/<%=rule_name%>/new',
|
12
|
-
:edit_partial => '/re_rule_definitions/<%=rule_name%>/edit'
|
13
|
-
}
|
14
|
-
|
15
|
-
##################################################################
|
16
|
-
# set the rule data
|
17
|
-
def data= data
|
18
|
-
if data.nil?
|
19
|
-
@title = nil
|
20
|
-
@description = nil
|
21
|
-
else
|
22
|
-
@title, @description = ActiveSupport::JSON.decode(data)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
##################################################################
|
27
|
-
# get the rule attributes
|
28
|
-
def title
|
29
|
-
@title
|
30
|
-
end
|
31
|
-
|
32
|
-
def summary
|
33
|
-
description || "Does Nothing"
|
34
|
-
end
|
35
|
-
|
36
|
-
def data
|
37
|
-
[title, description].to_json
|
38
|
-
end
|
39
|
-
|
40
|
-
def expected_outcomes
|
41
|
-
[:outcome => RulesEngine::RuleOutcome::OUTCOME_NEXT]
|
42
|
-
end
|
43
|
-
|
44
|
-
##################################################################
|
45
|
-
# set the rule attributes
|
46
|
-
def attributes=(params)
|
47
|
-
param_hash = params.symbolize_keys
|
48
|
-
|
49
|
-
@title = param_hash[:<%=rule_name%>_title]
|
50
|
-
@description = param_hash[:<%=rule_name%>_description]
|
51
|
-
end
|
52
|
-
|
53
|
-
##################################################################
|
54
|
-
# validation and errors
|
55
|
-
def valid?
|
56
|
-
@errors = {}
|
57
|
-
@errors[:<%=rule_name%>_title] = "Title required" if title.blank?
|
58
|
-
return @errors.empty?
|
59
|
-
end
|
60
|
-
|
61
|
-
##################################################################
|
62
|
-
# callbacks when the rule is added and removed from a workflow
|
63
|
-
def after_add_to_workflow(workflow_code)
|
64
|
-
end
|
65
|
-
|
66
|
-
def before_remove_from_workflow(workflow_code)
|
67
|
-
end
|
68
|
-
|
69
|
-
##################################################################
|
70
|
-
# execute the rule
|
71
|
-
# this rule does nothing
|
72
|
-
def process(process_id, data)
|
73
|
-
RulesEngine::Process.auditor.audit(process_id, "Inside Rule #{title}", RulesEngine::Process::AUDIT_INFO)
|
74
|
-
# RulesEngine::RuleOutcome.new(RulesEngine::RuleOutcome::OUTCOME_STOP_SUCCESS)
|
75
|
-
# RulesEngine::RuleOutcome.new(RulesEngine::RuleOutcome::OUTCOME_STOP_FAILURE)
|
76
|
-
# RulesEngine::RuleOutcome.new(RulesEngine::RuleOutcome::OUTCOME_START_WORKFLOW, 'next_workflow')
|
77
|
-
RulesEngine::RuleOutcome.new(RulesEngine::RuleOutcome::OUTCOME_NEXT)
|
78
|
-
end
|
79
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
<%%= render '/re_rule_definitions/<%=rule_name%>/form' %>
|
@@ -1,16 +0,0 @@
|
|
1
|
-
<%%= re_text_field "<%=rule_class%> Title",
|
2
|
-
"<%=rule_name%>_title",
|
3
|
-
params[:<%=rule_name%>_title] || @re_rule.rule.title,
|
4
|
-
:size => 30,
|
5
|
-
:required => true,
|
6
|
-
:error => @re_rule.rule.errors[:<%=rule_name%>_title],
|
7
|
-
:span => '4x13' %>
|
8
|
-
|
9
|
-
|
10
|
-
<%%= re_text_field "Description",
|
11
|
-
"<%=rule_name%>_description",
|
12
|
-
params[:<%=rule_name%>_description] || @re_rule.rule.description,
|
13
|
-
:size => 40,
|
14
|
-
:required => false,
|
15
|
-
:error => @re_rule.rule.errors[:<%=rule_name%>_description],
|
16
|
-
:span => '4x13' %>
|
@@ -1 +0,0 @@
|
|
1
|
-
<p> <%=rule_class%> : This rule does nothing </p>
|
@@ -1 +0,0 @@
|
|
1
|
-
<%%= render '/re_rule_definitions/<%=rule_name%>/form' %>
|
@@ -1,161 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
-
|
3
|
-
describe <%=rule_class%> do
|
4
|
-
|
5
|
-
def valid_attributes
|
6
|
-
{
|
7
|
-
:<%=rule_name%>_title => 'Valid Title'
|
8
|
-
# :<%=rule_name%>_description => 'Valid Description'
|
9
|
-
}
|
10
|
-
end
|
11
|
-
|
12
|
-
def valid_json_data
|
13
|
-
'["Valid Title", "Valid Description"]'
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should be discoverable" do
|
17
|
-
RulesEngine::Discovery.rule_class("<%=rule_class%>").should == <%=rule_class%>
|
18
|
-
end
|
19
|
-
|
20
|
-
describe "the expected class options" do
|
21
|
-
it "should be in the 'General' group" do
|
22
|
-
<%=rule_class%>.options[:group].should == "General"
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should have the diplay name of '<%=rule_class%> Rule'" do
|
26
|
-
<%=rule_class%>.options[:display_name].should == "<%=rule_class%> Rule"
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should have the help template of '/re_rule_definitions/<%=rule_name%>/help'" do
|
30
|
-
<%=rule_class%>.options[:help_partial].should == '/re_rule_definitions/<%=rule_name%>/help'
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should have the new template of '/re_rule_definitions/<%=rule_name%>/new'" do
|
34
|
-
<%=rule_class%>.options[:new_partial].should == '/re_rule_definitions/<%=rule_name%>/new'
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should have the edit view partial template of '/re_rule_definitions/<%=rule_name%>/edit'" do
|
38
|
-
<%=rule_class%>.options[:edit_partial].should == '/re_rule_definitions/<%=rule_name%>/edit'
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "setting the rule data" do
|
43
|
-
before(:each) do
|
44
|
-
@<%=rule_name%> = <%=rule_class%>.new
|
45
|
-
@<%=rule_name%>.data = valid_json_data
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "the data is valid" do
|
49
|
-
it "should be valid" do
|
50
|
-
@<%=rule_name%>.should be_valid
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should set the title" do
|
54
|
-
@<%=rule_name%>.title.should == "Valid Title"
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should set the description" do
|
58
|
-
@<%=rule_name%>.description.should == "Valid Description"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe "the data is nil" do
|
63
|
-
it "should set the title to nil" do
|
64
|
-
@<%=rule_name%>.title.should_not be_nil
|
65
|
-
@<%=rule_name%>.data = nil
|
66
|
-
@<%=rule_name%>.title.should be_nil
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should set the description to nil" do
|
70
|
-
@<%=rule_name%>.title.should_not be_nil
|
71
|
-
@<%=rule_name%>.data = nil
|
72
|
-
@<%=rule_name%>.description.should be_nil
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
describe "the summary" do
|
78
|
-
describe "description set" do
|
79
|
-
it "should be the rule description" do
|
80
|
-
<%=rule_name%> = <%=rule_class%>.new
|
81
|
-
<%=rule_name%>.should_receive(:description).and_return("mock description")
|
82
|
-
<%=rule_name%>.summary.should == "mock description"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
describe "description not set" do
|
86
|
-
it "should be Does Nothing" do
|
87
|
-
<%=rule_name%> = <%=rule_class%>.new
|
88
|
-
<%=rule_name%>.should_receive(:description).and_return(nil)
|
89
|
-
<%=rule_name%>.summary.should == "Does Nothing"
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe "the data" do
|
95
|
-
it "should be converted to a json string" do
|
96
|
-
<%=rule_name%> = <%=rule_class%>.new
|
97
|
-
<%=rule_name%>.should_receive(:title).and_return("mock title")
|
98
|
-
<%=rule_name%>.should_receive(:description).and_return("mock description")
|
99
|
-
<%=rule_name%>.data.should == '["mock title","mock description"]'
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
describe "the expected_outcomes" do
|
104
|
-
it "should be outcome next" do
|
105
|
-
<%=rule_name%> = <%=rule_class%>.new
|
106
|
-
<%=rule_name%>.expected_outcomes.should == [:outcome => RulesEngine::RuleOutcome::OUTCOME_NEXT]
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
describe "setting the rule attributes" do
|
111
|
-
before(:each) do
|
112
|
-
@<%=rule_name%> = <%=rule_class%>.new
|
113
|
-
end
|
114
|
-
|
115
|
-
it "should be valid with valid attributes" do
|
116
|
-
@<%=rule_name%>.attributes = valid_attributes
|
117
|
-
@<%=rule_name%>.should be_valid
|
118
|
-
end
|
119
|
-
|
120
|
-
describe "setting the <%=rule_name%>_title" do
|
121
|
-
it "should set the title" do
|
122
|
-
@<%=rule_name%>.attributes = valid_attributes
|
123
|
-
@<%=rule_name%>.title.should == 'Valid Title'
|
124
|
-
end
|
125
|
-
|
126
|
-
it "should not be valid if the '<%=rule_name%>_title' attribute is missing" do
|
127
|
-
@<%=rule_name%>.attributes = valid_attributes.except(:<%=rule_name%>_title)
|
128
|
-
@<%=rule_name%>.should_not be_valid
|
129
|
-
@<%=rule_name%>.errors.should include(:<%=rule_name%>_title)
|
130
|
-
end
|
131
|
-
|
132
|
-
it "should not be valid if the '<%=rule_name%>_title' attribute is blank" do
|
133
|
-
@<%=rule_name%>.attributes = valid_attributes.merge(:<%=rule_name%>_title => "")
|
134
|
-
@<%=rule_name%>.should_not be_valid
|
135
|
-
@<%=rule_name%>.errors.should include(:<%=rule_name%>_title)
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
describe "setting the <%=rule_name%>_description" do
|
140
|
-
it "should set the description" do
|
141
|
-
@<%=rule_name%>.attributes = valid_attributes.merge(:<%=rule_name%>_description => 'Valid Description')
|
142
|
-
@<%=rule_name%>.description.should == 'Valid Description'
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
describe "after a rule is created" do
|
148
|
-
# xit "There is nothing to do here"
|
149
|
-
end
|
150
|
-
|
151
|
-
describe "after a rule is created" do
|
152
|
-
# xit "There is nothing to do here"
|
153
|
-
end
|
154
|
-
|
155
|
-
describe "processing the rule" do
|
156
|
-
it "should do nothing" do
|
157
|
-
@<%=rule_name%> = <%=rule_class%>.new
|
158
|
-
@<%=rule_name%>.process(1001, {}).outcome.should == RulesEngine::RuleOutcome::OUTCOME_NEXT
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|