rooibos 0.6.2 → 0.7.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 (217) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSES/BSD-2-Clause.txt +9 -0
  3. data/REUSE.toml +5 -0
  4. data/exe/.gitkeep +0 -0
  5. data/lib/rooibos/cli/commands/new.rb +24 -0
  6. data/lib/rooibos/command/batch.rb +10 -0
  7. data/lib/rooibos/command/bubble.rb +34 -0
  8. data/lib/rooibos/command/custom.rb +3 -2
  9. data/lib/rooibos/command/deliver.rb +50 -0
  10. data/lib/rooibos/command/http.rb +1 -1
  11. data/lib/rooibos/command/lifecycle.rb +3 -1
  12. data/lib/rooibos/command/outlet.rb +19 -9
  13. data/lib/rooibos/command.rb +107 -3
  14. data/lib/rooibos/configuration.rb +29 -0
  15. data/lib/rooibos/message/bubbled.rb +29 -0
  16. data/lib/rooibos/message.rb +24 -6
  17. data/lib/rooibos/router/action.rb +36 -0
  18. data/lib/rooibos/router/flow/dispatch.rb +39 -0
  19. data/lib/rooibos/router/flow/inward.rb +41 -0
  20. data/lib/rooibos/router/flow/outward.rb +44 -0
  21. data/lib/rooibos/router/guard.rb +56 -0
  22. data/lib/rooibos/router/predicate.rb +65 -0
  23. data/lib/rooibos/router/registry/actions.rb +41 -0
  24. data/lib/rooibos/router/registry/forwards.rb +58 -0
  25. data/lib/rooibos/router/registry/observes.rb +57 -0
  26. data/lib/rooibos/router/registry/otherwises.rb +29 -0
  27. data/lib/rooibos/router/registry/receives.rb +57 -0
  28. data/lib/rooibos/router/registry/routes.rb +59 -0
  29. data/lib/rooibos/router/registry.rb +26 -0
  30. data/lib/rooibos/router/route.rb +42 -0
  31. data/lib/rooibos/router/router_update.rb +53 -0
  32. data/lib/rooibos/router/rule/forward.rb +39 -0
  33. data/lib/rooibos/router/rule/observe.rb +22 -0
  34. data/lib/rooibos/router/rule/otherwise.rb +26 -0
  35. data/lib/rooibos/router/rule/receive.rb +22 -0
  36. data/lib/rooibos/router/rule.rb +40 -0
  37. data/lib/rooibos/router.rb +424 -438
  38. data/lib/rooibos/runtime.rb +37 -52
  39. data/lib/rooibos/test_helper.rb +22 -0
  40. data/lib/rooibos/transition.rb +92 -0
  41. data/lib/rooibos/version.rb +1 -1
  42. data/lib/rooibos.rb +2 -57
  43. data/sig/rooibos/cli.rbs +1 -0
  44. data/sig/rooibos/command.rbs +44 -0
  45. data/sig/rooibos/configuration.rbs +20 -0
  46. data/sig/rooibos/message.rbs +12 -0
  47. data/sig/rooibos/router/action.rbs +33 -0
  48. data/sig/rooibos/router/actions.rbs +27 -0
  49. data/sig/rooibos/router/flow/dispatch.rbs +29 -0
  50. data/sig/rooibos/router/flow/inward.rbs +37 -0
  51. data/sig/rooibos/router/flow/outward.rbs +36 -0
  52. data/sig/rooibos/router/forward.rbs +35 -0
  53. data/sig/rooibos/router/forwards.rbs +34 -0
  54. data/sig/rooibos/router/guard.rbs +21 -0
  55. data/sig/rooibos/router/observe.rbs +20 -0
  56. data/sig/rooibos/router/observes.rbs +38 -0
  57. data/sig/rooibos/router/otherwise.rbs +22 -0
  58. data/sig/rooibos/router/otherwises.rbs +20 -0
  59. data/sig/rooibos/router/predicate.rbs +51 -0
  60. data/sig/rooibos/router/receive.rbs +20 -0
  61. data/sig/rooibos/router/receives.rbs +38 -0
  62. data/sig/rooibos/router/registry.rbs +24 -0
  63. data/sig/rooibos/router/route.rbs +46 -0
  64. data/sig/rooibos/router/router_update.rbs +33 -0
  65. data/sig/rooibos/router/routes.rbs +41 -0
  66. data/sig/rooibos/router/rule.rbs +36 -0
  67. data/sig/rooibos/router.rbs +216 -161
  68. data/sig/rooibos/runtime.rbs +0 -1
  69. data/sig/rooibos/test_helper.rbs +6 -0
  70. data/sig/rooibos/transition.rbs +33 -0
  71. data/sig/rooibos.rbs +0 -10
  72. metadata +144 -198
  73. data/.builds/ruby-3.2.yml +0 -55
  74. data/.builds/ruby-3.3.yml +0 -55
  75. data/.builds/ruby-3.4.yml +0 -55
  76. data/.builds/ruby-4.0.0.yml +0 -55
  77. data/.pre-commit-config.yaml +0 -16
  78. data/.rubocop.yml +0 -8
  79. data/AGENTS.md +0 -108
  80. data/CHANGELOG.md +0 -308
  81. data/README.md +0 -183
  82. data/README.rdoc +0 -374
  83. data/Rakefile +0 -16
  84. data/Steepfile +0 -13
  85. data/doc/best_practices/forms_and_validation.md +0 -20
  86. data/doc/best_practices/http_workflows.md +0 -20
  87. data/doc/best_practices/index.md +0 -26
  88. data/doc/best_practices/lists_and_tables.md +0 -20
  89. data/doc/best_practices/modal_dialogs.md +0 -20
  90. data/doc/best_practices/no_stateful_widgets.md +0 -184
  91. data/doc/best_practices/orchestration.md +0 -20
  92. data/doc/best_practices/streaming_data.md +0 -20
  93. data/doc/contributors/design/commands_and_outlets.md +0 -214
  94. data/doc/contributors/design/mvu_tea_implementations_research.md +0 -373
  95. data/doc/contributors/documentation_plan.md +0 -616
  96. data/doc/contributors/documentation_stub_audit.md +0 -112
  97. data/doc/contributors/documentation_style.md +0 -275
  98. data/doc/contributors/e2e_pty.md +0 -168
  99. data/doc/contributors/maybe_stateful_router.md +0 -56
  100. data/doc/contributors/specs/earliest_tutorial_steps_per_story.md +0 -70
  101. data/doc/contributors/specs/file_browser.md +0 -789
  102. data/doc/contributors/specs/file_browser_stories.md +0 -784
  103. data/doc/contributors/specs/tutorials_to_stories.rb +0 -167
  104. data/doc/contributors/todo/scrollbar.md +0 -118
  105. data/doc/contributors/tutorial_old/01_project_setup.md +0 -20
  106. data/doc/contributors/tutorial_old/02_hello_world.md +0 -24
  107. data/doc/contributors/tutorial_old/03_adding_state.md +0 -26
  108. data/doc/contributors/tutorial_old/06_organizing_your_code.md +0 -20
  109. data/doc/contributors/tutorial_old/07_your_first_command.md +0 -21
  110. data/doc/contributors/tutorial_old/08_the_preview_pane.md +0 -20
  111. data/doc/contributors/tutorial_old/09_loading_states.md +0 -20
  112. data/doc/contributors/tutorial_old/10_testing_your_app.md +0 -20
  113. data/doc/contributors/tutorial_old/11_polish_and_refine.md +0 -20
  114. data/doc/contributors/tutorial_old/12_going_further.md +0 -20
  115. data/doc/contributors/tutorial_old/index.md +0 -20
  116. data/doc/custom.css +0 -22
  117. data/doc/essentials/commands.md +0 -20
  118. data/doc/essentials/index.md +0 -31
  119. data/doc/essentials/messages.md +0 -21
  120. data/doc/essentials/models.md +0 -21
  121. data/doc/essentials/shortcuts.md +0 -19
  122. data/doc/essentials/the_elm_architecture.md +0 -24
  123. data/doc/essentials/the_runtime.md +0 -21
  124. data/doc/essentials/update_functions.md +0 -20
  125. data/doc/essentials/views.md +0 -22
  126. data/doc/getting_started/for_go_developers.md +0 -16
  127. data/doc/getting_started/for_python_developers.md +0 -16
  128. data/doc/getting_started/for_rails_developers.md +0 -17
  129. data/doc/getting_started/for_ratatui_ruby_developers.md +0 -17
  130. data/doc/getting_started/for_react_developers.md +0 -17
  131. data/doc/getting_started/index.md +0 -52
  132. data/doc/getting_started/install.md +0 -20
  133. data/doc/getting_started/quickstart.md +0 -20
  134. data/doc/getting_started/ruby_primer.md +0 -19
  135. data/doc/getting_started/why_rooibos.md +0 -20
  136. data/doc/images/verify_readme_usage.png +0 -0
  137. data/doc/images/widget_cmd_exec.png +0 -0
  138. data/doc/index.md +0 -93
  139. data/doc/scaling_up/async_patterns.md +0 -20
  140. data/doc/scaling_up/command_composition.md +0 -20
  141. data/doc/scaling_up/custom_commands.md +0 -21
  142. data/doc/scaling_up/fractal_architecture.md +0 -20
  143. data/doc/scaling_up/index.md +0 -30
  144. data/doc/scaling_up/message_routing.md +0 -20
  145. data/doc/scaling_up/ractor_safety.md +0 -20
  146. data/doc/scaling_up/testing.md +0 -21
  147. data/doc/troubleshooting/common_errors.md +0 -20
  148. data/doc/troubleshooting/debugging.md +0 -21
  149. data/doc/troubleshooting/index.md +0 -23
  150. data/doc/troubleshooting/performance.md +0 -20
  151. data/doc/tutorial/01_project_setup.md +0 -44
  152. data/doc/tutorial/02_hello_world.md +0 -45
  153. data/doc/tutorial/03_static_file_list.md +0 -44
  154. data/doc/tutorial/04_arrow_navigation.md +0 -47
  155. data/doc/tutorial/05_real_files.md +0 -45
  156. data/doc/tutorial/06_safe_refactoring.md +0 -21
  157. data/doc/tutorial/07_red_first_tdd.md +0 -26
  158. data/doc/tutorial/08_file_metadata.md +0 -42
  159. data/doc/tutorial/09_text_preview.md +0 -44
  160. data/doc/tutorial/10_directory_tree.md +0 -42
  161. data/doc/tutorial/11_pane_focus.md +0 -40
  162. data/doc/tutorial/12_sorting.md +0 -41
  163. data/doc/tutorial/13_filtering.md +0 -43
  164. data/doc/tutorial/14_toggle_hidden.md +0 -41
  165. data/doc/tutorial/15_text_input_widget.md +0 -43
  166. data/doc/tutorial/16_rename_files.md +0 -42
  167. data/doc/tutorial/17_confirmation_dialogs.md +0 -43
  168. data/doc/tutorial/18_progress_indicators.md +0 -43
  169. data/doc/tutorial/19_atomic_operations.md +0 -42
  170. data/doc/tutorial/20_external_editor.md +0 -42
  171. data/doc/tutorial/21_modal_overlays.md +0 -41
  172. data/doc/tutorial/22_error_handling.md +0 -43
  173. data/doc/tutorial/23_terminal_capabilities.md +0 -53
  174. data/doc/tutorial/24_mouse_events.md +0 -43
  175. data/doc/tutorial/25_resize_events.md +0 -43
  176. data/doc/tutorial/26_loading_states.md +0 -42
  177. data/doc/tutorial/27_performance.md +0 -43
  178. data/doc/tutorial/28_color_schemes.md +0 -47
  179. data/doc/tutorial/29_configuration.md +0 -124
  180. data/doc/tutorial/30_going_further.md +0 -17
  181. data/doc/tutorial/index.md +0 -17
  182. data/examples/app_fractal_dashboard/README.md +0 -60
  183. data/examples/app_fractal_dashboard/app.rb +0 -63
  184. data/examples/app_fractal_dashboard/dashboard/base.rb +0 -73
  185. data/examples/app_fractal_dashboard/dashboard/update_helpers.rb +0 -86
  186. data/examples/app_fractal_dashboard/dashboard/update_manual.rb +0 -87
  187. data/examples/app_fractal_dashboard/dashboard/update_router.rb +0 -43
  188. data/examples/app_fractal_dashboard/fragments/custom_shell_input.rb +0 -81
  189. data/examples/app_fractal_dashboard/fragments/custom_shell_modal.rb +0 -82
  190. data/examples/app_fractal_dashboard/fragments/custom_shell_output.rb +0 -90
  191. data/examples/app_fractal_dashboard/fragments/disk_usage.rb +0 -47
  192. data/examples/app_fractal_dashboard/fragments/network_panel.rb +0 -45
  193. data/examples/app_fractal_dashboard/fragments/ping.rb +0 -47
  194. data/examples/app_fractal_dashboard/fragments/stats_panel.rb +0 -45
  195. data/examples/app_fractal_dashboard/fragments/system_info.rb +0 -47
  196. data/examples/app_fractal_dashboard/fragments/uptime.rb +0 -47
  197. data/examples/tutorial/01/app.rb +0 -50
  198. data/examples/tutorial/02/app.rb +0 -64
  199. data/examples/tutorial/03/app.rb +0 -91
  200. data/examples/tutorial/06_safe_refactoring/app.rb +0 -124
  201. data/examples/verify_readme_usage/README.md +0 -54
  202. data/examples/verify_readme_usage/app.rb +0 -47
  203. data/examples/verify_website_first_app/app.rb +0 -85
  204. data/examples/verify_website_hello_mvu/app.rb +0 -31
  205. data/examples/widget_command_system/README.md +0 -70
  206. data/examples/widget_command_system/app.rb +0 -134
  207. data/generate_tutorial_stubs.rb +0 -126
  208. data/mise.toml +0 -8
  209. data/rbs_collection.lock.yaml +0 -108
  210. data/rbs_collection.yaml +0 -15
  211. data/tasks/example_viewer.html.erb +0 -172
  212. data/tasks/install.rake +0 -29
  213. data/tasks/resources/build.yml.erb +0 -55
  214. data/tasks/resources/index.html.erb +0 -44
  215. data/tasks/resources/rubies.yml +0 -7
  216. data/tasks/steep.rake +0 -11
  217. /data/{vendor/goodcop/base.yml → lib/rooibos/rubocop.yml} +0 -0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rooibos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kerrick Long
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '1.3'
18
+ version: '1.4'
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: '1.3'
25
+ version: '1.4'
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: concurrent-ruby
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -51,6 +51,20 @@ dependencies:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0.7'
54
+ - !ruby/object:Gem::Dependency
55
+ name: ostruct
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.6'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.6'
54
68
  - !ruby/object:Gem::Dependency
