icentris-rules 0.9
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.
- checksums.yaml +15 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +33 -0
- data/app/assets/images/pyr_rules/ui-anim_basic_16x16.gif +0 -0
- data/app/assets/javascripts/pyr_rules/rules.js +135 -0
- data/app/assets/stylesheets/pyr_rules/rules.css.scss +258 -0
- data/app/assets/stylesheets/scaffold.css +57 -0
- data/app/controllers/pyr_rules/actions_controller.rb +22 -0
- data/app/controllers/pyr_rules/events_controller.rb +17 -0
- data/app/controllers/pyr_rules/rules_controller.rb +233 -0
- data/app/helpers/pyr_rules/actions_helper.rb +2 -0
- data/app/helpers/pyr_rules/events_helper.rb +95 -0
- data/app/helpers/pyr_rules/rules_helper.rb +10 -0
- data/app/models/pyr_rules.rb +3 -0
- data/app/models/pyr_rules/action.rb +116 -0
- data/app/models/pyr_rules/rule.rb +201 -0
- data/app/rules/pyr_rules/action_handler.rb +94 -0
- data/app/rules/pyr_rules/controller_event_emitter.rb +34 -0
- data/app/rules/pyr_rules/email_action_handler.rb +6 -0
- data/app/rules/pyr_rules/event_concerns.rb +23 -0
- data/app/rules/pyr_rules/event_config_loader.rb +97 -0
- data/app/rules/pyr_rules/event_subscriber.rb +36 -0
- data/app/rules/pyr_rules/model_creation_handler.rb +25 -0
- data/app/rules/pyr_rules/model_event_emitter.rb +80 -0
- data/app/rules/pyr_rules/rule_context.rb +20 -0
- data/app/rules/pyr_rules/rules_config.rb +87 -0
- data/app/rules/pyr_rules/rules_engine.rb +38 -0
- data/app/rules/pyr_rules/web_request_logger.rb +6 -0
- data/app/views/pyr_rules/actions/index.html.erb +12 -0
- data/app/views/pyr_rules/events/_sidebar.html.erb +8 -0
- data/app/views/pyr_rules/events/index.html.erb +72 -0
- data/app/views/pyr_rules/events/show.html.erb +11 -0
- data/app/views/pyr_rules/rules/_form.html.erb +28 -0
- data/app/views/pyr_rules/rules/_ready_headers.js.erb +11 -0
- data/app/views/pyr_rules/rules/_rule_context_field.html.erb +10 -0
- data/app/views/pyr_rules/rules/_rules.html.erb +34 -0
- data/app/views/pyr_rules/rules/add_action_mapping.js.erb +13 -0
- data/app/views/pyr_rules/rules/edit.html.erb +14 -0
- data/app/views/pyr_rules/rules/index.html.erb +5 -0
- data/app/views/pyr_rules/rules/lookup_sub_properties.js.erb +13 -0
- data/app/views/pyr_rules/rules/new.html.erb +11 -0
- data/app/views/pyr_rules/rules/remove_action_mapping.js.erb +15 -0
- data/app/views/pyr_rules/rules/show.html.erb +98 -0
- data/app/views/shared/_action.html.erb +41 -0
- data/app/views/shared/_action_field_mapping.html.erb +33 -0
- data/app/views/shared/_event.html.erb +21 -0
- data/app/views/shared/_rule.html.erb +27 -0
- data/config/routes.rb +32 -0
- data/config/security.yml +9 -0
- data/db/seeds.rb +1 -0
- data/lib/pyr_rules.rb +34 -0
- data/lib/pyr_rules/engine.rb +72 -0
- data/lib/pyr_rules/generators/dummy_generator.rb +27 -0
- data/lib/pyr_rules/version.rb +3 -0
- data/lib/tasks/pyr_rules_tasks.rake +57 -0
- metadata +224 -0
@@ -0,0 +1,72 @@
|
|
1
|
+
<h3>Listing Events</h3>
|
2
|
+
|
3
|
+
|
4
|
+
<!--
|
5
|
+
:model_events=>
|
6
|
+
{"PyrCommunity"=>
|
7
|
+
{"Blog"=>
|
8
|
+
{:context=>
|
9
|
+
{"id"=>{:type=>:integer},
|
10
|
+
"title"=>{:type=>:string},
|
11
|
+
"author_id"=>{:type=>:integer},
|
12
|
+
"disqus_shortname"=>{:type=>:string},
|
13
|
+
"background_tile"=>{:type=>:boolean},
|
14
|
+
"background_blur"=>{:type=>:integer},
|
15
|
+
"footer"=>{:type=>:text},
|
16
|
+
"description"=>{:type=>:text},
|
17
|
+
"twitter"=>{:type=>:string},
|
18
|
+
"google_analytics"=>{:type=>:string},
|
19
|
+
"background_uid"=>{:type=>:string},
|
20
|
+
"logo_uid"=>{:type=>:string},
|
21
|
+
"created_at"=>{:type=>:datetime},
|
22
|
+
"updated_at"=>{:type=>:datetime}},
|
23
|
+
:actions=>[:create, :update, :delete]}
|
24
|
+
}
|
25
|
+
},
|
26
|
+
"PyrCore"=>
|
27
|
+
{"Lead"=>
|
28
|
+
{:context=>
|
29
|
+
{"id"=>{:type=>:integer},
|
30
|
+
"first_name"=>{:type=>:string},
|
31
|
+
"last_name"=>{:type=>:string},
|
32
|
+
"email"=>{:type=>:string},
|
33
|
+
"phone"=>{:type=>:string},
|
34
|
+
"lead_group"=>{:type=>:string},
|
35
|
+
"comments"=>{:type=>:text},
|
36
|
+
"user_id"=>{:type=>:integer},
|
37
|
+
"created_at"=>{:type=>:datetime},
|
38
|
+
"updated_at"=>{:type=>:datetime}},
|
39
|
+
:actions=>[:create, :update, :delete]}}}}
|
40
|
+
|
41
|
+
--------------------------------------------------------------------------
|
42
|
+
DynaTree equivalent below
|
43
|
+
--------------------------------------------------------------------------
|
44
|
+
|
45
|
+
[
|
46
|
+
{title: "Model Events", isFolder: true, key: "model_events",
|
47
|
+
children: [
|
48
|
+
{title: "PyrCommunity", isFolder: true, key: "model_events.pyr_community",
|
49
|
+
children: [
|
50
|
+
{title: "Blog", isFolder: true, key: "model_events.pyr_community.blog",
|
51
|
+
children: [
|
52
|
+
{title: "Create", key: "model_events.pyr_community.blog.create" },
|
53
|
+
{title: "Update", key: "model_events.pyr_community.blog.update" },
|
54
|
+
{title: "Delete", key: "model_events.pyr_community.blog.delete" },
|
55
|
+
]}
|
56
|
+
]},
|
57
|
+
children: [
|
58
|
+
{title: "PyrCore", isFolder: true, key: "model_events.pyr_core",
|
59
|
+
children: [
|
60
|
+
{title: "Lead", isFolder: true, key: "model_events.pyr_core.lead",
|
61
|
+
children: [
|
62
|
+
{title: "Create", key: "model_events.pyr_core.lead.create" },
|
63
|
+
{title: "Update", key: "model_events.pyr_core.lead.update" },
|
64
|
+
{title: "Delete", key: "model_events.pyr_core.lead.delete" },
|
65
|
+
]}
|
66
|
+
]}
|
67
|
+
|
68
|
+
]}
|
69
|
+
|
70
|
+
]
|
71
|
+
-->
|
72
|
+
<%= render_tree @events_tree %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% content_for :page_title do %>
|
2
|
+
Listing Rules for event
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% content_for :left_column do %>
|
6
|
+
<%= render "pyr_rules/events/sidebar" %>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<%= @event[:name] %>
|
10
|
+
<%= @event[:description] %>
|
11
|
+
<%= render "pyr_rules/rules/rules"%>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<%
|
2
|
+
url = params[:event_id].presence ? pyr_rules_event_rules_path(event_id: params[:event_id]) : pyr_rules_rules_path
|
3
|
+
url = (params[:event_id].presence ? pyr_rules_event_rule_path(@pyr_rules_rule, event_id: params[:event_id]) : pyr_rules_rule_path(@pyr_rules_rule)) unless @pyr_rules_rule.new_record?
|
4
|
+
%>
|
5
|
+
|
6
|
+
<%= simple_form_for( @pyr_rules_rule, url: url) do |f| %>
|
7
|
+
<% if @pyr_rules_rule.errors.any? %>
|
8
|
+
<div id="error_explanation">
|
9
|
+
<h2><%= pluralize(@pyr_rules_rule.errors.count, "error") %> prohibited this pyr_rules_rule from being saved:</h2>
|
10
|
+
|
11
|
+
<ul>
|
12
|
+
<% @pyr_rules_rule.errors.full_messages.each do |msg| %>
|
13
|
+
<li><%= msg %></li>
|
14
|
+
<% end %>
|
15
|
+
</ul>
|
16
|
+
</div>
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
<div class="field">
|
20
|
+
<%= f.input :name , label: "Name" , input_html: {class: "col-md-3"} %>
|
21
|
+
</div>
|
22
|
+
<div class="field">
|
23
|
+
<%= f.input :description , label: "Description" , input_html: {class: "col-md-3"} %>
|
24
|
+
</div>
|
25
|
+
<div class="actions">
|
26
|
+
<%= f.button :submit %>
|
27
|
+
</div>
|
28
|
+
<% end %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% if @action.ready? %>
|
2
|
+
$("#action_title_<%= @action.id.to_s %>").addClass("ready");
|
3
|
+
<% else %>
|
4
|
+
$("#action_title_<%= @action.id.to_s %>").removeClass("ready");
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<% if @pyr_rules_rule.ready? %>
|
8
|
+
$("#rule_title_<%= @pyr_rules_rule.id.to_s %>").addClass("ready");
|
9
|
+
<% else %>
|
10
|
+
$("#rule_title_<%= @pyr_rules_rule.id.to_s %>").removeClass("ready");
|
11
|
+
<% end %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% path_id = "#{rule.id.to_s}_#{path.to_s.gsub('.','__')}" %>
|
2
|
+
<div id="rule_field_<%= path_id %>" class="context context-draggable <%= 'used' if rule.context_field_mapped?(path,type) %>" data-fieldtype="<%= type %>" data-fieldname="<%= path %>">
|
3
|
+
<% if drillable_rule_type? type %>
|
4
|
+
<%= link_to "+", lookup_sub_properties_pyr_rules_rules_path(rule_id: rule.id, div_id: path_id, path: path), remote: true, id: "expand_link_#{path_id}" %>
|
5
|
+
<%= link_to "-", "javascript:void();", onclick:"remove_sub_properties('#{path_id}');", class: "hidden", id: "collapse_link_#{path_id}" %>
|
6
|
+
<% else %>
|
7
|
+
|
8
|
+
<% end %>
|
9
|
+
<b><%= field %></b> (<i><%= type %></i>)
|
10
|
+
</div>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<%= link_to "Reload Rules Engine Configuration", reload_rules_engine_pyr_rules_rules_path, class: "btn btn-mini btn-primary", "data-confirm" => "This may take a moment - it may also cause threading race conditions until it is done in a smarter fashion, it will reload available Events and ActionHandlers. That being said... ARE YOU SURE?" %>
|
2
|
+
|
3
|
+
<%= link_to "New Rule", new_pyr_rules_rule_path, class: "btn btn-mini btn-primary" %>
|
4
|
+
|
5
|
+
<table>
|
6
|
+
<tr>
|
7
|
+
<th>Active</th>
|
8
|
+
<th>Modified</th>
|
9
|
+
<th>Name</th>
|
10
|
+
<th style="min-width:300px;">Events</th>
|
11
|
+
<th>Criteria</th>
|
12
|
+
<th style="min-width:300px;">Actions</th>
|
13
|
+
</tr>
|
14
|
+
|
15
|
+
<% @pyr_rules_rules.each do |pyr_rules_rule| %>
|
16
|
+
<tr style="border-bottom:1px solid black;margin-top:10px;">
|
17
|
+
<td><input type="checkbox" disabled checked></td>
|
18
|
+
<td><%= time_ago_in_words(pyr_rules_rule.u_at) %></td>
|
19
|
+
<td><%= link_to pyr_rules_rule.name, params[:event_id].presence ? pyr_rules_event_rule_path(pyr_rules_rule, event_id: params[:event_id]) : pyr_rules_rule_path(pyr_rules_rule) %></td>
|
20
|
+
<td style="min-width:300px;">
|
21
|
+
<%= pyr_rules_rule.events.count %> event(s) trigger this rule
|
22
|
+
</td>
|
23
|
+
<td><%= pyr_rules_rule.criteria %></td>
|
24
|
+
<td style="min-width:300px;">
|
25
|
+
<% pyr_rules_rule.actions.each do |a| %>
|
26
|
+
<div class="title <%= "ready" if a.ready? %>"><%= a.type.split("::").last.titleize %></div>
|
27
|
+
<% end %>
|
28
|
+
</td>
|
29
|
+
</tr>
|
30
|
+
<% end %>
|
31
|
+
</table>
|
32
|
+
|
33
|
+
<br />
|
34
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<% if @error %>
|
2
|
+
toastr.error("<%= j @error %>");
|
3
|
+
<% else %>
|
4
|
+
toastr.success("Mapping added <%= @rule_field_name %> to <%= @action_field_name %>");
|
5
|
+
$("#action_mapping_<%= @action.id.to_s %>_<%= @action_field_name %>").replaceWith("<%= j render 'shared/action_field_mapping',
|
6
|
+
action: @action,
|
7
|
+
field_name: @action_field_name,
|
8
|
+
field_type: @action_field_type %>");
|
9
|
+
$("#rule_field_<%= @action.rule.id.to_s %>_<%= @rule_field_name.to_s.gsub(".", "__") %>").addClass("used");
|
10
|
+
|
11
|
+
<%= render 'ready_headers' %>
|
12
|
+
|
13
|
+
<% end %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<% content_for :page_title do %>
|
2
|
+
<h1>Editing Rule</h1>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% if params[:event_id].presence %>
|
6
|
+
<% content_for :left_column do %>
|
7
|
+
<%= render "pyr_rules/events/sidebar" %>
|
8
|
+
<% end %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<%= render 'form' %>
|
12
|
+
|
13
|
+
<%= link_to 'Show', params[:event_id].presence ? pyr_rules_event_rule_path(@pyr_rules_rule, event_id: params[:event_id]) : pyr_rules_rule_path(@pyr_rules_rule) %> |
|
14
|
+
<%= link_to 'Back', params[:event_id].presence ? pyr_rules_event_rules_path(event_id: params[:event_id]) : pyr_rules_rules_path %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
$('#expand_link_<%= "#{@div_id}" %>').toggleClass("hidden");
|
2
|
+
$('#collapse_link_<%= "#{@div_id}" %>').toggleClass("hidden");
|
3
|
+
<% @ctx.each do |field, type| %>
|
4
|
+
$('#rule_field_<%= "#{@div_id}" %>').append("<%= j render 'pyr_rules/rules/rule_context_field', rule: @rule, path: "#{@path}.#{field}", field: field, type: type %>");
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
$('<%= "#rule_field_#{@div_id}" %>').children(".context-draggable" ).draggable({
|
8
|
+
cursor: "move",
|
9
|
+
cursorAt: { top: -2, left: -20 },
|
10
|
+
containment: $("#main-content").parent(),
|
11
|
+
helper: function( event ) {
|
12
|
+
return $( "<div style='color:black;'>" + $(this).html() + "</div>" );
|
13
|
+
}});
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% content_for :page_title do %>
|
2
|
+
<h1>New Rule</h1>
|
3
|
+
<% end %>
|
4
|
+
<% if params[:event_id].presence %>
|
5
|
+
<% content_for :left_column do %>
|
6
|
+
<%= render "pyr_rules/events/sidebar" %>
|
7
|
+
<% end %>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
<%= render 'form' %>
|
11
|
+
<%= link_to 'Back', params[:event_id].presence ? pyr_rules_event_rules_path(event_id: params[:event_id]) : pyr_rules_rules_path %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<% if @message %>
|
2
|
+
toastr.success("<%= j @message %>");
|
3
|
+
<% end %>
|
4
|
+
$("#action_mapping_<%= @action.id.to_s %>_<%= @action_field_name %>").
|
5
|
+
replaceWith("<%= j render 'shared/action_field_mapping',
|
6
|
+
action: @action,
|
7
|
+
field_name: @action_field_name,
|
8
|
+
field_type: @action_field_type %>");
|
9
|
+
$(".context-droppable").not(".ui-droppable").droppable( droppableConfiguration );
|
10
|
+
|
11
|
+
<%= render 'ready_headers' %>
|
12
|
+
|
13
|
+
<% if @rule_field_name && !@pyr_rules_rule.context_field_mapped?(@rule_field_name,@rule_field_type) %>
|
14
|
+
$("#rule_field_<%= @action.rule.id.to_s %>_<%= @rule_field_name.to_s.gsub(".", "__") %>").removeClass("used");
|
15
|
+
<% end %>
|
@@ -0,0 +1,98 @@
|
|
1
|
+
<style>
|
2
|
+
h2 {
|
3
|
+
font-size: 24px;
|
4
|
+
font-weight: bold;
|
5
|
+
margin: 15px 0px;
|
6
|
+
text-align: center;
|
7
|
+
}
|
8
|
+
|
9
|
+
input[type='text'] {
|
10
|
+
margin-bottom: 15px;
|
11
|
+
padding: 5px;
|
12
|
+
width: 100%;
|
13
|
+
}
|
14
|
+
|
15
|
+
|
16
|
+
.affix-top {
|
17
|
+
position: static;
|
18
|
+
}
|
19
|
+
|
20
|
+
.affix {
|
21
|
+
position: fixed;
|
22
|
+
top: 0px;
|
23
|
+
}
|
24
|
+
</style>
|
25
|
+
|
26
|
+
<% content_for :page_javascript do %>
|
27
|
+
<script>
|
28
|
+
var rule_id = "<%= @pyr_rules_rule.id %>";
|
29
|
+
</script>
|
30
|
+
<script type="text/javascript">
|
31
|
+
$(document).ready(function() {
|
32
|
+
// Set the width of the rule actions column content before Bootstrap Affix makes it fixed
|
33
|
+
var $rule_actions = $("#rule-actions > div");
|
34
|
+
$rule_actions.width($rule_actions.width());
|
35
|
+
|
36
|
+
// Affix the actions column
|
37
|
+
rule_actions_top = $rule_actions.offset().top - 20;
|
38
|
+
$rule_actions.affix({
|
39
|
+
offset: {
|
40
|
+
top: function () {
|
41
|
+
return rule_actions_top;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
});
|
45
|
+
});
|
46
|
+
</script>
|
47
|
+
<% end %>
|
48
|
+
|
49
|
+
<% content_for :page_title do %>
|
50
|
+
Rules Manager
|
51
|
+
<% end %>
|
52
|
+
|
53
|
+
<% content_for :page_tools do %>
|
54
|
+
<%= link_to "Reload Rules Engine Configuration", reload_rules_engine_pyr_rules_rules_path, class: "btn btn-mini btn-primary", "data-confirm" => "This may take a moment - it may also cause threading race conditions until it is done in a smarter fashion, it will reload available Events and ActionHandlers. That being said... ARE YOU SURE?" %>
|
55
|
+
|
56
|
+
<%= link_to "New Rule", new_pyr_rules_rule_path, class: "btn btn-mini btn-primary" %>
|
57
|
+
|
58
|
+
<%= link_to "Show Rules", pyr_rules_rules_path, class: "btn btn-mini btn-primary" %>
|
59
|
+
<% end %>
|
60
|
+
|
61
|
+
<div id="rules-manager">
|
62
|
+
<div class="row">
|
63
|
+
<div class="col-md-4">
|
64
|
+
<h2>Events (Triggers)</h2>
|
65
|
+
<input id="event_lookup_autocomplete" type="text" placeholder="Add an Event..."/>
|
66
|
+
<div>
|
67
|
+
<% if @pyr_rules_rule.events %>
|
68
|
+
<% @pyr_rules_rule.events.sort.each do |event_name| %>
|
69
|
+
<%= render 'shared/event', event_name: event_name, rule: @pyr_rules_rule, show_arrow: true %>
|
70
|
+
<% end %>
|
71
|
+
<% end %>
|
72
|
+
<div class="clear"></div>
|
73
|
+
</div>
|
74
|
+
</div>
|
75
|
+
|
76
|
+
<div class="col-md-4">
|
77
|
+
<h2>
|
78
|
+
Rule Configuration
|
79
|
+
</h2>
|
80
|
+
<%= render 'shared/rule', rule: @pyr_rules_rule %>
|
81
|
+
</div>
|
82
|
+
|
83
|
+
<div id="rule-actions" class="col-md-4">
|
84
|
+
<div>
|
85
|
+
<h2>Actions</h2>
|
86
|
+
<input id="action_lookup_autocomplete" type="text" placeholder="Add an Action..."/>
|
87
|
+
<div>
|
88
|
+
<% if @pyr_rules_rule.actions %>
|
89
|
+
<% @pyr_rules_rule.actions.each do |a| %>
|
90
|
+
<%= render 'shared/action', action: a, show_arrow: true %>
|
91
|
+
<div class="clear"></div>
|
92
|
+
<% end %>
|
93
|
+
<% end %>
|
94
|
+
</div>
|
95
|
+
</div>
|
96
|
+
</div>
|
97
|
+
</div>
|
98
|
+
</div>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<% show_arrow ||= false %>
|
2
|
+
<% title_only = false unless defined? title_only %>
|
3
|
+
<div class="rules-widget">
|
4
|
+
<div id="action_title_<%= action.id.to_s %>" class="title <%= "ready" if action.ready? %>"><%= action.type.split("::").last.titleize %></div>
|
5
|
+
<% unless title_only %>
|
6
|
+
<% if @pyr_rules_rule %>
|
7
|
+
<div class="action-links"><%= link_to "<i class='#{PyrRules.trash_icon}'></i>".html_safe, remove_action_pyr_rules_rule_path(@pyr_rules_rule, action_id: action.id ), "data-confirm" => "Are you sure you want to remove this Action from your Rule?" %></div>
|
8
|
+
<% end %>
|
9
|
+
<div class="classname"><%= action.type %></div>
|
10
|
+
<% needs = action.needs %>
|
11
|
+
<% templates = action.template_names %>
|
12
|
+
<% if @pyr_rules_rule %>
|
13
|
+
<div class="collapse-group">
|
14
|
+
<a class="collapse-context" data-toggle='collapse' data-target='#provided_<%= action.type.gsub("::","_") %>'>Mapping</a>
|
15
|
+
<div id="provided_<%= action.type.gsub("::","_") %>" class="collapse in">
|
16
|
+
<% if needs %>
|
17
|
+
<% needs.each do |field, type| %>
|
18
|
+
<%= render 'shared/action_field_mapping', action: action, field_name: field, field_type: type %>
|
19
|
+
<% end %>
|
20
|
+
<% end %>
|
21
|
+
<% if templates %>
|
22
|
+
<% templates.each do |name| %>
|
23
|
+
<div class="text-area collapse in">
|
24
|
+
<div class="name"><%= name.to_s.titleize %></div>
|
25
|
+
<%= simple_form_for @pyr_rules_rule do %>
|
26
|
+
|
27
|
+
<textarea name="pyr_rules_rule[action][<%= action.id.to_s %>][template][<%= name %>]"><%= action.template_body(name) %></textarea>
|
28
|
+
<input type="submit" class="action-links btn btn-mini btn-primary" value="save"/>
|
29
|
+
<% end %>
|
30
|
+
</div>
|
31
|
+
<% end %>
|
32
|
+
<% end %>
|
33
|
+
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
<% end %>
|
37
|
+
<% if show_arrow %>
|
38
|
+
<div class="in_arrow"><i class='<%= PyrRules.arrow_icon %>'></i></div>
|
39
|
+
<% end %>
|
40
|
+
<% end %>
|
41
|
+
</div>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<% mapping = action.lookup_context_mapping(field_name,field_type) %>
|
2
|
+
<% if mapping %>
|
3
|
+
<% mapping_class = "action-context-mapped" %>
|
4
|
+
<% else %>
|
5
|
+
<% mapping_class = "context-droppable needs-mapping" %>
|
6
|
+
<% end %>
|
7
|
+
|
8
|
+
<div id="action_mapping_<%= action.id.to_s %>_<%= field_name.to_s.gsub(".", "__") %>" style="position:relative;" class="context <%= mapping_class %>" data-rule-id="<%= @pyr_rules_rule.id rescue "" %>" data-action-id="<%= action.id %>" data-fieldtype="<%= field_type %>" data-fieldname="<%= field_name %>">
|
9
|
+
|
10
|
+
<% if mapping %>
|
11
|
+
|
12
|
+
<span class="source-mapping"><%= "<b>#{mapping[0]}</b>(<i>#{mapping[1]}</i>)".html_safe %></span>
|
13
|
+
<i class='<%= PyrRules.arrow_icon %>'></i>
|
14
|
+
<span class="delete-source-mapping" onclick="remove_action_mapping('<%= action.id %>','<%= field_name %>', '<%= field_type %>');"><i class="<%= PyrRules.delete_icon %>"></i></span>
|
15
|
+
|
16
|
+
<% elsif field_type == :class_lookup %>
|
17
|
+
|
18
|
+
<div class="collapse-group" style="max-height:300px;overflow:auto;">
|
19
|
+
<a data-toggle="collapse" data-target="#class_lookup">
|
20
|
+
<i class='btn btn-xs btn-primary <%= PyrRules.lookup_icon %>'></i>
|
21
|
+
</a>
|
22
|
+
<div class="collapse" id="class_lookup">
|
23
|
+
<% PyrRules::RulesConfig.events_config[:model_events].keys.sort.each do |klazz| %>
|
24
|
+
<div onclick="add_action_mapping('<%= action.id.to_s %>', '<%= field_name %>:class_lookup', '<%= klazz.underscore %>:class_lookup','class_lookup');" style="cursor:pointer;">
|
25
|
+
<%= klazz %>
|
26
|
+
</div>
|
27
|
+
<% end %>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
<% end %>
|
32
|
+
<b><%= field_name %></b> (<i><%= field_type %></i>)
|
33
|
+
</div>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<% show_arrow ||= false %>
|
2
|
+
|
3
|
+
<% context = PyrRules::RulesConfig.event_config(event_name)[:context] %>
|
4
|
+
<div class="rules-widget">
|
5
|
+
<div class="title ready"><%= event_name.split("::").last(2).join("::").titleize %></div>
|
6
|
+
<div class="action-links"><%= link_to "<i class='#{PyrRules.trash_icon}'></i>".html_safe, remove_event_pyr_rules_rule_path(@pyr_rules_rule, event: event_name), "data-confirm" => "Are you sure you want to remove this Event Trigger from this Rule?" %></div>
|
7
|
+
<div class="classname"><%= event_name %></div>
|
8
|
+
<% if context %>
|
9
|
+
<div class="collapse-group">
|
10
|
+
<a class="collapse-context" data-toggle='collapse' data-target='#provided_<%= event_name.gsub("::","_") %>'>Context</a>
|
11
|
+
<div id="provided_<%= event_name.gsub("::","_") %>" class="collapse out">
|
12
|
+
<% context.each do |field, type| %>
|
13
|
+
<div class="context <%= 'unavailable' unless rule && rule.context[field] == type %>">
|
14
|
+
<b><%= field %></b> (<i><%= type %></i>)
|
15
|
+
</div>
|
16
|
+
<% end %>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
<% end %>
|
20
|
+
<div class="out_arrow"><i class='<%= PyrRules.arrow_icon %>'></i></div>
|
21
|
+
</div>
|