lizarb 1.0.5 → 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 (612) hide show
  1. checksums.yaml +4 -4
  2. data/.env +0 -0
  3. data/.tool-versions +2 -1
  4. data/Gemfile +23 -12
  5. data/Gemfile.lock +161 -117
  6. data/LICENSE.txt +1 -1
  7. data/README.md +29 -17
  8. data/Rakefile +2 -2
  9. data/app/dev/commands/stick_command.rb +3 -3
  10. data/app/dev/commands/stick_command_test.rb +1 -12
  11. data/app/dev_box.rb +23 -41
  12. data/app/eco_box.rb +5 -0
  13. data/app/net_box.rb +22 -20
  14. data/app/prime_box.rb +9 -0
  15. data/app/web/requests/api_request.rb +2 -0
  16. data/app/web/requests/assets_request.rb +1 -0
  17. data/app/web/requests/logo_request.rb +12 -0
  18. data/app/web/requests/logo_request.rb.index.html.erb +7 -0
  19. data/app/web/requests/logo_request_test.rb +10 -0
  20. data/app/web/requests/root_request.rb +1 -0
  21. data/app/web_box.rb +2 -4
  22. data/app.rb +22 -23
  23. data/app_global.gemfile.rb +8 -1
  24. data/app_global.gemfile.rb.lock +19 -16
  25. data/app_global.rb +3 -1
  26. data/examples/bench/app/dev/benches/loops_bench_test.rb +0 -4
  27. data/examples/bench/app/dev/benches/objects_bench_test.rb +0 -4
  28. data/examples/bench/app/dev/benches/sorted_bench.rb +7 -9
  29. data/examples/bench/app/dev/benches/sorted_bench_test.rb +0 -4
  30. data/examples/bench/app/dev/benches/variables_bench_test.rb +0 -4
  31. data/examples/command/app/dev/commands/calculator_command.rb +4 -4
  32. data/examples/command/app/dev/commands/calculator_command_test.rb +0 -4
  33. data/examples/command/app/dev/commands/circle_command.rb +4 -4
  34. data/examples/command/app/dev/commands/circle_command_test.rb +0 -4
  35. data/examples/command/app/dev/commands/narrative_method_command.rb +2 -11
  36. data/examples/command/app/dev/commands/narrative_method_command_test.rb +1 -5
  37. data/examples/command/app/dev/commands/quadratic_command.rb +4 -4
  38. data/examples/command/app/dev/commands/quadratic_command_test.rb +0 -4
  39. data/examples/log/app/dev/{logs/logger_log.rb → handler_logs/logger_handler_log.rb} +2 -1
  40. data/examples/log/app/dev/handler_logs/logger_handler_log_test.rb +15 -0
  41. data/examples/new/app/dev_box.rb +24 -46
  42. data/examples/new/app.rb +19 -23
  43. data/examples/shell/app/dev/shells/bash_adapter_shell_test.rb +0 -4
  44. data/examples/shell/app/dev/shells/business_logic_shell_test.rb +0 -4
  45. data/examples/shell/app/dev/shells/gem_adapter_shell_test.rb +0 -4
  46. data/exe/liza +4 -6
  47. data/exe/lizarb +4 -14
  48. data/gemfiles/gemfile.3.1.rb +1 -0
  49. data/gemfiles/gemfile.3.1.rb.lock +261 -0
  50. data/gemfiles/gemfile.3.2.rb +1 -0
  51. data/gemfiles/gemfile.3.2.rb.lock +261 -0
  52. data/gemfiles/gemfile.3.3.rb +1 -0
  53. data/gemfiles/gemfile.3.3.rb.lock +261 -0
  54. data/gemfiles/gemfile.3.4.rb +1 -0
  55. data/gemfiles/gemfile.3.4.rb.lock +243 -0
  56. data/gemfiles/gemfile.jruby-9.4.rb +3 -0
  57. data/gemfiles/gemfile.jruby-9.4.rb.lock +139 -0
  58. data/lib/app.rb +121 -32
  59. data/lib/art_system/art_system_test.rb +3 -0
  60. data/lib/art_system/commands/chatgpt_command.rb +91 -0
  61. data/lib/art_system/commands/chatgpt_command_test.rb +10 -0
  62. data/lib/art_system/commands/deepseek_command.rb +58 -0
  63. data/lib/art_system/commands/deepseek_command_test.rb +10 -0
  64. data/lib/art_system/commands/ollama_command.rb +69 -0
  65. data/lib/art_system/commands/ollama_command_test.rb +10 -0
  66. data/lib/art_system/gem_shells/ruby_openai_gem_shell.rb +32 -0
  67. data/lib/art_system/gem_shells/ruby_openai_gem_shell_test.rb +10 -0
  68. data/lib/art_system/shells/deepseek_shell.rb +15 -0
  69. data/lib/art_system/shells/deepseek_shell_test.rb +10 -0
  70. data/lib/art_system/shells/ollama_shell.rb +12 -0
  71. data/lib/art_system/shells/ollama_shell_test.rb +10 -0
  72. data/lib/art_system/shells/openai_shell.rb +13 -0
  73. data/lib/art_system/shells/openai_shell_test.rb +10 -0
  74. data/lib/crypto_system/crypto_system_test.rb +3 -0
  75. data/lib/crypto_system/gem_shells/digest_md5_gem_shell.rb +15 -0
  76. data/lib/crypto_system/gem_shells/digest_md5_gem_shell_test.rb +25 -0
  77. data/lib/deep_system/deep_system_test.rb +3 -0
  78. data/lib/desk_system/commands/glimmer_command.rb +1 -0
  79. data/lib/desk_system/desk_system_test.rb +3 -0
  80. data/lib/dev_system/commands/test_command.rb +105 -66
  81. data/lib/dev_system/commands/test_command_test.rb +3 -6
  82. data/lib/dev_system/dev_box.rb +20 -61
  83. data/lib/dev_system/dev_box_test.rb +5 -6
  84. data/lib/dev_system/dev_system_test.rb +3 -0
  85. data/lib/dev_system/generators/boxes_generator.rb +24 -0
  86. data/lib/dev_system/generators/boxes_generator_test.rb +12 -0
  87. data/lib/dev_system/generators/{env_generator.rb → envfile_generator.rb} +7 -14
  88. data/lib/dev_system/generators/envfile_generator_test.rb +14 -0
  89. data/lib/dev_system/generators/gemfile_generator.rb +14 -4
  90. data/lib/dev_system/generators/gemfile_generator_test.rb +4 -4
  91. data/lib/dev_system/generators/subsystem_generator.default.rb.erb +2 -0
  92. data/lib/dev_system/generators/subsystem_generator.rb +187 -0
  93. data/lib/dev_system/generators/subsystem_generator.rb.section_controller.rb.erb +8 -0
  94. data/lib/dev_system/generators/subsystem_generator.rb.section_controller_test.rb.erb +18 -0
  95. data/lib/dev_system/generators/subsystem_generator.rb.section_panel.rb.erb +19 -0
  96. data/lib/dev_system/generators/subsystem_generator.rb.section_panel_test.rb.erb +18 -0
  97. data/lib/dev_system/generators/subsystem_generator_test.rb +17 -0
  98. data/lib/dev_system/generators/system_generator.rb +92 -45
  99. data/lib/dev_system/generators/system_generator.rb.gemspec.rb.erb +36 -0
  100. data/lib/dev_system/generators/system_generator.rb.section_app_box_settings.rb.erb +4 -0
  101. data/lib/dev_system/generators/system_generator.rb.section_system_box_settings.rb.erb +4 -0
  102. data/lib/dev_system/generators/system_generator.rb.section_system_box_test.rb.erb +12 -0
  103. data/lib/dev_system/generators/system_generator.rb.section_system_default.rb.erb +3 -0
  104. data/lib/dev_system/generators/system_generator.rb.section_system_info.rb.erb +3 -0
  105. data/lib/dev_system/generators/system_generator.rb.system_test.rb.erb +5 -0
  106. data/lib/dev_system/generators/system_generator.rb.unit.rb.erb +7 -0
  107. data/lib/dev_system/generators/system_generator_test.rb +10 -3
  108. data/lib/dev_system/shells/unit_shell.rb +40 -0
  109. data/lib/dev_system/shells/unit_shell_test.rb +24 -0
  110. data/lib/dev_system/shells/zeitwerk_shell.rb +94 -0
  111. data/lib/dev_system/shells/zeitwerk_shell_test.rb +14 -0
  112. data/lib/dev_system/{sub → subsystems}/bench/bench.rb +2 -0
  113. data/lib/dev_system/subsystems/bench/bench_panel.rb +31 -0
  114. data/lib/dev_system/subsystems/bench/bench_panel_test.rb +55 -0
  115. data/lib/dev_system/{sub → subsystems}/bench/bench_test.rb +0 -2
  116. data/lib/dev_system/subsystems/bench/benches/not_found_bench.rb +73 -0
  117. data/lib/dev_system/subsystems/bench/benches/not_found_bench_test.rb +7 -0
  118. data/lib/dev_system/subsystems/bench/commands/bench_command.rb +21 -0
  119. data/lib/dev_system/subsystems/bench/commands/bench_command_test.rb +7 -0
  120. data/lib/dev_system/subsystems/bench/generators/bench_generator.rb +34 -0
  121. data/lib/dev_system/subsystems/bench/generators/bench_generator.rb.marks.rb.erb +18 -0
  122. data/lib/dev_system/subsystems/bench/generators/bench_generator.rb.setup.rb.erb +9 -0
  123. data/lib/dev_system/subsystems/bench/generators/bench_generator_test.rb +15 -0
  124. data/lib/dev_system/subsystems/command/command.rb +7 -0
  125. data/lib/dev_system/subsystems/command/command_panel.rb +30 -0
  126. data/lib/dev_system/subsystems/command/command_panel_test.rb +122 -0
  127. data/lib/dev_system/{sub → subsystems}/command/command_test.rb +2 -6
  128. data/lib/dev_system/subsystems/command/commands/base_command.rb +79 -0
  129. data/lib/dev_system/{sub → subsystems}/command/commands/base_command_test.rb +0 -4
  130. data/lib/dev_system/subsystems/command/commands/irb_command.rb +20 -0
  131. data/lib/dev_system/subsystems/command/commands/irb_command_test.rb +7 -0
  132. data/lib/dev_system/subsystems/command/commands/not_found_command.rb +83 -0
  133. data/lib/dev_system/{sub → subsystems}/command/commands/not_found_command_test.rb +0 -4
  134. data/lib/dev_system/subsystems/command/commands/pry_command.rb +10 -0
  135. data/lib/dev_system/subsystems/command/commands/pry_command_test.rb +7 -0
  136. data/lib/dev_system/subsystems/command/commands/simple_command.rb +433 -0
  137. data/lib/dev_system/subsystems/command/commands/simple_command_test.rb +153 -0
  138. data/lib/dev_system/subsystems/command/gem_shells/tty_prompt_gem_shell.rb +37 -0
  139. data/lib/dev_system/subsystems/command/gem_shells/tty_prompt_gem_shell_test.rb +10 -0
  140. data/lib/dev_system/subsystems/command/generators/command_generator.rb +73 -0
  141. data/lib/dev_system/subsystems/command/generators/command_generator.rb.section_base.rb.erb +10 -0
  142. data/lib/dev_system/subsystems/command/generators/command_generator.rb.section_simple_actions.rb.erb +21 -0
  143. data/lib/dev_system/subsystems/command/generators/command_generator.rb.section_simple_filters.rb.erb +25 -0
  144. data/lib/dev_system/subsystems/command/generators/command_generator.rb.view_simple.txt.erb +2 -0
  145. data/lib/dev_system/subsystems/command/generators/command_generator_test.rb +15 -0
  146. data/lib/dev_system/subsystems/command/parts/command_shortcut_part.rb +58 -0
  147. data/lib/dev_system/subsystems/command/parts/command_shortcut_part_test.rb +6 -0
  148. data/lib/dev_system/subsystems/command/shells/color_shell.rb +60 -0
  149. data/lib/dev_system/{sub/shell → subsystems/command}/shells/color_shell_test.rb +1 -6
  150. data/lib/dev_system/subsystems/command/shells/input_shell.rb +95 -0
  151. data/lib/dev_system/subsystems/command/shells/input_shell_test.rb +11 -0
  152. data/lib/dev_system/{sub/shell/shells/color_shell.rb → subsystems/command/shells/pallet_shell.rb} +11 -46
  153. data/lib/dev_system/subsystems/command/shells/pallet_shell_test.rb +15 -0
  154. data/lib/dev_system/subsystems/command/shells/typography_shell.rb +33 -0
  155. data/lib/dev_system/subsystems/command/shells/typography_shell_test.rb +10 -0
  156. data/lib/dev_system/subsystems/generator/commands/generate_command.rb +46 -0
  157. data/lib/dev_system/{sub → subsystems}/generator/commands/generate_command_test.rb +0 -4
  158. data/lib/dev_system/subsystems/generator/commands/new_command.rb +33 -0
  159. data/lib/dev_system/subsystems/generator/commands/new_command_test.rb +12 -0
  160. data/lib/dev_system/subsystems/generator/generator.rb +7 -0
  161. data/lib/dev_system/subsystems/generator/generator_panel.rb +51 -0
  162. data/lib/dev_system/subsystems/generator/generator_panel_test.rb +86 -0
  163. data/lib/dev_system/{sub → subsystems}/generator/generator_test.rb +0 -4
  164. data/lib/dev_system/subsystems/generator/generators/base_generator.rb +147 -0
  165. data/lib/dev_system/{sub → subsystems}/generator/generators/base_generator_test.rb +3 -4
  166. data/lib/dev_system/subsystems/generator/generators/controller_generator.rb +210 -0
  167. data/lib/dev_system/subsystems/generator/generators/controller_generator.rb.unit.rb.erb +18 -0
  168. data/lib/dev_system/subsystems/generator/generators/controller_generator_test.rb +48 -0
  169. data/lib/dev_system/subsystems/generator/generators/generator_generator.rb +58 -0
  170. data/lib/dev_system/subsystems/generator/generators/generator_generator.rb.section_controller_actions.rb.erb +23 -0
  171. data/lib/dev_system/subsystems/generator/generators/generator_generator.rb.section_simple_actions.rb.erb +19 -0
  172. data/lib/dev_system/subsystems/generator/generators/generator_generator.rb.view_controller_actions.rb.erb +11 -0
  173. data/lib/dev_system/subsystems/generator/generators/generator_generator.rb.view_controller_views.txt.erb +2 -0
  174. data/lib/dev_system/subsystems/generator/generators/generator_generator.rb.view_simple.txt.erb +2 -0
  175. data/lib/dev_system/subsystems/generator/generators/generator_generator_test.rb +16 -0
  176. data/lib/dev_system/subsystems/generator/generators/install_generator.rb +9 -0
  177. data/lib/dev_system/subsystems/generator/generators/install_generator_test.rb +8 -0
  178. data/lib/dev_system/subsystems/generator/generators/move_generator.rb +9 -0
  179. data/lib/dev_system/subsystems/generator/generators/move_generator_test.rb +8 -0
  180. data/lib/dev_system/subsystems/generator/generators/new_generator.rb +162 -0
  181. data/lib/dev_system/{sub → subsystems}/generator/generators/new_generator_test.rb +0 -4
  182. data/lib/dev_system/subsystems/generator/generators/not_found_generator.rb +87 -0
  183. data/lib/dev_system/subsystems/generator/generators/not_found_generator_test.rb +18 -0
  184. data/lib/dev_system/subsystems/generator/generators/overwrite_generator.rb +9 -0
  185. data/lib/dev_system/subsystems/generator/generators/overwrite_generator_test.rb +8 -0
  186. data/lib/dev_system/subsystems/generator/generators/remove_generator.rb +24 -0
  187. data/lib/dev_system/subsystems/generator/generators/remove_generator_test.rb +8 -0
  188. data/lib/dev_system/subsystems/generator/generators/simple_generator.rb +345 -0
  189. data/lib/dev_system/subsystems/generator/generators/simple_generator.rb.subject.rb.erb +9 -0
  190. data/lib/dev_system/subsystems/generator/generators/simple_generator.rb.unit.rb.erb +7 -0
  191. data/lib/dev_system/{sub → subsystems}/generator/generators/simple_generator_test.rb +7 -6
  192. data/lib/dev_system/subsystems/generator/generators/uninstall_generator.rb +9 -0
  193. data/lib/dev_system/subsystems/generator/generators/uninstall_generator_test.rb +8 -0
  194. data/lib/dev_system/subsystems/log/commands/log_command.rb +52 -0
  195. data/lib/dev_system/{sub → subsystems}/log/commands/log_command_test.rb +0 -4
  196. data/lib/dev_system/subsystems/log/generators/log_generator.rb +52 -0
  197. data/lib/dev_system/subsystems/log/generators/log_generator.rb.controller_section_1.rb.erb +7 -0
  198. data/lib/dev_system/subsystems/log/generators/log_generator.rb.controller_test_section_1.rb.erb +6 -0
  199. data/lib/dev_system/subsystems/log/generators/log_generator.rb.handler_section_1.rb.erb +8 -0
  200. data/lib/dev_system/subsystems/log/generators/log_generator.rb.handler_test_section_1.rb.erb +6 -0
  201. data/lib/dev_system/subsystems/log/generators/log_generator_test.rb +17 -0
  202. data/lib/dev_system/{sub/log/logs/output_log.rb → subsystems/log/handler_logs/color_output_handler_log.rb} +14 -31
  203. data/lib/dev_system/subsystems/log/handler_logs/color_output_handler_log_test.rb +41 -0
  204. data/lib/dev_system/subsystems/log/handler_logs/handler_log.rb +5 -0
  205. data/lib/dev_system/subsystems/log/handler_logs/handler_log_test.rb +12 -0
  206. data/lib/dev_system/subsystems/log/handler_logs/none_handler_log.rb +8 -0
  207. data/lib/dev_system/subsystems/log/handler_logs/none_handler_log_test.rb +10 -0
  208. data/lib/dev_system/subsystems/log/handler_logs/output_handler_log.rb +57 -0
  209. data/lib/dev_system/{sub/log/logs/output_log_test.rb → subsystems/log/handler_logs/output_handler_log_test.rb} +5 -9
  210. data/lib/dev_system/subsystems/log/log_panel.rb +108 -0
  211. data/lib/dev_system/subsystems/log/log_panel_test.rb +152 -0
  212. data/lib/dev_system/{sub → subsystems}/log/log_test.rb +5 -2
  213. data/lib/dev_system/subsystems/log/logs/array_log.rb +20 -0
  214. data/lib/dev_system/subsystems/log/logs/array_log_test.rb +49 -0
  215. data/lib/dev_system/subsystems/log/logs/hash_log.rb +17 -0
  216. data/lib/dev_system/subsystems/log/logs/hash_log_test.rb +40 -0
  217. data/lib/dev_system/{sub → subsystems}/log/logs/stick_log.rb +6 -5
  218. data/lib/dev_system/subsystems/log/logs/stick_log_log.rb +6 -0
  219. data/lib/dev_system/subsystems/log/logs/stick_log_log_test.rb +26 -0
  220. data/lib/dev_system/{sub → subsystems}/log/logs/stick_log_test.rb +12 -12
  221. data/lib/dev_system/subsystems/shell/commands/shell_command.rb +340 -0
  222. data/lib/dev_system/subsystems/shell/commands/shell_command_test.rb +12 -0
  223. data/lib/dev_system/subsystems/shell/converter_shells/coffee_converter_shell.rb +20 -0
  224. data/lib/dev_system/{sub → subsystems}/shell/converter_shells/coffee_converter_shell_test.rb +1 -8
  225. data/lib/dev_system/subsystems/shell/converter_shells/converter_shell.rb +27 -0
  226. data/lib/dev_system/{sub → subsystems}/shell/converter_shells/converter_shell_test.rb +9 -2
  227. data/lib/dev_system/subsystems/shell/converter_shells/haml_converter_shell.rb +29 -0
  228. data/lib/dev_system/{sub → subsystems}/shell/converter_shells/haml_converter_shell_test.rb +1 -8
  229. data/lib/dev_system/subsystems/shell/converter_shells/md_converter_shell.rb +20 -0
  230. data/lib/dev_system/{sub → subsystems}/shell/converter_shells/md_converter_shell_test.rb +1 -8
  231. data/lib/dev_system/{sub → subsystems}/shell/converter_shells/scss_converter_shell.rb +13 -12
  232. data/lib/dev_system/{sub → subsystems}/shell/converter_shells/scss_converter_shell_test.rb +1 -8
  233. data/lib/dev_system/subsystems/shell/formatter_shells/formatter_shell.rb +30 -0
  234. data/lib/dev_system/{sub → subsystems}/shell/formatter_shells/formatter_shell_test.rb +9 -2
  235. data/lib/dev_system/subsystems/shell/formatter_shells/html_formatter_shell.rb +19 -0
  236. data/lib/dev_system/{sub → subsystems}/shell/formatter_shells/html_formatter_shell_test.rb +1 -9
  237. data/lib/dev_system/subsystems/shell/gem_shells/coderay_gem_shell.rb +33 -0
  238. data/lib/dev_system/subsystems/shell/gem_shells/coderay_gem_shell_test.rb +21 -0
  239. data/lib/dev_system/subsystems/shell/gem_shells/gem_shell.rb +4 -0
  240. data/lib/dev_system/subsystems/shell/gem_shells/gem_shell_test.rb +10 -0
  241. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb +120 -0
  242. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.actions.rb.erb +11 -0
  243. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.converter.rb.erb +15 -0
  244. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.formatter.rb.erb +15 -0
  245. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.helpers.rb.erb +39 -0
  246. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.instance.rb.erb +71 -0
  247. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.renderer.rb.erb +15 -0
  248. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.test.rb.erb +2 -0
  249. data/lib/dev_system/subsystems/shell/generators/shell_generator.rb.view_simple.txt.erb +2 -0
  250. data/lib/dev_system/subsystems/shell/generators/shell_generator_test.rb +21 -0
  251. data/lib/dev_system/subsystems/shell/renderer_shells/renderer_shell.rb +4 -0
  252. data/lib/dev_system/subsystems/shell/renderer_shells/renderer_shell_test.rb +10 -0
  253. data/lib/dev_system/{sub → subsystems}/shell/shell.rb +5 -0
  254. data/lib/dev_system/subsystems/shell/shell_panel.rb +87 -0
  255. data/lib/dev_system/subsystems/shell/shell_panel_test.rb +14 -0
  256. data/lib/dev_system/{sub → subsystems}/shell/shell_test.rb +1 -5
  257. data/lib/dev_system/subsystems/shell/shells/app_shell.rb +684 -0
  258. data/lib/dev_system/subsystems/shell/shells/app_shell_test.rb +113 -0
  259. data/lib/dev_system/{sub → subsystems}/shell/shells/bin_shell_test.rb +0 -4
  260. data/lib/dev_system/subsystems/shell/shells/controller_shell.rb +87 -0
  261. data/lib/dev_system/subsystems/shell/shells/controller_shell_test.rb +33 -0
  262. data/lib/dev_system/{sub → subsystems}/shell/shells/dir_shell.rb +2 -2
  263. data/lib/dev_system/{sub → subsystems}/shell/shells/dir_shell_test.rb +0 -4
  264. data/lib/dev_system/subsystems/shell/shells/env_shell.rb +19 -0
  265. data/lib/dev_system/subsystems/shell/shells/env_shell_test.rb +27 -0
  266. data/lib/dev_system/subsystems/shell/shells/erb_shell.rb +168 -0
  267. data/lib/dev_system/subsystems/shell/shells/erb_shell_test.rb +10 -0
  268. data/lib/dev_system/subsystems/shell/shells/file_shell.rb +130 -0
  269. data/lib/dev_system/{sub → subsystems}/shell/shells/file_shell_test.rb +3 -6
  270. data/lib/dev_system/{sub/shell/shells/gem_shell.rb → subsystems/shell/shells/gemspec_shell.rb} +1 -1
  271. data/lib/dev_system/{sub/shell/shells/gem_shell_test.rb → subsystems/shell/shells/gemspec_shell_test.rb} +3 -3
  272. data/lib/dev_system/subsystems/shell/shells/kernel_shell.rb +26 -0
  273. data/lib/dev_system/{sub → subsystems}/shell/shells/line_diff_shell.rb +4 -3
  274. data/lib/dev_system/{sub → subsystems}/shell/shells/line_diff_shell_test.rb +0 -4
  275. data/lib/dev_system/subsystems/shell/shells/line_shell.rb +104 -0
  276. data/lib/dev_system/{sub → subsystems}/shell/shells/line_shell_test.rb +36 -4
  277. data/lib/dev_system/subsystems/shell/shells/main_shell.rb +29 -0
  278. data/lib/dev_system/subsystems/shell/shells/main_shell_test.rb +10 -0
  279. data/lib/dev_system/subsystems/shell/shells/method_shell_test.rb +30 -0
  280. data/lib/dev_system/subsystems/shell/shells/signal_shell.rb +53 -0
  281. data/lib/dev_system/subsystems/shell/shells/signal_shell_test.rb +28 -0
  282. data/lib/dev_system/{sub → subsystems}/shell/shells/text_file_shell_test.rb +0 -4
  283. data/lib/dev_system/{sub → subsystems}/shell/shells/text_shell.rb +2 -2
  284. data/lib/dev_system/{sub → subsystems}/shell/shells/text_shell_test.rb +0 -4
  285. data/lib/dev_system/subsystems/shell/soft_shells/soft_shell.rb +4 -0
  286. data/lib/dev_system/subsystems/shell/soft_shells/soft_shell_test.rb +10 -0
  287. data/lib/dev_system/subsystems/shell/view_shells/logo_view_shell.rb +12 -0
  288. data/lib/dev_system/subsystems/shell/view_shells/logo_view_shell.rb.svg.erb +59 -0
  289. data/lib/dev_system/subsystems/shell/view_shells/logo_view_shell_test.rb +15 -0
  290. data/lib/dev_system/subsystems/shell/view_shells/view_shell.rb +5 -0
  291. data/lib/dev_system/subsystems/shell/view_shells/view_shell_test.rb +10 -0
  292. data/lib/dev_system.rb +6 -6
  293. data/lib/eco_system/eco_box.rb +5 -0
  294. data/lib/eco_system/eco_box_test.rb +16 -0
  295. data/lib/eco_system/eco_system_test.rb +9 -0
  296. data/lib/eco_system.rb +11 -0
  297. data/lib/happy_system/happy_box_test.rb +0 -4
  298. data/lib/happy_system/happy_system_test.rb +3 -0
  299. data/lib/happy_system/{sub → subsystems}/axo/axo.rb +2 -1
  300. data/lib/happy_system/{sub → subsystems}/axo/axo_panel.rb +1 -1
  301. data/lib/happy_system/{sub → subsystems}/axo/axo_panel_test.rb +0 -4
  302. data/lib/happy_system/{sub → subsystems}/axo/axo_test.rb +0 -4
  303. data/lib/happy_system/{sub → subsystems}/axo/commands/axo_command.rb +4 -3
  304. data/lib/happy_system/subsystems/axo/generators/axo_generator.rb +17 -0
  305. data/lib/happy_system/{sub/axo/generators/axo_generator.rb → subsystems/axo/generators/axo_generator.rb.controller.rb.erb} +1 -31
  306. data/lib/happy_system/subsystems/axo/generators/axo_generator_test.rb +12 -0
  307. data/lib/happy_system.rb +1 -1
  308. data/lib/lab_system/clients/kroki_client.rb +1 -0
  309. data/lib/lab_system/clients/kroki_client_test.rb +0 -4
  310. data/lib/lab_system/clients/liza_kroki_client_test.rb +0 -4
  311. data/lib/lab_system/commands/docker_command.rb +12 -6
  312. data/lib/lab_system/commands/docker_command_test.rb +1 -5
  313. data/lib/lab_system/lab_system_test.rb +3 -0
  314. data/lib/lab_system/requests/kroki_request_test.rb +0 -4
  315. data/lib/lab_system/shells/docker_installer_shell.rb +69 -0
  316. data/lib/lab_system/shells/docker_installer_shell_test.rb +12 -0
  317. data/lib/lab_system/shells/kroki_docker_shell.rb +1 -1
  318. data/lib/lab_system/shells/kroki_docker_shell_test.rb +1 -5
  319. data/lib/lab_system/{shells/docker_shell.rb → soft_shells/docker_soft_shell.rb} +4 -4
  320. data/lib/lab_system/{shells/docker_shell_test.rb → soft_shells/docker_soft_shell_test.rb} +5 -6
  321. data/lib/liza/{ruby_tests → extra_tests}/app_test.rb +3 -6
  322. data/lib/liza/extra_tests/class_test.rb +26 -0
  323. data/lib/liza/extra_tests/liza_test.rb +7 -0
  324. data/lib/liza/extra_tests/lizarb_test.rb +20 -0
  325. data/lib/liza/extra_tests/module_test.rb +21 -0
  326. data/lib/liza/extra_tests/time_test.rb +19 -0
  327. data/lib/liza/helper_units/part.rb +25 -0
  328. data/lib/liza/helper_units/part_test.rb +26 -0
  329. data/lib/liza/helper_units/test.rb +940 -0
  330. data/lib/liza/{safety → helper_units}/test_test.rb +66 -35
  331. data/lib/liza/subsystemic_units/controller.rb +221 -0
  332. data/lib/liza/subsystemic_units/controller_test.rb +62 -0
  333. data/lib/liza/{base → subsystemic_units}/panel.rb +8 -16
  334. data/lib/liza/subsystemic_units/panel_test.rb +22 -0
  335. data/lib/liza/systemic_units/box.rb +82 -0
  336. data/lib/liza/systemic_units/box_test.rb +36 -0
  337. data/lib/liza/systemic_units/system.rb +52 -0
  338. data/lib/liza/systemic_units/system_test.rb +14 -0
  339. data/lib/liza/unit.rb +620 -32
  340. data/lib/liza/unit_test.rb +88 -97
  341. data/lib/liza.rb +14 -10
  342. data/lib/lizarb/version.rb +1 -1
  343. data/lib/lizarb.rb +671 -255
  344. data/lib/media_system/media_box.rb +3 -0
  345. data/lib/media_system/media_box_test.rb +10 -0
  346. data/lib/media_system/media_system_test.rb +3 -0
  347. data/lib/media_system.rb +8 -0
  348. data/lib/micro_system/micro_system_test.rb +3 -0
  349. data/lib/micro_system.rb +1 -1
  350. data/lib/net_system/net_box.rb +38 -9
  351. data/lib/net_system/net_box_test.rb +0 -4
  352. data/lib/net_system/net_system_test.rb +3 -0
  353. data/lib/net_system/{sub → subsystems}/client/client_panel_test.rb +0 -4
  354. data/lib/net_system/{sub → subsystems}/client/client_test.rb +0 -4
  355. data/lib/net_system/subsystems/client/commands/client_command.rb +12 -0
  356. data/lib/net_system/subsystems/client/commands/client_command_test.rb +10 -0
  357. data/lib/net_system/subsystems/client/generators/client_generator.rb +22 -0
  358. data/lib/net_system/subsystems/client/generators/client_generator.rb.controller.rb.erb +41 -0
  359. data/lib/net_system/subsystems/client/generators/client_generator.rb.test.rb.erb +16 -0
  360. data/lib/net_system/subsystems/client/generators/client_generator_test.rb +15 -0
  361. data/lib/net_system/{sub → subsystems}/database/clients/mongo_client.rb +16 -2
  362. data/lib/net_system/{sub → subsystems}/database/clients/mysql_client.rb +6 -1
  363. data/lib/net_system/{sub → subsystems}/database/clients/mysql_client_test.rb +1 -1
  364. data/lib/net_system/{sub → subsystems}/database/clients/pgsql_client.rb +2 -1
  365. data/lib/net_system/subsystems/database/clients/redis_client.rb +46 -0
  366. data/lib/net_system/{sub → subsystems}/database/clients/sqlite_client.rb +6 -2
  367. data/lib/net_system/subsystems/database/commands/database_command.rb +23 -0
  368. data/lib/net_system/subsystems/database/commands/database_command_test.rb +7 -0
  369. data/lib/net_system/subsystems/database/database_panel.rb +3 -0
  370. data/lib/net_system/{sub → subsystems}/database/database_panel_test.rb +2 -5
  371. data/lib/net_system/{sub → subsystems}/database/database_test.rb +0 -4
  372. data/lib/net_system/subsystems/filebase/commands/filebase_command.rb +12 -0
  373. data/lib/net_system/subsystems/filebase/commands/filebase_command_test.rb +10 -0
  374. data/lib/net_system/subsystems/filebase/filebase.rb +12 -0
  375. data/lib/net_system/subsystems/filebase/filebase_panel.rb +23 -0
  376. data/lib/net_system/subsystems/filebase/filebase_panel_test.rb +22 -0
  377. data/lib/net_system/subsystems/filebase/filebase_test.rb +22 -0
  378. data/lib/net_system/subsystems/record/commands/record_command.rb +12 -0
  379. data/lib/net_system/subsystems/record/commands/record_command_test.rb +10 -0
  380. data/lib/net_system/subsystems/record/generators/record_generator.rb +35 -0
  381. data/lib/net_system/subsystems/record/generators/record_generator.rb.controller.rb.erb +4 -0
  382. data/lib/net_system/subsystems/record/generators/record_generator.rb.test.rb.erb +2 -0
  383. data/lib/net_system/subsystems/record/generators/record_generator_test.rb +13 -0
  384. data/lib/net_system/subsystems/record/record.rb +19 -0
  385. data/lib/net_system/{sub → subsystems}/record/record_panel_test.rb +0 -4
  386. data/lib/net_system/subsystems/record/record_test.rb +11 -0
  387. data/lib/net_system/subsystems/socket/commands/socket_command.rb +12 -0
  388. data/lib/net_system/subsystems/socket/commands/socket_command_test.rb +10 -0
  389. data/lib/net_system/subsystems/socket/socket.rb +12 -0
  390. data/lib/net_system/subsystems/socket/socket_panel.rb +23 -0
  391. data/lib/net_system/subsystems/socket/socket_panel_test.rb +22 -0
  392. data/lib/net_system/subsystems/socket/socket_test.rb +22 -0
  393. data/lib/net_system.rb +6 -4
  394. data/lib/prime_system/prime_box.rb +9 -0
  395. data/lib/prime_system/prime_box_test.rb +16 -0
  396. data/lib/prime_system/prime_system_test.rb +9 -0
  397. data/lib/prime_system/subsystems/epic/commands/epic_command.rb +12 -0
  398. data/lib/prime_system/subsystems/epic/commands/epic_command_test.rb +10 -0
  399. data/lib/prime_system/subsystems/epic/epic.rb +12 -0
  400. data/lib/prime_system/subsystems/epic/epic_panel.rb +23 -0
  401. data/lib/prime_system/subsystems/epic/epic_panel_test.rb +22 -0
  402. data/lib/prime_system/subsystems/epic/epic_test.rb +22 -0
  403. data/lib/prime_system.rb +13 -0
  404. data/lib/web_system/{sub → subsystems}/rack/commands/rack_command.rb +5 -2
  405. data/lib/web_system/subsystems/rack/commands/rack_command_test.rb +7 -0
  406. data/lib/web_system/{sub → subsystems}/rack/middle_racks/first_middle_rack_test.rb +0 -4
  407. data/lib/web_system/{sub → subsystems}/rack/middle_racks/last_middle_rack_test.rb +0 -4
  408. data/lib/web_system/{sub → subsystems}/rack/middle_racks/middle_rack.rb +1 -1
  409. data/lib/web_system/{sub → subsystems}/rack/middle_racks/middle_rack_test.rb +0 -4
  410. data/lib/web_system/{sub → subsystems}/rack/middle_racks/zeitwerk_middle_rack.rb +3 -4
  411. data/lib/web_system/{sub → subsystems}/rack/middle_racks/zeitwerk_middle_rack_test.rb +0 -4
  412. data/lib/web_system/subsystems/rack/rack.rb +3 -0
  413. data/lib/web_system/{sub → subsystems}/rack/rack_panel.rb +10 -6
  414. data/lib/web_system/subsystems/rack/rack_panel_test.rb +25 -0
  415. data/lib/web_system/{sub → subsystems}/rack/rack_test.rb +0 -4
  416. data/lib/web_system/{sub → subsystems}/rack/server_racks/agoo_server_rack.rb +2 -1
  417. data/lib/web_system/{sub → subsystems}/rack/server_racks/agoo_server_rack_test.rb +0 -4
  418. data/lib/web_system/{sub → subsystems}/rack/server_racks/falcon_server_rack.rb +2 -1
  419. data/lib/web_system/{sub → subsystems}/rack/server_racks/falcon_server_rack_test.rb +0 -4
  420. data/lib/web_system/{sub → subsystems}/rack/server_racks/iodine_server_rack.rb +2 -1
  421. data/lib/web_system/{sub → subsystems}/rack/server_racks/iodine_server_rack_test.rb +0 -4
  422. data/lib/web_system/{sub → subsystems}/rack/server_racks/puma_server_rack.rb +4 -2
  423. data/lib/web_system/{sub → subsystems}/rack/server_racks/puma_server_rack_test.rb +0 -4
  424. data/lib/web_system/{sub → subsystems}/rack/server_racks/server_rack.rb +0 -9
  425. data/lib/web_system/{sub → subsystems}/rack/server_racks/server_rack_test.rb +0 -4
  426. data/lib/web_system/{sub → subsystems}/rack/server_racks/thin_server_rack.rb +6 -5
  427. data/lib/web_system/{sub → subsystems}/rack/server_racks/thin_server_rack_test.rb +0 -4
  428. data/lib/web_system/{sub → subsystems}/request/commands/request_command.rb +32 -43
  429. data/lib/web_system/subsystems/request/commands/request_command_test.rb +7 -0
  430. data/lib/web_system/subsystems/request/generators/request_generator.rb +39 -0
  431. data/lib/web_system/subsystems/request/generators/request_generator.rb.base.rb.erb +14 -0
  432. data/lib/web_system/subsystems/request/generators/request_generator.rb.simple_actions.rb.erb +16 -0
  433. data/lib/web_system/subsystems/request/generators/request_generator.rb.simple_view.html.erb +9 -0
  434. data/lib/web_system/subsystems/request/generators/request_generator.rb.test.rb.erb +2 -0
  435. data/lib/web_system/subsystems/request/generators/request_generator_test.rb +15 -0
  436. data/lib/web_system/{sub → subsystems}/request/request_panel.rb +22 -16
  437. data/lib/web_system/subsystems/request/request_panel_test.rb +82 -0
  438. data/lib/web_system/{sub → subsystems}/request/request_test.rb +0 -4
  439. data/lib/web_system/{sub → subsystems}/request/requests/client_error_request.rb +1 -0
  440. data/lib/web_system/{sub → subsystems}/request/requests/not_found_request.rb +1 -0
  441. data/lib/web_system/{sub → subsystems}/request/requests/server_error_request.rb +1 -0
  442. data/lib/web_system/{sub → subsystems}/request/requests/simple_request.rb +8 -1
  443. data/lib/web_system/{sub → subsystems}/request/requests/simple_request_test.rb +0 -4
  444. data/lib/web_system/{sub → subsystems}/request/router_requests/router_request_test.rb +0 -4
  445. data/lib/web_system/{sub → subsystems}/request/router_requests/simple_router_request.rb +7 -4
  446. data/lib/web_system/{sub → subsystems}/request/router_requests/simple_router_request_test.rb +0 -4
  447. data/lib/web_system/web_box.rb +23 -3
  448. data/lib/web_system/web_box_test.rb +0 -4
  449. data/lib/web_system/web_system_test.rb +3 -0
  450. data/lib/web_system.rb +2 -2
  451. data/lib/work_system/work_system_test.rb +3 -0
  452. data/lizarb.gemspec +2 -16
  453. metadata +414 -346
  454. data/examples/log/app/dev/logs/logger_log_test.rb +0 -16
  455. data/lib/dev_system/generators/env_generator_test.rb +0 -11
  456. data/lib/dev_system/sub/bench/bench_panel.rb +0 -3
  457. data/lib/dev_system/sub/bench/bench_panel_test.rb +0 -16
  458. data/lib/dev_system/sub/bench/benches/not_found_bench.rb +0 -33
  459. data/lib/dev_system/sub/bench/benches/not_found_bench_test.rb +0 -11
  460. data/lib/dev_system/sub/bench/commands/bench_command.rb +0 -27
  461. data/lib/dev_system/sub/bench/commands/bench_command_test.rb +0 -11
  462. data/lib/dev_system/sub/bench/generators/bench_generator.rb +0 -70
  463. data/lib/dev_system/sub/bench/generators/bench_generator_test.rb +0 -10
  464. data/lib/dev_system/sub/command/command.rb +0 -28
  465. data/lib/dev_system/sub/command/command_panel.rb +0 -151
  466. data/lib/dev_system/sub/command/command_panel_test.rb +0 -78
  467. data/lib/dev_system/sub/command/commands/base_command.rb +0 -48
  468. data/lib/dev_system/sub/command/commands/irb_command.rb +0 -19
  469. data/lib/dev_system/sub/command/commands/irb_command_test.rb +0 -11
  470. data/lib/dev_system/sub/command/commands/not_found_command.rb +0 -156
  471. data/lib/dev_system/sub/command/commands/pry_command.rb +0 -10
  472. data/lib/dev_system/sub/command/commands/pry_command_test.rb +0 -11
  473. data/lib/dev_system/sub/command/commands/simple_command.rb +0 -143
  474. data/lib/dev_system/sub/command/commands/simple_command_test.rb +0 -11
  475. data/lib/dev_system/sub/command/generators/command_generator.rb +0 -90
  476. data/lib/dev_system/sub/command/generators/command_generator_test.rb +0 -11
  477. data/lib/dev_system/sub/command/input_commands/highline_input_command.rb +0 -17
  478. data/lib/dev_system/sub/command/input_commands/highline_input_command_test.rb +0 -19
  479. data/lib/dev_system/sub/command/input_commands/input_command.rb +0 -20
  480. data/lib/dev_system/sub/command/input_commands/input_command_test.rb +0 -19
  481. data/lib/dev_system/sub/command/input_commands/tty_input_command.rb +0 -55
  482. data/lib/dev_system/sub/command/input_commands/tty_input_command_test.rb +0 -19
  483. data/lib/dev_system/sub/generator/commands/generate_command.rb +0 -9
  484. data/lib/dev_system/sub/generator/commands/new_command.rb +0 -10
  485. data/lib/dev_system/sub/generator/commands/new_command_test.rb +0 -7
  486. data/lib/dev_system/sub/generator/generator.rb +0 -19
  487. data/lib/dev_system/sub/generator/generator_panel.rb +0 -98
  488. data/lib/dev_system/sub/generator/generator_panel_test.rb +0 -79
  489. data/lib/dev_system/sub/generator/generators/base_generator.rb +0 -64
  490. data/lib/dev_system/sub/generator/generators/generator_generator.rb +0 -71
  491. data/lib/dev_system/sub/generator/generators/generator_generator_test.rb +0 -11
  492. data/lib/dev_system/sub/generator/generators/new_generator.rb +0 -74
  493. data/lib/dev_system/sub/generator/generators/not_found_generator.rb +0 -155
  494. data/lib/dev_system/sub/generator/generators/not_found_generator_test.rb +0 -11
  495. data/lib/dev_system/sub/generator/generators/simple_generator.rb +0 -257
  496. data/lib/dev_system/sub/log/commands/log_command.rb +0 -11
  497. data/lib/dev_system/sub/log/generators/log_generator.rb +0 -54
  498. data/lib/dev_system/sub/log/generators/log_generator_test.rb +0 -10
  499. data/lib/dev_system/sub/log/log_panel.rb +0 -47
  500. data/lib/dev_system/sub/log/log_panel_test.rb +0 -50
  501. data/lib/dev_system/sub/shell/commands/convert_command.rb +0 -27
  502. data/lib/dev_system/sub/shell/commands/convert_command_test.rb +0 -10
  503. data/lib/dev_system/sub/shell/commands/format_command.rb +0 -25
  504. data/lib/dev_system/sub/shell/commands/format_command_test.rb +0 -10
  505. data/lib/dev_system/sub/shell/commands/loc_command.rb +0 -211
  506. data/lib/dev_system/sub/shell/commands/loc_command_test.rb +0 -10
  507. data/lib/dev_system/sub/shell/commands/shell_command.rb +0 -45
  508. data/lib/dev_system/sub/shell/commands/shell_command_test.rb +0 -11
  509. data/lib/dev_system/sub/shell/converter_shells/coffee_converter_shell.rb +0 -21
  510. data/lib/dev_system/sub/shell/converter_shells/converter_shell.rb +0 -13
  511. data/lib/dev_system/sub/shell/converter_shells/haml_converter_shell.rb +0 -30
  512. data/lib/dev_system/sub/shell/converter_shells/md_converter_shell.rb +0 -21
  513. data/lib/dev_system/sub/shell/formatter_shells/formatter_shell.rb +0 -13
  514. data/lib/dev_system/sub/shell/formatter_shells/html_formatter_shell.rb +0 -20
  515. data/lib/dev_system/sub/shell/generators/shell_generator.rb +0 -68
  516. data/lib/dev_system/sub/shell/generators/shell_generator_test.rb +0 -10
  517. data/lib/dev_system/sub/shell/shell_panel.rb +0 -98
  518. data/lib/dev_system/sub/shell/shell_panel_test.rb +0 -18
  519. data/lib/dev_system/sub/shell/shells/app_shell.rb +0 -185
  520. data/lib/dev_system/sub/shell/shells/app_shell_test.rb +0 -26
  521. data/lib/dev_system/sub/shell/shells/controller_shell.rb +0 -20
  522. data/lib/dev_system/sub/shell/shells/controller_shell_test.rb +0 -16
  523. data/lib/dev_system/sub/shell/shells/file_shell.rb +0 -59
  524. data/lib/dev_system/sub/shell/shells/kernel_shell.rb +0 -22
  525. data/lib/dev_system/sub/shell/shells/line_shell.rb +0 -56
  526. data/lib/dev_system/sub/shell/shells/method_shell_test.rb +0 -34
  527. data/lib/happy_system/sub/axo/generators/axo_generator_test.rb +0 -11
  528. data/lib/lerb.rb +0 -152
  529. data/lib/liza/base/controller.rb +0 -26
  530. data/lib/liza/base/controller_test.rb +0 -36
  531. data/lib/liza/base/panel_test.rb +0 -179
  532. data/lib/liza/base_parts/controller_subsystem_part.rb +0 -93
  533. data/lib/liza/base_parts/panel_rescuer_part.rb +0 -129
  534. data/lib/liza/meta/box.rb +0 -24
  535. data/lib/liza/meta/box_test.rb +0 -20
  536. data/lib/liza/meta/part.rb +0 -17
  537. data/lib/liza/meta/part_test.rb +0 -11
  538. data/lib/liza/meta/system.rb +0 -61
  539. data/lib/liza/meta/system_test.rb +0 -15
  540. data/lib/liza/ruby_tests/class_test.rb +0 -20
  541. data/lib/liza/ruby_tests/module_test.rb +0 -21
  542. data/lib/liza/safety/test.rb +0 -19
  543. data/lib/liza/safety_parts/test_assertions_advanced_part.rb +0 -125
  544. data/lib/liza/safety_parts/test_assertions_part.rb +0 -109
  545. data/lib/liza/safety_parts/test_dsl_part.rb +0 -68
  546. data/lib/liza/safety_parts/test_log_part.rb +0 -142
  547. data/lib/liza/safety_parts/test_subject_part.rb +0 -32
  548. data/lib/liza/safety_parts/test_tree_part.rb +0 -87
  549. data/lib/liza/unit_parts/unit_classes_part.rb +0 -37
  550. data/lib/liza/unit_parts/unit_classes_part_test.rb +0 -3
  551. data/lib/liza/unit_parts/unit_logging_part.rb +0 -139
  552. data/lib/liza/unit_parts/unit_logging_part_test.rb +0 -3
  553. data/lib/liza/unit_parts/unit_methods_part.rb +0 -35
  554. data/lib/liza/unit_parts/unit_methods_part_test.rb +0 -3
  555. data/lib/liza/unit_parts/unit_procedure_part.rb +0 -17
  556. data/lib/liza/unit_parts/unit_procedure_part_test.rb +0 -65
  557. data/lib/liza/unit_parts/unit_renderer_part.rb +0 -171
  558. data/lib/liza/unit_parts/unit_renderer_part_test.rb +0 -15
  559. data/lib/liza/unit_parts/unit_settings_part.rb +0 -84
  560. data/lib/liza/unit_parts/unit_settings_part_test.rb +0 -3
  561. data/lib/lizarb/ruby/class.rb +0 -25
  562. data/lib/lizarb/ruby/module.rb +0 -17
  563. data/lib/lizarb/ruby/proc.rb +0 -12
  564. data/lib/lizarb/ruby/string.rb +0 -35
  565. data/lib/lizarb/ruby/time.rb +0 -9
  566. data/lib/net_system/sub/client/generators/client_generator.rb +0 -88
  567. data/lib/net_system/sub/client/generators/client_generator_test.rb +0 -10
  568. data/lib/net_system/sub/database/clients/redis_client.rb +0 -29
  569. data/lib/net_system/sub/database/commands/database_command.rb +0 -32
  570. data/lib/net_system/sub/database/commands/database_command_test.rb +0 -11
  571. data/lib/net_system/sub/database/database_panel.rb +0 -10
  572. data/lib/net_system/sub/record/generators/record_generator.rb +0 -33
  573. data/lib/net_system/sub/record/generators/record_generator_test.rb +0 -11
  574. data/lib/net_system/sub/record/record.rb +0 -29
  575. data/lib/net_system/sub/record/record_test.rb +0 -11
  576. data/lib/web_system/sub/rack/commands/rack_command_test.rb +0 -11
  577. data/lib/web_system/sub/rack/rack.rb +0 -6
  578. data/lib/web_system/sub/rack/rack_panel_test.rb +0 -11
  579. data/lib/web_system/sub/request/commands/request_command_test.rb +0 -11
  580. data/lib/web_system/sub/request/generators/request_generator.rb +0 -96
  581. data/lib/web_system/sub/request/generators/request_generator_test.rb +0 -11
  582. data/lib/web_system/sub/request/request_panel_test.rb +0 -54
  583. /data/lib/dev_system/{sub → subsystems}/log/log.rb +0 -0
  584. /data/lib/dev_system/{sub → subsystems}/shell/shells/bin_shell.rb +0 -0
  585. /data/lib/dev_system/{sub → subsystems}/shell/shells/kernel_shell_test.rb +0 -0
  586. /data/lib/dev_system/{sub → subsystems}/shell/shells/method_shell.rb +0 -0
  587. /data/lib/dev_system/{sub → subsystems}/shell/shells/text_file_shell.rb +0 -0
  588. /data/lib/happy_system/{sub → subsystems}/axo/commands/axo_command_test.rb +0 -0
  589. /data/lib/liza/{ruby_tests → extra_tests}/object_test.rb +0 -0
  590. /data/lib/liza/{ruby_tests → extra_tests}/string_test.rb +0 -0
  591. /data/lib/net_system/{sub → subsystems}/client/client.rb +0 -0
  592. /data/lib/net_system/{sub → subsystems}/client/client_panel.rb +0 -0
  593. /data/lib/net_system/{sub → subsystems}/database/clients/mongo_client_test.rb +0 -0
  594. /data/lib/net_system/{sub → subsystems}/database/clients/pgsql_client_test.rb +0 -0
  595. /data/lib/net_system/{sub → subsystems}/database/clients/redis_client_test.rb +0 -0
  596. /data/lib/net_system/{sub → subsystems}/database/clients/sqlite_client_test.rb +0 -0
  597. /data/lib/net_system/{sub → subsystems}/database/database.rb +0 -0
  598. /data/lib/net_system/{sub → subsystems}/database/databases/mongo_db.rb +0 -0
  599. /data/lib/net_system/{sub → subsystems}/database/databases/mongo_db_test.rb +0 -0
  600. /data/lib/net_system/{sub → subsystems}/database/databases/mysql_db.rb +0 -0
  601. /data/lib/net_system/{sub → subsystems}/database/databases/mysql_db_test.rb +0 -0
  602. /data/lib/net_system/{sub → subsystems}/database/databases/pgsql_db.rb +0 -0
  603. /data/lib/net_system/{sub → subsystems}/database/databases/pgsql_db_test.rb +0 -0
  604. /data/lib/net_system/{sub → subsystems}/database/databases/redis_db.rb +0 -0
  605. /data/lib/net_system/{sub → subsystems}/database/databases/redis_db_test.rb +0 -0
  606. /data/lib/net_system/{sub → subsystems}/database/databases/sqlite_db.rb +0 -0
  607. /data/lib/net_system/{sub → subsystems}/database/databases/sqlite_db_test.rb +0 -0
  608. /data/lib/net_system/{sub → subsystems}/record/record_panel.rb +0 -0
  609. /data/lib/web_system/{sub → subsystems}/rack/middle_racks/first_middle_rack.rb +0 -0
  610. /data/lib/web_system/{sub → subsystems}/rack/middle_racks/last_middle_rack.rb +0 -0
  611. /data/lib/web_system/{sub → subsystems}/request/request.rb +0 -0
  612. /data/lib/web_system/{sub → subsystems}/request/router_requests/router_request.rb +0 -0
