lizarb 1.0.4 → 1.0.6

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 (656) hide show
  1. checksums.yaml +4 -4
  2. data/.env +0 -0
  3. data/.tool-versions +2 -1
  4. data/Gemfile +48 -10
  5. data/Gemfile.lock +235 -29
  6. data/LICENSE.txt +1 -1
  7. data/README.md +72 -16
  8. data/Rakefile +2 -2
  9. data/app/dev/commands/color_command.rb +29 -0
  10. data/app/dev/commands/color_command_test.rb +10 -0
  11. data/app/dev/commands/stick_command.rb +102 -0
  12. data/app/dev/commands/stick_command_test.rb +8 -0
  13. data/app/dev_box.rb +31 -17
  14. data/app/eco_box.rb +5 -0
  15. data/app/happy_box.rb +3 -2
  16. data/app/net/databases/redis_db.rb +1 -1
  17. data/app/net/databases/redis_db_test.rb +5 -5
  18. data/app/net/databases/sqlite_db.rb +1 -1
  19. data/app/net/databases/sqlite_db_test.rb +5 -5
  20. data/app/net/records/app_record.rb +1 -1
  21. data/app/net/records/app_record_test.rb +1 -1
  22. data/app/net/records/post_record_test.rb +1 -1
  23. data/app/net/records/user_record_test.rb +1 -1
  24. data/app/net_box.rb +36 -11
  25. data/app/prime_box.rb +9 -0
  26. data/app/web/requests/api_request.rb +2 -0
  27. data/app/web/requests/app_request.rb +1 -1
  28. data/app/web/requests/app_request_test.rb +1 -1
  29. data/app/web/requests/assets_request.rb +1 -0
  30. data/app/web/requests/foo_request.rb +26 -0
  31. data/app/web/requests/foo_request_test.rb +7 -0
  32. data/app/web/requests/logo_request.rb +12 -0
  33. data/app/web/requests/logo_request.rb.index.html.erb +7 -0
  34. data/app/web/requests/logo_request_test.rb +10 -0
  35. data/app/web/requests/root_request.rb +1 -0
  36. data/app/web_box.rb +14 -8
  37. data/app.rb +38 -7
  38. data/app_global.gemfile.rb +8 -1
  39. data/app_global.gemfile.rb.lock +35 -10
  40. data/app_global.rb +3 -0
  41. data/{app_new → examples/bench/app}/dev/benches/loops_bench.rb +10 -3
  42. data/examples/bench/app/dev/benches/loops_bench_test.rb +7 -0
  43. data/examples/bench/app/dev/benches/objects_bench.rb +48 -0
  44. data/{app_new → examples/bench/app}/dev/benches/objects_bench_test.rb +0 -5
  45. data/{app_new → examples/bench/app}/dev/benches/sorted_bench.rb +33 -15
  46. data/examples/bench/app/dev/benches/sorted_bench_test.rb +7 -0
  47. data/{app_new → examples/bench/app}/dev/benches/variables_bench.rb +8 -2
  48. data/{app_new → examples/bench/app}/dev/benches/variables_bench_test.rb +0 -5
  49. data/examples/client/app/net/clients/news_client.rb +42 -0
  50. data/examples/client/app/net/clients/news_client_test.rb +24 -0
  51. data/{app_new → examples/command/app}/dev/commands/calculator_command.rb +5 -5
  52. data/{app_new → examples/command/app}/dev/commands/calculator_command_test.rb +0 -5
  53. data/{app_new → examples/command/app}/dev/commands/circle_command.rb +5 -5
  54. data/{app_new → examples/command/app}/dev/commands/circle_command_test.rb +0 -5
  55. data/{app_new → examples/command/app}/dev/commands/narrative_method_command.rb +4 -13
  56. data/{app_new → examples/command/app}/dev/commands/narrative_method_command_test.rb +1 -6
  57. data/{app_new → examples/command/app}/dev/commands/quadratic_command.rb +5 -5
  58. data/{app_new → examples/command/app}/dev/commands/quadratic_command_test.rb +0 -5
  59. data/examples/command/app/dev_box.rb +3 -0
  60. data/examples/log/app/dev/handler_logs/logger_handler_log.rb +9 -0
  61. data/examples/log/app/dev/handler_logs/logger_handler_log_test.rb +15 -0
  62. data/examples/new/app/dev_box.rb +45 -0
  63. data/examples/new/app.rb +37 -0
  64. data/examples/shell/app/dev/shells/bash_adapter_shell.rb +25 -0
  65. data/examples/shell/app/dev/shells/bash_adapter_shell_test.rb +19 -0
  66. data/examples/shell/app/dev/shells/business_logic_shell.rb +42 -0
  67. data/examples/shell/app/dev/shells/business_logic_shell_test.rb +35 -0
  68. data/examples/shell/app/dev/shells/gem_adapter_shell.rb +33 -0
  69. data/examples/shell/app/dev/shells/gem_adapter_shell_test.rb +19 -0
  70. data/exe/liza +4 -1
  71. data/exe/lizarb +4 -14
  72. data/gemfiles/gemfile.3.1.rb +1 -0
  73. data/gemfiles/gemfile.3.1.rb.lock +261 -0
  74. data/gemfiles/gemfile.3.2.rb +1 -0
  75. data/gemfiles/gemfile.3.2.rb.lock +261 -0
  76. data/gemfiles/gemfile.3.3.rb +1 -0
  77. data/gemfiles/gemfile.3.3.rb.lock +261 -0
  78. data/gemfiles/gemfile.3.4.rb +1 -0
  79. data/gemfiles/gemfile.3.4.rb.lock +243 -0
  80. data/gemfiles/gemfile.jruby-9.4.rb +3 -0
  81. data/gemfiles/gemfile.jruby-9.4.rb.lock +139 -0
  82. data/lib/app.rb +160 -74
  83. data/lib/art_system/art_box.rb +5 -0
  84. data/lib/art_system/art_box_test.rb +8 -0
  85. data/lib/art_system/art_system_test.rb +3 -0
  86. data/lib/art_system/commands/chatgpt_command.rb +91 -0
  87. data/lib/art_system/commands/chatgpt_command_test.rb +10 -0
  88. data/lib/art_system/commands/deepseek_command.rb +58 -0
  89. data/lib/art_system/commands/deepseek_command_test.rb +10 -0
  90. data/lib/art_system/commands/ollama_command.rb +69 -0
  91. data/lib/art_system/commands/ollama_command_test.rb +10 -0
  92. data/lib/art_system/gem_shells/ruby_openai_gem_shell.rb +32 -0
  93. data/lib/art_system/gem_shells/ruby_openai_gem_shell_test.rb +10 -0
  94. data/lib/art_system/shells/deepseek_shell.rb +15 -0
  95. data/lib/art_system/shells/deepseek_shell_test.rb +10 -0
  96. data/lib/art_system/shells/ollama_shell.rb +12 -0
  97. data/lib/art_system/shells/ollama_shell_test.rb +10 -0
  98. data/lib/art_system/shells/openai_shell.rb +13 -0
  99. data/lib/art_system/shells/openai_shell_test.rb +10 -0
  100. data/lib/art_system.rb +8 -0
  101. data/lib/crypto_system/crypto_box.rb +5 -0
  102. data/lib/crypto_system/crypto_box_test.rb +8 -0
  103. data/lib/crypto_system/crypto_system_test.rb +3 -0
  104. data/lib/crypto_system/gem_shells/digest_md5_gem_shell.rb +15 -0
  105. data/lib/crypto_system/gem_shells/digest_md5_gem_shell_test.rb +25 -0
  106. data/lib/crypto_system.rb +8 -0
  107. data/lib/deep_system/deep_box.rb +5 -0
  108. data/lib/deep_system/deep_box_test.rb +8 -0
  109. data/lib/deep_system/deep_system_test.rb +3 -0
  110. data/lib/deep_system.rb +8 -0
  111. data/lib/desk_system/commands/glimmer_command.rb +27 -0
  112. data/lib/desk_system/commands/glimmer_command_test.rb +10 -0
  113. data/lib/desk_system/desk_box.rb +5 -0
  114. data/lib/desk_system/desk_box_test.rb +8 -0
  115. data/lib/desk_system/desk_system_test.rb +3 -0
  116. data/lib/desk_system.rb +8 -0
  117. data/lib/dev_system/commands/test_command.rb +152 -0
  118. data/lib/dev_system/commands/test_command_test.rb +8 -0
  119. data/lib/dev_system/dev_box.rb +38 -0
  120. data/lib/dev_system/dev_box_test.rb +32 -0
  121. data/lib/dev_system/dev_system_test.rb +3 -0
  122. data/lib/dev_system/generators/boxes_generator.rb +24 -0
  123. data/lib/dev_system/generators/boxes_generator_test.rb +12 -0
  124. data/lib/dev_system/generators/envfile_generator.rb +80 -0
  125. data/lib/dev_system/generators/envfile_generator_test.rb +14 -0
  126. data/lib/dev_system/generators/gemfile_generator.rb +57 -0
  127. data/lib/dev_system/generators/gemfile_generator_test.rb +11 -0
  128. data/lib/dev_system/generators/subsystem_generator.default.rb.erb +2 -0
  129. data/lib/dev_system/generators/subsystem_generator.rb +187 -0
  130. data/lib/dev_system/generators/subsystem_generator.rb.section_controller.rb.erb +8 -0
  131. data/lib/dev_system/generators/subsystem_generator.rb.section_controller_test.rb.erb +18 -0
  132. data/lib/dev_system/generators/subsystem_generator.rb.section_panel.rb.erb +19 -0
  133. data/lib/dev_system/generators/subsystem_generator.rb.section_panel_test.rb.erb +18 -0
  134. data/lib/dev_system/generators/subsystem_generator_test.rb +17 -0
  135. data/lib/dev_system/generators/system_generator.rb +117 -0
  136. data/lib/dev_system/generators/system_generator.rb.gemspec.rb.erb +36 -0
  137. data/lib/dev_system/generators/system_generator.rb.section_app_box_settings.rb.erb +4 -0
  138. data/lib/dev_system/generators/system_generator.rb.section_system_box_settings.rb.erb +4 -0
  139. data/lib/dev_system/generators/system_generator.rb.section_system_box_test.rb.erb +12 -0
  140. data/lib/dev_system/generators/system_generator.rb.section_system_default.rb.erb +3 -0
  141. data/lib/dev_system/generators/system_generator.rb.section_system_info.rb.erb +3 -0
  142. data/lib/dev_system/generators/system_generator.rb.system_test.rb.erb +5 -0
  143. data/lib/dev_system/generators/system_generator.rb.unit.rb.erb +7 -0
  144. data/lib/dev_system/generators/system_generator_test.rb +18 -0
  145. data/lib/dev_system/shells/unit_shell.rb +40 -0
  146. data/lib/dev_system/shells/unit_shell_test.rb +24 -0
  147. data/lib/dev_system/shells/zeitwerk_shell.rb +94 -0
  148. data/lib/dev_system/shells/zeitwerk_shell_test.rb +14 -0
  149. data/lib/dev_system/subsystems/bench/bench.rb +9 -0
  150. data/lib/dev_system/subsystems/bench/bench_panel.rb +31 -0
  151. data/lib/dev_system/subsystems/bench/bench_panel_test.rb +55 -0
  152. data/lib/dev_system/subsystems/bench/bench_test.rb +22 -0
  153. data/lib/dev_system/subsystems/bench/benches/not_found_bench.rb +73 -0
  154. data/lib/dev_system/subsystems/bench/benches/not_found_bench_test.rb +7 -0
  155. data/lib/dev_system/subsystems/bench/commands/bench_command.rb +21 -0
  156. data/lib/dev_system/subsystems/bench/commands/bench_command_test.rb +7 -0
  157. data/lib/dev_system/subsystems/bench/generators/bench_generator.rb +34 -0
  158. data/lib/dev_system/subsystems/bench/generators/bench_generator.rb.marks.rb.erb +18 -0
  159. data/lib/dev_system/subsystems/bench/generators/bench_generator.rb.setup.rb.erb +9 -0
  160. data/lib/dev_system/subsystems/bench/generators/bench_generator_test.rb +15 -0
  161. data/lib/dev_system/subsystems/command/command.rb +7 -0
  162. data/lib/dev_system/subsystems/command/command_panel.rb +30 -0
  163. data/lib/dev_system/subsystems/command/command_panel_test.rb +122 -0
  164. data/lib/dev_system/{dev/controllers → subsystems/command}/command_test.rb +3 -3
  165. data/lib/dev_system/subsystems/command/commands/base_command.rb +79 -0
  166. data/lib/dev_system/subsystems/command/commands/base_command_test.rb +7 -0
  167. data/lib/dev_system/subsystems/command/commands/irb_command.rb +20 -0
  168. data/lib/dev_system/subsystems/command/commands/irb_command_test.rb +7 -0
  169. data/lib/dev_system/subsystems/command/commands/not_found_command.rb +83 -0
  170. data/lib/dev_system/subsystems/command/commands/not_found_command_test.rb +7 -0
  171. data/lib/dev_system/subsystems/command/commands/pry_command.rb +10 -0
  172. data/lib/dev_system/subsystems/command/commands/pry_command_test.rb +7 -0
  173. data/lib/dev_system/subsystems/command/commands/simple_command.rb +433 -0
  174. data/lib/dev_system/subsystems/command/commands/simple_command_test.rb +153 -0
  175. data/lib/dev_system/subsystems/command/gem_shells/tty_prompt_gem_shell.rb +37 -0
  176. data/lib/dev_system/subsystems/command/gem_shells/tty_prompt_gem_shell_test.rb +10 -0
  177. data/lib/dev_system/subsystems/command/generators/command_generator.rb +73 -0
  178. data/lib/dev_system/subsystems/command/generators/command_generator.rb.section_base.rb.erb +10 -0
  179. data/lib/dev_system/subsystems/command/generators/command_generator.rb.section_simple_actions.rb.erb +21 -0
  180. data/lib/dev_system/subsystems/command/generators/command_generator.rb.section_simple_filters.rb.erb +25 -0
  181. data/lib/dev_system/subsystems/command/generators/command_generator.rb.view_simple.txt.erb +2 -0
  182. data/lib/dev_system/subsystems/command/generators/command_generator_test.rb +15 -0
  183. data/lib/dev_system/subsystems/command/parts/command_shortcut_part.rb +58 -0
  184. data/lib/dev_system/subsystems/command/parts/command_shortcut_part_test.rb +6 -0
  185. data/lib/dev_system/subsystems/command/shells/color_shell.rb +60 -0
  186. data/lib/dev_system/subsystems/command/shells/color_shell_test.rb +22 -0
  187. data/lib/dev_system/subsystems/command/shells/input_shell.rb +95 -0
  188. data/lib/dev_system/subsystems/command/shells/input_shell_test.rb +11 -0
  189. data/lib/dev_system/subsystems/command/shells/pallet_shell.rb +354 -0
  190. data/lib/dev_system/subsystems/command/shells/pallet_shell_test.rb +15 -0
  191. data/lib/dev_system/subsystems/command/shells/typography_shell.rb +33 -0
  192. data/lib/dev_system/subsystems/command/shells/typography_shell_test.rb +10 -0
  193. data/lib/dev_system/subsystems/generator/commands/generate_command.rb +46 -0
  194. data/lib/dev_system/subsystems/generator/commands/generate_command_test.rb +7 -0
  195. data/lib/dev_system/subsystems/generator/commands/new_command.rb +33 -0
  196. data/lib/dev_system/subsystems/generator/commands/new_command_test.rb +12 -0
  197. data/lib/dev_system/subsystems/generator/generator.rb +7 -0
  198. data/lib/dev_system/subsystems/generator/generator_panel.rb +51 -0
  199. data/lib/dev_system/subsystems/generator/generator_panel_test.rb +86 -0
  200. data/lib/dev_system/{dev/controllers → subsystems/generator}/generator_test.rb +3 -3
  201. data/lib/dev_system/subsystems/generator/generators/base_generator.rb +147 -0
  202. data/lib/dev_system/subsystems/generator/generators/base_generator_test.rb +10 -0
  203. data/lib/dev_system/subsystems/generator/generators/controller_generator.rb +210 -0
  204. data/lib/dev_system/subsystems/generator/generators/controller_generator.rb.unit.rb.erb +18 -0
  205. data/lib/dev_system/subsystems/generator/generators/controller_generator_test.rb +48 -0
  206. data/lib/dev_system/subsystems/generator/generators/generator_generator.rb +58 -0
  207. data/lib/dev_system/subsystems/generator/generators/generator_generator.rb.section_controller_actions.rb.erb +23 -0
  208. data/lib/dev_system/subsystems/generator/generators/generator_generator.rb.section_simple_actions.rb.erb +19 -0
  209. data/lib/dev_system/subsystems/generator/generators/generator_generator.rb.view_controller_actions.rb.erb +11 -0
  210. data/lib/dev_system/subsystems/generator/generators/generator_generator.rb.view_controller_views.txt.erb +2 -0
  211. data/lib/dev_system/subsystems/generator/generators/generator_generator.rb.view_simple.txt.erb +2 -0
  212. data/lib/dev_system/subsystems/generator/generators/generator_generator_test.rb +16 -0
  213. data/lib/dev_system/subsystems/generator/generators/install_generator.rb +9 -0
  214. data/lib/dev_system/subsystems/generator/generators/install_generator_test.rb +8 -0
  215. data/lib/dev_system/subsystems/generator/generators/move_generator.rb +9 -0
  216. data/lib/dev_system/subsystems/generator/generators/move_generator_test.rb +8 -0
  217. data/lib/dev_system/subsystems/generator/generators/new_generator.rb +162 -0
  218. data/lib/dev_system/subsystems/generator/generators/new_generator_test.rb +7 -0
  219. data/lib/dev_system/subsystems/generator/generators/not_found_generator.rb +87 -0
  220. data/lib/dev_system/subsystems/generator/generators/not_found_generator_test.rb +18 -0
  221. data/lib/dev_system/subsystems/generator/generators/overwrite_generator.rb +9 -0
  222. data/lib/dev_system/subsystems/generator/generators/overwrite_generator_test.rb +8 -0
  223. data/lib/dev_system/subsystems/generator/generators/remove_generator.rb +24 -0
  224. data/lib/dev_system/subsystems/generator/generators/remove_generator_test.rb +8 -0
  225. data/lib/dev_system/subsystems/generator/generators/simple_generator.rb +345 -0
  226. data/lib/dev_system/subsystems/generator/generators/simple_generator.rb.subject.rb.erb +9 -0
  227. data/lib/dev_system/subsystems/generator/generators/simple_generator.rb.unit.rb.erb +7 -0
  228. data/lib/dev_system/subsystems/generator/generators/simple_generator_test.rb +39 -0
  229. data/lib/dev_system/subsystems/generator/generators/uninstall_generator.rb +9 -0
  230. data/lib/dev_system/subsystems/generator/generators/uninstall_generator_test.rb +8 -0
  231. data/lib/dev_system/subsystems/log/commands/log_command.rb +52 -0
  232. data/lib/dev_system/subsystems/log/commands/log_command_test.rb +7 -0
  233. data/lib/dev_system/subsystems/log/generators/log_generator.rb +52 -0
  234. data/lib/dev_system/subsystems/log/generators/log_generator.rb.controller_section_1.rb.erb +7 -0
  235. data/lib/dev_system/subsystems/log/generators/log_generator.rb.controller_test_section_1.rb.erb +6 -0
  236. data/lib/dev_system/subsystems/log/generators/log_generator.rb.handler_section_1.rb.erb +8 -0
  237. data/lib/dev_system/subsystems/log/generators/log_generator.rb.handler_test_section_1.rb.erb +6 -0
  238. data/lib/dev_system/subsystems/log/generators/log_generator_test.rb +17 -0
  239. data/lib/dev_system/subsystems/log/handler_logs/color_output_handler_log.rb +57 -0
  240. data/lib/dev_system/subsystems/log/handler_logs/color_output_handler_log_test.rb +41 -0
  241. data/lib/dev_system/subsystems/log/handler_logs/handler_log.rb +5 -0
  242. data/lib/dev_system/subsystems/log/handler_logs/handler_log_test.rb +12 -0
  243. data/lib/dev_system/subsystems/log/handler_logs/none_handler_log.rb +8 -0
  244. data/lib/dev_system/subsystems/log/handler_logs/none_handler_log_test.rb +10 -0
  245. data/lib/dev_system/subsystems/log/handler_logs/output_handler_log.rb +57 -0
  246. data/lib/dev_system/subsystems/log/handler_logs/output_handler_log_test.rb +43 -0
  247. data/lib/dev_system/subsystems/log/log_panel.rb +108 -0
  248. data/lib/dev_system/subsystems/log/log_panel_test.rb +152 -0
  249. data/lib/dev_system/subsystems/log/log_test.rb +19 -0
  250. data/lib/dev_system/subsystems/log/logs/array_log.rb +20 -0
  251. data/lib/dev_system/subsystems/log/logs/array_log_test.rb +49 -0
  252. data/lib/dev_system/subsystems/log/logs/hash_log.rb +17 -0
  253. data/lib/dev_system/subsystems/log/logs/hash_log_test.rb +40 -0
  254. data/lib/dev_system/subsystems/log/logs/stick_log.rb +80 -0
  255. data/lib/dev_system/subsystems/log/logs/stick_log_log.rb +6 -0
  256. data/lib/dev_system/subsystems/log/logs/stick_log_log_test.rb +26 -0
  257. data/lib/dev_system/subsystems/log/logs/stick_log_test.rb +88 -0
  258. data/lib/dev_system/subsystems/shell/commands/shell_command.rb +340 -0
  259. data/lib/dev_system/subsystems/shell/commands/shell_command_test.rb +12 -0
  260. data/lib/dev_system/subsystems/shell/converter_shells/coffee_converter_shell.rb +20 -0
  261. data/lib/dev_system/subsystems/shell/converter_shells/coffee_converter_shell_test.rb +34 -0
  262. data/lib/dev_system/subsystems/shell/converter_shells/converter_shell.rb +27 -0
  263. data/lib/dev_system/subsystems/shell/converter_shells/converter_shell_test.rb +26 -0
  264. data/lib/dev_system/subsystems/shell/converter_shells/haml_converter_shell.rb +29 -0
  265. data/lib/dev_system/subsystems/shell/converter_shells/haml_converter_shell_test.rb +27 -0
  266. data/lib/dev_system/subsystems/shell/converter_shells/md_converter_shell.rb +20 -0
  267. data/lib/dev_system/subsystems/shell/converter_shells/md_converter_shell_test.rb +31 -0
  268. data/lib/dev_system/subsystems/shell/converter_shells/scss_converter_shell.rb +60 -0
  269. data/lib/dev_system/subsystems/shell/converter_shells/scss_converter_shell_test.rb +52 -0
  270. data/lib/dev_system/subsystems/shell/formatter_shells/formatter_shell.rb +30 -0
  271. data/lib/dev_system/subsystems/shell/formatter_shells/formatter_shell_test.rb +26 -0
  272. data/lib/dev_system/subsystems/shell/formatter_shells/html_formatter_shell.rb +19 -0
  273. data/lib/dev_system/subsystems/shell/formatter_shells/html_formatter_shell_test.rb +43 -0
  274. data/lib/dev_system/subsystems/shell/gem_shells/coderay_gem_shell.rb +33 -0
  275. data/lib/dev_system/subsystems/shell/gem_shells/coderay_gem_shell_test.rb +21 -0
  276. data/lib/dev_system/subsystems/shell/gem_shells/gem_shell.rb +4 -0
  277. data/lib/dev_system/subsystems/shell/gem_shells/gem_shell_test.rb +10 -0
  278. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb +120 -0
  279. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.actions.rb.erb +11 -0
  280. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.converter.rb.erb +15 -0
  281. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.formatter.rb.erb +15 -0
  282. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.helpers.rb.erb +39 -0
  283. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.instance.rb.erb +71 -0
  284. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.renderer.rb.erb +15 -0
  285. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.test.rb.erb +2 -0
  286. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.view_simple.txt.erb +2 -0
  287. data/lib/dev_system/subsystems/shell/generators/shell_generator_test.rb +21 -0
  288. data/lib/dev_system/subsystems/shell/renderer_shells/renderer_shell.rb +4 -0
  289. data/lib/dev_system/subsystems/shell/renderer_shells/renderer_shell_test.rb +10 -0
  290. data/lib/dev_system/{dev/controllers → subsystems/shell}/shell.rb +7 -2
  291. data/lib/dev_system/subsystems/shell/shell_panel.rb +87 -0
  292. data/lib/dev_system/subsystems/shell/shell_panel_test.rb +14 -0
  293. data/lib/dev_system/{dev/controllers → subsystems/shell}/shell_test.rb +6 -6
  294. data/lib/dev_system/subsystems/shell/shells/app_shell.rb +684 -0
  295. data/lib/dev_system/subsystems/shell/shells/app_shell_test.rb +113 -0
  296. data/lib/dev_system/{dev/controllers/shell → subsystems/shell/shells}/bin_shell_test.rb +0 -5
  297. data/lib/dev_system/subsystems/shell/shells/controller_shell.rb +87 -0
  298. data/lib/dev_system/subsystems/shell/shells/controller_shell_test.rb +33 -0
  299. data/lib/dev_system/subsystems/shell/shells/dir_shell.rb +27 -0
  300. data/lib/dev_system/{dev/controllers/shell → subsystems/shell/shells}/dir_shell_test.rb +0 -8
  301. data/lib/dev_system/subsystems/shell/shells/env_shell.rb +19 -0
  302. data/lib/dev_system/subsystems/shell/shells/env_shell_test.rb +27 -0
  303. data/lib/dev_system/subsystems/shell/shells/erb_shell.rb +168 -0
  304. data/lib/dev_system/subsystems/shell/shells/erb_shell_test.rb +10 -0
  305. data/lib/dev_system/subsystems/shell/shells/file_shell.rb +130 -0
  306. data/lib/dev_system/{dev/controllers/shell → subsystems/shell/shells}/file_shell_test.rb +3 -7
  307. data/lib/dev_system/subsystems/shell/shells/gemspec_shell.rb +21 -0
  308. data/lib/dev_system/subsystems/shell/shells/gemspec_shell_test.rb +28 -0
  309. data/lib/dev_system/subsystems/shell/shells/kernel_shell.rb +26 -0
  310. data/lib/dev_system/subsystems/shell/shells/kernel_shell_test.rb +10 -0
  311. data/lib/dev_system/subsystems/shell/shells/line_diff_shell.rb +27 -0
  312. data/lib/dev_system/subsystems/shell/shells/line_diff_shell_test.rb +7 -0
  313. data/lib/dev_system/subsystems/shell/shells/line_shell.rb +104 -0
  314. data/lib/dev_system/subsystems/shell/shells/line_shell_test.rb +102 -0
  315. data/lib/dev_system/subsystems/shell/shells/main_shell.rb +29 -0
  316. data/lib/dev_system/subsystems/shell/shells/main_shell_test.rb +10 -0
  317. data/lib/dev_system/subsystems/shell/shells/method_shell.rb +52 -0
  318. data/lib/dev_system/subsystems/shell/shells/method_shell_test.rb +30 -0
  319. data/lib/dev_system/subsystems/shell/shells/signal_shell.rb +53 -0
  320. data/lib/dev_system/subsystems/shell/shells/signal_shell_test.rb +28 -0
  321. data/lib/dev_system/subsystems/shell/shells/text_file_shell.rb +14 -0
  322. data/lib/dev_system/subsystems/shell/shells/text_file_shell_test.rb +7 -0
  323. data/lib/dev_system/subsystems/shell/shells/text_shell.rb +65 -0
  324. data/lib/dev_system/{dev/controllers/shell → subsystems/shell/shells}/text_shell_test.rb +0 -5
  325. data/lib/dev_system/subsystems/shell/soft_shells/soft_shell.rb +4 -0
  326. data/lib/dev_system/subsystems/shell/soft_shells/soft_shell_test.rb +10 -0
  327. data/lib/dev_system/subsystems/shell/view_shells/logo_view_shell.rb +12 -0
  328. data/lib/dev_system/subsystems/shell/view_shells/logo_view_shell.rb.svg.erb +59 -0
  329. data/lib/dev_system/subsystems/shell/view_shells/logo_view_shell_test.rb +15 -0
  330. data/lib/dev_system/subsystems/shell/view_shells/view_shell.rb +5 -0
  331. data/lib/dev_system/subsystems/shell/view_shells/view_shell_test.rb +10 -0
  332. data/lib/dev_system.rb +8 -2
  333. data/lib/eco_system/eco_box.rb +5 -0
  334. data/lib/eco_system/eco_box_test.rb +16 -0
  335. data/lib/eco_system/eco_system_test.rb +9 -0
  336. data/lib/eco_system.rb +11 -0
  337. data/lib/happy_system/happy_box.rb +9 -0
  338. data/lib/happy_system/happy_box_test.rb +20 -0
  339. data/lib/happy_system/happy_system_test.rb +3 -0
  340. data/lib/happy_system/subsystems/axo/axo.rb +11 -0
  341. data/lib/happy_system/subsystems/axo/axo_panel.rb +9 -0
  342. data/lib/happy_system/subsystems/axo/axo_panel_test.rb +12 -0
  343. data/lib/happy_system/subsystems/axo/axo_test.rb +12 -0
  344. data/lib/happy_system/subsystems/axo/commands/axo_command.rb +41 -0
  345. data/lib/happy_system/subsystems/axo/commands/axo_command_test.rb +8 -0
  346. data/lib/happy_system/subsystems/axo/generators/axo_generator.rb +17 -0
  347. data/lib/happy_system/subsystems/axo/generators/axo_generator.rb.controller.rb.erb +49 -0
  348. data/lib/happy_system/subsystems/axo/generators/axo_generator_test.rb +12 -0
  349. data/lib/happy_system.rb +4 -2
  350. data/lib/lab_system/clients/kroki_client.rb +135 -0
  351. data/lib/lab_system/clients/kroki_client_test.rb +28 -0
  352. data/lib/lab_system/clients/liza_kroki_client.rb +176 -0
  353. data/lib/lab_system/clients/liza_kroki_client_test.rb +28 -0
  354. data/lib/lab_system/commands/docker_command.rb +67 -0
  355. data/lib/lab_system/commands/docker_command_test.rb +7 -0
  356. data/lib/lab_system/lab_box.rb +5 -0
  357. data/lib/lab_system/lab_box_test.rb +8 -0
  358. data/lib/lab_system/lab_system_test.rb +3 -0
  359. data/lib/lab_system/requests/kroki_request.rb +182 -0
  360. data/lib/lab_system/requests/kroki_request_test.rb +7 -0
  361. data/lib/lab_system/shells/docker_installer_shell.rb +69 -0
  362. data/lib/lab_system/shells/docker_installer_shell_test.rb +12 -0
  363. data/lib/lab_system/shells/kroki_docker_shell.rb +20 -0
  364. data/lib/lab_system/shells/kroki_docker_shell_test.rb +7 -0
  365. data/lib/lab_system/soft_shells/docker_soft_shell.rb +60 -0
  366. data/lib/lab_system/soft_shells/docker_soft_shell_test.rb +60 -0
  367. data/lib/lab_system.rb +8 -0
  368. data/lib/liza/extra_tests/app_test.rb +36 -0
  369. data/lib/liza/extra_tests/class_test.rb +26 -0
  370. data/lib/liza/extra_tests/liza_test.rb +7 -0
  371. data/lib/liza/extra_tests/lizarb_test.rb +20 -0
  372. data/lib/liza/extra_tests/module_test.rb +21 -0
  373. data/lib/liza/{ruby_test.rb → extra_tests/object_test.rb} +1 -1
  374. data/lib/liza/{ruby_tests → extra_tests}/string_test.rb +3 -1
  375. data/lib/liza/extra_tests/time_test.rb +19 -0
  376. data/lib/liza/helper_units/part.rb +25 -0
  377. data/lib/liza/helper_units/part_test.rb +26 -0
  378. data/lib/liza/helper_units/test.rb +940 -0
  379. data/lib/liza/{test → helper_units}/test_test.rb +71 -7
  380. data/lib/liza/subsystemic_units/controller.rb +221 -0
  381. data/lib/liza/subsystemic_units/controller_test.rb +62 -0
  382. data/lib/liza/subsystemic_units/panel.rb +86 -0
  383. data/lib/liza/subsystemic_units/panel_test.rb +22 -0
  384. data/lib/liza/systemic_units/box.rb +82 -0
  385. data/lib/liza/systemic_units/box_test.rb +36 -0
  386. data/lib/liza/systemic_units/system.rb +52 -0
  387. data/lib/liza/systemic_units/system_test.rb +14 -0
  388. data/lib/liza/unit.rb +627 -89
  389. data/lib/liza/unit_test.rb +105 -16
  390. data/lib/liza.rb +15 -11
  391. data/lib/lizarb/version.rb +1 -1
  392. data/lib/lizarb.rb +716 -149
  393. data/lib/media_system/media_box.rb +3 -0
  394. data/lib/media_system/media_box_test.rb +10 -0
  395. data/lib/media_system/media_system_test.rb +3 -0
  396. data/lib/media_system.rb +8 -0
  397. data/lib/micro_system/micro_box.rb +5 -0
  398. data/lib/micro_system/micro_box_test.rb +8 -0
  399. data/lib/micro_system/micro_system_test.rb +3 -0
  400. data/lib/micro_system.rb +8 -0
  401. data/lib/net_system/net_box.rb +50 -0
  402. data/lib/net_system/{net/net_box_test.rb → net_box_test.rb} +0 -5
  403. data/lib/net_system/net_system_test.rb +3 -0
  404. data/lib/net_system/{net/panels → subsystems/client}/client_panel_test.rb +0 -5
  405. data/lib/net_system/{net/controllers → subsystems/client}/client_test.rb +0 -5
  406. data/lib/net_system/subsystems/client/commands/client_command.rb +12 -0
  407. data/lib/net_system/subsystems/client/commands/client_command_test.rb +10 -0
  408. data/lib/net_system/subsystems/client/generators/client_generator.rb +22 -0
  409. data/lib/net_system/subsystems/client/generators/client_generator.rb.controller.rb.erb +41 -0
  410. data/lib/net_system/subsystems/client/generators/client_generator.rb.test.rb.erb +16 -0
  411. data/lib/net_system/subsystems/client/generators/client_generator_test.rb +15 -0
  412. data/lib/net_system/subsystems/database/clients/mongo_client.rb +47 -0
  413. data/lib/net_system/subsystems/database/clients/mongo_client_test.rb +20 -0
  414. data/lib/net_system/subsystems/database/clients/mysql_client.rb +34 -0
  415. data/lib/net_system/subsystems/database/clients/mysql_client_test.rb +23 -0
  416. data/lib/net_system/subsystems/database/clients/pgsql_client.rb +30 -0
  417. data/lib/net_system/subsystems/database/clients/pgsql_client_test.rb +25 -0
  418. data/lib/net_system/subsystems/database/clients/redis_client.rb +46 -0
  419. data/lib/net_system/{net/controllers/client → subsystems/database/clients}/redis_client_test.rb +2 -2
  420. data/lib/net_system/{net/controllers/client → subsystems/database/clients}/sqlite_client.rb +9 -2
  421. data/lib/net_system/{net/controllers/client → subsystems/database/clients}/sqlite_client_test.rb +2 -2
  422. data/lib/net_system/subsystems/database/commands/database_command.rb +23 -0
  423. data/lib/net_system/subsystems/database/commands/database_command_test.rb +7 -0
  424. data/lib/net_system/subsystems/database/database_panel.rb +3 -0
  425. data/lib/net_system/subsystems/database/database_panel_test.rb +12 -0
  426. data/lib/net_system/{net/controllers → subsystems/database}/database_test.rb +0 -5
  427. data/lib/net_system/subsystems/database/databases/mongo_db.rb +8 -0
  428. data/lib/net_system/subsystems/database/databases/mongo_db_test.rb +21 -0
  429. data/lib/net_system/subsystems/database/databases/mysql_db.rb +8 -0
  430. data/lib/net_system/subsystems/database/databases/mysql_db_test.rb +21 -0
  431. data/lib/net_system/subsystems/database/databases/pgsql_db.rb +8 -0
  432. data/lib/net_system/subsystems/database/databases/pgsql_db_test.rb +21 -0
  433. data/lib/net_system/{net/controllers/database → subsystems/database/databases}/redis_db_test.rb +1 -1
  434. data/lib/net_system/{net/controllers/database → subsystems/database/databases}/sqlite_db_test.rb +1 -1
  435. data/lib/net_system/subsystems/filebase/commands/filebase_command.rb +12 -0
  436. data/lib/net_system/subsystems/filebase/commands/filebase_command_test.rb +10 -0
  437. data/lib/net_system/subsystems/filebase/filebase.rb +12 -0
  438. data/lib/net_system/subsystems/filebase/filebase_panel.rb +23 -0
  439. data/lib/net_system/subsystems/filebase/filebase_panel_test.rb +22 -0
  440. data/lib/net_system/subsystems/filebase/filebase_test.rb +22 -0
  441. data/lib/net_system/subsystems/record/commands/record_command.rb +12 -0
  442. data/lib/net_system/subsystems/record/commands/record_command_test.rb +10 -0
  443. data/lib/net_system/subsystems/record/generators/record_generator.rb +35 -0
  444. data/lib/net_system/subsystems/record/generators/record_generator.rb.controller.rb.erb +4 -0
  445. data/lib/net_system/subsystems/record/generators/record_generator.rb.test.rb.erb +2 -0
  446. data/lib/net_system/subsystems/record/generators/record_generator_test.rb +13 -0
  447. data/lib/net_system/subsystems/record/record.rb +19 -0
  448. data/lib/net_system/subsystems/record/record_panel.rb +3 -0
  449. data/lib/net_system/subsystems/record/record_panel_test.rb +7 -0
  450. data/lib/net_system/subsystems/record/record_test.rb +11 -0
  451. data/lib/net_system/subsystems/socket/commands/socket_command.rb +12 -0
  452. data/lib/net_system/subsystems/socket/commands/socket_command_test.rb +10 -0
  453. data/lib/net_system/subsystems/socket/socket.rb +12 -0
  454. data/lib/net_system/subsystems/socket/socket_panel.rb +23 -0
  455. data/lib/net_system/subsystems/socket/socket_panel_test.rb +22 -0
  456. data/lib/net_system/subsystems/socket/socket_test.rb +22 -0
  457. data/lib/net_system.rb +11 -2
  458. data/lib/prime_system/prime_box.rb +9 -0
  459. data/lib/prime_system/prime_box_test.rb +16 -0
  460. data/lib/prime_system/prime_system_test.rb +9 -0
  461. data/lib/prime_system/subsystems/epic/commands/epic_command.rb +12 -0
  462. data/lib/prime_system/subsystems/epic/commands/epic_command_test.rb +10 -0
  463. data/lib/prime_system/subsystems/epic/epic.rb +12 -0
  464. data/lib/prime_system/subsystems/epic/epic_panel.rb +23 -0
  465. data/lib/prime_system/subsystems/epic/epic_panel_test.rb +22 -0
  466. data/lib/prime_system/subsystems/epic/epic_test.rb +22 -0
  467. data/lib/prime_system.rb +13 -0
  468. data/lib/web_system/{dev → subsystems/rack/commands}/rack_command.rb +11 -6
  469. data/lib/web_system/subsystems/rack/commands/rack_command_test.rb +7 -0
  470. data/lib/web_system/subsystems/rack/middle_racks/first_middle_rack.rb +8 -0
  471. data/lib/web_system/subsystems/rack/middle_racks/first_middle_rack_test.rb +7 -0
  472. data/lib/web_system/subsystems/rack/middle_racks/last_middle_rack.rb +3 -0
  473. data/lib/web_system/subsystems/rack/middle_racks/last_middle_rack_test.rb +7 -0
  474. data/lib/web_system/subsystems/rack/middle_racks/middle_rack.rb +18 -0
  475. data/lib/web_system/subsystems/rack/middle_racks/middle_rack_test.rb +7 -0
  476. data/lib/web_system/subsystems/rack/middle_racks/zeitwerk_middle_rack.rb +10 -0
  477. data/lib/web_system/subsystems/rack/middle_racks/zeitwerk_middle_rack_test.rb +7 -0
  478. data/lib/web_system/subsystems/rack/rack.rb +3 -0
  479. data/lib/web_system/subsystems/rack/rack_panel.rb +56 -0
  480. data/lib/web_system/subsystems/rack/rack_panel_test.rb +25 -0
  481. data/lib/web_system/{web/controllers → subsystems/rack}/rack_test.rb +0 -5
  482. data/lib/web_system/subsystems/rack/server_racks/agoo_server_rack.rb +54 -0
  483. data/lib/web_system/subsystems/rack/server_racks/agoo_server_rack_test.rb +7 -0
  484. data/lib/web_system/subsystems/rack/server_racks/falcon_server_rack.rb +47 -0
  485. data/lib/web_system/subsystems/rack/server_racks/falcon_server_rack_test.rb +7 -0
  486. data/lib/web_system/subsystems/rack/server_racks/iodine_server_rack.rb +48 -0
  487. data/lib/web_system/subsystems/rack/server_racks/iodine_server_rack_test.rb +7 -0
  488. data/lib/web_system/subsystems/rack/server_racks/puma_server_rack.rb +50 -0
  489. data/lib/web_system/subsystems/rack/server_racks/puma_server_rack_test.rb +7 -0
  490. data/lib/web_system/subsystems/rack/server_racks/server_rack.rb +3 -0
  491. data/lib/web_system/subsystems/rack/server_racks/server_rack_test.rb +7 -0
  492. data/lib/web_system/subsystems/rack/server_racks/thin_server_rack.rb +86 -0
  493. data/lib/web_system/subsystems/rack/server_racks/thin_server_rack_test.rb +7 -0
  494. data/lib/web_system/subsystems/request/commands/request_command.rb +114 -0
  495. data/lib/web_system/subsystems/request/commands/request_command_test.rb +7 -0
  496. data/lib/web_system/subsystems/request/generators/request_generator.rb +39 -0
  497. data/lib/web_system/subsystems/request/generators/request_generator.rb.base.rb.erb +14 -0
  498. data/lib/web_system/subsystems/request/generators/request_generator.rb.simple_actions.rb.erb +16 -0
  499. data/lib/web_system/subsystems/request/generators/request_generator.rb.simple_view.html.erb +9 -0
  500. data/lib/web_system/subsystems/request/generators/request_generator.rb.test.rb.erb +2 -0
  501. data/lib/web_system/subsystems/request/generators/request_generator_test.rb +15 -0
  502. data/lib/web_system/subsystems/request/request_panel.rb +75 -0
  503. data/lib/web_system/subsystems/request/request_panel_test.rb +82 -0
  504. data/lib/web_system/{web/controllers → subsystems/request}/request_test.rb +0 -5
  505. data/lib/web_system/{web/controllers/request → subsystems/request/requests}/client_error_request.rb +1 -0
  506. data/lib/web_system/{web/controllers/request → subsystems/request/requests}/not_found_request.rb +1 -0
  507. data/lib/web_system/{web/controllers/request → subsystems/request/requests}/server_error_request.rb +1 -0
  508. data/lib/web_system/subsystems/request/requests/simple_request.rb +102 -0
  509. data/lib/web_system/subsystems/request/requests/simple_request_test.rb +7 -0
  510. data/lib/web_system/subsystems/request/router_requests/router_request.rb +7 -0
  511. data/lib/web_system/subsystems/request/router_requests/router_request_test.rb +7 -0
  512. data/lib/web_system/subsystems/request/router_requests/simple_router_request.rb +27 -0
  513. data/lib/web_system/subsystems/request/router_requests/simple_router_request_test.rb +7 -0
  514. data/lib/web_system/web_box.rb +37 -0
  515. data/lib/web_system/{web/web_box_test.rb → web_box_test.rb} +0 -5
  516. data/lib/web_system/web_system_test.rb +3 -0
  517. data/lib/web_system.rb +9 -3
  518. data/lib/work_system/work_box.rb +5 -0
  519. data/lib/work_system/work_box_test.rb +8 -0
  520. data/lib/work_system/work_system_test.rb +3 -0
  521. data/lib/work_system.rb +8 -0
  522. data/lizarb.gemspec +7 -15
  523. metadata +498 -228
  524. data/app/happy/axos/axo.rb +0 -50
  525. data/app_new/dev/benches/loops_bench_test.rb +0 -12
  526. data/app_new/dev/benches/objects_bench.rb +0 -83
  527. data/app_new/dev/benches/sorted_bench_test.rb +0 -12
  528. data/app_new/dev_box.rb +0 -14
  529. data/app_new.rb +0 -15
  530. data/exe/lrb +0 -3
  531. data/lib/dev_system/dev/controllers/bench/not_found_bench.rb +0 -34
  532. data/lib/dev_system/dev/controllers/bench/not_found_bench_test.rb +0 -12
  533. data/lib/dev_system/dev/controllers/bench.rb +0 -3
  534. data/lib/dev_system/dev/controllers/bench_test.rb +0 -12
  535. data/lib/dev_system/dev/controllers/command/bench_command.rb +0 -31
  536. data/lib/dev_system/dev/controllers/command/bench_command_test.rb +0 -12
  537. data/lib/dev_system/dev/controllers/command/generate_command.rb +0 -9
  538. data/lib/dev_system/dev/controllers/command/generate_command_test.rb +0 -12
  539. data/lib/dev_system/dev/controllers/command/new_command.rb +0 -9
  540. data/lib/dev_system/dev/controllers/command/new_command_test.rb +0 -7
  541. data/lib/dev_system/dev/controllers/command/not_found_command.rb +0 -48
  542. data/lib/dev_system/dev/controllers/command/not_found_command_test.rb +0 -12
  543. data/lib/dev_system/dev/controllers/command/terminal_command.rb +0 -22
  544. data/lib/dev_system/dev/controllers/command/terminal_command_test.rb +0 -12
  545. data/lib/dev_system/dev/controllers/command/test_command.rb +0 -85
  546. data/lib/dev_system/dev/controllers/command/test_command_test.rb +0 -12
  547. data/lib/dev_system/dev/controllers/command.rb +0 -13
  548. data/lib/dev_system/dev/controllers/generator.rb +0 -9
  549. data/lib/dev_system/dev/controllers/generator_dsl_main_part.rb +0 -50
  550. data/lib/dev_system/dev/controllers/generators/bench_generator/controller.rb.erb +0 -23
  551. data/lib/dev_system/dev/controllers/generators/bench_generator/controller_test.rb.erb +0 -12
  552. data/lib/dev_system/dev/controllers/generators/bench_generator.rb +0 -12
  553. data/lib/dev_system/dev/controllers/generators/bench_generator_test.rb +0 -12
  554. data/lib/dev_system/dev/controllers/generators/command_generator/controller.rb.erb +0 -41
  555. data/lib/dev_system/dev/controllers/generators/command_generator/controller_test.rb.erb +0 -12
  556. data/lib/dev_system/dev/controllers/generators/command_generator.rb +0 -19
  557. data/lib/dev_system/dev/controllers/generators/command_generator_test.rb +0 -12
  558. data/lib/dev_system/dev/controllers/generators/controller_generator.rb +0 -97
  559. data/lib/dev_system/dev/controllers/generators/controller_generator_test.rb +0 -12
  560. data/lib/dev_system/dev/controllers/generators/generator_generator/generator.rb.erb +0 -18
  561. data/lib/dev_system/dev/controllers/generators/generator_generator/generator_test.rb.erb +0 -12
  562. data/lib/dev_system/dev/controllers/generators/generator_generator/template.rb.erb +0 -9
  563. data/lib/dev_system/dev/controllers/generators/generator_generator/template_test.rb.erb +0 -12
  564. data/lib/dev_system/dev/controllers/generators/generator_generator.rb +0 -30
  565. data/lib/dev_system/dev/controllers/generators/generator_generator_test.rb +0 -12
  566. data/lib/dev_system/dev/controllers/generators/new_generator.rb +0 -117
  567. data/lib/dev_system/dev/controllers/generators/new_generator_test.rb +0 -12
  568. data/lib/dev_system/dev/controllers/generators/not_found_generator.rb +0 -39
  569. data/lib/dev_system/dev/controllers/generators/not_found_generator_test.rb +0 -12
  570. data/lib/dev_system/dev/controllers/generators/record_generator.rb +0 -46
  571. data/lib/dev_system/dev/controllers/generators/record_generator_test.rb +0 -12
  572. data/lib/dev_system/dev/controllers/generators/request_generator.rb +0 -63
  573. data/lib/dev_system/dev/controllers/generators/request_generator_test.rb +0 -12
  574. data/lib/dev_system/dev/controllers/log_test.rb +0 -12
  575. data/lib/dev_system/dev/controllers/shell/dir_shell.rb +0 -27
  576. data/lib/dev_system/dev/controllers/shell/file_shell.rb +0 -59
  577. data/lib/dev_system/dev/controllers/shell/text_shell.rb +0 -23
  578. data/lib/dev_system/dev/controllers/terminal/irb_terminal.rb +0 -23
  579. data/lib/dev_system/dev/controllers/terminal/irb_terminal_test.rb +0 -12
  580. data/lib/dev_system/dev/controllers/terminal/pry_terminal.rb +0 -10
  581. data/lib/dev_system/dev/controllers/terminal/pry_terminal_test.rb +0 -12
  582. data/lib/dev_system/dev/controllers/terminal.rb +0 -17
  583. data/lib/dev_system/dev/controllers/terminal_test.rb +0 -12
  584. data/lib/dev_system/dev/dev_box.rb +0 -33
  585. data/lib/dev_system/dev/dev_box_test.rb +0 -17
  586. data/lib/dev_system/dev/panels/bench_panel.rb +0 -3
  587. data/lib/dev_system/dev/panels/bench_panel_test.rb +0 -12
  588. data/lib/dev_system/dev/panels/command_panel.rb +0 -71
  589. data/lib/dev_system/dev/panels/command_panel_test.rb +0 -46
  590. data/lib/dev_system/dev/panels/generator_panel.rb +0 -73
  591. data/lib/dev_system/dev/panels/generator_panel_test.rb +0 -46
  592. data/lib/dev_system/dev/panels/log_panel.rb +0 -13
  593. data/lib/dev_system/dev/panels/log_panel_test.rb +0 -16
  594. data/lib/dev_system/dev/panels/shell_panel.rb +0 -3
  595. data/lib/dev_system/dev/panels/shell_panel_test.rb +0 -12
  596. data/lib/dev_system/dev/panels/terminal_panel.rb +0 -3
  597. data/lib/dev_system/dev/panels/terminal_panel_test.rb +0 -12
  598. data/lib/happy_system/dev/happy_command.rb +0 -11
  599. data/lib/happy_system/happy/controllers/axo.rb +0 -7
  600. data/lib/happy_system/happy/happy_box.rb +0 -8
  601. data/lib/happy_system/happy/happy_box_test.rb +0 -16
  602. data/lib/happy_system/happy/panels/axo_panel.rb +0 -3
  603. data/lib/lerb.rb +0 -152
  604. data/lib/liza/base/box.rb +0 -90
  605. data/lib/liza/base/box_test.rb +0 -10
  606. data/lib/liza/base/controller.rb +0 -27
  607. data/lib/liza/base/controller_test.rb +0 -10
  608. data/lib/liza/base/panel.rb +0 -52
  609. data/lib/liza/base/panel_test.rb +0 -40
  610. data/lib/liza/base_parts/controller_renderer_part.rb +0 -140
  611. data/lib/liza/base_parts/controller_renderer_part_test.rb +0 -16
  612. data/lib/liza/meta/part.rb +0 -17
  613. data/lib/liza/meta/part_extension.rb +0 -16
  614. data/lib/liza/meta/part_test.rb +0 -6
  615. data/lib/liza/meta/system.rb +0 -18
  616. data/lib/liza/meta/system_test.rb +0 -11
  617. data/lib/liza/ruby_tests/module_test.rb +0 -21
  618. data/lib/liza/test/test.rb +0 -10
  619. data/lib/liza/test_parts/test_assertions_advanced_part.rb +0 -125
  620. data/lib/liza/test_parts/test_assertions_part.rb +0 -109
  621. data/lib/liza/test_parts/test_dsl_part.rb +0 -68
  622. data/lib/liza/test_parts/test_log_part.rb +0 -122
  623. data/lib/liza/test_parts/test_subject_part.rb +0 -22
  624. data/lib/liza/test_parts/test_tree_part.rb +0 -92
  625. data/lib/liza/unit_parts/unit_procedure_part.rb +0 -17
  626. data/lib/liza/unit_parts/unit_procedure_part_test.rb +0 -65
  627. data/lib/liza/unit_parts/unit_settings_part.rb +0 -76
  628. data/lib/liza/unit_parts/unit_settings_part_test.rb +0 -3
  629. data/lib/lizarb/ruby/class.rb +0 -17
  630. data/lib/lizarb/ruby/module.rb +0 -17
  631. data/lib/lizarb/ruby/proc.rb +0 -12
  632. data/lib/lizarb/ruby/string.rb +0 -33
  633. data/lib/lizarb/ruby/time.rb +0 -9
  634. data/lib/net_system/dev/net_command.rb +0 -22
  635. data/lib/net_system/net/controllers/client/redis_client.rb +0 -26
  636. data/lib/net_system/net/controllers/record.rb +0 -29
  637. data/lib/net_system/net/controllers/record_test.rb +0 -12
  638. data/lib/net_system/net/net_box.rb +0 -13
  639. data/lib/net_system/net/panels/database_panel.rb +0 -10
  640. data/lib/net_system/net/panels/database_panel_test.rb +0 -16
  641. data/lib/web_system/dev/request_command.rb +0 -129
  642. data/lib/web_system/dev/web_command.rb +0 -9
  643. data/lib/web_system/web/controllers/rack.rb +0 -6
  644. data/lib/web_system/web/panels/rack_panel.rb +0 -42
  645. data/lib/web_system/web/panels/rack_panel_test.rb +0 -12
  646. data/lib/web_system/web/panels/request_panel.rb +0 -70
  647. data/lib/web_system/web/panels/request_panel_test.rb +0 -33
  648. data/lib/web_system/web/web_box.rb +0 -18
  649. /data/lib/dev_system/{dev/controllers → subsystems/log}/log.rb +0 -0
  650. /data/lib/dev_system/{dev/controllers/shell → subsystems/shell/shells}/bin_shell.rb +0 -0
  651. /data/lib/net_system/{net/controllers → subsystems/client}/client.rb +0 -0
  652. /data/lib/net_system/{net/panels → subsystems/client}/client_panel.rb +0 -0
  653. /data/lib/net_system/{net/controllers → subsystems/database}/database.rb +0 -0
  654. /data/lib/net_system/{net/controllers/database → subsystems/database/databases}/redis_db.rb +0 -0
  655. /data/lib/net_system/{net/controllers/database → subsystems/database/databases}/sqlite_db.rb +0 -0
  656. /data/lib/web_system/{web/controllers → subsystems/request}/request.rb +0 -0
