drawio_dsl 0.10.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,48 +1,48 @@
1
- <mxfile host="65bd71144e">
2
- <diagram id="lIO" name="Fat Controllers">
3
- <mxGraphModel dx="932" dy="583" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" background="#fafafa" math="0" shadow="0">
4
- <root>
5
- <mxCell id="page_root_lIO"/>
6
- <mxCell id="node_root_lIO" parent="page_root_lIO"/>
7
- <mxCell id="lIO-2" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Reports#sales_by_profit&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;h3 style=&quot;margin:0px;margin-left:4px;margin-bottom:6.912px&quot;&gt;Thin Controller&lt;/h3&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Param marshalling&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;my_action_params()&lt;/p&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Call query&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;MyActionQuery.query(scope, **inputs)&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Present&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;@vm = MyActionPresenter.new(**outputs)&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" parent="node_root_lIO" vertex="1">
8
- <mxGeometry x="30" y="30" width="160" height="160" as="geometry"/>
9
- </mxCell>
10
- <mxCell id="lIO-3" value="&lt;b&gt;Param marshaling&lt;/b&gt;&lt;br&gt;&lt;br&gt;@sales_by_profit_params ||= &lt;br&gt;params.permit(...)&lt;br&gt;&amp;nbsp;&amp;nbsp;.symbolize_keys" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="node_root_lIO" vertex="1">
11
- <mxGeometry x="230" y="50" width="200" height="120" as="geometry"/>
12
- </mxCell>
13
- <mxCell id="lIO-4" value="&lt;b&gt;Call Query&lt;/b&gt;&lt;br&gt;&lt;br&gt;SalesByProfitQuery&lt;br&gt;&amp;nbsp;&amp;nbsp;.query(scope, **custom, **params)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="node_root_lIO" vertex="1">
14
- <mxGeometry x="450" y="50" width="200" height="120" as="geometry"/>
15
- </mxCell>
16
- <mxCell id="lIO-5" value="&lt;b&gt;Present&lt;/b&gt;&lt;br&gt;&lt;br&gt;SalesByProfitPresenter&lt;br&gt;&amp;nbsp;&amp;nbsp;.new(**query.outputs)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="node_root_lIO" vertex="1">
17
- <mxGeometry x="670" y="50" width="200" height="120" as="geometry"/>
18
- </mxCell>
19
- </root>
20
- </mxGraphModel>
21
- </diagram>
22
- <diagram id="nmw" name="Fat Controllers">
23
- <mxGraphModel dx="932" dy="583" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" background="#fafafa" math="0" shadow="0">
24
- <root>
25
- <mxCell id="page_root_nmw"/>
26
- <mxCell id="node_root_nmw" parent="page_root_nmw"/>
27
- <mxCell id="nmw-2" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Reports#sales_by_profit&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;h3 style=&quot;margin:0px;margin-left:4px;margin-bottom:6.912px&quot;&gt;Fat Controller&lt;/h3&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Param marshalling&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:date_from]&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:date_to]&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:sort] || &quot;gross_sales&quot;&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:direction] || &quot;desc&quot;&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:filter_str]&lt;/p&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Dynamic query construction&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;switch params[:filter_str]&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;invoice_date_query&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;ugly query&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Query in controller&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;ActiveRecord::Base.connection.execute(query)&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Build outputs&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;@net_sales_total&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;@vat_total&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;@gross_sales_total&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;@document_data&lt;/p&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Composite outputs&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:sort]&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:direction]&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" parent="node_root_nmw" vertex="1">
28
- <mxGeometry x="30" y="30" width="160" height="160" as="geometry"/>
29
- </mxCell>
30
- <mxCell id="nmw-3" value="&lt;b&gt;Paramater marshalling&lt;/b&gt;&lt;br&gt;&lt;br&gt;reading the params[] object&lt;br&gt;setting sane defaults&lt;br&gt;&lt;i&gt;do not alter and reuse params[]&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="node_root_nmw" vertex="1">
31
- <mxGeometry x="230" y="50" width="200" height="120" as="geometry"/>
32
- </mxCell>
33
- <mxCell id="nmw-4" value="&lt;b&gt;Dynamic query construction&lt;/b&gt;&lt;br&gt;&lt;br&gt;query = &quot;select ...&quot;&lt;br&gt;&lt;i&gt;ActiveRelation vs interpolation&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="node_root_nmw" vertex="1">
34
- <mxGeometry x="450" y="50" width="200" height="120" as="geometry"/>
35
- </mxCell>
36
- <mxCell id="nmw-5" value="&lt;b&gt;Query in controller&lt;/b&gt;&lt;br&gt;&lt;i&gt;Move out to Query object&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="node_root_nmw" vertex="1">
37
- <mxGeometry x="670" y="50" width="200" height="120" as="geometry"/>
38
- </mxCell>
39
- <mxCell id="nmw-6" value="&lt;b&gt;Build outputs&lt;/b&gt;&lt;br&gt;Multiple @instance vars&lt;br&gt;&lt;i&gt;single view model @vm&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="node_root_nmw" vertex="1">
40
- <mxGeometry x="10" y="270" width="200" height="120" as="geometry"/>
41
- </mxCell>
42
- <mxCell id="nmw-7" value="&lt;b&gt;Composite outputs&lt;/b&gt;&lt;br&gt;sort, direction, page_no, page_size&lt;br&gt;&lt;i&gt;single order, page or list object&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="node_root_nmw" vertex="1">
43
- <mxGeometry x="230" y="270" width="200" height="120" as="geometry"/>
44
- </mxCell>
45
- </root>
46
- </mxGraphModel>
47
- </diagram>
1
+ <mxfile host="0Xh">
2
+ <diagram id="EQQ" name="Fat Controllers">
3
+ <mxGraphModel dx="0" dy="0" background="#fafafa" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
4
+ <root>
5
+ <mxCell id="page_root_EQQ" parent="EQQ"/>
6
+ <mxCell id="node_root_EQQ" parent="page_root_EQQ"/>
7
+ <mxCell id="EQQ-2" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Reports#sales_by_profit&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;h3 style=&quot;margin:0px;margin-left:4px;margin-bottom:6.912px&quot;&gt;Thin Controller&lt;/h3&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Param marshalling&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;my_action_params()&lt;/p&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Call query&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;MyActionQuery.query(scope, **inputs)&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Present&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;@vm = MyActionPresenter.new(**outputs)&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" vertex="1" parent="node_root_EQQ">
8
+ <mxGeometry x="30" y="30" width="160" height="160" as="geometry"/>
9
+ </mxCell>
10
+ <mxCell id="EQQ-3" value="&lt;b&gt;Param marshaling&lt;/b&gt;&lt;br&gt;&lt;br&gt;@sales_by_profit_params ||= &lt;br&gt;params.permit(...)&lt;br&gt;&amp;nbsp;&amp;nbsp;.symbolize_keys" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" vertex="1" parent="node_root_EQQ">
11
+ <mxGeometry x="230" y="50" width="200" height="120" as="geometry"/>
12
+ </mxCell>
13
+ <mxCell id="EQQ-4" value="&lt;b&gt;Call Query&lt;/b&gt;&lt;br&gt;&lt;br&gt;SalesByProfitQuery&lt;br&gt;&amp;nbsp;&amp;nbsp;.query(scope, **custom, **params)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" vertex="1" parent="node_root_EQQ">
14
+ <mxGeometry x="450" y="50" width="200" height="120" as="geometry"/>
15
+ </mxCell>
16
+ <mxCell id="EQQ-5" value="&lt;b&gt;Present&lt;/b&gt;&lt;br&gt;&lt;br&gt;SalesByProfitPresenter&lt;br&gt;&amp;nbsp;&amp;nbsp;.new(**query.outputs)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" vertex="1" parent="node_root_EQQ">
17
+ <mxGeometry x="670" y="50" width="200" height="120" as="geometry"/>
18
+ </mxCell>
19
+ </root>
20
+ </mxGraphModel>
21
+ </diagram>
22
+ <diagram id="99x" name="Fat Controllers">
23
+ <mxGraphModel dx="0" dy="0" background="#fafafa" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
24
+ <root>
25
+ <mxCell id="page_root_99x" parent="99x"/>
26
+ <mxCell id="node_root_99x" parent="page_root_99x"/>
27
+ <mxCell id="99x-2" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Reports#sales_by_profit&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;h3 style=&quot;margin:0px;margin-left:4px;margin-bottom:6.912px&quot;&gt;Fat Controller&lt;/h3&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Param marshalling&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:date_from]&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:date_to]&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:sort] || &quot;gross_sales&quot;&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:direction] || &quot;desc&quot;&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:filter_str]&lt;/p&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Dynamic query construction&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;switch params[:filter_str]&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;invoice_date_query&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;ugly query&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Query in controller&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;ActiveRecord::Base.connection.execute(query)&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Build outputs&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;@net_sales_total&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;@vat_total&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;@gross_sales_total&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;@document_data&lt;/p&gt;&lt;h5 style=&quot;margin:0px;margin-left:4px;margin-bottom:4.8px&quot;&gt;Composite outputs&lt;/h5&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:sort]&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;params[:direction]&lt;/p&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" vertex="1" parent="node_root_99x">
28
+ <mxGeometry x="30" y="30" width="160" height="160" as="geometry"/>
29
+ </mxCell>
30
+ <mxCell id="99x-3" value="&lt;b&gt;Paramater marshalling&lt;/b&gt;&lt;br&gt;&lt;br&gt;reading the params[] object&lt;br&gt;setting sane defaults&lt;br&gt;&lt;i&gt;do not alter and reuse params[]&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" vertex="1" parent="node_root_99x">
31
+ <mxGeometry x="230" y="50" width="200" height="120" as="geometry"/>
32
+ </mxCell>
33
+ <mxCell id="99x-4" value="&lt;b&gt;Dynamic query construction&lt;/b&gt;&lt;br&gt;&lt;br&gt;query = &quot;select ...&quot;&lt;br&gt;&lt;i&gt;ActiveRelation vs interpolation&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" vertex="1" parent="node_root_99x">
34
+ <mxGeometry x="450" y="50" width="200" height="120" as="geometry"/>
35
+ </mxCell>
36
+ <mxCell id="99x-5" value="&lt;b&gt;Query in controller&lt;/b&gt;&lt;br&gt;&lt;i&gt;Move out to Query object&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" vertex="1" parent="node_root_99x">
37
+ <mxGeometry x="670" y="50" width="200" height="120" as="geometry"/>
38
+ </mxCell>
39
+ <mxCell id="99x-6" value="&lt;b&gt;Build outputs&lt;/b&gt;&lt;br&gt;Multiple @instance vars&lt;br&gt;&lt;i&gt;single view model @vm&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" vertex="1" parent="node_root_99x">
40
+ <mxGeometry x="10" y="270" width="200" height="120" as="geometry"/>
41
+ </mxCell>
42
+ <mxCell id="99x-7" value="&lt;b&gt;Composite outputs&lt;/b&gt;&lt;br&gt;sort, direction, page_no, page_size&lt;br&gt;&lt;i&gt;single order, page or list object&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" vertex="1" parent="node_root_99x">
43
+ <mxGeometry x="230" y="270" width="200" height="120" as="geometry"/>
44
+ </mxCell>
45
+ </root>
46
+ </mxGraphModel>
47
+ </diagram>
48
48
  </mxfile>