data/lib/lizarb.rb CHANGED
@@ -3,48 +3,128 @@
3
3
  # This flag allows database connection tests
4
4
  # ENV["DBTEST"] ||= "1"
5
5
 
6
+ $VERBOSE ||= ENV["VERBOSE"]
7
+ $main = self
6
8
  $boot_time = Time.now
7
9
 
8
- require "colorize"
9
- require "json"
10
- require "pathname"
11
- require "fileutils"
12
- require "lerb"
10
+ puts "$VERBOSE = true" if $VERBOSE
13
11
 
14
- require_relative "lizarb/version"
12
+ require_relative "lizarb/version" unless defined? Lizarb::VERSION
15
13
 
16
- $APP ||= "app"
14
+ class Class
17
15
 
18
- module Lizarb
19
- class Error < StandardError; end
20
- class ModeNotFound < Error; end
21
- class SystemNotFound < Error; end
16
+ def descendants
17
+ ObjectSpace.each_object(Class).select { |klass| klass < self }
18
+ end
22
19
 
23
- #
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
24
67
 
25
- CUR_DIR = Dir.pwd
26
- begin
27
- SPEC = Gem::Specification.find_by_name("lizarb")
28
- GEM_DIR = SPEC.gem_dir
29
- rescue Gem::MissingSpecError
30
- SPEC = nil
31
- GEM_DIR = CUR_DIR
68
+ def absolute_source
69
+ sl = source_location
70
+ "#{sl[0]}:#{sl[1]}"
71
+ end
72
+ end
73
+
74
+ class String
75
+ alias lpartition partition
76
+
77
+ def camelcase
78
+ split("_").map { |s| "#{s[0].to_s.upcase}#{s[1..-1]}" }.join("")
32
79
  end