data/lib/lizarb.rb CHANGED
@@ -1,43 +1,131 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "colorize"
4
- require "json"
5
- require "pathname"
6
- require "fileutils"
7
- require "lerb"
3
+ # This flag allows database connection tests
4
+ # ENV["DBTEST"] ||= "1"
8
5
 
9
- require_relative "lizarb/version"
6
+ $VERBOSE ||= ENV["VERBOSE"]
7
+ $main = self
8
+ $boot_time = Time.now
10
9
 
11
- $APP ||= "app"
10
+ puts "$VERBOSE = true" if $VERBOSE
12
11
 
13
- module Lizarb
14
- class Error < StandardError; end
15
- class ModeNotFound < Error; end
12
+ require_relative "lizarb/version" unless defined? Lizarb::VERSION
16
13
 
17
- #
14
+ class Class
15
+
16
+ def descendants
17
+ ObjectSpace.each_object(Class).select { |klass| klass < self }
18
+ end
19
+
20
+ def and_descendants
21
+ ObjectSpace.each_object(Class).select { |klass| klass <= self }
22
+ end
23
+
24
+ def ancestors_until klass
25
+ ancestors.take_while { _1 <= klass }
26
+ end
27
+
28
+ end
29
+
30
+ class Module
31
+
32
+ # ["/path/to/liza.rb", 1]
33
+ def source_location
34
+ Array Object.const_source_location to_s
35
+ end
36
+
37
+ # "/path/to/liza.rb"
38
+ def source_location_path
39
+ source_location[0]
40
+ rescue
41
+ nil
42
+ end
43
+
44
+ # "/path/to/liza"
45
+ def source_location_radical
46
+ source_location_path[0..-4]
47
+ rescue
48
+ nil
49
+ end
50
+
51
+ def first_namespace
52
+ to_s.rpartition('::')[0]
53
+ end
54
+
55
+ def last_namespace
56
+ to_s.rpartition('::')[-1]
57
+ end
58
+
59
+ end
60
+
61
+ class Proc
62
+ def relative_source
63
+ absolute_source
64
+ .sub("#{Lizarb.app_dir}/", "")
65
+ .sub("#{Lizarb.root}/", "")
66
+ end
18
67
 