@@ -0,0 +1,306 @@
1
+ <mxfile host="65bd71144e">
2
+ <diagram id="tsA" name="Style-Plain">
3
+ <mxGraphModel dx="4669" dy="1296" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" background="#fafafa" math="0" shadow="0">
4
+ <root>
5
+ <mxCell id="page_root_tsA"/>
6
+ <mxCell id="node_root_tsA" parent="page_root_tsA"/>
7
+ <mxCell id="tsA-2" value="Data Sources (Documents)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=20;verticalAlign=top" parent="node_root_tsA" vertex="1">
8
+ <mxGeometry x="5" y="5" width="692" height="478" as="geometry"/>
9
+ </mxCell>
10
+ <mxCell id="a" value="schema.rb" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;shape=mxgraph.flowchart.database;strokeWidth=1" parent="node_root_tsA" vertex="1">
11
+ <mxGeometry x="29.5" y="73" width="160" height="40" as="geometry"/>
12
+ </mxCell>
13
+ <mxCell id="b" value="db_schema.json" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;shape=mxgraph.flowchart.database;strokeWidth=1" parent="node_root_tsA" vertex="1">
14
+ <mxGeometry x="249.5" y="73" width="160" height="40" as="geometry"/>
15
+ </mxCell>
16
+ <mxCell id="c" value="sql_count (rake/api)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;shape=mxgraph.flowchart.database;strokeWidth=1" parent="node_root_tsA" vertex="1">
17
+ <mxGeometry x="26.5" y="139" width="160" height="40" as="geometry"/>
18
+ </mxCell>
19
+ <mxCell id="d" value="sql_count.json" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;shape=mxgraph.flowchart.database;strokeWidth=1" parent="node_root_tsA" vertex="1">
20
+ <mxGeometry x="246.5" y="139" width="160" height="40" as="geometry"/>
21
+ </mxCell>
22
+ <mxCell id="e" value="rubocop (rake/.txt)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;shape=mxgraph.flowchart.database;strokeWidth=1" parent="node_root_tsA" vertex="1">
23
+ <mxGeometry x="26.5" y="213" width="160" height="40" as="geometry"/>
24
+ </mxCell>
25
+ <mxCell id="f" value="rubocop.json" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;shape=mxgraph.flowchart.database;strokeWidth=1" parent="node_root_tsA" vertex="1">
26
+ <mxGeometry x="246.5" y="213" width="160" height="40" as="geometry"/>
27
+ </mxCell>
28
+ <mxCell id="g" value="routes.json" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;shape=mxgraph.flowchart.database;strokeWidth=1" parent="node_root_tsA" vertex="1">
29
+ <mxGeometry x="246.5" y="283" width="160" height="40" as="geometry"/>
30
+ </mxCell>
31
+ <mxCell id="h" value="model/**/*.rb" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;shape=mxgraph.flowchart.database;strokeWidth=1" parent="node_root_tsA" vertex="1">
32
+ <mxGeometry x="244.5" y="354" width="160" height="40" as="geometry"/>
33
+ </mxCell>
34
+ <mxCell id="i" value="controller/**/*.json" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;shape=mxgraph.flowchart.database;strokeWidth=1" parent="node_root_tsA" vertex="1">
35
+ <mxGeometry x="246.5" y="425" width="160" height="40" as="geometry"/>
36
+ </mxCell>
37
+ <mxCell id="j" value="domain_model.json" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;shape=mxgraph.flowchart.database;strokeWidth=1" parent="node_root_tsA" vertex="1">
38
+ <mxGeometry x="522.5" y="213" width="160" height="40" as="geometry"/>
39
+ </mxCell>
40
+ <mxCell id="tsA-14" value="" style="whiteSpace=wrap;html=1;rounded=0;edgeStyle=none;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#a20025;strokeColor=#6F0000;" parent="node_root_tsA" source="a" target="b" edge="1">
41
+ <mxGeometry relative="1" as="geometry"/>
42
+ </mxCell>
43
+ <mxCell id="tsA-15" value="" style="whiteSpace=wrap;html=1;rounded=0;edgeStyle=none;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#a20025;strokeColor=#6F0000;" parent="node_root_tsA" source="c" target="d" edge="1">
44
+ <mxGeometry relative="1" as="geometry"/>
45
+ </mxCell>
46
+ <mxCell id="tsA-16" value="" style="whiteSpace=wrap;html=1;rounded=0;edgeStyle=none;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#a20025;strokeColor=#6F0000;" parent="node_root_tsA" source="e" target="f" edge="1">
47
+ <mxGeometry relative="1" as="geometry"/>
48
+ </mxCell>
49
+ <mxCell id="tsA-17" value="" style="whiteSpace=wrap;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#a20025;strokeColor=#6F0000;edgeStyle=entityRelationEdgeStyle;" parent="node_root_tsA" source="b" target="j" edge="1">
50
+ <mxGeometry relative="1" as="geometry"/>
51
+ </mxCell>
52
+ <mxCell id="tsA-18" value="" style="whiteSpace=wrap;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#a20025;strokeColor=#6F0000;edgeStyle=entityRelationEdgeStyle;" parent="node_root_tsA" source="d" target="j" edge="1">
53
+ <mxGeometry relative="1" as="geometry"/>
54
+ </mxCell>
55
+ <mxCell id="tsA-19" value="" style="whiteSpace=wrap;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#a20025;strokeColor=#6F0000;edgeStyle=entityRelationEdgeStyle;" parent="node_root_tsA" source="f" target="j" edge="1">
56
+ <mxGeometry relative="1" as="geometry"/>
57
+ </mxCell>
58
+ <mxCell id="tsA-20" value="" style="whiteSpace=wrap;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#a20025;strokeColor=#6F0000;edgeStyle=entityRelationEdgeStyle;" parent="node_root_tsA" source="g" target="j" edge="1">
59
+ <mxGeometry relative="1" as="geometry"/>
60
+ </mxCell>
61
+ <mxCell id="tsA-21" value="" style="whiteSpace=wrap;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#a20025;strokeColor=#6F0000;edgeStyle=entityRelationEdgeStyle;" parent="node_root_tsA" source="h" target="j" edge="1">
62
+ <mxGeometry relative="1" as="geometry"/>
63
+ </mxCell>
64
+ <mxCell id="tsA-22" value="" style="whiteSpace=wrap;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#a20025;strokeColor=#6F0000;edgeStyle=entityRelationEdgeStyle;" parent="node_root_tsA" source="i" target="j" edge="1">
65
+ <mxGeometry relative="1" as="geometry"/>
66
+ </mxCell>
67
+ <mxCell id="ncJzMHtPDMttCXbYRI98-4" value="" style="group" parent="node_root_tsA" vertex="1" connectable="0">
68
+ <mxGeometry x="874" y="225" width="547" height="257" as="geometry"/>
69
+ </mxCell>
70
+ <mxCell id="ncJzMHtPDMttCXbYRI98-2" value="" style="group" parent="ncJzMHtPDMttCXbYRI98-4" vertex="1" connectable="0">
71
+ <mxGeometry x="2" y="93" width="547" height="170" as="geometry"/>
72
+ </mxCell>
73
+ <mxCell id="tsA-32" value="Other printers" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=20;verticalAlign=top" parent="ncJzMHtPDMttCXbYRI98-2" vertex="1">
74
+ <mxGeometry x="-23" y="-132" width="570" height="302" as="geometry"/>
75
+ </mxCell>
76
+ <mxCell id="ncJzMHtPDMttCXbYRI98-0" value="" style="whiteSpace=wrap;html=1;fillColor=#fad7ac;strokeColor=#b46504;rounded=1;opacity=20;" parent="ncJzMHtPDMttCXbYRI98-2" vertex="1">
77
+ <mxGeometry width="521.5" height="149" as="geometry"/>
78
+ </mxCell>
79
+ <mxCell id="tsA-38" value="has_ruby" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" parent="ncJzMHtPDMttCXbYRI98-2" vertex="1">
80
+ <mxGeometry x="13" y="15" width="90" height="50" as="geometry"/>
81
+ </mxCell>
82
+ <mxCell id="tsA-39" value="missing_ruby" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" parent="ncJzMHtPDMttCXbYRI98-2" vertex="1">
83
+ <mxGeometry x="113" y="15" width="90" height="50" as="geometry"/>
84
+ </mxCell>
85
+ <mxCell id="tsA-40" value="has_pk" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" parent="ncJzMHtPDMttCXbYRI98-2" vertex="1">
86
+ <mxGeometry x="213" y="15" width="90" height="50" as="geometry"/>
87
+ </mxCell>
88
+ <mxCell id="tsA-41" value="missing_pk" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" parent="ncJzMHtPDMttCXbYRI98-2" vertex="1">
89
+ <mxGeometry x="313" y="15" width="90" height="50" as="geometry"/>
90
+ </mxCell>
91
+ <mxCell id="tsA-42" value="low_column" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" parent="ncJzMHtPDMttCXbYRI98-2" vertex="1">
92
+ <mxGeometry x="413" y="15" width="90" height="50" as="geometry"/>
93
+ </mxCell>
94
+ <mxCell id="tsA-43" value="fat_column" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" parent="ncJzMHtPDMttCXbYRI98-2" vertex="1">
95
+ <mxGeometry x="13" y="85" width="90" height="50" as="geometry"/>
96
+ </mxCell>
97
+ <mxCell id="tsA-44" value="suspected_m2m" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" parent="ncJzMHtPDMttCXbYRI98-2" vertex="1">
98
+ <mxGeometry x="113" y="85" width="90" height="50" as="geometry"/>
99
+ </mxCell>
100
+ <mxCell id="tsA-45" value="invalid_types" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" parent="ncJzMHtPDMttCXbYRI98-2" vertex="1">
101
+ <mxGeometry x="213" y="85" width="90" height="50" as="geometry"/>
102
+ </mxCell>
103
+ <mxCell id="tsA-46" value="data_columns" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" parent="ncJzMHtPDMttCXbYRI98-2" vertex="1">
104
+ <mxGeometry x="313" y="85" width="90" height="50" as="geometry"/>
105
+ </mxCell>
106
+ <mxCell id="tsA-47" value="date_columns" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" parent="ncJzMHtPDMttCXbYRI98-2" vertex="1">
107
+ <mxGeometry x="413" y="85" width="90" height="50" as="geometry"/>
108
+ </mxCell>
109
+ <mxCell id="ncJzMHtPDMttCXbYRI98-3" style="edgeStyle=none;shape=connector;rounded=0;html=1;exitX=0.584;exitY=0.957;exitDx=0;exitDy=0;labelBackgroundColor=default;fontFamily=Helvetica;fontSize=11;fontColor=default;endArrow=classic;strokeColor=#6F0000;fillColor=#a20025;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="ncJzMHtPDMttCXbYRI98-4" source="tsA-35" target="ncJzMHtPDMttCXbYRI98-0" edge="1">
110
+ <mxGeometry relative="1" as="geometry">
111
+ <mxPoint x="340.2993698120117" y="75.8362808227539" as="targetPoint"/>
112
+ </mxGeometry>
113
+ </mxCell>
114
+ <mxCell id="tsA-34" value="routes" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="ncJzMHtPDMttCXbYRI98-4" vertex="1">
115
+ <mxGeometry x="46" y="2" width="75" height="50" as="geometry"/>
116
+ </mxCell>
117
+ <mxCell id="tsA-35" value="models" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="ncJzMHtPDMttCXbYRI98-4" vertex="1">
118
+ <mxGeometry x="217.5" width="75" height="50" as="geometry"/>
119
+ </mxCell>
120
+ <mxCell id="tsA-36" value="controllers" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="ncJzMHtPDMttCXbYRI98-4" vertex="1">
121
+ <mxGeometry x="399.5" width="75" height="50" as="geometry"/>
122
+ </mxCell>
123
+ <mxCell id="ncJzMHtPDMttCXbYRI98-5" value="" style="group" parent="node_root_tsA" vertex="1" connectable="0">
124
+ <mxGeometry x="899" y="7" width="467" height="120" as="geometry"/>
125
+ </mxCell>
126
+ <mxCell id="tsA-24" value="DB Schema printers" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=20;verticalAlign=top" parent="ncJzMHtPDMttCXbYRI98-5" vertex="1">
127
+ <mxGeometry width="467" height="120" as="geometry"/>
128
+ </mxCell>
129
+ <mxCell id="tsA-26" value="stats" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="ncJzMHtPDMttCXbYRI98-5" vertex="1">
130
+ <mxGeometry x="15" y="51" width="75" height="50" as="geometry"/>
131
+ </mxCell>
132
+ <mxCell id="tsA-27" value="tables" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="ncJzMHtPDMttCXbYRI98-5" vertex="1">
133
+ <mxGeometry x="105" y="51" width="75" height="50" as="geometry"/>
134
+ </mxCell>
135
+ <mxCell id="tsA-28" value="foreign_keys" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="ncJzMHtPDMttCXbYRI98-5" vertex="1">
136
+ <mxGeometry x="195" y="51" width="75" height="50" as="geometry"/>
137
+ </mxCell>
138
+ <mxCell id="tsA-29" value="indexes" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="ncJzMHtPDMttCXbYRI98-5" vertex="1">
139
+ <mxGeometry x="285" y="51" width="75" height="50" as="geometry"/>
140
+ </mxCell>
141
+ <mxCell id="tsA-30" value="dictionary" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;shape=mxgraph.basic.cloud_rect" parent="ncJzMHtPDMttCXbYRI98-5" vertex="1">
142
+ <mxGeometry x="375" y="51" width="75" height="50" as="geometry"/>
143
+ </mxCell>
144
+ <mxCell id="ncJzMHtPDMttCXbYRI98-7" value="" style="group" parent="node_root_tsA" vertex="1" connectable="0">
145
+ <mxGeometry x="1568" y="139" width="644.5" height="256" as="geometry"/>
146
+ </mxCell>
147
+ <mxCell id="tsA-49" value="Generators" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=20;verticalAlign=top" parent="ncJzMHtPDMttCXbYRI98-7" vertex="1">
148
+ <mxGeometry width="644.5" height="256" as="geometry"/>
149
+ </mxCell>
150
+ <mxCell id="tsA-51" value="Factory data" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;shape=process" parent="ncJzMHtPDMttCXbYRI98-7" vertex="1">
151
+ <mxGeometry x="38.5" y="56" width="120" height="70" as="geometry"/>
152
+ </mxCell>
153
+ <mxCell id="tsA-52" value="Model DSL specs (CRUD / Association)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;shape=process" parent="ncJzMHtPDMttCXbYRI98-7" vertex="1">
154
+ <mxGeometry x="188.5" y="56" width="120" height="70" as="geometry"/>
155
+ </mxCell>
156
+ <mxCell id="tsA-53" value="Model API specs" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;shape=process" parent="ncJzMHtPDMttCXbYRI98-7" vertex="1">
157
+ <mxGeometry x="338.5" y="56" width="120" height="70" as="geometry"/>
158
+ </mxCell>
159
+ <mxCell id="tsA-54" value="Controller request specs" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;shape=process" parent="ncJzMHtPDMttCXbYRI98-7" vertex="1">
160
+ <mxGeometry x="488.5" y="56" width="120" height="70" as="geometry"/>
161
+ </mxCell>
162
+ <mxCell id="tsA-55" value="Query + spec" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;shape=process" parent="ncJzMHtPDMttCXbYRI98-7" vertex="1">
163
+ <mxGeometry x="38.5" y="156" width="120" height="70" as="geometry"/>
164
+ </mxCell>
165
+ <mxCell id="tsA-56" value="Decorator + spec" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;shape=process" parent="ncJzMHtPDMttCXbYRI98-7" vertex="1">
166
+ <mxGeometry x="188.5" y="156" width="120" height="70" as="geometry"/>
167
+ </mxCell>
168
+ <mxCell id="tsA-57" value="Presentor + spec" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;shape=process" parent="ncJzMHtPDMttCXbYRI98-7" vertex="1">
169
+ <mxGeometry x="338.5" y="156" width="120" height="70" as="geometry"/>
170
+ </mxCell>
171
+ <mxCell id="12" value="" style="group" vertex="1" connectable="0" parent="node_root_tsA">
172
+ <mxGeometry x="268" y="590" width="1746" height="620" as="geometry"/>
173
+ </mxCell>
174
+ <mxCell id="tsA-60" value="Reports" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=20;verticalAlign=top" parent="12" vertex="1">
175
+ <mxGeometry width="1746" height="620" as="geometry"/>
176
+ </mxCell>
177
+ <mxCell id="7" value="" style="group" vertex="1" connectable="0" parent="12">
178
+ <mxGeometry x="830" y="48" width="882.5" height="156" as="geometry"/>
179
+ </mxCell>
180
+ <mxCell id="tsA-77" value="rubocop" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="7" vertex="1">
181
+ <mxGeometry x="765" y="33" width="90" height="90" as="geometry"/>
182
+ </mxCell>
183
+ <mxCell id="tsA-94" value="Diff or Conflict" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;shape=note" parent="7" vertex="1">
184
+ <mxGeometry y="18" width="120" height="120" as="geometry"/>
185
+ </mxCell>
186
+ <mxCell id="tsA-95" value="factory data &lt;i&gt;missing data/models&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="7" vertex="1">
187
+ <mxGeometry x="165" y="33" width="90" height="90" as="geometry"/>
188
+ </mxCell>
189
+ <mxCell id="tsA-96" value="model DSL specs &lt;i&gt;missing data/associations&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="7" vertex="1">
190
+ <mxGeometry x="315" y="33" width="90" height="90" as="geometry"/>
191
+ </mxCell>
192
+ <mxCell id="tsA-97" value="model API specs &lt;i&gt;missing methods&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="7" vertex="1">
193
+ <mxGeometry x="465" y="33" width="90" height="90" as="geometry"/>
194
+ </mxCell>
195
+ <mxCell id="tsA-98" value="route / controller action &lt;i&gt;mismatch&lt;/i&gt;" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="7" vertex="1">
196
+ <mxGeometry x="615" y="33" width="90" height="90" as="geometry"/>
197
+ </mxCell>
198
+ <mxCell id="6" value="" style="whiteSpace=wrap;html=1;fillColor=#e51400;strokeColor=#B20000;rounded=1;opacity=5;fontColor=#ffffff;" vertex="1" parent="7">
199
+ <mxGeometry x="137.5" width="745" height="156" as="geometry"/>
200
+ </mxCell>
201
+ <mxCell id="8" value="" style="group" vertex="1" connectable="0" parent="12">
202
+ <mxGeometry x="827" y="428" width="882.5" height="156" as="geometry"/>
203
+ </mxCell>
204
+ <mxCell id="tsA-87" value="Target patterns" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;shape=note" parent="8" vertex="1">
205
+ <mxGeometry y="18" width="120" height="120" as="geometry"/>
206
+ </mxCell>
207
+ <mxCell id="tsA-88" value="decorators" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="8" vertex="1">
208
+ <mxGeometry x="165" y="33" width="90" height="90" as="geometry"/>
209
+ </mxCell>
210
+ <mxCell id="tsA-89" value="presenters" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="8" vertex="1">
211
+ <mxGeometry x="315" y="33" width="90" height="90" as="geometry"/>
212
+ </mxCell>
213
+ <mxCell id="tsA-90" value="queries" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="8" vertex="1">
214
+ <mxGeometry x="465" y="33" width="90" height="90" as="geometry"/>
215
+ </mxCell>
216
+ <mxCell id="tsA-91" value="commands" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="8" vertex="1">
217
+ <mxGeometry x="615" y="33" width="90" height="90" as="geometry"/>
218
+ </mxCell>
219
+ <mxCell id="tsA-92" value="form objects" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="8" vertex="1">
220
+ <mxGeometry x="765" y="33" width="90" height="90" as="geometry"/>
221
+ </mxCell>
222
+ <mxCell id="5" value="" style="whiteSpace=wrap;html=1;fillColor=#e51400;strokeColor=#B20000;rounded=1;opacity=5;fontColor=#ffffff;" vertex="1" parent="8">
223
+ <mxGeometry x="137.5" width="745" height="156" as="geometry"/>
224
+ </mxCell>
225
+ <mxCell id="9" value="" style="group" vertex="1" connectable="0" parent="12">
226
+ <mxGeometry x="829" y="236" width="883" height="156" as="geometry"/>
227
+ </mxCell>
228
+ <mxCell id="tsA-80" value="Anti patterns" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;shape=note" parent="9" vertex="1">
229
+ <mxGeometry y="18" width="120" height="120" as="geometry"/>
230
+ </mxCell>
231
+ <mxCell id="tsA-81" value="god classes" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="9" vertex="1">
232
+ <mxGeometry x="165" y="33" width="90" height="90" as="geometry"/>
233
+ </mxCell>
234
+ <mxCell id="tsA-82" value="fat controllers" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="9" vertex="1">
235
+ <mxGeometry x="315" y="33" width="90" height="90" as="geometry"/>
236
+ </mxCell>
237
+ <mxCell id="tsA-83" value="fat models" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="9" vertex="1">
238
+ <mxGeometry x="465" y="33" width="90" height="90" as="geometry"/>
239
+ </mxCell>
240
+ <mxCell id="tsA-84" value="fat views vs components" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="9" vertex="1">
241
+ <mxGeometry x="615" y="33" width="90" height="90" as="geometry"/>
242
+ </mxCell>
243
+ <mxCell id="tsA-85" value="interpolated SQL" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="9" vertex="1">
244
+ <mxGeometry x="765" y="33" width="90" height="90" as="geometry"/>
245
+ </mxCell>
246
+ <mxCell id="4" value="" style="whiteSpace=wrap;html=1;fillColor=#e51400;strokeColor=#B20000;rounded=1;opacity=5;fontColor=#ffffff;" vertex="1" parent="9">
247
+ <mxGeometry x="138" width="745" height="156" as="geometry"/>
248
+ </mxCell>
249
+ <mxCell id="10" value="" style="group" vertex="1" connectable="0" parent="12">
250
+ <mxGeometry x="38" y="44" width="734" height="156" as="geometry"/>
251
+ </mxCell>
252
+ <mxCell id="tsA-73" value="ERD" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;shape=note" parent="10" vertex="1">
253
+ <mxGeometry y="16" width="120" height="120" as="geometry"/>
254
+ </mxCell>
255
+ <mxCell id="tsA-74" value="agg roots" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="10" vertex="1">
256
+ <mxGeometry x="165" y="31" width="90" height="90" as="geometry"/>
257
+ </mxCell>
258
+ <mxCell id="tsA-75" value="many to many" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="10" vertex="1">
259
+ <mxGeometry x="315" y="31" width="90" height="90" as="geometry"/>
260
+ </mxCell>
261
+ <mxCell id="tsA-76" value="leaf tables" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="10" vertex="1">
262
+ <mxGeometry x="465" y="31" width="90" height="90" as="geometry"/>
263
+ </mxCell>
264
+ <mxCell id="tsA-78" value="SQL counts" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="10" vertex="1">
265
+ <mxGeometry x="624" y="28" width="90" height="90" as="geometry"/>
266
+ </mxCell>
267
+ <mxCell id="ncJzMHtPDMttCXbYRI98-26" value="" style="whiteSpace=wrap;html=1;fillColor=#e51400;strokeColor=#B20000;rounded=1;opacity=5;fontColor=#ffffff;" parent="10" vertex="1">
268
+ <mxGeometry x="140" width="594" height="156" as="geometry"/>
269
+ </mxCell>
270
+ <mxCell id="11" value="" style="group" vertex="1" connectable="0" parent="12">
271
+ <mxGeometry x="38" y="303" width="734" height="262" as="geometry"/>
272
+ </mxCell>
273
+ <mxCell id="tsA-62" value="Tests" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;shape=note" parent="11" vertex="1">
274
+ <mxGeometry y="67" width="120" height="120" as="geometry"/>
275
+ </mxCell>
276
+ <mxCell id="tsA-63" value="coverage" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="11" vertex="1">
277
+ <mxGeometry x="166.5" y="19" width="90" height="90" as="geometry"/>
278
+ </mxCell>
279
+ <mxCell id="tsA-64" value="model DSL" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="11" vertex="1">
280
+ <mxGeometry x="316.5" y="19" width="90" height="90" as="geometry"/>
281
+ </mxCell>
282
+ <mxCell id="tsA-65" value="model API" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="11" vertex="1">
283
+ <mxGeometry x="466.5" y="19" width="90" height="90" as="geometry"/>
284
+ </mxCell>
285
+ <mxCell id="tsA-66" value="controller request" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="11" vertex="1">
286
+ <mxGeometry x="616.5" y="19" width="90" height="90" as="geometry"/>
287
+ </mxCell>
288
+ <mxCell id="tsA-67" value="controller commands" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="11" vertex="1">
289
+ <mxGeometry x="166.5" y="153" width="90" height="90" as="geometry"/>
290
+ </mxCell>
291
+ <mxCell id="tsA-68" value="query" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="11" vertex="1">
292
+ <mxGeometry x="316.5" y="153" width="90" height="90" as="geometry"/>
293
+ </mxCell>
294
+ <mxCell id="tsA-69" value="decorator" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="11" vertex="1">
295
+ <mxGeometry x="466.5" y="153" width="90" height="90" as="geometry"/>
296
+ </mxCell>
297
+ <mxCell id="tsA-70" value="presentor" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" parent="11" vertex="1">
298
+ <mxGeometry x="616.5" y="153" width="90" height="90" as="geometry"/>
299
+ </mxCell>
300
+ <mxCell id="ncJzMHtPDMttCXbYRI98-11" value="" style="whiteSpace=wrap;html=1;fillColor=#e51400;strokeColor=#B20000;rounded=1;opacity=5;fontColor=#ffffff;" parent="11" vertex="1">
301
+ <mxGeometry x="141" width="593" height="262" as="geometry"/>
302
+ </mxCell>
303
+ </root>
304
+ </mxGraphModel>
305
+ </diagram>
306
+ </mxfile>