55
69
  name: rdoc
56
70
  requirement: !ruby/object:Gem::Requirement
@@ -83,16 +97,44 @@ dependencies:
83
97
  name: minitest-mock
84
98
  requirement: !ruby/object:Gem::Requirement
85
99
  requirements:
86
- - - "~>"
100
+ - - ">="
87
101
  - !ruby/object:Gem::Version
88
- version: '5.27'
102
+ version: '0'
89
103
  type: :development
90
104
  prerelease: false
91
105
  version_requirements: !ruby/object:Gem::Requirement
92
106
  requirements:
93
- - - "~>"
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: steep
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: debug
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '1.0'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
94
136
  - !ruby/object:Gem::Version
95
- version: '5.27'
137
+ version: '1.0'
96
138
  description: "== Confidently Build Terminal Apps\n\nRooibos[https://rooibos.run] helps
97
139
  you build interactive terminal applications.\nKeep your code understandable and
98
140
  testable as it scales. Rooibos handles\nkeyboard, mouse, and async work so you can
@@ -167,15 +209,15 @@ description: "== Confidently Build Terminal Apps\n\nRooibos[https://rooibos.run]
167
209
  = -> (message, model) {\n case message\n in { type: :timer, envelope: :tick,
168
210
  elapsed: }\n [model.with(frame: model.frame + 1), Rooibos::Command.wait(1.0
169
211
  / 24, :tick)]\n end\n }\n\n<b>And more!</b> \\Rooibos includes <tt>all</tt>,