19
- SPEC = Gem::Specification.find_by_name("lizarb")
20
- GEM_DIR = SPEC.gem_dir
21
- CUR_DIR = Dir.pwd
68
+ def absolute_source
69
+ sl = source_location
70
+ "#{sl[0]}:#{sl[1]}"
71
+ end
72
+ end
22
73
 
23
- IS_APP_DIR = File.file? "#{CUR_DIR}/app.rb"
24
- IS_LIZ_DIR = File.file? "#{CUR_DIR}/lib/lizarb.rb"
25
- IS_GEM_DIR = File.file? "#{CUR_DIR}/lizarb.gemspec"
74
+ class String
75
+ alias lpartition partition
76
+
77
+ def camelcase
78
+ split("_").map { |s| "#{s[0].to_s.upcase}#{s[1..-1]}" }.join("")
79
+ end
26
80
 
27
- APP_DIR = IS_APP_DIR ? CUR_DIR : GEM_DIR
81
+ alias camelize camelcase
28
82
 
29
- $APP = "app_global" if not IS_APP_DIR
83
+ def snakecase
84
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
85
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
86
+ .downcase
87
+ end
88
+
89
+ alias snakefy snakecase
90
+
91
+ def rjust_blanks length
92
+ rjust length, " "
93
+ end
94
+
95
+ def rjust_zeroes length
96
+ rjust length, "0"
97
+ end
98
+
99
+ def ljust_blanks length
100
+ ljust length, " "
101
+ end
102
+
103
+ def ljust_zeroes length
104
+ ljust length, "0"
105
+ end
106
+ end
107
+
108
+ class Time
109
+ def diff digits = 4
110
+ raise ArgumentError, "digits must be between 1 and 4" unless digits.between? 1, 4
111
+ f = (self.class.now.to_f - to_f).floor(digits)
112
+ u, d = f.to_s.split "."
113
+ "#{u}.#{d.ljust digits, "0"}"
114
+ end
115
+ end
116
+
117
+ module Lizarb
118
+ class Error < StandardError; end
119
+ class ModeNotFound < Error; end
120
+ class SystemNotFound < Error; end
30
121
 
