simple_flow 0.1.0 → 0.3.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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +46 -0
  3. data/README.md +33 -0
  4. data/lib/simple_flow/pipeline.rb +104 -21
  5. data/lib/simple_flow/result.rb +20 -5
  6. data/lib/simple_flow/version.rb +1 -1
  7. data/lib/simple_flow.rb +0 -17
  8. metadata +2 -68
  9. data/.envrc +0 -1
  10. data/.github/workflows/deploy-github-pages.yml +0 -52
  11. data/.rubocop.yml +0 -57
  12. data/COMMITS.md +0 -196
  13. data/Rakefile +0 -15
  14. data/benchmarks/parallel_vs_sequential.rb +0 -98
  15. data/benchmarks/pipeline_overhead.rb +0 -130
  16. data/docs/api/middleware.md +0 -468
  17. data/docs/api/parallel-step.md +0 -363
  18. data/docs/api/pipeline.md +0 -382
  19. data/docs/api/result.md +0 -375
  20. data/docs/concurrent/best-practices.md +0 -687
  21. data/docs/concurrent/introduction.md +0 -246
  22. data/docs/concurrent/parallel-steps.md +0 -418
  23. data/docs/concurrent/performance.md +0 -481
  24. data/docs/core-concepts/flow-control.md +0 -452
  25. data/docs/core-concepts/middleware.md +0 -389
  26. data/docs/core-concepts/overview.md +0 -219
  27. data/docs/core-concepts/pipeline.md +0 -315
  28. data/docs/core-concepts/result.md +0 -168
  29. data/docs/core-concepts/steps.md +0 -391
  30. data/docs/development/benchmarking.md +0 -443
  31. data/docs/development/contributing.md +0 -380
  32. data/docs/development/dagwood-concepts.md +0 -435
  33. data/docs/development/testing.md +0 -514
  34. data/docs/getting-started/examples.md +0 -197
  35. data/docs/getting-started/installation.md +0 -62
  36. data/docs/getting-started/quick-start.md +0 -218
  37. data/docs/guides/choosing-concurrency-model.md +0 -441
  38. data/docs/guides/complex-workflows.md +0 -440
  39. data/docs/guides/data-fetching.md +0 -478
  40. data/docs/guides/error-handling.md +0 -635
  41. data/docs/guides/file-processing.md +0 -505
  42. data/docs/guides/validation-patterns.md +0 -496
  43. data/docs/index.md +0 -169
  44. data/examples/.gitignore +0 -3
  45. data/examples/01_basic_pipeline.rb +0 -112
  46. data/examples/02_error_handling.rb +0 -178
  47. data/examples/03_middleware.rb +0 -186
  48. data/examples/04_parallel_automatic.rb +0 -221
  49. data/examples/05_parallel_explicit.rb +0 -279
  50. data/examples/06_real_world_ecommerce.rb +0 -288
  51. data/examples/07_real_world_etl.rb +0 -277
  52. data/examples/08_graph_visualization.rb +0 -246
  53. data/examples/09_pipeline_visualization.rb +0 -266
  54. data/examples/10_concurrency_control.rb +0 -235
  55. data/examples/11_sequential_dependencies.rb +0 -243
  56. data/examples/12_none_constant.rb +0 -161
  57. data/examples/README.md +0 -374
  58. data/examples/regression_test/01_basic_pipeline.txt +0 -38
  59. data/examples/regression_test/02_error_handling.txt +0 -92
  60. data/examples/regression_test/03_middleware.txt +0 -61
  61. data/examples/regression_test/04_parallel_automatic.txt +0 -86
  62. data/examples/regression_test/05_parallel_explicit.txt +0 -80
  63. data/examples/regression_test/06_real_world_ecommerce.txt +0 -53
  64. data/examples/regression_test/07_real_world_etl.txt +0 -58
  65. data/examples/regression_test/08_graph_visualization.txt +0 -429
  66. data/examples/regression_test/09_pipeline_visualization.txt +0 -305
  67. data/examples/regression_test/10_concurrency_control.txt +0 -96
  68. data/examples/regression_test/11_sequential_dependencies.txt +0 -86
  69. data/examples/regression_test/12_none_constant.txt +0 -64
  70. data/examples/regression_test.rb +0 -105
  71. data/mkdocs.yml +0 -146
  72. data/pipeline_graph.dot +0 -51
  73. data/pipeline_graph.html +0 -60
  74. 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