33
80
 
34
- IS_APP_DIR = File.file? "#{CUR_DIR}/app.rb"
35
- IS_LIZ_DIR = File.file? "#{CUR_DIR}/lib/lizarb.rb"
36
- IS_GEM_DIR = File.file? "#{CUR_DIR}/lizarb.gemspec"
81
+ alias camelize camelcase
37
82
 
38
- APP_DIR = IS_APP_DIR ? CUR_DIR : GEM_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
39
94
 
40
- $APP = "app_global" if not IS_APP_DIR
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
41
121
 
42
122
  #
43
123
 
44
124
  module_function
45
125
 
46
126
  def log s
47
- print "#{$boot_time.diff}s " if defined? $log_boot_low
127
+ print "#{$boot_time.diff}s " if defined? $log_boot_high
48
128
  puts s
49
129
  end
50
130
 
@@ -62,45 +142,205 @@ module Lizarb
62
142
  RUBY_ENGINE != "jruby"
63
143
  end
64
144
 
65
- # called from exe/lizarb
66
- def setup
67
- lookup_and_load_core_ext
68
- lookup_and_set_gemfile
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
69
157
  end
70
158
 
71
- # called from exe/lizarb
72
- def app &block
73
- require "app"
74
- if block_given?
75
- App.class_exec(&block)
76
- else
77
- lookup_and_require_app
159
+ # ["/path/to/lizarb.rb", 1]
160
+ def source_location
161
+ [__FILE__, 1]
162
+ end
163
+
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
78
199
  end