31
122
  #
32
123
 
33
124
  module_function
34
125
 
35
126
  def log s
36
- puts s.bold
37
- end
38
-
39
- def self.logv s
40
- log s if $VERBOSE
127
+ print "#{$boot_time.diff}s " if defined? $log_boot_high
128
+ puts s
41
129
  end
42
130
 
43
131
  # Returns Lizarb::VERSION as a Gem::Version
@@ -54,145 +142,557 @@ module Lizarb
54
142
  RUBY_ENGINE != "jruby"
55
143
  end
56
144
 
57
- def self.load_all
58
- Zeitwerk::Loader.eager_load_all
145
+ singleton_class.class_eval do
146
+ attr_reader :root
147
+ attr_reader :spec
148
+ attr_reader :setup_type
149
+ attr_reader :config_path
150
+ #
151
+ attr_reader :app_dir
152
+ attr_reader :gem_dir
153
+ attr_reader :liz_dir
154
+ attr_reader :is_app_dir
155
+ attr_reader :is_liz_dir
156
+ attr_reader :is_gem_dir
59
157
  end
60
158
 
61
- # called from exe/lizarb
62
- def setup
63
- lookup_and_load_core_ext
64
- lookup_and_set_gemfile
159
+ # ["/path/to/lizarb.rb", 1]
160
+ def source_location
161
+ [__FILE__, 1]
65
162
  end