170
- <tt>batch</tt>, <tt>cancel</tt>,\n<tt>custom</tt>, <tt>exit</tt>, <tt>http</tt>,
171
- <tt>map</tt>, <tt>open</tt>,\n<tt>system</tt>, <tt>tick</tt>, and <tt>wait</tt>
172
- commands. You can also define\nyour own custom commands for complex orchestration.
173
- \n\nEvery command produces a message, and Update handles it the same way.\n\n====
174
- Testing\n\n\\Rooibos makes TUIs so easy to test, you'll save more time by writing
175
- tests than\nby not testing.\n\n<b>Unit test Update, View, and Init.</b> No terminal
176
- needed. Test helpers included.\n\n def test_moves_selection_down_with_j\n model
177
- = Ractor.make_shareable(FileBrowser::Model.new(\n path: \"/\", entries: %w[bin
178
- exe lib], selected: \"bin\", error: nil))\n message = RatatuiRuby::Event::Key.new(code:
212
+ <tt>batch</tt>, <tt>bubble</tt>,\n<tt>cancel</tt>, <tt>custom</tt>, <tt>deliver</tt>,
213
+ <tt>exit</tt>,\n<tt>http</tt>, <tt>map</tt>, <tt>open</tt>, <tt>system</tt>, <tt>tick</tt>,\nand
214
+ <tt>wait</tt> commands. You can also define your own custom commands\nfor complex
215
+ orchestration. \n\nEvery command produces a message, and Update handles it the same
216
+ way.\n\n==== Testing\n\n\\Rooibos makes TUIs so easy to test, you'll save more time
217
+ by writing tests than\nby not testing.\n\n<b>Unit test Update, View, and Init.</b>
218
+ No terminal needed. Test helpers included.\n\n def test_moves_selection_down_with_j\n
219
+ \ model = Ractor.make_shareable(FileBrowser::Model.new(\n path: \"/\", entries:
220
+ %w[bin exe lib], selected: \"bin\", error: nil))\n message = RatatuiRuby::Event::Key.new(code:
179
221
  \"j\")\n\n result = FileBrowser::Update.call(message, model)\n\n assert_equal
180
222
  \"exe\", result.selected\n end\n\n<b>Style assertions.</b> Draw to a headless terminal,
181
223
  verify colors and modifiers.\n\n def test_directories_are_blue\n with_test_terminal(60,
@@ -201,193 +243,61 @@ description: "== Confidently Build Terminal Apps\n\nRooibos[https://rooibos.run]
201
243
  fragment has its own Model,\nView, Update, and Init. Parents compose children. The
202
244
  pattern scales.\n\nThe Router DSL eliminates boilerplate:\n\n module Dashboard\n
203
245
  \ include Rooibos::Router\n\n route :stats, to: StatsPanel\n route :network,
204
- to: NetworkPanel\n\n keymap do\n key :ctrl_c, -> { Rooibos::Command.exit
205
- }\n only when: -> (model) { !model.modal_open } do\n key :q, -> { Rooibos::Command.exit
206
- }\n key :s, -> { StatsPanel.fetch_command }\n key :p, -> { NetworkPanel.ping_command
207
- }\n end\n end\n\n Update = from_router\n\n # ... Model, Init, View
208
- below\n end\n\nDeclare routes and keymaps. The router generates Update for you.
209
- Use guards to\nignore keys when needed.\n\n==== CLI\n\nThe <tt>rooibos</tt> command
210
- scaffolds projects and runs applications.\n\n rooibos new my_app # Generate
211
- project structure\n rooibos run # Run the app in current directory\n\nGenerated
212
- apps include tests, type signatures, and a working welcome\nscreen with keyboard
213
- and mouse support.\n\n\n---\n\n=== The Ecosystem\n\n\\Rooibos builds on RatatuiRuby[https://www.ratatui-ruby.dev],
214
- a Rubygem built on\nRatatui[https://ratatui.rs]. You get native performance with
215
- the joy of Ruby.\n\\Rooibos is one way to manage state and composition. Kit is another.\n\n====
216
- Rooibos[https://git.sr.ht/~kerrick/rooibos]\n\nModel-View-Update architecture. Inspired
217
- by Elm, Bubble Tea, and React +\nRedux. Your UI is a pure function of state.\n\n-
218
- Functional programming with MVU\n- Commands work off the main thread\n- Messages,
219
- not callbacks, drive updates\n\n==== {Kit}[https://sr.ht/~kerrick/ratatui_ruby/#chapter-3-the-object-path--kit]
246
+ to: NetworkPanel\n\n receive_events :ctrl_c, -> { Rooibos::Command.exit }\n\n
247
+ \ only when: -> (_message, model) { !model.modal_open } do\n receive_events
248
+ :q, -> { Rooibos::Command.exit }\n forward_events :s, to: :stats, as: :fetch\n
249
+ \ forward_events :p, to: :network, as: :ping\n end\n\n Update = from_router\n\n
250
+ \ # ... Model, Init, View below\n end\n\nDeclare routes and event handlers. The
251
+ router generates Update for you. Use\nguards to ignore messages when needed.\n\n====
252
+ CLI\n\nThe <tt>rooibos</tt> command scaffolds projects and runs applications.\n\n
253
+ \ rooibos new my_app # Generate project structure\n rooibos run #
254
+ Run the app in current directory\n\nGenerated apps include tests, type signatures,
255
+ and a working welcome\nscreen with keyboard and mouse support.\n\n\n---\n\n=== The
256
+ Ecosystem\n\n\\Rooibos builds on RatatuiRuby[https://www.ratatui-ruby.dev], a Rubygem
257
+ built on\nRatatui[https://ratatui.rs]. You get native performance with the joy of
258
+ Ruby.\n\\Rooibos is one way to manage state and composition. Kit is another.\n\n====
259
+ Rooibos[https://www.rooibos.run]\n\nModel-View-Update architecture. Inspired by
260
+ Elm, Bubble Tea, and React +\nRedux. Your UI is a pure function of state.\n\n- Functional
261
+ programming with MVU\n- Commands work off the main thread\n- Messages, not callbacks,
262
+ drive updates\n\n==== {Kit}[https://sr.ht/~kerrick/ratatui_ruby/#chapter-3-the-object-path--kit]
220
263
  (Coming Soon)\n\nComponent-based architecture. Encapsulate state, input handling,
221
264
  and\nrendering in reusable pieces.\n\n- OOP with stateful components\n- Separate
222
265
  UI state from domain logic\n- Built-in focus management & click handling\n\nBoth
223
266
  use the same widget library and rendering engine. Pick the paradigm\nthat fits your
224
- brain.\n\n\n---\n\n=== Links\n\n[Get Started]\n {Getting Started}[https://git.sr.ht/~kerrick/rooibos/tree/trunk/item/doc/getting_started/index.md],\n
225
- \ {Tutorial}[https://git.sr.ht/~kerrick/rooibos/tree/trunk/item/doc/tutorial/index.md],\n
226
- \ {Examples}[https://git.sr.ht/~kerrick/rooibos/tree/trunk/item/examples]\n\n[Coming
227
- From...]\n {React/Redux}[https://git.sr.ht/~kerrick/rooibos/tree/trunk/item/doc/getting_started/for_react_developers.md],\n
228
- \ {BubbleTea}[https://git.sr.ht/~kerrick/rooibos/tree/trunk/item/doc/getting_started/for_go_developers.md],\n
229
- \ {Textual}[https://git.sr.ht/~kerrick/rooibos/tree/trunk/item/doc/getting_started/for_python_developers.md]\n\n[Learn
230
- More]\n {Essentials}[https://git.sr.ht/~kerrick/rooibos/tree/trunk/item/doc/essentials/index.md],\n
231
- \ {Scaling Up}[https://git.sr.ht/~kerrick/rooibos/tree/trunk/item/doc/scaling_up/index.md],\n
232
- \ {Best Practices}[https://git.sr.ht/~kerrick/rooibos/tree/trunk/item/doc/best_practices/index.md],\n
233
- \ {Troubleshooting}[https://git.sr.ht/~kerrick/rooibos/tree/trunk/item/doc/troubleshooting/index.md]\n\n[Community]\n
234
- \ {Discuss}[https://lists.sr.ht/~kerrick/ratatui_ruby-discuss],\n {Announcements}[https://lists.sr.ht/~kerrick/ratatui_ruby-announce],\n
235
- \ {Bug Tracker}[https://todo.sr.ht/~kerrick/ratatui_ruby],\n {Contribution Guide}[https://man.sr.ht/~kerrick/ratatui_ruby/contributing.md],\n
236
- \ {Code of Conduct}[https://man.sr.ht/~kerrick/ratatui_ruby/code_of_conduct.md]\n\n\n---\n\n[Website]
237
- https://rooibos.run\n[Source] https://git.sr.ht/~kerrick/rooibos\n[RubyGems] https://rubygems.org/gems/rooibos\n\n©
267
+ brain.\n\n\n---\n\n=== Links\n\n[Get Started]\n {Getting Started}[https://www.rooibos.run/docs/trunk/doc/getting_started/index_md.html],\n
268
+ \ {Tutorial}[https://www.rooibos.run/docs/trunk/doc/tutorial/index_md.html],\n {Examples}[https://www.rooibos.run/docs/trunk/examples/app_fractal_dashboard/README_md.html]\n\n[Coming
269
+ From...]\n {React/Redux}[https://www.rooibos.run/docs/trunk/doc/getting_started/for_react_developers_md.html],\n
270
+ \ {BubbleTea}[https://www.rooibos.run/docs/trunk/doc/getting_started/for_go_developers_md.html],\n
271
+ \ {Textual}[https://www.rooibos.run/docs/trunk/doc/getting_started/for_python_developers_md.html]\n\n[Learn
272
+ More]\n {Essentials}[https://www.rooibos.run/docs/trunk/doc/essentials/index_md.html],\n
273
+ \ {Scaling Up}[https://www.rooibos.run/docs/trunk/doc/scaling_up/index_md.html],\n
274
+ \ {Best Practices}[https://www.rooibos.run/docs/trunk/doc/best_practices/index_md.html],\n
275
+ \ {Troubleshooting}[https://www.rooibos.run/docs/trunk/doc/troubleshooting/index_md.html]\n\n[Community]\n
276
+ \ {Forum}[https://forum.setdef.com/c/rooibos],\n {Announcements}[https://forum.setdef.com/tags/c/rooibos/announcement],\n
277
+ \ {Bug Tracker}[https://forum.setdef.com/tags/c/rooibos/bug],\n {Contribution Guide}[https://github.com/setdef/Rooibos/blob/trunk/CONTRIBUTING.md],\n
278
+ \ {Code of Conduct}[https://github.com/setdef/Rooibos/blob/trunk/CODE_OF_CONDUCT.md]\n\n\n---\n\n[Website]
279
+ https://rooibos.run\n[Source] https://github.com/setdef/Rooibos\n[RubyGems] https://rubygems.org/gems/rooibos\n\n©
238
280
  2026 Kerrick Long · Library: LGPL-3.0-or-later · Website: CC-BY-NC-ND-4.0 · Snippets:
239
281
  MIT-0\n"
240
282
  email:
241
283
  - me@kerricklong.com
242
284
  executables:
285
+ - ".gitkeep"
243
286
  - rooibos
244
287
  extensions: []
245
288
  extra_rdoc_files: []
246
289
  files:
247
- - ".builds/ruby-3.2.yml"
248
- - ".builds/ruby-3.3.yml"
249
- - ".builds/ruby-3.4.yml"
250
- - ".builds/ruby-4.0.0.yml"
251
- - ".pre-commit-config.yaml"
252
- - ".rubocop.yml"
253
- - AGENTS.md
254
- - CHANGELOG.md
255
290
  - LICENSE
256
291
  - LICENSES/AGPL-3.0-or-later.txt
292
+ - LICENSES/BSD-2-Clause.txt
257
293
  - LICENSES/CC-BY-SA-4.0.txt
258
294
  - LICENSES/CC0-1.0.txt
259
295
  - LICENSES/LGPL-3.0-or-later.txt
260
296
  - LICENSES/MIT-0.txt
261
297
  - LICENSES/MIT.txt
262
- - README.md
263
- - README.rdoc
264
298
  - REUSE.toml
265
- - Rakefile
266
- - Steepfile
267
- - doc/best_practices/forms_and_validation.md
268
- - doc/best_practices/http_workflows.md
269
- - doc/best_practices/index.md
270
- - doc/best_practices/lists_and_tables.md
271
- - doc/best_practices/modal_dialogs.md
272
- - doc/best_practices/no_stateful_widgets.md
273
- - doc/best_practices/orchestration.md
274
- - doc/best_practices/streaming_data.md
275
- - doc/contributors/design/commands_and_outlets.md
276
- - doc/contributors/design/mvu_tea_implementations_research.md
277
- - doc/contributors/documentation_plan.md
278
- - doc/contributors/documentation_stub_audit.md
279
- - doc/contributors/documentation_style.md
280
- - doc/contributors/e2e_pty.md
281
- - doc/contributors/maybe_stateful_router.md
282
- - doc/contributors/specs/earliest_tutorial_steps_per_story.md
283
- - doc/contributors/specs/file_browser.md
284
- - doc/contributors/specs/file_browser_stories.md
285
- - doc/contributors/specs/tutorials_to_stories.rb
286
- - doc/contributors/todo/scrollbar.md
287
- - doc/contributors/tutorial_old/01_project_setup.md
288
- - doc/contributors/tutorial_old/02_hello_world.md
289
- - doc/contributors/tutorial_old/03_adding_state.md
290
- - doc/contributors/tutorial_old/06_organizing_your_code.md
291
- - doc/contributors/tutorial_old/07_your_first_command.md
292
- - doc/contributors/tutorial_old/08_the_preview_pane.md
293
- - doc/contributors/tutorial_old/09_loading_states.md
294
- - doc/contributors/tutorial_old/10_testing_your_app.md
295
- - doc/contributors/tutorial_old/11_polish_and_refine.md
296
- - doc/contributors/tutorial_old/12_going_further.md
297
- - doc/contributors/tutorial_old/index.md
298
- - doc/custom.css
299
- - doc/essentials/commands.md
300
- - doc/essentials/index.md
301
- - doc/essentials/messages.md
302
- - doc/essentials/models.md
303
- - doc/essentials/shortcuts.md
304
- - doc/essentials/the_elm_architecture.md
305
- - doc/essentials/the_runtime.md
306
- - doc/essentials/update_functions.md
307
- - doc/essentials/views.md
308
- - doc/getting_started/for_go_developers.md
309
- - doc/getting_started/for_python_developers.md
310
- - doc/getting_started/for_rails_developers.md
311
- - doc/getting_started/for_ratatui_ruby_developers.md
312
- - doc/getting_started/for_react_developers.md
313
- - doc/getting_started/index.md
314
- - doc/getting_started/install.md
315
- - doc/getting_started/quickstart.md
316
- - doc/getting_started/ruby_primer.md
317
- - doc/getting_started/why_rooibos.md
318
- - doc/images/verify_readme_usage.png
319
- - doc/images/widget_cmd_exec.png
320
- - doc/index.md
321
- - doc/scaling_up/async_patterns.md
322
- - doc/scaling_up/command_composition.md
323
- - doc/scaling_up/custom_commands.md
324
- - doc/scaling_up/fractal_architecture.md
325
- - doc/scaling_up/index.md
326
- - doc/scaling_up/message_routing.md
327
- - doc/scaling_up/ractor_safety.md
328
- - doc/scaling_up/testing.md
329
- - doc/troubleshooting/common_errors.md
330
- - doc/troubleshooting/debugging.md
331
- - doc/troubleshooting/index.md
332
- - doc/troubleshooting/performance.md
333
- - doc/tutorial/01_project_setup.md
334
- - doc/tutorial/02_hello_world.md
335
- - doc/tutorial/03_static_file_list.md
336
- - doc/tutorial/04_arrow_navigation.md
337
- - doc/tutorial/05_real_files.md
338
- - doc/tutorial/06_safe_refactoring.md
339
- - doc/tutorial/07_red_first_tdd.md
340
- - doc/tutorial/08_file_metadata.md
341
- - doc/tutorial/09_text_preview.md
342
- - doc/tutorial/10_directory_tree.md
343
- - doc/tutorial/11_pane_focus.md
344
- - doc/tutorial/12_sorting.md
345
- - doc/tutorial/13_filtering.md
346
- - doc/tutorial/14_toggle_hidden.md
347
- - doc/tutorial/15_text_input_widget.md
348
- - doc/tutorial/16_rename_files.md
349
- - doc/tutorial/17_confirmation_dialogs.md
350
- - doc/tutorial/18_progress_indicators.md
351
- - doc/tutorial/19_atomic_operations.md
352
- - doc/tutorial/20_external_editor.md
353
- - doc/tutorial/21_modal_overlays.md
354
- - doc/tutorial/22_error_handling.md
355
- - doc/tutorial/23_terminal_capabilities.md
356
- - doc/tutorial/24_mouse_events.md
357
- - doc/tutorial/25_resize_events.md
358
- - doc/tutorial/26_loading_states.md
359
- - doc/tutorial/27_performance.md
360
- - doc/tutorial/28_color_schemes.md
361
- - doc/tutorial/29_configuration.md
362
- - doc/tutorial/30_going_further.md
363
- - doc/tutorial/index.md
364
- - examples/app_fractal_dashboard/README.md
365
- - examples/app_fractal_dashboard/app.rb
366
- - examples/app_fractal_dashboard/dashboard/base.rb
367
- - examples/app_fractal_dashboard/dashboard/update_helpers.rb
368
- - examples/app_fractal_dashboard/dashboard/update_manual.rb
369
- - examples/app_fractal_dashboard/dashboard/update_router.rb
370
- - examples/app_fractal_dashboard/fragments/custom_shell_input.rb
371
- - examples/app_fractal_dashboard/fragments/custom_shell_modal.rb
372
- - examples/app_fractal_dashboard/fragments/custom_shell_output.rb
373
- - examples/app_fractal_dashboard/fragments/disk_usage.rb
374
- - examples/app_fractal_dashboard/fragments/network_panel.rb
375
- - examples/app_fractal_dashboard/fragments/ping.rb
376
- - examples/app_fractal_dashboard/fragments/stats_panel.rb
377
- - examples/app_fractal_dashboard/fragments/system_info.rb
378
- - examples/app_fractal_dashboard/fragments/uptime.rb
379
- - examples/tutorial/01/app.rb
380
- - examples/tutorial/02/app.rb
381
- - examples/tutorial/03/app.rb
382
- - examples/tutorial/06_safe_refactoring/app.rb
383
- - examples/verify_readme_usage/README.md
384
- - examples/verify_readme_usage/app.rb
385
- - examples/verify_website_first_app/app.rb
386
- - examples/verify_website_hello_mvu/app.rb
387
- - examples/widget_command_system/README.md
388
- - examples/widget_command_system/app.rb
299
+ - exe/.gitkeep
389
300
  - exe/rooibos
390
- - generate_tutorial_stubs.rb
391
301
  - lib/rooibos.rb
392
302
  - lib/rooibos/cli.rb
393
303
  - lib/rooibos/cli/commands/new.rb
@@ -395,16 +305,20 @@ files:
395
305
  - lib/rooibos/command.rb
396
306
  - lib/rooibos/command/all.rb
397
307
  - lib/rooibos/command/batch.rb
308
+ - lib/rooibos/command/bubble.rb
398
309
  - lib/rooibos/command/custom.rb
310
+ - lib/rooibos/command/deliver.rb
399
311
  - lib/rooibos/command/http.rb
400
312
  - lib/rooibos/command/lifecycle.rb
401
313
  - lib/rooibos/command/open.rb
402
314
  - lib/rooibos/command/outlet.rb
403
315
  - lib/rooibos/command/wait.rb
316
+ - lib/rooibos/configuration.rb
404
317
  - lib/rooibos/error.rb
405
318
  - lib/rooibos/message.rb
406
319
  - lib/rooibos/message/all.rb
407
320
  - lib/rooibos/message/batch.rb
321
+ - lib/rooibos/message/bubbled.rb
408
322
  - lib/rooibos/message/canceled.rb
409
323
  - lib/rooibos/message/error.rb
410
324
  - lib/rooibos/message/http_response.rb
@@ -414,14 +328,33 @@ files:
414
328
  - lib/rooibos/message/system/stream.rb
415
329
  - lib/rooibos/message/timer.rb
416
330
  - lib/rooibos/router.rb
331
+ - lib/rooibos/router/action.rb
332
+ - lib/rooibos/router/flow/dispatch.rb
333
+ - lib/rooibos/router/flow/inward.rb
334
+ - lib/rooibos/router/flow/outward.rb
335
+ - lib/rooibos/router/guard.rb
336
+ - lib/rooibos/router/predicate.rb
337
+ - lib/rooibos/router/registry.rb
338
+ - lib/rooibos/router/registry/actions.rb
339
+ - lib/rooibos/router/registry/forwards.rb
340
+ - lib/rooibos/router/registry/observes.rb
341
+ - lib/rooibos/router/registry/otherwises.rb
342
+ - lib/rooibos/router/registry/receives.rb
343
+ - lib/rooibos/router/registry/routes.rb
344
+ - lib/rooibos/router/route.rb
345
+ - lib/rooibos/router/router_update.rb
346
+ - lib/rooibos/router/rule.rb
347
+ - lib/rooibos/router/rule/forward.rb
348
+ - lib/rooibos/router/rule/observe.rb
349
+ - lib/rooibos/router/rule/otherwise.rb
350
+ - lib/rooibos/router/rule/receive.rb
351
+ - lib/rooibos/rubocop.yml
417
352
  - lib/rooibos/runtime.rb
418
353
  - lib/rooibos/shortcuts.rb
419
354
  - lib/rooibos/test_helper.rb
355
+ - lib/rooibos/transition.rb
420
356
  - lib/rooibos/version.rb
421
357
  - lib/rooibos/welcome.rb
422
- - mise.toml
423
- - rbs_collection.lock.yaml
424
- - rbs_collection.yaml
425
358
  - sig/concurrent.rbs
426
359
  - sig/examples/verify_readme_usage/app.rbs
427
360
  - sig/examples/widget_command_system/app.rbs
@@ -430,34 +363,47 @@ files:
430
363
  - sig/rooibos.rbs
431
364
  - sig/rooibos/cli.rbs
432
365
  - sig/rooibos/command.rbs
366
+ - sig/rooibos/configuration.rbs
433
367
  - sig/rooibos/error.rbs
434
368
  - sig/rooibos/message.rbs
435
369
  - sig/rooibos/router.rbs
370
+ - sig/rooibos/router/action.rbs
371
+ - sig/rooibos/router/actions.rbs
372
+ - sig/rooibos/router/flow/dispatch.rbs
373
+ - sig/rooibos/router/flow/inward.rbs
374
+ - sig/rooibos/router/flow/outward.rbs
375
+ - sig/rooibos/router/forward.rbs
376
+ - sig/rooibos/router/forwards.rbs
377
+ - sig/rooibos/router/guard.rbs
378
+ - sig/rooibos/router/observe.rbs
379
+ - sig/rooibos/router/observes.rbs
380
+ - sig/rooibos/router/otherwise.rbs
381
+ - sig/rooibos/router/otherwises.rbs
382
+ - sig/rooibos/router/predicate.rbs
383
+ - sig/rooibos/router/receive.rbs
384
+ - sig/rooibos/router/receives.rbs
385
+ - sig/rooibos/router/registry.rbs
386
+ - sig/rooibos/router/route.rbs
387
+ - sig/rooibos/router/router_update.rbs
388
+ - sig/rooibos/router/routes.rbs
389
+ - sig/rooibos/router/rule.rbs
436
390
  - sig/rooibos/runtime.rbs
437
391
  - sig/rooibos/shortcuts.rbs
438
392
  - sig/rooibos/test_helper.rbs
393
+ - sig/rooibos/transition.rbs
439
394
  - sig/rooibos/version.rbs
440
395
  - sig/rooibos/welcome.rbs
441
- - tasks/example_viewer.html.erb
442
- - tasks/install.rake
443
- - tasks/resources/build.yml.erb
444
- - tasks/resources/index.html.erb
445
- - tasks/resources/rubies.yml
446
- - tasks/steep.rake
447
- - vendor/goodcop/base.yml
448
396
  homepage: https://rooibos.run
449
397
  licenses:
450
398
  - LGPL-3.0-or-later
451
399
  metadata:
452
400
  allowed_push_host: https://rubygems.org
453
401
  homepage_uri: https://rooibos.run
454
- bug_tracker_uri: https://todo.sr.ht/~kerrick/ratatui_ruby
455
- mailing_list_uri: https://lists.sr.ht/~kerrick/ratatui_ruby-discuss
456
- source_code_uri: https://git.sr.ht/~kerrick/rooibos
457
- changelog_uri: https://git.sr.ht/~kerrick/rooibos/tree/stable/item/CHANGELOG.md
458
- documentation_uri: https://git.sr.ht/~kerrick/rooibos/tree/HEAD/doc/index.md
459
- wiki_uri: https://man.sr.ht/~kerrick/ratatui_ruby/
460
- funding_uri: https://opencollective.com/ratatui
402
+ bug_tracker_uri: https://forum.setdef.com/tags/c/rooibos/bug
403
+ mailing_list_uri: https://forum.setdef.com/c/rooibos
404
+ source_code_uri: https://github.com/setdef/Rooibos
405
+ changelog_uri: https://rooibos.run/docs/trunk/CHANGELOG_md.html
406
+ documentation_uri: https://rooibos.run/docs/
461
407
  rubygems_mfa_required: 'true'
462
408
  rdoc_options: []
463
409
  require_paths:
data/.builds/ruby-3.2.yml DELETED
@@ -1,55 +0,0 @@
1
- # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
2
- # SPDX-License-Identifier: LGPL-3.0-or-later
3
-
4
- image: archlinux
5
- packages:
6
- - bash
7
- - base-devel
8
- - curl
9
- - openssl
10
- - libyaml
11
- - zlib
12
- - readline
13
- - gdbm
14
- - ncurses
15
- - libffi
16
- - clang
17
- - git
18
- artifacts:
19
- - rooibos/pkg/rooibos-0.6.2.gem
20
- sources:
21
- - https://git.sr.ht/~kerrick/rooibos
22
- tasks:
23
- - setup: |
24
- curl https://mise.jdx.dev/install.sh | sh
25
- echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.buildenv
26
- echo 'eval "$($HOME/.local/bin/mise activate bash)"' >> ~/.buildenv
27
- echo 'export LANG="en_US.UTF-8"' >> ~/.buildenv
28
- echo 'export LC_ALL="en_US.UTF-8"' >> ~/.buildenv
29
- echo 'export BINDGEN_EXTRA_CLANG_ARGS="-include stdbool.h"' >> ~/.buildenv
30
- . ~/.buildenv
31
- export CI="true"
32
- cd rooibos
33
- sed -i 's/ruby = .*/ruby = "3.2"/' mise.toml
34
- mise install
35
- mise x -- pip install reuse
36
- mise x -- gem install bundler:4.0.3
37
- mise reshim
38
- mise x -- bundle config set --local frozen 'true'
39
- mise x -- bundle install
40
- - test: |
41
- . ~/.buildenv
42
- cd rooibos
43
- echo "Installing rooibos gem globally for integration tests..."
44
- mise x -- bundle exec rake install:force
45
- echo "Testing Ruby 3.2"
46
- mise x -- bundle exec rake test
47
- - lint: |
48
- . ~/.buildenv
49
- cd rooibos
50
- echo "Linting Ruby 3.2"
51
- mise x -- bundle exec rake lint
52
- - package: |
53
- . ~/.buildenv
54
- cd rooibos
55
- mise x -- bundle exec rake build
data/.builds/ruby-3.3.yml DELETED
@@ -1,55 +0,0 @@
1
- # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
2
- # SPDX-License-Identifier: LGPL-3.0-or-later
3
-
4
- image: archlinux
5
- packages:
6
- - bash
7
- - base-devel
8
- - curl
9
- - openssl
10
- - libyaml
11
- - zlib
12
- - readline
13
- - gdbm
14
- - ncurses
15
- - libffi
16
- - clang
17
- - git
18
- artifacts:
19
- - rooibos/pkg/rooibos-0.6.2.gem
20
- sources:
21
- - https://git.sr.ht/~kerrick/rooibos
22
- tasks:
23
- - setup: |
24
- curl https://mise.jdx.dev/install.sh | sh
25
- echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.buildenv
26
- echo 'eval "$($HOME/.local/bin/mise activate bash)"' >> ~/.buildenv
27
- echo 'export LANG="en_US.UTF-8"' >> ~/.buildenv
28
- echo 'export LC_ALL="en_US.UTF-8"' >> ~/.buildenv
29
- echo 'export BINDGEN_EXTRA_CLANG_ARGS="-include stdbool.h"' >> ~/.buildenv
30
- . ~/.buildenv
31
- export CI="true"
32
- cd rooibos
33
- sed -i 's/ruby = .*/ruby = "3.3"/' mise.toml
34
- mise install
35
- mise x -- pip install reuse
36
- mise x -- gem install bundler:4.0.3
37
- mise reshim
38
- mise x -- bundle config set --local frozen 'true'
39
- mise x -- bundle install
40
- - test: |
41
- . ~/.buildenv
42
- cd rooibos
43
- echo "Installing rooibos gem globally for integration tests..."
44
- mise x -- bundle exec rake install:force
45
- echo "Testing Ruby 3.3"
46
- mise x -- bundle exec rake test
47
- - lint: |
48
- . ~/.buildenv
49
- cd rooibos
50
- echo "Linting Ruby 3.3"
51
- mise x -- bundle exec rake lint
52
- - package: |
53
- . ~/.buildenv
54
- cd rooibos
55
- mise x -- bundle exec rake build
data/.builds/ruby-3.4.yml DELETED
@@ -1,55 +0,0 @@
1
- # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
2
- # SPDX-License-Identifier: LGPL-3.0-or-later
3
-
4
- image: archlinux
5
- packages:
6
- - bash
7
- - base-devel
8
- - curl
9
- - openssl
10
- - libyaml
11
- - zlib
12
- - readline
13
- - gdbm
14
- - ncurses
15
- - libffi
16
- - clang
17
- - git
18
- artifacts:
19
- - rooibos/pkg/rooibos-0.6.2.gem
20
- sources:
21
- - https://git.sr.ht/~kerrick/rooibos
22
- tasks:
23
- - setup: |
24
- curl https://mise.jdx.dev/install.sh | sh
25
- echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.buildenv
26
- echo 'eval "$($HOME/.local/bin/mise activate bash)"' >> ~/.buildenv
27
- echo 'export LANG="en_US.UTF-8"' >> ~/.buildenv
28
- echo 'export LC_ALL="en_US.UTF-8"' >> ~/.buildenv
29
- echo 'export BINDGEN_EXTRA_CLANG_ARGS="-include stdbool.h"' >> ~/.buildenv
30
- . ~/.buildenv
31
- export CI="true"
32
- cd rooibos
33
- sed -i 's/ruby = .*/ruby = "3.4"/' mise.toml
34
- mise install
35
- mise x -- pip install reuse
36
- mise x -- gem install bundler:4.0.3
37
- mise reshim
38
- mise x -- bundle config set --local frozen 'true'
39
- mise x -- bundle install
40
- - test: |
41
- . ~/.buildenv
42
- cd rooibos
43
- echo "Installing rooibos gem globally for integration tests..."
44
- mise x -- bundle exec rake install:force
45
- echo "Testing Ruby 3.4"
46
- mise x -- bundle exec rake test
47
- - lint: |
48
- . ~/.buildenv
49
- cd rooibos
50
- echo "Linting Ruby 3.4"
51
- mise x -- bundle exec rake lint
52
- - package: |
53
- . ~/.buildenv
54
- cd rooibos
55
- mise x -- bundle exec rake build