200
+ load
79
201
  end
80
202
 
81
- # called from exe/lizarb
82
- def call
83
- require "bundler/setup"
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
84
243
 
85
- level = App.log_boot
86
- is_lowest = level == -3
87
- App::LOG_LEVELS.each do |k, v|
88
- puts "$log_boot_#{k} = #{v >= level}" if level == -3
89
- eval "$log_boot_#{k} = true" if v >= level
244
+ DevSystem::DevBox.configure :log do
245
+ handler log_handler
90
246
  end
91
- log "LizaRB v#{Lizarb.version} https://lizarb.org" if defined? $log_boot_higher
92
- log "#{self}.#{__method__}" if defined? $log_boot_low
247
+ end
248
+
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
93
299
 
94
- lookup_and_set_mode
95
- lookup_and_load_settings
96
- require_liza_and_systems
97
- connect_systems
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
98
316
  end
99
317
 
100
- # called from exe/lizarb
101
- def exit
102
- exit_messages if defined? $log_boot_normal
103
- super 0
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
104
344
  end
105
345
 
106
346
  def exit_messages
@@ -112,7 +352,7 @@ module Lizarb
112
352
  app: $APP,
113
353
  mode: App.mode,
114
354
  log_boot: App.log_boot,
115
- log_level: App.get(:log_level),
355
+ log_level: App.log_level,
116
356
  }