66
163
 
67
- # called from exe/lizarb
68
- def app &block
69
- require "app"
70
- if block_given?
71
- App.class_exec(&block)
72
- else
73
- lookup_and_require_app
164
+ ### Initialize LizaRB as a project
165
+ #
166
+ # - You must provide __FILE__ as argument to this method.
167
+ def init_project! executable
168
+ pwd = Dir.pwd
169
+ $LOAD_PATH.unshift "#{pwd}/lib" if File.directory? "#{pwd}/lib"
170
+ setup_project pwd, project: executable
171
+ load
172
+ end
173
+
174
+ ### Initialize LizaRB as a dependent script.
175
+ #
176
+ # - You must provide the app key.
177
+ # - You may provide an array of system keys.
178
+ def init_script_dependent!(
179
+ *systems,
180
+ app:
181
+ )
182
+ pwd = Dir.pwd
183
+ $LOAD_PATH.unshift "#{pwd}/lib" if File.directory? "#{pwd}/lib"
184
+ cl = caller_locations(1, 1)[0]
185
+
186
+ raise Lizarb::Error, "Lizarb.#{__method__} does not support app_global, use Lizarb.sfa" if app == "app_global"
187
+ raise Lizarb::Error, "#{app.inspect} does not start with 'app_'" unless app == "app" or app.to_s.start_with? "app_"
188
+
189
+ segments = cl.absolute_path.split("/")
190
+ root, script = segments[0..-3].join("/"), segments[-2..-1].join("/")
191
+
192
+ setup_script_dependent root, script: script, script_app: app
193
+
194
+ App.class_exec do
195
+ self.systems.clear if systems.any?
196
+ systems.each do |key|
197
+ system key
198
+ end
74
199
  end
