simple_flow 0.1.0 → 0.2.0
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 +4 -4
- data/CHANGELOG.md +25 -0
- data/lib/simple_flow/version.rb +1 -1
- data/lib/simple_flow.rb +0 -17
- metadata +2 -68
- data/.envrc +0 -1
- data/.github/workflows/deploy-github-pages.yml +0 -52
- data/.rubocop.yml +0 -57
- data/COMMITS.md +0 -196
- data/Rakefile +0 -15
- data/benchmarks/parallel_vs_sequential.rb +0 -98
- data/benchmarks/pipeline_overhead.rb +0 -130
- data/docs/api/middleware.md +0 -468
- data/docs/api/parallel-step.md +0 -363
- data/docs/api/pipeline.md +0 -382
- data/docs/api/result.md +0 -375
- data/docs/concurrent/best-practices.md +0 -687
- data/docs/concurrent/introduction.md +0 -246
- data/docs/concurrent/parallel-steps.md +0 -418
- data/docs/concurrent/performance.md +0 -481
- data/docs/core-concepts/flow-control.md +0 -452
- data/docs/core-concepts/middleware.md +0 -389
- data/docs/core-concepts/overview.md +0 -219
- data/docs/core-concepts/pipeline.md +0 -315
- data/docs/core-concepts/result.md +0 -168
- data/docs/core-concepts/steps.md +0 -391
- data/docs/development/benchmarking.md +0 -443
- data/docs/development/contributing.md +0 -380
- data/docs/development/dagwood-concepts.md +0 -435
- data/docs/development/testing.md +0 -514
- data/docs/getting-started/examples.md +0 -197
- data/docs/getting-started/installation.md +0 -62
- data/docs/getting-started/quick-start.md +0 -218
- data/docs/guides/choosing-concurrency-model.md +0 -441
- data/docs/guides/complex-workflows.md +0 -440
- data/docs/guides/data-fetching.md +0 -478
- data/docs/guides/error-handling.md +0 -635
- data/docs/guides/file-processing.md +0 -505
- data/docs/guides/validation-patterns.md +0 -496
- data/docs/index.md +0 -169
- data/examples/.gitignore +0 -3
- data/examples/01_basic_pipeline.rb +0 -112
- data/examples/02_error_handling.rb +0 -178
- data/examples/03_middleware.rb +0 -186
- data/examples/04_parallel_automatic.rb +0 -221
- data/examples/05_parallel_explicit.rb +0 -279
- data/examples/06_real_world_ecommerce.rb +0 -288
- data/examples/07_real_world_etl.rb +0 -277
- data/examples/08_graph_visualization.rb +0 -246
- data/examples/09_pipeline_visualization.rb +0 -266
- data/examples/10_concurrency_control.rb +0 -235
- data/examples/11_sequential_dependencies.rb +0 -243
- data/examples/12_none_constant.rb +0 -161
- data/examples/README.md +0 -374
- data/examples/regression_test/01_basic_pipeline.txt +0 -38
- data/examples/regression_test/02_error_handling.txt +0 -92
- data/examples/regression_test/03_middleware.txt +0 -61
- data/examples/regression_test/04_parallel_automatic.txt +0 -86
- data/examples/regression_test/05_parallel_explicit.txt +0 -80
- data/examples/regression_test/06_real_world_ecommerce.txt +0 -53
- data/examples/regression_test/07_real_world_etl.txt +0 -58
- data/examples/regression_test/08_graph_visualization.txt +0 -429
- data/examples/regression_test/09_pipeline_visualization.txt +0 -305
- data/examples/regression_test/10_concurrency_control.txt +0 -96
- data/examples/regression_test/11_sequential_dependencies.txt +0 -86
- data/examples/regression_test/12_none_constant.txt +0 -64
- data/examples/regression_test.rb +0 -105
- data/mkdocs.yml +0 -146
- data/pipeline_graph.dot +0 -51
- data/pipeline_graph.html +0 -60
- data/pipeline_graph.mmd +0 -19
data/mkdocs.yml
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
site_name: SimpleFlow Documentation
|
|
2
|
-
site_description: "A lightweight, modular Ruby framework for building composable data processing pipelines with concurrent execution"
|
|
3
|
-
site_author: "Dewayne VanHoozer"
|
|
4
|
-
site_url: "https://madbomber.github.io/simple_flow/"
|
|
5
|
-
|
|
6
|
-
repo_name: "MadBomber/simple_flow"
|
|
7
|
-
repo_url: "https://github.com/MadBomber/simple_flow"
|
|
8
|
-
edit_uri: "edit/main/docs/"
|
|
9
|
-
|
|
10
|
-
theme:
|
|
11
|
-
name: material
|
|
12
|
-
language: en
|
|
13
|
-
favicon: assets/logo.png
|
|
14
|
-
|
|
15
|
-
palette:
|
|
16
|
-
- media: "(prefers-color-scheme: light)"
|
|
17
|
-
scheme: default
|
|
18
|
-
primary: indigo
|
|
19
|
-
accent: deep-purple
|
|
20
|
-
toggle:
|
|
21
|
-
icon: material/brightness-7
|
|
22
|
-
name: Switch to dark mode
|
|
23
|
-
|
|
24
|
-
- media: "(prefers-color-scheme: dark)"
|
|
25
|
-
scheme: slate
|
|
26
|
-
primary: indigo
|
|
27
|
-
accent: deep-purple
|
|
28
|
-
toggle:
|
|
29
|
-
icon: material/brightness-4
|
|
30
|
-
name: Switch to light mode
|
|
31
|
-
|
|
32
|
-
font:
|
|
33
|
-
text: Roboto
|
|
34
|
-
code: Roboto Mono
|
|
35
|
-
|
|
36
|
-
features:
|
|
37
|
-
- navigation.instant
|
|
38
|
-
- navigation.tracking
|
|
39
|
-
- navigation.tabs
|
|
40
|
-
- navigation.tabs.sticky
|
|
41
|
-
- navigation.sections
|
|
42
|
-
- navigation.path
|
|
43
|
-
- navigation.indexes
|
|
44
|
-
- navigation.top
|
|
45
|
-
- toc.follow
|
|
46
|
-
- search.suggest
|
|
47
|
-
- search.highlight
|
|
48
|
-
- search.share
|
|
49
|
-
- header.autohide
|
|
50
|
-
- content.code.copy
|
|
51
|
-
- content.code.annotate
|
|
52
|
-
- content.tabs.link
|
|
53
|
-
- content.tooltips
|
|
54
|
-
- content.action.edit
|
|
55
|
-
- content.action.view
|
|
56
|
-
|
|
57
|
-
plugins:
|
|
58
|
-
- search:
|
|
59
|
-
separator: '[\s\-,:!=\[\]()"\`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])'
|
|
60
|
-
|
|
61
|
-
markdown_extensions:
|
|
62
|
-
- abbr
|
|
63
|
-
- admonition
|
|
64
|
-
- attr_list
|
|
65
|
-
- def_list
|
|
66
|
-
- footnotes
|
|
67
|
-
- md_in_html
|
|
68
|
-
- toc:
|
|
69
|
-
permalink: true
|
|
70
|
-
title: On this page
|
|
71
|
-
- pymdownx.arithmatex:
|
|
72
|
-
generic: true
|
|
73
|
-
- pymdownx.betterem:
|
|
74
|
-
smart_enable: all
|
|
75
|
-
- pymdownx.caret
|
|
76
|
-
- pymdownx.details
|
|
77
|
-
- pymdownx.emoji:
|
|
78
|
-
emoji_index: !!python/name:material.extensions.emoji.twemoji
|
|
79
|
-
emoji_generator: !!python/name:material.extensions.emoji.to_svg
|
|
80
|
-
- pymdownx.highlight:
|
|
81
|
-
anchor_linenums: true
|
|
82
|
-
line_spans: __span
|
|
83
|
-
pygments_lang_class: true
|
|
84
|
-
- pymdownx.inlinehilite
|
|
85
|
-
- pymdownx.keys
|
|
86
|
-
- pymdownx.magiclink:
|
|
87
|
-
repo_url_shorthand: true
|
|
88
|
-
user: MadBomber
|
|
89
|
-
repo: simple_flow
|
|
90
|
-
- pymdownx.mark
|
|
91
|
-
- pymdownx.smartsymbols
|
|
92
|
-
- pymdownx.superfences:
|
|
93
|
-
custom_fences:
|
|
94
|
-
- name: mermaid
|
|
95
|
-
class: mermaid
|
|
96
|
-
format: !!python/name:pymdownx.superfences.fence_code_format
|
|
97
|
-
- pymdownx.tabbed:
|
|
98
|
-
alternate_style: true
|
|
99
|
-
- pymdownx.tasklist:
|
|
100
|
-
custom_checkbox: true
|
|
101
|
-
- pymdownx.tilde
|
|
102
|
-
|
|
103
|
-
extra:
|
|
104
|
-
version: 0.0.1
|
|
105
|
-
social:
|
|
106
|
-
- icon: fontawesome/brands/github
|
|
107
|
-
link: https://github.com/MadBomber/simple_flow
|
|
108
|
-
name: GitHub Repository
|
|
109
|
-
generator: false
|
|
110
|
-
|
|
111
|
-
nav:
|
|
112
|
-
- Home: index.md
|
|
113
|
-
- 🚀 Getting Started:
|
|
114
|
-
- Installation: getting-started/installation.md
|
|
115
|
-
- Quick Start: getting-started/quick-start.md
|
|
116
|
-
- Examples: getting-started/examples.md
|
|
117
|
-
- 📖 Core Concepts:
|
|
118
|
-
- Overview: core-concepts/overview.md
|
|
119
|
-
- Result: core-concepts/result.md
|
|
120
|
-
- Pipeline: core-concepts/pipeline.md
|
|
121
|
-
- Steps: core-concepts/steps.md
|
|
122
|
-
- Middleware: core-concepts/middleware.md
|
|
123
|
-
- Flow Control: core-concepts/flow-control.md
|
|
124
|
-
- ⚡ Concurrent Execution:
|
|
125
|
-
- Introduction: concurrent/introduction.md
|
|
126
|
-
- Parallel Steps: concurrent/parallel-steps.md
|
|
127
|
-
- Performance: concurrent/performance.md
|
|
128
|
-
- Best Practices: concurrent/best-practices.md
|
|
129
|
-
- 📚 Guides:
|
|
130
|
-
- Error Handling: guides/error-handling.md
|
|
131
|
-
- Validation Patterns: guides/validation-patterns.md
|
|
132
|
-
- Choosing Concurrency Model: guides/choosing-concurrency-model.md
|
|
133
|
-
- Data Fetching: guides/data-fetching.md
|
|
134
|
-
- File Processing: guides/file-processing.md
|
|
135
|
-
- Complex Workflows: guides/complex-workflows.md
|
|
136
|
-
- 🔌 API Reference:
|
|
137
|
-
- Result API: api/result.md
|
|
138
|
-
- Pipeline API: api/pipeline.md
|
|
139
|
-
- ParallelStep API: api/parallel-step.md
|
|
140
|
-
- Middleware API: api/middleware.md
|
|
141
|
-
- ⚙️ Development:
|
|
142
|
-
- Contributing: development/contributing.md
|
|
143
|
-
- Testing: development/testing.md
|
|
144
|
-
- Benchmarking: development/benchmarking.md
|
|
145
|
-
|
|
146
|
-
copyright: Copyright © 2025 Dewayne VanHoozer
|
data/pipeline_graph.dot
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
digraph DependencyGraph {
|
|
2
|
-
rankdir=TB;
|
|
3
|
-
node [shape=box, style=rounded];
|
|
4
|
-
|
|
5
|
-
// Group 1
|
|
6
|
-
validate_order [fillcolor=lightblue, style="rounded,filled"];
|
|
7
|
-
// Group 2
|
|
8
|
-
calculate_shipping [fillcolor=lightgreen, style="rounded,filled"];
|
|
9
|
-
check_inventory [fillcolor=lightgreen, style="rounded,filled"];
|
|
10
|
-
// Group 3
|
|
11
|
-
calculate_totals [fillcolor=lightyellow, style="rounded,filled"];
|
|
12
|
-
// Group 4
|
|
13
|
-
process_payment [fillcolor=lightpink, style="rounded,filled"];
|
|
14
|
-
// Group 5
|
|
15
|
-
reserve_inventory [fillcolor=lightgray, style="rounded,filled"];
|
|
16
|
-
// Group 6
|
|
17
|
-
create_shipment [fillcolor=lightblue, style="rounded,filled"];
|
|
18
|
-
// Group 7
|
|
19
|
-
send_email [fillcolor=lightgreen, style="rounded,filled"];
|
|
20
|
-
send_sms [fillcolor=lightgreen, style="rounded,filled"];
|
|
21
|
-
// Group 8
|
|
22
|
-
finalize_order [fillcolor=lightyellow, style="rounded,filled"];
|
|
23
|
-
|
|
24
|
-
// Dependencies
|
|
25
|
-
validate_order;
|
|
26
|
-
validate_order -> check_inventory;
|
|
27
|
-
validate_order -> calculate_shipping;
|
|
28
|
-
calculate_shipping -> calculate_totals;
|
|
29
|
-
check_inventory -> calculate_totals;
|
|
30
|
-
calculate_totals -> process_payment;
|
|
31
|
-
process_payment -> reserve_inventory;
|
|
32
|
-
reserve_inventory -> create_shipment;
|
|
33
|
-
create_shipment -> send_email;
|
|
34
|
-
create_shipment -> send_sms;
|
|
35
|
-
send_email -> finalize_order;
|
|
36
|
-
send_sms -> finalize_order;
|
|
37
|
-
|
|
38
|
-
// Legend
|
|
39
|
-
subgraph cluster_legend {
|
|
40
|
-
label="Parallel Groups";
|
|
41
|
-
style=dashed;
|
|
42
|
-
legend_0 [label="Group 1 (1 step)", fillcolor=lightblue, style="rounded,filled"];
|
|
43
|
-
legend_1 [label="Group 2 (2 steps)", fillcolor=lightgreen, style="rounded,filled"];
|
|
44
|
-
legend_2 [label="Group 3 (1 step)", fillcolor=lightyellow, style="rounded,filled"];
|
|
45
|
-
legend_3 [label="Group 4 (1 step)", fillcolor=lightpink, style="rounded,filled"];
|
|
46
|
-
legend_4 [label="Group 5 (1 step)", fillcolor=lightgray, style="rounded,filled"];
|
|
47
|
-
legend_5 [label="Group 6 (1 step)", fillcolor=lightblue, style="rounded,filled"];
|
|
48
|
-
legend_6 [label="Group 7 (2 steps)", fillcolor=lightgreen, style="rounded,filled"];
|
|
49
|
-
legend_7 [label="Group 8 (1 step)", fillcolor=lightyellow, style="rounded,filled"];
|
|
50
|
-
}
|
|
51
|
-
}
|
data/pipeline_graph.html
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html>
|
|
3
|
-
<head>
|
|
4
|
-
<title>E-commerce Pipeline</title>
|
|
5
|
-
<script type="text/javascript" src="https://unpkg.com/vis-network/standalone/umd/vis-network.min.js"></script>
|
|
6
|
-
<style>
|
|
7
|
-
body { font-family: Arial, sans-serif; margin: 20px; }
|
|
8
|
-
#graph { width: 100%; height: 600px; border: 1px solid #ddd; }
|
|
9
|
-
.info { margin-top: 20px; padding: 15px; background: #f5f5f5; border-radius: 5px; }
|
|
10
|
-
.legend { display: flex; gap: 20px; margin-top: 10px; }
|
|
11
|
-
.legend-item { display: flex; align-items: center; gap: 5px; }
|
|
12
|
-
.legend-color { width: 20px; height: 20px; border-radius: 3px; }
|
|
13
|
-
</style>
|
|
14
|
-
</head>
|
|
15
|
-
<body>
|
|
16
|
-
<h1>E-commerce Pipeline</h1>
|
|
17
|
-
<div id="graph"></div>
|
|
18
|
-
<div class="info">
|
|
19
|
-
<h3>Execution Groups (Parallel)</h3>
|
|
20
|
-
<div class="legend">
|
|
21
|
-
<div class='legend-item'><div class='legend-color' style='background: #A8D5FF'></div><span>Group 1: validate_order</span></div>
|
|
22
|
-
<div class='legend-item'><div class='legend-color' style='background: #A8FFA8'></div><span>Group 2: calculate_shipping, check_inventory</span></div>
|
|
23
|
-
<div class='legend-item'><div class='legend-color' style='background: #FFFFA8'></div><span>Group 3: calculate_totals</span></div>
|
|
24
|
-
<div class='legend-item'><div class='legend-color' style='background: #FFA8FF'></div><span>Group 4: process_payment</span></div>
|
|
25
|
-
<div class='legend-item'><div class='legend-color' style='background: #D3D3D3'></div><span>Group 5: reserve_inventory</span></div>
|
|
26
|
-
<div class='legend-item'><div class='legend-color' style='background: #A8D5FF'></div><span>Group 6: create_shipment</span></div>
|
|
27
|
-
<div class='legend-item'><div class='legend-color' style='background: #A8FFA8'></div><span>Group 7: send_email, send_sms</span></div>
|
|
28
|
-
<div class='legend-item'><div class='legend-color' style='background: #FFFFA8'></div><span>Group 8: finalize_order</span></div>
|
|
29
|
-
</div>
|
|
30
|
-
</div>
|
|
31
|
-
<script>
|
|
32
|
-
var nodes = new vis.DataSet([{"id":"validate_order","label":"validate_order","color":"#A8D5FF","level":0},{"id":"check_inventory","label":"check_inventory","color":"#A8FFA8","level":1},{"id":"calculate_shipping","label":"calculate_shipping","color":"#A8FFA8","level":1},{"id":"calculate_totals","label":"calculate_totals","color":"#FFFFA8","level":2},{"id":"process_payment","label":"process_payment","color":"#FFA8FF","level":3},{"id":"reserve_inventory","label":"reserve_inventory","color":"#D3D3D3","level":4},{"id":"create_shipment","label":"create_shipment","color":"#A8D5FF","level":5},{"id":"send_email","label":"send_email","color":"#A8FFA8","level":6},{"id":"send_sms","label":"send_sms","color":"#A8FFA8","level":6},{"id":"finalize_order","label":"finalize_order","color":"#FFFFA8","level":7}]);
|
|
33
|
-
var edges = new vis.DataSet([{"from":"validate_order","to":"check_inventory"},{"from":"validate_order","to":"calculate_shipping"},{"from":"calculate_shipping","to":"calculate_totals"},{"from":"check_inventory","to":"calculate_totals"},{"from":"calculate_totals","to":"process_payment"},{"from":"process_payment","to":"reserve_inventory"},{"from":"reserve_inventory","to":"create_shipment"},{"from":"create_shipment","to":"send_email"},{"from":"create_shipment","to":"send_sms"},{"from":"send_email","to":"finalize_order"},{"from":"send_sms","to":"finalize_order"}]);
|
|
34
|
-
var container = document.getElementById('graph');
|
|
35
|
-
var data = { nodes: nodes, edges: edges };
|
|
36
|
-
var options = {
|
|
37
|
-
layout: {
|
|
38
|
-
hierarchical: {
|
|
39
|
-
direction: 'UD',
|
|
40
|
-
sortMethod: 'directed',
|
|
41
|
-
levelSeparation: 150
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
edges: {
|
|
45
|
-
arrows: 'to',
|
|
46
|
-
smooth: { type: 'cubicBezier' }
|
|
47
|
-
},
|
|
48
|
-
nodes: {
|
|
49
|
-
shape: 'box',
|
|
50
|
-
margin: 10,
|
|
51
|
-
widthConstraint: { minimum: 100, maximum: 200 }
|
|
52
|
-
},
|
|
53
|
-
physics: {
|
|
54
|
-
enabled: false
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
var network = new vis.Network(container, data, options);
|
|
58
|
-
</script>
|
|
59
|
-
</body>
|
|
60
|
-
</html>
|
data/pipeline_graph.mmd
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
graph TD
|
|
2
|
-
validate_order[validate_order]
|
|
3
|
-
validate_order[validate_order] --> check_inventory[check_inventory]
|
|
4
|
-
validate_order[validate_order] --> calculate_shipping[calculate_shipping]
|
|
5
|
-
calculate_shipping[calculate_shipping] --> calculate_totals[calculate_totals]
|
|
6
|
-
check_inventory[check_inventory] --> calculate_totals[calculate_totals]
|
|
7
|
-
calculate_totals[calculate_totals] --> process_payment[process_payment]
|
|
8
|
-
process_payment[process_payment] --> reserve_inventory[reserve_inventory]
|
|
9
|
-
reserve_inventory[reserve_inventory] --> create_shipment[create_shipment]
|
|
10
|
-
create_shipment[create_shipment] --> send_email[send_email]
|
|
11
|
-
create_shipment[create_shipment] --> send_sms[send_sms]
|
|
12
|
-
send_email[send_email] --> finalize_order[finalize_order]
|
|
13
|
-
send_sms[send_sms] --> finalize_order[finalize_order]
|
|
14
|
-
classDef group1 fill:#9f9
|
|
15
|
-
class calculate_shipping group1
|
|
16
|
-
class check_inventory group1
|
|
17
|
-
classDef group6 fill:#9f9
|
|
18
|
-
class send_email group6
|
|
19
|
-
class send_sms group6
|