117
357
  github = "https://github.com/lizarb/lizarb"
118
358
  puts info.to_s
@@ -120,93 +360,337 @@ module Lizarb
120
360
  puts "Fork us on Github at #{github}/fork"
121
361
  end
122
362
 
123
- # setup phase
124
-
125
- def lookup_and_load_core_ext
126
- files =
127
- if IS_GEM_DIR
128
- Dir["#{CUR_DIR}/lib/lizarb/ruby/*.rb"]
129
- else
130
- Dir["#{GEM_DIR}/lib/lizarb/ruby/*.rb"] + Dir["#{CUR_DIR}/lib/lizarb/ruby/*.rb"]
131
- 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
132
393
 
133
- files.each do |file_name|
134
- log "#{self} loading #{file_name}" if $VERBOSE
135
- 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
136
409
  end
137
410
  end
138
411
 
139
- def lookup_and_set_gemfile
140
- 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"
141
423
 
142
424
  finder = \
143
- proc do |file_name|
144
- log "#{self}.#{__method__} #{file_name}" if $VERBOSE
145
- if File.file? file_name
146
- file_name
147
- else
148
- 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
149
435
  end
150
436
  end
151
437
 
152
- gemfile ||= finder.call "#{CUR_DIR}/#{$APP}.gemfile.rb"
153
- gemfile ||= finder.call "#{GEM_DIR}/#{$APP}.gemfile.rb" unless IS_GEM_DIR
154
- gemfile ||= finder.call "#{CUR_DIR}/Gemfile"
155
- 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
156
440
 