200
+ load
75
201
  end
76
202
 
77
- # called from exe/lizarb
78
- def call
79
- lookup_and_set_mode
80
- lookup_and_require_dependencies
81
- lookup_and_load_settings
82
- require_liza_and_bundle_systems
203
+ ### Initialize LizaRB as an independent script.
204
+ #
205
+ # - You may provide all app configurations.
206
+ # - You may provide some dev_box configurations.
207
+ # - You may provide an array of system keys.
208
+ def init_script_independent!(
209
+ *systems,
210
+ mode: :code,
211
+ folder: nil,
212
+ gemfile: nil,
213
+ log_handler: :output,
214
+ log_boot: nil,
215
+ log_level: nil,
216
+ log: nil,
217
+ pwd:
218
+ )
219
+ log_boot ||= log if log
220
+ log_level ||= log if log
221
+ log_boot ||= :normal
222
+ log_level ||= :normal
223
+
224
+ cl = caller_locations(1, 1)[0]
225
+
226
+ script = cl.absolute_path
227
+
228
+ setup_script_independent pwd, script: script
229
+
230
+ App.class_exec do
231
+ self.gemfile gemfile if gemfile
232
+ self.folder folder if folder
233
+ self.log_boot log_boot
234
+ self.log_level log_level
235
+ self.mode mode
236
+ system :dev
237
+ systems.each do |key|
238
+ system key
239
+ end
240
+ end
241
+
242
+ load
243
+
244
+ DevSystem::DevBox.configure :log do
245
+ handler log_handler
246
+ end
83
247
  end
84
248
 
85
- # called from exe/lizarb
86
- def exit verbose: $VERBOSE
87
- exit_messages if verbose
88
- super 0
249
+ ### Setup Methods for Different Contexts
250
+ #
251
+ # The LizaRB framework provides specific setup methods for different contexts: project, script_dependent, and script_independent.
252
+ # Each method sets the `@root` and `@setup_type` instance variables and calls the `setup` method.
253
+ #
254
+ # Sets up the environment for a project.
255
+ #
256
+ # A project is a directory that contains an application app.rb file.
257
+ #
258
+ def setup_project pwd, project:
259
+ @root = pwd.to_s
260
+ @setup_type = :project
261
+ # NOTE: arg project is not being stored anywhere
262
+ $APP = ENV["APP"] || "app"
263
+ setup
264
+ end
265
+
266
+ ### Setup Methods for Different Contexts
267
+ #
268
+ # The LizaRB framework provides specific setup methods for different contexts: project, script_dependent, and script_independent.
269
+ # Each method sets the `@root` and `@setup_type` instance variables and calls the `setup` method.
270
+ #
271
+ # Sets up the environment for a script.
272
+ #
273
+ # A script_dependent must be placed in a directory which parent directory is a project directory.
274
+ #
275
+ def setup_script_dependent pwd, script: , script_app:
276
+ @root = pwd.to_s
277
+ @setup_type = :script_dependent
278
+ # NOTE: arg script is not being stored anywhere
279
+ $APP = script_app
280
+ setup
281
+ end
282
+
283
+ ### Setup Methods for Different Contexts
284
+ #
285
+ # The LizaRB framework provides specific setup methods for different contexts: project, script_dependent, and script_independent.
286
+ # Each method sets the `@root` and `@setup_type` instance variables and calls the `setup` method.
287
+ #
288
+ # Sets up the environment for a script.
289
+ #
290
+ # A script_independent is a Ruby script that uses the global_app for its project and project directory.
291
+ #
292
+ def setup_script_independent pwd, script:
293
+ @root = pwd.to_s
294
+ @setup_type = :script_independent
295
+ # NOTE: arg script is not being stored anywhere
296
+ $APP = "app_global"
297
+ setup
298
+ end
299
+
300
+ # The setup phase is determined by containing the least amount of code needed before requiring configuration class App.
301
+ #
302
+ # The `setup` method orchestrates the following steps:
303
+ # 1. Determines the environment by setting various directory and configuration variables.
304
+ # 2. Configures the application by loading the main application configuration file.
305
+ # 3. Overwrites Application settings with environment variables.
306
+ # 4. Defines log levels for the application based on the boot log level setting.
307
+ #
308
+ def setup
309
+ ENV["LOG_BOOT"] = ENV["LOG"] = "1" if ARGV[0] && ARGV[0][0] == "-"
310
+ setup_and_determine_environment
311
+ puts "Lizarb #{__FILE__}" if $VERBOSE
312
+ setup_and_configure_app
313
+ puts "App #{@config_path}\n\n" if $VERBOSE
314
+ setup_and_overwrite_app_settings
315
+ setup_and_define_log_levels
316
+ end
317
+
318
+ # The load phase is determined by containing the least amount of code needed after requiring configuration class App.
319
+ #
320
+ # The `load` method orchestrates the following steps:
321
+ # 1. Properly requires gem "bundler" for managing gem your dependencies.
322
+ # 2. Requires essential Ruby libraries, not required by default.
323
+ # 3. Enables or disables coding mode for debugging purposes.
324
+ # 4. Loads environment variables from the following `.env` files.
325
+ # 5. Requires award-winning gem Zeitwerk to manage autoloading of Ruby classes.
326
+ # 6. Requires the Liza module, and its constants are required on demand by zeitwerk.
327
+ # 7. Requires all system-gems, then requires each system class.
328
+ # 8. Initializes Lizarb.loaders[1] with the systems directories and the application directory.
329
+ #
330
+ def load
331
+ log " Lizarb.#{__method__}" if defined? $log_boot_high
332
+
333
+ load_and_require_bundler
334
+ load_and_require_default_gems
335
+ load_and_define_mode
336
+ load_and_require_env_vars
337
+ load_and_zeitwerk
338
+ load_and_zeitwerk_loader_0_liza
339
+ load_and_require_system_classes
340
+ load_and_zeitwerk_loader_1_app
341
+ App.after if defined? App.after
342
+
343
+ log " Lizarb.#{__method__} done" if defined? $log_boot_high
89
344
  end
90
345
 
91
346
  def exit_messages