157
- log "#{self} setting BUNDLE_GEMFILE to #{gemfile}" if $VERBOSE
158
- ENV["BUNDLE_GEMFILE"] = gemfile
441
+ raise Error, "Could not find #{$APP}.rb in #{@app_dir} or #{@liz_dir}"
159
442
  end
160
443
 
161
- # 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
162
460
 
163
- def lookup_and_require_app
164
- finder = \
165
- proc do |lib_name, file_name|
166
- log "#{self} checking if #{file_name} exists" if $VERBOSE
167
- if File.file? "#{file_name}"
168
- require lib_name
169
- true
170
- else
171
- false
172
- end
461
+ if env_systems_directory = ENV["SYSTEMS_DIR"]
462
+ App.systems_directory env_systems_directory
463
+ end
464
+
465
+ if s = ENV["LOG_BOOT"] || ENV["LOG"]
466
+ App.log_boot (s.length == 1) ? s.to_i : s.to_sym
467
+ end
468
+
469
+ if s = ENV["LOG_LEVEL"] || ENV["LOG"]
470
+ App.log_level (s.length == 1) ? s.to_i : s.to_sym
471
+ end
472
+
473
+ if env_mode = ENV["MODE"]
474
+ App.mode env_mode
475
+ end
476
+
477
+ if env_gemfile = ENV["GEMFILE"]
478
+ App.gemfile env_gemfile
479
+ end
480
+
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
173
486
  end
487
+ end
488
+ end
174
489
 
175
- return if finder.call "#{CUR_DIR}/#{$APP}", "#{CUR_DIR}/#{$APP}.rb"
176
- return if finder.call "#{GEM_DIR}/#{$APP}", "#{GEM_DIR}/#{$APP}.rb"
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
514
+
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
518
+ end
177
519
 
178
- raise Error, "Could not find #{$APP}.rb in #{CUR_DIR} or #{GEM_DIR}"
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
179
563
  end
180
564
 
181
- # call phase
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
182
600
 
183
- def lookup_and_set_mode
184
- log " Lizarb.#{__method__}" if defined? $log_boot_low
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
185
610
 
186
611
  $mode = App.mode
187
- log " $mode = #{$mode.inspect}" if defined? $log_boot_lower
612
+ log " $mode = #{$mode.inspect}" if defined? $log_boot_higher
188
613
  $coding = App.coding?
189
- log " $coding enabled because $mode == :code | A bit slower for debugging purposes" if $coding && defined? $log_boot_lower
614
+ log " $coding enabled because $mode == :code | A bit slower for debugging purposes" if $coding && defined? $log_boot_higher
190
615
  end
191
616
 
192
- def lookup_and_load_settings
193
- log " Lizarb.#{__method__}" if defined? $log_boot_low
194
- files = ["#{$APP}.#{$mode}.env", "#{$APP}.env"]
195
- require "dotenv"
196
- Dotenv.load(*files)
197
- end
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
198
628
 
199
- def require_liza_and_systems
200
- log " Lizarb.#{__method__}" if defined? $log_boot_low
629
+ files = App.env_vars || []
630
+ log " ENV variables from #{files.count} sources" if defined? $log_boot_higher
201
631
 
202
- log " require Zeitwerk and Liza" if defined? $log_boot_lower
632
+ return if files.empty?
203
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
657
+ end
658
+
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
204
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
205
688
  require "liza"
689
+ log " required Liza" if defined? $log_boot_higher
206
690
 
207
691
  # loaders[0] first loads Liza, then each System class
208
692
 
209
- log " Zeitwerk loaders [0] first loads Liza, then each System class" if defined? $log_boot_lower
693
+ log " Zeitwerk loaders [0] first loads Liza, then each System class" if defined? $log_boot_higher
210
694
 