92
- versions = {
347
+ info = {
93
348
  ruby: RUBY_VERSION,
94
349
  bundler: Bundler::VERSION,
95
350
  zeitwerk: Zeitwerk::VERSION,
96
351
  lizarb: VERSION,
97
352
  app: $APP,
98
- mode: $MODE
353
+ mode: App.mode,
354
+ log_boot: App.log_boot,
355
+ log_level: App.log_level,
99
356
  }
100
- bugs = SPEC.metadata["bug_tracker_uri"]
101
- puts versions.to_s.green
102
- puts "Report bugs at #{bugs}"
103
- puts "Fork us on Github at #{bugs}/fork"
357
+ github = "https://github.com/lizarb/lizarb"
358
+ puts info.to_s
359
+ puts "Report bugs at #{github}/issues"
360
+ puts "Fork us on Github at #{github}/fork"
104
361
  end
105
362
 
106
- # setup phase
107
-
108
- def lookup_and_load_core_ext
109
- files =
110
- if IS_GEM_DIR
111
- Dir["#{CUR_DIR}/lib/lizarb/ruby/*.rb"]
112
- else
113
- Dir["#{GEM_DIR}/lib/lizarb/ruby/*.rb"] + Dir["#{CUR_DIR}/lib/lizarb/ruby/*.rb"]
114
- end
363
+ # This method is called internally by `setup` and is not intended for direct use.
364
+ #
365
+ # - Checks for the presence of its signature files (`app.rb`, `lib/lizarb.rb`, and `lizarb.gemspec`) in the current directory.
366
+ # - Stores those boolean values in instance variables (`@is_app_dir`, `@is_liz_dir`, `@is_gem_dir`).
367
+ # - Determines key directories (`@app_dir`, `@liz_dir`, `@gem_dir`) and configuration specs (`@spec`).
368
+ #
369
+ # - Prints verbose output if `$VERBOSE` is enabled.
370
+ def setup_and_determine_environment
371
+ if $VERBOSE
372
+ puts "determining environment"
373
+ puts " Lizarb.root = #{root.inspect}"
374
+ puts " Lizarb.setup_type = #{setup_type.inspect}"
375
+ # puts " Lizarb._project = #{_project.inspect}" if setup_type == :project
376
+ # puts " Lizarb._script_dependent = #{_script_dependent.inspect}" if setup_type == :script_dependent
377
+ # puts " Lizarb._script_independent = #{_script_independent.inspect}" if setup_type == :script_independent
378
+ end
379
+
380
+ # NOTE: calling an unset instance variable returns nil
381
+ # NOTE: these file calls are pretty fast
382
+ @is_app_dir = File.file? "#{root}/app.rb" if setup_type != :sfa
383
+ @is_liz_dir = File.file? "#{root}/lib/lizarb.rb"
384
+ @is_gem_dir = File.file? "#{root}/lizarb.gemspec" if @is_liz_dir
385
+
386
+ $APP = "app_global" unless @is_app_dir
387
+
388
+ if $VERBOSE
389
+ puts " Lizarb.root does #{ @is_app_dir ? " " : "not" } have a configuration app.rb file"
390
+ puts " Lizarb.root does #{ @is_liz_dir ? " " : "not" } have a lib/lizarb.rb file"
391
+ puts " Lizarb.root does #{ @is_gem_dir ? " " : "not" } have a lizarb.gemspec file"
392
+ end
115
393
 
116
- files.each do |file_name|
117
- log "#{self} loading #{file_name}" if $VERBOSE
118
- load file_name
394
+ begin
395
+ @spec = Gem::Specification.find_by_name("lizarb")
396
+ @gem_dir = @spec.gem_dir
397
+ rescue Gem::MissingSpecError
398
+ @gem_dir = root
399
+ end
400
+ @app_dir = @is_app_dir ? root : @gem_dir
401
+ @liz_dir = @is_liz_dir ? root : @gem_dir
402
+
403
+ if $VERBOSE
404
+ puts " Lizarb.spec = #{spec}"
405
+ puts " Lizarb.app_dir = #{@app_dir.inspect}"
406
+ puts " Lizarb.liz_dir = #{@liz_dir.inspect}"
407
+ puts " Lizarb.gem_dir = #{@gem_dir.inspect}"
408
+ puts
119
409
  end
120
410
  end
121
411
 
122
- def lookup_and_set_gemfile
123
- gemfile = nil
412
+ # This method is called internally by `setup` and is not intended for direct use.
413
+ #
414
+ # - Requires the application definitions file `lizarb/app.rb`.
415
+ # - Searches for the application configuration file `app.rb` in both the application directory and the LizaRB directory.
416
+ # - Requires the configuration file if found.
417
+ # - Raises an error if the configuration file is not found.
418
+ # - Prints verbose output if `$VERBOSE` is enabled.
419
+ #
420
+ def setup_and_configure_app
421
+ # This is lib/app.rb
422
+ require "app"
124
423
 
125
424
  finder = \
126
- proc do |file_name|
127
- log "#{self}.#{__method__} #{file_name}" if $VERBOSE
128
- if File.file? file_name
129
- file_name
130
- else
131
- false
425
+ proc do |path, file|
426
+ lib_name = "#{path}/#{file}"
427
+ app_config_path = "#{lib_name}.rb"
428
+ puts " #{app_config_path} exists?" if $VERBOSE
429
+ if File.file? app_config_path
430
+ # This is app.rb
431
+ require lib_name
432
+ @config_folder = path
433
+ @config_path = app_config_path
434
+ return
132
435
  end
133
436
  end
134
437
 
135
- gemfile ||= finder.call "#{CUR_DIR}/#{$APP}.gemfile.rb"
136
- gemfile ||= finder.call "#{GEM_DIR}/#{$APP}.gemfile.rb" unless IS_GEM_DIR
137
- gemfile ||= finder.call "#{CUR_DIR}/Gemfile"
138
- gemfile ||= finder.call "#{GEM_DIR}/app_global.gemfile.rb"
438
+ finder.call @app_dir, $APP unless $APP == "app_global"
439
+ finder.call @liz_dir, $APP
139
440
 
140
- log "#{self} setting BUNDLE_GEMFILE to #{gemfile}" if $VERBOSE
141
- ENV["BUNDLE_GEMFILE"] = gemfile
441
+ raise Error, "Could not find #{$APP}.rb in #{@app_dir} or #{@liz_dir}"
142
442
  end
143
443
 
144
- # app phase
444
+ # This method is called internally by `setup` and is not intended for direct use.
445
+ #
446
+ # Overwrites Application settings with the following environment variables:
447
+ #
448
+ # - App.directory with APP_DIR example: `APP_DIR=app liza irb`
449
+ # - App.systems_directory with SYSTEMS_DIR example: `SYSTEMS_DIR=lib liza irb`
450
+ # - App.log_boot with LOG_BOOT or LOG example: `LOG=highest liza irb`
451
+ # - App.log_level with LOG_LEVEL or LOG example: `LOG=highest liza irb`
452
+ # - App.mode with MODE example: `MODE=production liza irb`
453
+ # - App.gemfile with GEMFILE example: `GEMFILE=Gemfile liza irb`
454
+ # - App.system with ENV["SYSTEMS"] example: `SYSTEMS=dev,happy,deep,lab liza irb`
455
+ #
456
+ def setup_and_overwrite_app_settings
457
+ if env_app_directory = ENV["APP_DIR"]
458
+ App.directory env_app_directory
459
+ end
145
460
 
146
- def lookup_and_require_app
147
- finder = \
148
- proc do |lib_name, file_name|
149
- log "#{self} checking if #{file_name} exists" if $VERBOSE
150
- if File.file? "#{file_name}"
151
- require lib_name
152
- true
153
- else
154
- false
155
- end
156
- end
461
+ if env_systems_directory = ENV["SYSTEMS_DIR"]
462
+ App.systems_directory env_systems_directory
463
+ end
157
464
 
158
- return if finder.call "#{CUR_DIR}/#{$APP}", "#{CUR_DIR}/#{$APP}.rb"
159
- return if finder.call "#{GEM_DIR}/#{$APP}", "#{GEM_DIR}/#{$APP}.rb"
465
+ if s = ENV["LOG_BOOT"] || ENV["LOG"]
466
+ App.log_boot (s.length == 1) ? s.to_i : s.to_sym
467
+ end
160
468
 
161
- raise Error, "Could not find #{$APP}.rb in #{CUR_DIR} or #{GEM_DIR}"
162
- end
469
+ if s = ENV["LOG_LEVEL"] || ENV["LOG"]
470
+ App.log_level (s.length == 1) ? s.to_i : s.to_sym
471
+ end
163
472
 
164
- # call phase
473
+ if env_mode = ENV["MODE"]
474
+ App.mode env_mode
475
+ end
165
476
 
166
- def lookup_and_set_mode
167
- raise ModeNotFound, "App #{$APP} has no modes" if App.modes.empty?
477
+ if env_gemfile = ENV["GEMFILE"]
478
+ App.gemfile env_gemfile
479
+ end
168
480
 
169
- mode = ENV["MODE"]
170
- mode ||= App.modes.first
171
- mode = mode.to_sym
481
+ if env_systems = ENV["SYSTEMS"]
482
+ App.systems.clear
483
+ App.system :dev
484
+ env_systems.split(",").each do |system|
485
+ App.system system.to_sym
486
+ end
487
+ end
488
+ end
172
489
 
173
- raise ModeNotFound, "MODE `#{mode}` is not included in #{App.modes}" unless App.modes.include? mode
490
+ # This method is called internally by `setup` and is not intended for direct use.
491
+ #
492
+ # Defines log levels for the application based on the boot log level setting:
493
+ #
494
+ # - Prints corresponding log messages if verbose output is enabled.
495
+ # - Sets `$log_boot_*` global variables as `true` if application boot level settings.
496
+ #
497
+ # In other words:
498
+ #
499
+ # $log_boot_highest = true if App.log_boot >= 7 # this number is for :highest
500
+ # $log_boot_higher = true if App.log_boot >= 6 # this number is for :higher
501
+ # $log_boot_high = true if App.log_boot >= 5 # this number is for :high
502
+ # $log_boot_normal = true if App.log_boot >= 4 # this number is for :normal
503
+ # $log_boot_low = true if App.log_boot >= 3 # this number is for :low
504
+ # $log_boot_lower = true if App.log_boot >= 2 # this number is for :lower
505
+ # $log_boot_lowest = true if App.log_boot >= 1 # this number is for :lowest
506
+ #
507
+ def setup_and_define_log_levels
508
+ level = App.log_boot
509
+ is_highest = level == 7
510
+ App::LOG_LEVELS.each do |k, v|
511
+ puts "$log_boot_#{k} = #{v <= level}" if is_highest
512
+ eval "$log_boot_#{k} = true" if v <= level
513
+ end
174
514
 
175
- log "#{self}.#{__method__} #{mode.inspect}" if $VERBOSE
176
- $MODE = mode
515
+ log "LizaRB v#{Lizarb.version} https://lizarb.org" if defined? $log_boot_lower
516
+ log " log_boot is set to #{App.log_boot}" if defined? $log_boot_higher
517
+ log " log_level is set to #{App.log_level}" if defined? $log_boot_higher
177
518
  end
178
519
 
179
- def lookup_and_require_dependencies
180
- require "bundler/setup"
181
- Bundler.require :default, *App.systems.keys
520
+ # This method is called internally by `load` and is not intended for direct use.
521
+ #
522
+ # Properly requires gem "bundler" for managing gem your dependencies:
523
+ #
524
+ # Up until now, require referred to the Ruby standard library.
525
+ # From this point on, require will refer to what is in the Gemfile.
526
+ #
527
+ # - If App.gemfile is a String, sets the BUNDLE_GEMFILE environment variable to the specified gemfile.
528
+ # - If App.gemfile is a Proc, requires Bundler inline and evaluates the gemfile block.
529
+ # - Raises an error if App.gemfile is neither a String nor a Proc.
530
+ #
531
+ def load_and_require_bundler
532
+ log " Lizarb.#{__method__}" if defined? $log_boot_high
533
+
534
+ gf = App.gemfile
535
+ case gf
536
+ when String
537
+ string = "#{ @config_folder }/#{ gf }"
538
+ log " requiring 'bundler/setup'" if defined? $log_boot_higher
539
+ log " ENV['BUNDLE_GEMFILE'] = #{ string.inspect }" if defined? $log_boot_highest
540
+ ENV["BUNDLE_GEMFILE"] = string
541
+ log " require 'bundler/setup'" if defined? $log_boot_highest
542
+ require 'bundler/setup'
543
+ when Proc
544
+ string = gf.source_location
545
+ log " requiring 'bundler/inline' with #{ string }" if defined? $log_boot_higher
546
+ require 'bundler/inline'
547
+ log " required 'bundler/inline'" if defined? $log_boot_highest
548
+ gemfile(false, &gf)
549
+ else
550
+ raise "App.gemfile is not a String or a Proc"
551
+ end
552
+ rescue SystemExit => e
553
+ raise unless e.cause&.class == Bundler::GemNotFound
554
+ puts
555
+ puts "LizaRB v#{version} dependencies not found."
556
+ puts "LizaRB is installing the dependencies found in the above gemfile."
557
+ puts
558
+ Kernel.system "bundle install --gemfile #{ENV["BUNDLE_GEMFILE"]}"
559
+ puts
560
+ puts "Please, run the latest command again."
561
+ puts
562
+ raise
563
+ end
564
+
565
+ # This method is called internally by `load` and is not intended for direct use.
566
+ #
567
+ # Requires essential Ruby libraries, not required by default:
568
+ #
569
+ # Requires the following default gems:
570
+ # - `pathname` for handling file paths.
571
+ # - `time` for Time parsing.
572
+ #
573
+ # Converts the following instance variables to Pathname objects:
574
+ # - `Lizarb`: `@root`, `@gem_dir`, `@config_path`
575
+ # - `App`: `@relative_path`, `@path`
576
+ #
577
+ def load_and_require_default_gems
578
+ log " Lizarb.#{__method__}" if defined? $log_boot_high
579
+
580
+ log " require 'pathname'" if defined? $log_boot_higher
581
+ require "pathname"
582
+
583
+ # this adds method Time.parse
584
+ log " require 'time'" if defined? $log_boot_higher
585
+ require "time"
586
+
587
+ log " fixing instance variables" if defined? $log_boot_highest
588
+ @root = Pathname(@root)
589
+ @gem_dir = Pathname(@gem_dir)
590
+ @config_path = Pathname(@config_path)
591
+
592
+ App.instance_eval do
593
+ @directory = root / directory
594
+ @systems_directory = root / systems_directory_name
595
+
596
+ @relative_path = Pathname(@relative_path)
597
+ @path = Pathname(@path)
598
+ end
599
+ end
600
+
601
+ # This method is called internally by `load` and is not intended for direct use.
602
+ #
603
+ # Enables or disables coding mode for debugging purposes:
604
+ #
605
+ # - Sets the global `$mode` variable to the application mode.
606
+ # - Sets the global `$coding` variable to `true` if the application mode is `:code`.
607
+ #
608
+ def load_and_define_mode
609
+ log " Lizarb.#{__method__}" if defined? $log_boot_high
610
+
611
+ $mode = App.mode
612
+ log " $mode = #{$mode.inspect}" if defined? $log_boot_higher
613
+ $coding = App.coding?
614
+ log " $coding enabled because $mode == :code | A bit slower for debugging purposes" if $coding && defined? $log_boot_higher
182
615
  end
183
616
 
184
- def lookup_and_load_settings
185
- files = ["#{$APP}.#{$MODE}.env", "#{$APP}.env"]
186
- require "dotenv"
187
- Dotenv.load(*files)
617
+ # This method is called internally by `load` and is not intended for direct use.
618
+ #
619
+ # Loads environment variables from the given `.env` files.
620
+ #
621
+ # If the file is not found, it raises an error if the file is mandatory.
622
+ # Values will be overwritten if the same key is found in a subsequent file.
623
+ #
624
+ # If the gem "dotenv" is found, it delegates to it instead.
625
+ #
626
+ def load_and_require_env_vars
627
+ log " Lizarb.#{__method__}" if defined? $log_boot_high
628
+
629
+ files = App.env_vars || []
630
+ log " ENV variables from #{files.count} sources" if defined? $log_boot_higher
631
+
632
+ return if files.empty?
633
+
634
+ if Gem::Specification.find_all_by_name("dotenv").any?
635
+ require "dotenv"
636
+ log " gem 'dotenv' found" if defined? $log_boot_higher
637
+
638
+ Dotenv.load(*files)
639
+ log " Dotenv.load(*#{files.inspect})" if defined? $log_boot_highest
640
+
641
+ return
642
+ end
643
+
644
+ files.each do |file|
645
+ File.readlines(file).each do |line|
646
+ line.strip!
647
+ next if line.empty? or line.start_with? "#"
648
+
649
+ key, value = line.split('=', 2).map(&:strip)
650
+ ENV[key] = value
651
+ end
652
+ log " ENV variables #{file}" if defined? $log_boot_higher
653
+ rescue Errno::ENOENT
654
+ log " ENV variables not found #{file}" if defined? $log_boot_higher
655
+ raise if App.env_vars_mandatory?
656
+ end
188
657
  end
189
658
 
190
- def require_liza_and_bundle_systems
659
+ # This method is called internally by `load` and is not intended for direct use.
660
+ #
661
+ # Requires award-winning gem Zeitwerk to manage autoloading of Ruby classes.
662
+ #
663
+ def load_and_zeitwerk
664
+ log " Lizarb.#{__method__}" if defined? $log_boot_high
191
665
  require "zeitwerk"
666
+ log " required Zeitwerk" if defined? $log_boot_higher
667
+
668
+ if App.systems_directory_name != "lib"
669
+ path = App.systems_directory.to_s
670
+ $LOAD_PATH << path
671
+ log " $LOAD_PATH << #{path}" if defined? $log_boot_higher
672
+ end
673
+ end
674
+
675
+ # This method is called internally by `load` and is not intended for direct use.
676
+ #
677
+ # Requires the Liza module, and its constants are required on demand by zeitwerk:
678
+ #
679
+ # - Requires the Liza module.
680
+ # - Initializes Lizarb.loaders[0] with the liza directory.
681
+ #
682
+ # lib/liza.rb
683
+ # lib/liza/unit.rb
684
+ # lib/liza/**/*.rb
685
+ #
686
+ def load_and_zeitwerk_loader_0_liza
687
+ log " Lizarb.#{__method__}" if defined? $log_boot_high
192
688
  require "liza"
689
+ log " required Liza" if defined? $log_boot_higher
193
690
 
194
- # App.loaders[0] first loads Liza, then each System class
195
- App.loaders << loader = Zeitwerk::Loader.new
691
+ # loaders[0] first loads Liza, then each System class
692
+
693
+ log " Zeitwerk loaders [0] first loads Liza, then each System class" if defined? $log_boot_higher
694
+
695
+ loaders << loader = Zeitwerk::Loader.new
196
696
  loader.tag = Liza.to_s
197
697
 
198
698
  # collapse Liza paths
@@ -203,22 +703,70 @@ module Lizarb
203
703
 
204
704
  # loader setup
205
705
 
706
+ log " Setting up" if defined? $log_boot_higher
206
707
  loader.enable_reloading
708
+ log " loader.enable_reloading" if defined? $log_boot_highest
207
709
  loader.setup
710
+ log " loader.setup" if defined? $log_boot_highest
711
+ loader.eager_load
712
+ log " loader.eager_load" if defined? $log_boot_highest
713
+ end
208
714
 
209
- # load each System class
715
+ # This method is called internally by `load` and is not intended for direct use.
716
+ #
717
+ # Requires all system-gems, then requires each system class:
718
+ #
719
+ # - Requires all system-gems. These gems must be added to the gemfile under group :systems.
720
+ # - Requires each system class.
721
+ # - Freezes the App.systems hash.
722
+ #
723
+ def load_and_require_system_classes
724
+ log " Lizarb.#{__method__} (#{App.systems.count})" if defined? $log_boot_high
725
+
726
+ # bundle each System gem
210
727
 
211
- App.systems.keys.each do |k|
212
- key = "#{k}_system"
728
+ log " Bundler.require :systems" if defined? $log_boot_higherß
729
+ Bundler.require :systems
213
730
 
214
- App.require_system key
215
- klass = Object.const_get key.camelize
731
+ # load each System class
216
732
 
217
- App.systems[k] = klass
733
+ log " App.systems is Hash containing all system classes" if defined? $log_boot_highest
734
+ App.systems.keys.each do |key|
735
+ klass = _require_system key
736
+ App.systems[key] = klass
218
737
  end
219
738
 
220
- # App.loaders[1] first loads each System, then the App
221
- App.loaders << loader = Zeitwerk::Loader.new
739
+ App.systems.freeze
740
+ end
741
+
742
+ def _require_system key
743
+ key = "#{key}_system"
744
+ log " require '#{key}'" if defined? $log_boot_highest
745
+ require key
746
+ Object.const_get key.camelize
747
+ rescue LoadError => e
748
+ def e.backtrace; []; end
749
+ raise SystemNotFound, "FILE #{key}.rb not found on $LOAD_PATH", []
750
+ end
751
+
752
+ # This method is called internally by `load` and is not intended for direct use.
753
+ #
754
+ # Initializes Lizarb.loaders[1] with the systems directories and the application directory:
755
+ #
756
+ # - For each system found in the application file, Zeitwerk namespaces their Liza::Unit sub-classes under the Liza::System sub-class.
757
+ # lib/dev_system.rb
758
+ # lib/dev_system/**/*.rb
759
+ #
760
+ # - For each box found in the application directory, Zeitwerk namespaces their Liza::Controller sub-classes under Object.
761
+ # app/dev_box.rb
762
+ # app/dev/**/*.rb
763
+ #
764
+ def load_and_zeitwerk_loader_1_app
765
+ log " Lizarb.#{__method__} (#{App.systems.count})" if defined? $log_boot_high
766
+
767
+ # loaders[1] first loads each System, then the App
768
+ log " Zeitwerk loaders [1] first loads each System, then the App" if defined? $log_boot_higher
769
+ loaders << loader = Zeitwerk::Loader.new
222
770
 
223
771
  # collapse each System paths
224
772
 
@@ -230,46 +778,44 @@ module Lizarb
230
778
 
231
779
  # cherrypick App paths
232
780
 
233
- app_dir = "#{APP_DIR}/#{$APP}"
234
- logv "Lizarb app loader #{app_dir}".on_cyan
235
- list = Dir["#{app_dir}/*"].to_set
236
- logv "Lizarb app loader lists #{list.count} entries to review".on_cyan
781
+ app_dir = App.path
782
+ if app_dir
783
+ log " Application Directory: #{app_dir}" if defined? $log_boot_highest
784
+ list = Dir["#{app_dir}/*"].to_set
785
+ end
237
786
 
238
- if list.empty?
239
- logv "no #{app_dir} found".red
787
+ if app_dir.nil? || list.empty?
788
+ log " Application Directory is empty" if defined? $log_boot_highest
240
789
  else
241
- logv "Lizarb app loader found #{app_dir}\t\tCollapsing #{app_dir}/*".on_cyan
790
+ log " Application Directory found #{list.count} items to collapse" if defined? $log_boot_highest
242
791
 
243
792
  to_collapse = []
244
793
 
245
794
  App.systems.each do |k, klass|
795
+ next if klass.subs.empty?
796
+
246
797
  box_dir = "#{app_dir}/#{k}"
247
798
  box_file = "#{box_dir}_box.rb"
799
+ next if !list.include? box_file
248
800
 
249
- if !list.include? box_file
250
- logv "Lizarb app loader missd #{box_file}".on_light_black
251
- else
252
- logv "Lizarb app loader found #{box_file}\t\tto_collapse!".on_cyan
253
- to_collapse << box_file
254
-
255
- if !list.include? box_dir
256
- logv "Lizarb app loader missd #{box_dir}".on_light_black
257
- else
258
- logv "Lizarb app loader found #{box_dir}\t\tto_collapse!".on_cyan
259
- to_collapse << box_dir
260
- end
801
+ log " Found box file #{box_file}" if defined? $log_boot_highest
802
+ to_collapse << box_file
803
+
804
+ if list.include? box_dir
805
+ log " Found controllers #{box_dir}" if defined? $log_boot_highest
806
+ to_collapse << box_dir
261
807
  end
262
808
  end
263
809
 
264
810
  # ORDER MATTERS: IGNORE, COLLAPSE, PUSH
265
811
  to_ignore = list - to_collapse
266
812
  to_ignore.each do |file|
267
- logv "Lizarb app loader missd #{file}\t\tSkipping this one".on_light_black
813
+ log " Ignoring #{file}" if defined? $log_boot_highest
268
814
  loader.ignore file
269
815
  end
270
816
 
271
817
  to_collapse.each do |path|
272
- logv "Lizarb app loader collapsing #{path}".on_cyan
818
+ log " Collapsing #{path}" if defined? $log_boot_highest
273
819
  if path.end_with? ".rb"
274
820
  loader.collapse path
275
821
  else
@@ -283,19 +829,40 @@ module Lizarb
283
829
 
284
830
  # loader setup
285
831
 
832
+ log " Setting up" if defined? $log_boot_higher
286
833
  loader.enable_reloading
834
+ log " loader.enable_reloading" if defined? $log_boot_highest
287
835
  loader.setup
836
+ log " loader.setup" if defined? $log_boot_highest
837
+ end
288
838
 
289
- # App connects to systems
839
+ # loaders
290
840
 
291
- App.systems.each do |k, klass|
292
- App.connect_system k, klass
293
- end
841
+ @loaders = []
294
842
 
295
- App.systems.freeze
843
+ def loaders
844
+ @loaders
845
+ end
846
+
847
+ def reload &block
848
+ @eager_loaded = false
849
+ loaders[1].reload
850
+ true
851
+ end
852
+
853
+ def eager_load!
854
+ return if eager_loaded?
855
+ log "Lizarb.#{__method__} begin" if defined? $log_boot_high
856
+ @eager_loaded = true
857
+ loaders[1].eager_load
858
+ log "Lizarb.#{__method__} end" if defined? $log_boot_high
859
+ end
860
+
861
+ def eager_loaded?
862
+ !!@eager_loaded
296
863
  end
297
864
 
298
- # thread management
865
+ # naive thread management
299
866
 
300
867
  def thread_object_id
301
868
  Thread.current.object_id