211
695
  loaders << loader = Zeitwerk::Loader.new
212
696
  loader.tag = Liza.to_s
@@ -219,29 +703,69 @@ module Lizarb
219
703
 
220
704
  # loader setup
221
705
 
706
+ log " Setting up" if defined? $log_boot_higher
222
707
  loader.enable_reloading
708
+ log " loader.enable_reloading" if defined? $log_boot_highest
223
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
714
+
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
224
725
 
225
726
  # bundle each System gem
226
727
 
728
+ log " Bundler.require :systems" if defined? $log_boot_higherß
227
729
  Bundler.require :systems
228
730
 
229
731
  # load each System class
230
732
 
231
- log " App.systems is Hash containing all system classes" if defined? $log_boot_lowest
232
- App.systems.keys.each do |k|
233
- key = "#{k}_system"
234
-
235
- require_system key
236
- klass = Object.const_get key.camelize
237
-
238
- 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
239
737
  end
240
738
 
241
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
242
766
 
243
767
  # loaders[1] first loads each System, then the App
244
- log " Zeitwerk loaders [1] first loads each System, then the App" if defined? $log_boot_lower
768
+ log " Zeitwerk loaders [1] first loads each System, then the App" if defined? $log_boot_higher
245
769
  loaders << loader = Zeitwerk::Loader.new
246
770
 
247
771
  # collapse each System paths
@@ -256,53 +780,42 @@ module Lizarb
256
780
 
257
781
  app_dir = App.path
258
782
  if app_dir
259
- log " Application Directory: #{app_dir}" if defined? $log_boot_lowest
783
+ log " Application Directory: #{app_dir}" if defined? $log_boot_highest
260
784
  list = Dir["#{app_dir}/*"].to_set
261
785
  end
262
786
 
263
787
  if app_dir.nil? || list.empty?
264
- log " Application Directory is empty" if defined? $log_boot_lowest
788
+ log " Application Directory is empty" if defined? $log_boot_highest
265
789
  else
266
- log " Application Directory found #{list.count} items to collapse" if defined? $log_boot_lowest
790
+ log " Application Directory found #{list.count} items to collapse" if defined? $log_boot_highest
267
791
 
268
792
  to_collapse = []
269
793
 
270
794
  App.systems.each do |k, klass|
271
795
  next if klass.subs.empty?
796
+
272
797
  box_dir = "#{app_dir}/#{k}"
273
798
  box_file = "#{box_dir}_box.rb"
799
+ next if !list.include? box_file
274
800
 
275
- if !list.include? box_file
276
- log " Missd box file #{box_file}! Generating it"
277
-
278
- File.write box_file, <<-RUBY
279
- class #{k.to_s.camelize}Box < #{k.to_s.camelize}System::#{k.to_s.camelize}Box
280
-
281
- end
282
- RUBY
283
- end
284
-
285
- log " Found box file #{box_file}" if defined? $log_boot_lowest
801
+ log " Found box file #{box_file}" if defined? $log_boot_highest
286
802
  to_collapse << box_file
287
803
 
288
- if !list.include? box_dir
289
- log " Missd controllers #{box_dir}" if defined? $log_boot_lowest
290
- else
291
- log " Found controllers #{box_dir}" if defined? $log_boot_lowest
804
+ if list.include? box_dir
805
+ log " Found controllers #{box_dir}" if defined? $log_boot_highest
292
806
  to_collapse << box_dir
293
807
  end
294
-
295
808
  end
296
809
 
297
810
  # ORDER MATTERS: IGNORE, COLLAPSE, PUSH
298
811
  to_ignore = list - to_collapse
299
812
  to_ignore.each do |file|
300
- log " Ignoring #{file}" if $log_boot_lowest
813
+ log " Ignoring #{file}" if defined? $log_boot_highest
301
814
  loader.ignore file
302
815
  end
303
816
 
304
817
  to_collapse.each do |path|
305
- log " Collapsing #{path}" if $log_boot_lowest
818
+ log " Collapsing #{path}" if defined? $log_boot_highest
306
819
  if path.end_with? ".rb"
307
820
  loader.collapse path
308
821
  else
@@ -316,137 +829,40 @@ end
316
829
 
317
830
  # loader setup
318
831
 
832
+ log " Setting up" if defined? $log_boot_higher
319
833
  loader.enable_reloading
834
+ log " loader.enable_reloading" if defined? $log_boot_highest
320
835
  loader.setup
321
-
322
- # App connects to systems
323
-
324
- log " Zeitwerk loaders eager load" if defined? $log_boot_lowest
325
- loaders.map &:eager_load
326
- end
327
-
328
- def connect_systems
329
- log " Lizarb.#{__method__} (#{App.systems.count})" if defined? $log_boot_low
330
- App.systems.each do |system_key, system_class|
331
- connect_system system_key, system_class
332
- connect_box system_key, system_class
333
- end
334
- end
335
-
336
- # systems
337
-
338
- def require_system key
339
- log " require '#{key}'" if defined? $log_boot_lowest
340
- require key
341
- rescue LoadError => e
342
- def e.backtrace; []; end
343
- raise SystemNotFound, "FILE #{key}.rb not found on $LOAD_PATH", []
344
- end
345
-
346
- def connect_system key, system_class
347
- t = Time.now
348
- puts if defined? $log_boot_low
349
-
350
- system_class.color DevSystem::ColorShell.parse system_class.color unless system_class.color.is_a? Array
351
-
352
- color_system_class = Liza::Unit.stick(system_class.color, system_class.name).to_s
353
-
354
- log "CONNECTING SYSTEM #{color_system_class}" if defined? $log_boot_low
355
-
356
- # Ignore this for now.
357
- # This feature has been commented out for simplicity purposes.
358
- # It injects code into other classes just like Part does. System defines them
359
-
360
- # index = 0
361
- # system_class.registrar.each do |string, target_block|
362
- # reg_type, _sep, reg_target = string.to_s.lpartition "_"
363
-
364
- # index += 1
365
-
366
- # target_klass = Liza.const reg_target
367
-
368
- # if reg_type == "insertion"
369
- # target_klass.class_exec(&target_block)
370
- # else
371
- # raise "TODO: decide and implement system extension"
372
- # end
373
- # log "CONNECTING SYSTEM-PART #{color_system_class}.#{reg_type.to_s.ljust 11} to #{target_klass.to_s.ljust 30} at #{target_block.source_location * ":"} " if defined? $log_boot_low
374
- # end
375
-
376
- # pad = 21-system_class.name.size
377
- # log "CONNECTED SYSTEM #{t.diff}s for #{color_system_class}#{"".ljust pad} to connect to #{index} system parts" if defined? $log_boot_normal
378
- end
379
-
380
- def connect_box key, system_class
381
- t = Time.now
382
-
383
- box_class = system_class.box
384
- color_box_class = Liza::Unit.stick(system_class.color, box_class.name).to_s
385
-
386
- log "CONNECTING BOX #{color_box_class}" if defined? $log_boot_low
387
- index = 0
388
- # system_class.subs.keys.each do |sub_key|
389
- system_class.subs.each do |sub_key|
390
- panel_class_name = "#{sub_key}_panel".camelize
391
- controller_class_name = sub_key.to_s.camelize
392
-
393
- index += 1
394
- pad = 30-box_class.name.size-sub_key.to_s.size
395
- log "CONNECTED BOX TO PANEL #{"#{color_box_class}[:#{sub_key}]"}#{"".ljust pad} is an instance of #{panel_class_name.ljust_blanks 20} and it configures #{controller_class_name}" if defined? $log_boot_low
396
- end
397
-
398
- log "CONNECTED BOX #{t.diff}s" if defined? $log_boot_low
399
- end
400
-
401
- # parts
402
-
403
- def connect_part unit_class, key, part_class, system
404
- if defined? $log_boot_lowest
405
- t = Time.now
406
- string = " #{unit_class}.part :#{key}"
407
- log string
408
- end
409
-
410
- part_class ||= if system.nil?
411
- Liza.const "#{key}_part"
412
- else
413
- Liza.const("#{system}_system")
414
- .const "#{key}_part"
415
- end
416
-
417
- if part_class.insertion
418
- unit_class.class_exec(&part_class.insertion)
419
- end
420
-
421
- if part_class.extension
422
- part_class.const_set :Extension, Class.new(Liza::PartExtension)
423
- part_class::Extension.class_exec(&part_class.extension)
424
- end
425
-
426
- if defined? $log_boot_lowest
427
- log " ."
428
- end
836
+ log " loader.setup" if defined? $log_boot_highest
429
837
  end
430
838
 
431
839
  # loaders
432
840
 
433
841
  @loaders = []
434
- @mutex = Mutex.new
435
842
 
436
843
  def loaders
437
844
  @loaders
438
845
  end
439
846
 
440
847
  def reload &block
441
- @mutex.synchronize do
442
- loaders.map &:reload
443
- yield if block_given?
444
- end
445
-
848
+ @eager_loaded = false
849
+ loaders[1].reload
446
850
  true
447
851
  end
448
852
 
449
- # thread management
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
863
+ end
864
+
865
+ # naive thread management
450
866
 
451
867
  def thread_object_id
452
868
  Thread.current.object_id