itsi 0.2.2 → 0.2.4

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 (498) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -1
  3. data/Cargo.lock +29 -30
  4. data/README.md +1 -0
  5. data/Rakefile +2 -2
  6. data/crates/itsi_scheduler/Cargo.toml +1 -1
  7. data/crates/itsi_server/Cargo.toml +1 -1
  8. data/crates/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +26 -3
  9. data/crates/itsi_server/src/server/middleware_stack/middlewares/compression.rs +28 -11
  10. data/crates/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +1 -1
  11. data/crates/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +1 -2
  12. data/crates/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +14 -2
  13. data/crates/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs +86 -41
  14. data/crates/itsi_server/src/services/itsi_http_service.rs +46 -35
  15. data/crates/itsi_server/src/services/static_file_server.rs +31 -3
  16. data/docs/content/_index.md +1 -1
  17. data/docs/content/contact/_index.md +1 -1
  18. data/docs/content/directory_listing.jpg +0 -0
  19. data/docs/content/error_page.jpg +0 -0
  20. data/docs/content/getting_started/local_development.md +9 -2
  21. data/docs/content/getting_started/logging.md +1 -2
  22. data/docs/content/getting_started/signals.md +0 -1
  23. data/docs/hugo.yaml +3 -0
  24. data/examples/api_with_schema_and_controllers/Itsi.rb +35 -0
  25. data/examples/api_with_schema_and_controllers/README.md +10 -0
  26. data/examples/api_with_schema_and_controllers/controllers.rb +66 -0
  27. data/examples/api_with_schema_and_controllers/schemas.rb +25 -0
  28. data/examples/file_server/Itsi.rb +30 -0
  29. data/examples/file_server/README.md +3 -0
  30. data/examples/file_server/about.html +80 -0
  31. data/examples/file_server/admin/secrets.txt +1 -0
  32. data/examples/file_server/fairytale.txt +33 -0
  33. data/examples/file_server/itsi-server-100.png +0 -0
  34. data/examples/file_server/subdirectory/movies.csv +21 -0
  35. data/examples/helpers/datastore.rb +84 -0
  36. data/examples/media_server/Itsi.rb +5 -0
  37. data/examples/media_server/README.md +3 -0
  38. data/examples/media_server/images/itsi-server-100.png +0 -0
  39. data/examples/media_server/index.html +82 -0
  40. data/examples/multi_rack_rails_sinatra/Gemfile +66 -0
  41. data/examples/multi_rack_rails_sinatra/Gemfile.lock +416 -0
  42. data/examples/multi_rack_rails_sinatra/Itsi.rb +44 -0
  43. data/examples/multi_rack_rails_sinatra/README.md +7 -0
  44. data/examples/multi_rack_rails_sinatra/index.html +119 -0
  45. data/examples/multi_rack_rails_sinatra/rails_subapp/.dockerignore +51 -0
  46. data/examples/multi_rack_rails_sinatra/rails_subapp/.gitattributes +9 -0
  47. data/examples/multi_rack_rails_sinatra/rails_subapp/.github/dependabot.yml +12 -0
  48. data/examples/multi_rack_rails_sinatra/rails_subapp/.github/workflows/ci.yml +90 -0
  49. data/examples/multi_rack_rails_sinatra/rails_subapp/.gitignore +34 -0
  50. data/examples/multi_rack_rails_sinatra/rails_subapp/.kamal/hooks/docker-setup.sample +3 -0
  51. data/examples/multi_rack_rails_sinatra/rails_subapp/.kamal/hooks/post-app-boot.sample +3 -0
  52. data/examples/multi_rack_rails_sinatra/rails_subapp/.kamal/hooks/post-deploy.sample +14 -0
  53. data/examples/multi_rack_rails_sinatra/rails_subapp/.kamal/hooks/post-proxy-reboot.sample +3 -0
  54. data/examples/multi_rack_rails_sinatra/rails_subapp/.kamal/hooks/pre-app-boot.sample +3 -0
  55. data/examples/multi_rack_rails_sinatra/rails_subapp/.kamal/hooks/pre-build.sample +51 -0
  56. data/examples/multi_rack_rails_sinatra/rails_subapp/.kamal/hooks/pre-connect.sample +47 -0
  57. data/examples/multi_rack_rails_sinatra/rails_subapp/.kamal/hooks/pre-deploy.sample +109 -0
  58. data/examples/multi_rack_rails_sinatra/rails_subapp/.kamal/hooks/pre-proxy-reboot.sample +3 -0
  59. data/examples/multi_rack_rails_sinatra/rails_subapp/.kamal/secrets +17 -0
  60. data/examples/multi_rack_rails_sinatra/rails_subapp/.rubocop.yml +8 -0
  61. data/examples/multi_rack_rails_sinatra/rails_subapp/.ruby-version +1 -0
  62. data/examples/multi_rack_rails_sinatra/rails_subapp/Dockerfile +72 -0
  63. data/examples/multi_rack_rails_sinatra/rails_subapp/Gemfile +66 -0
  64. data/examples/multi_rack_rails_sinatra/rails_subapp/Gemfile.lock +416 -0
  65. data/examples/multi_rack_rails_sinatra/rails_subapp/README.md +24 -0
  66. data/examples/multi_rack_rails_sinatra/rails_subapp/Rakefile +6 -0
  67. data/examples/multi_rack_rails_sinatra/rails_subapp/app/assets/images/.keep +0 -0
  68. data/examples/multi_rack_rails_sinatra/rails_subapp/app/assets/stylesheets/application.css +161 -0
  69. data/examples/multi_rack_rails_sinatra/rails_subapp/app/controllers/application_controller.rb +4 -0
  70. data/examples/multi_rack_rails_sinatra/rails_subapp/app/controllers/articles_controller.rb +70 -0
  71. data/examples/multi_rack_rails_sinatra/rails_subapp/app/controllers/concerns/.keep +0 -0
  72. data/examples/multi_rack_rails_sinatra/rails_subapp/app/controllers/home_controller.rb +4 -0
  73. data/examples/multi_rack_rails_sinatra/rails_subapp/app/helpers/application_helper.rb +2 -0
  74. data/examples/multi_rack_rails_sinatra/rails_subapp/app/helpers/articles_helper.rb +2 -0
  75. data/examples/multi_rack_rails_sinatra/rails_subapp/app/helpers/home_helper.rb +2 -0
  76. data/examples/multi_rack_rails_sinatra/rails_subapp/app/javascript/application.js +3 -0
  77. data/examples/multi_rack_rails_sinatra/rails_subapp/app/javascript/controllers/application.js +9 -0
  78. data/examples/multi_rack_rails_sinatra/rails_subapp/app/javascript/controllers/hello_controller.js +7 -0
  79. data/examples/multi_rack_rails_sinatra/rails_subapp/app/javascript/controllers/index.js +4 -0
  80. data/examples/multi_rack_rails_sinatra/rails_subapp/app/jobs/application_job.rb +7 -0
  81. data/examples/multi_rack_rails_sinatra/rails_subapp/app/mailers/application_mailer.rb +4 -0
  82. data/examples/multi_rack_rails_sinatra/rails_subapp/app/models/application_record.rb +3 -0
  83. data/examples/multi_rack_rails_sinatra/rails_subapp/app/models/article.rb +2 -0
  84. data/examples/multi_rack_rails_sinatra/rails_subapp/app/models/concerns/.keep +0 -0
  85. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/articles/_article.html.erb +14 -0
  86. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/articles/_article.json.jbuilder +2 -0
  87. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/articles/_form.html.erb +30 -0
  88. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/articles/edit.html.erb +12 -0
  89. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/articles/index.html.erb +29 -0
  90. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/articles/index.json.jbuilder +1 -0
  91. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/articles/new.html.erb +11 -0
  92. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/articles/show.html.erb +10 -0
  93. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/articles/show.json.jbuilder +1 -0
  94. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/home/index.html.erb +8 -0
  95. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/layouts/application.html.erb +34 -0
  96. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/layouts/mailer.html.erb +13 -0
  97. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/layouts/mailer.text.erb +1 -0
  98. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/pwa/manifest.json.erb +22 -0
  99. data/examples/multi_rack_rails_sinatra/rails_subapp/app/views/pwa/service-worker.js +26 -0
  100. data/examples/multi_rack_rails_sinatra/rails_subapp/bin/brakeman +7 -0
  101. data/examples/multi_rack_rails_sinatra/rails_subapp/bin/bundle +109 -0
  102. data/examples/multi_rack_rails_sinatra/rails_subapp/bin/dev +2 -0
  103. data/examples/multi_rack_rails_sinatra/rails_subapp/bin/docker-entrypoint +14 -0
  104. data/examples/multi_rack_rails_sinatra/rails_subapp/bin/importmap +4 -0
  105. data/examples/multi_rack_rails_sinatra/rails_subapp/bin/jobs +6 -0
  106. data/examples/multi_rack_rails_sinatra/rails_subapp/bin/kamal +27 -0
  107. data/examples/multi_rack_rails_sinatra/rails_subapp/bin/rails +4 -0
  108. data/examples/multi_rack_rails_sinatra/rails_subapp/bin/rake +4 -0
  109. data/examples/multi_rack_rails_sinatra/rails_subapp/bin/rubocop +8 -0
  110. data/examples/multi_rack_rails_sinatra/rails_subapp/bin/setup +34 -0
  111. data/examples/multi_rack_rails_sinatra/rails_subapp/bin/thrust +5 -0
  112. data/examples/multi_rack_rails_sinatra/rails_subapp/config/application.rb +27 -0
  113. data/examples/multi_rack_rails_sinatra/rails_subapp/config/boot.rb +4 -0
  114. data/examples/multi_rack_rails_sinatra/rails_subapp/config/cable.yml +17 -0
  115. data/examples/multi_rack_rails_sinatra/rails_subapp/config/cache.yml +16 -0
  116. data/examples/multi_rack_rails_sinatra/rails_subapp/config/credentials.yml.enc +1 -0
  117. data/examples/multi_rack_rails_sinatra/rails_subapp/config/database.yml +41 -0
  118. data/examples/multi_rack_rails_sinatra/rails_subapp/config/deploy.yml +116 -0
  119. data/examples/multi_rack_rails_sinatra/rails_subapp/config/environment.rb +5 -0
  120. data/examples/multi_rack_rails_sinatra/rails_subapp/config/environments/development.rb +72 -0
  121. data/examples/multi_rack_rails_sinatra/rails_subapp/config/environments/production.rb +90 -0
  122. data/examples/multi_rack_rails_sinatra/rails_subapp/config/environments/test.rb +53 -0
  123. data/examples/multi_rack_rails_sinatra/rails_subapp/config/importmap.rb +7 -0
  124. data/examples/multi_rack_rails_sinatra/rails_subapp/config/initializers/assets.rb +7 -0
  125. data/examples/multi_rack_rails_sinatra/rails_subapp/config/initializers/content_security_policy.rb +25 -0
  126. data/examples/multi_rack_rails_sinatra/rails_subapp/config/initializers/filter_parameter_logging.rb +8 -0
  127. data/examples/multi_rack_rails_sinatra/rails_subapp/config/initializers/inflections.rb +16 -0
  128. data/examples/multi_rack_rails_sinatra/rails_subapp/config/locales/en.yml +31 -0
  129. data/examples/multi_rack_rails_sinatra/rails_subapp/config/puma.rb +41 -0
  130. data/examples/multi_rack_rails_sinatra/rails_subapp/config/queue.yml +18 -0
  131. data/examples/multi_rack_rails_sinatra/rails_subapp/config/recurring.yml +10 -0
  132. data/examples/multi_rack_rails_sinatra/rails_subapp/config/routes.rb +17 -0
  133. data/examples/multi_rack_rails_sinatra/rails_subapp/config/storage.yml +34 -0
  134. data/examples/multi_rack_rails_sinatra/rails_subapp/config.ru +6 -0
  135. data/examples/multi_rack_rails_sinatra/rails_subapp/db/cable_schema.rb +11 -0
  136. data/examples/multi_rack_rails_sinatra/rails_subapp/db/cache_schema.rb +14 -0
  137. data/examples/multi_rack_rails_sinatra/rails_subapp/db/migrate/20250422211855_create_articles.rb +10 -0
  138. data/examples/multi_rack_rails_sinatra/rails_subapp/db/queue_schema.rb +129 -0
  139. data/examples/multi_rack_rails_sinatra/rails_subapp/db/schema.rb +20 -0
  140. data/examples/multi_rack_rails_sinatra/rails_subapp/db/seeds.rb +9 -0
  141. data/examples/multi_rack_rails_sinatra/rails_subapp/lib/tasks/.keep +0 -0
  142. data/examples/multi_rack_rails_sinatra/rails_subapp/log/.keep +0 -0
  143. data/examples/multi_rack_rails_sinatra/rails_subapp/public/400.html +114 -0
  144. data/examples/multi_rack_rails_sinatra/rails_subapp/public/404.html +114 -0
  145. data/examples/multi_rack_rails_sinatra/rails_subapp/public/406-unsupported-browser.html +114 -0
  146. data/examples/multi_rack_rails_sinatra/rails_subapp/public/422.html +114 -0
  147. data/examples/multi_rack_rails_sinatra/rails_subapp/public/500.html +114 -0
  148. data/examples/multi_rack_rails_sinatra/rails_subapp/public/icon.png +0 -0
  149. data/examples/multi_rack_rails_sinatra/rails_subapp/public/icon.svg +3 -0
  150. data/examples/multi_rack_rails_sinatra/rails_subapp/public/robots.txt +1 -0
  151. data/examples/multi_rack_rails_sinatra/rails_subapp/script/.keep +0 -0
  152. data/examples/multi_rack_rails_sinatra/rails_subapp/storage/.keep +0 -0
  153. data/examples/multi_rack_rails_sinatra/rails_subapp/test/application_system_test_case.rb +5 -0
  154. data/examples/multi_rack_rails_sinatra/rails_subapp/test/controllers/.keep +0 -0
  155. data/examples/multi_rack_rails_sinatra/rails_subapp/test/controllers/articles_controller_test.rb +48 -0
  156. data/examples/multi_rack_rails_sinatra/rails_subapp/test/controllers/home_controller_test.rb +8 -0
  157. data/examples/multi_rack_rails_sinatra/rails_subapp/test/fixtures/articles.yml +9 -0
  158. data/examples/multi_rack_rails_sinatra/rails_subapp/test/fixtures/files/.keep +0 -0
  159. data/examples/multi_rack_rails_sinatra/rails_subapp/test/helpers/.keep +0 -0
  160. data/examples/multi_rack_rails_sinatra/rails_subapp/test/integration/.keep +0 -0
  161. data/examples/multi_rack_rails_sinatra/rails_subapp/test/mailers/.keep +0 -0
  162. data/examples/multi_rack_rails_sinatra/rails_subapp/test/models/.keep +0 -0
  163. data/examples/multi_rack_rails_sinatra/rails_subapp/test/models/article_test.rb +7 -0
  164. data/examples/multi_rack_rails_sinatra/rails_subapp/test/system/.keep +0 -0
  165. data/examples/multi_rack_rails_sinatra/rails_subapp/test/system/articles_test.rb +43 -0
  166. data/examples/multi_rack_rails_sinatra/rails_subapp/test/test_helper.rb +15 -0
  167. data/examples/multi_rack_rails_sinatra/rails_subapp/tmp/.keep +0 -0
  168. data/examples/multi_rack_rails_sinatra/rails_subapp/tmp/pids/.keep +0 -0
  169. data/examples/multi_rack_rails_sinatra/rails_subapp/tmp/storage/.keep +0 -0
  170. data/examples/multi_rack_rails_sinatra/rails_subapp/vendor/.keep +0 -0
  171. data/examples/multi_rack_rails_sinatra/rails_subapp/vendor/javascript/.keep +0 -0
  172. data/examples/multi_rack_rails_sinatra/sinatra_subapp/config.ru +2 -0
  173. data/examples/multi_rack_rails_sinatra/sinatra_subapp/my_app.rb +96 -0
  174. data/examples/rails_with_static_assets/.dockerignore +51 -0
  175. data/examples/rails_with_static_assets/.gitattributes +9 -0
  176. data/examples/rails_with_static_assets/.github/dependabot.yml +12 -0
  177. data/examples/rails_with_static_assets/.github/workflows/ci.yml +90 -0
  178. data/examples/rails_with_static_assets/.gitignore +34 -0
  179. data/examples/rails_with_static_assets/.kamal/hooks/docker-setup.sample +3 -0
  180. data/examples/rails_with_static_assets/.kamal/hooks/post-app-boot.sample +3 -0
  181. data/examples/rails_with_static_assets/.kamal/hooks/post-deploy.sample +14 -0
  182. data/examples/rails_with_static_assets/.kamal/hooks/post-proxy-reboot.sample +3 -0
  183. data/examples/rails_with_static_assets/.kamal/hooks/pre-app-boot.sample +3 -0
  184. data/examples/rails_with_static_assets/.kamal/hooks/pre-build.sample +51 -0
  185. data/examples/rails_with_static_assets/.kamal/hooks/pre-connect.sample +47 -0
  186. data/examples/rails_with_static_assets/.kamal/hooks/pre-deploy.sample +109 -0
  187. data/examples/rails_with_static_assets/.kamal/hooks/pre-proxy-reboot.sample +3 -0
  188. data/examples/rails_with_static_assets/.kamal/secrets +17 -0
  189. data/examples/rails_with_static_assets/.rubocop.yml +8 -0
  190. data/examples/rails_with_static_assets/.ruby-version +1 -0
  191. data/examples/rails_with_static_assets/Dockerfile +72 -0
  192. data/examples/rails_with_static_assets/Gemfile +66 -0
  193. data/examples/rails_with_static_assets/Gemfile.lock +416 -0
  194. data/examples/rails_with_static_assets/Itsi.rb +10 -0
  195. data/examples/rails_with_static_assets/README.md +14 -0
  196. data/examples/rails_with_static_assets/Rakefile +6 -0
  197. data/examples/rails_with_static_assets/app/assets/images/.keep +0 -0
  198. data/examples/rails_with_static_assets/app/assets/stylesheets/application.css +161 -0
  199. data/examples/rails_with_static_assets/app/controllers/application_controller.rb +4 -0
  200. data/examples/rails_with_static_assets/app/controllers/articles_controller.rb +70 -0
  201. data/examples/rails_with_static_assets/app/controllers/concerns/.keep +0 -0
  202. data/examples/rails_with_static_assets/app/controllers/home_controller.rb +4 -0
  203. data/examples/rails_with_static_assets/app/helpers/application_helper.rb +2 -0
  204. data/examples/rails_with_static_assets/app/helpers/articles_helper.rb +2 -0
  205. data/examples/rails_with_static_assets/app/helpers/home_helper.rb +2 -0
  206. data/examples/rails_with_static_assets/app/javascript/application.js +3 -0
  207. data/examples/rails_with_static_assets/app/javascript/controllers/application.js +9 -0
  208. data/examples/rails_with_static_assets/app/javascript/controllers/hello_controller.js +7 -0
  209. data/examples/rails_with_static_assets/app/javascript/controllers/index.js +4 -0
  210. data/examples/rails_with_static_assets/app/jobs/application_job.rb +7 -0
  211. data/examples/rails_with_static_assets/app/mailers/application_mailer.rb +4 -0
  212. data/examples/rails_with_static_assets/app/models/application_record.rb +3 -0
  213. data/examples/rails_with_static_assets/app/models/article.rb +2 -0
  214. data/examples/rails_with_static_assets/app/models/concerns/.keep +0 -0
  215. data/examples/rails_with_static_assets/app/views/articles/_article.html.erb +14 -0
  216. data/examples/rails_with_static_assets/app/views/articles/_article.json.jbuilder +2 -0
  217. data/examples/rails_with_static_assets/app/views/articles/_form.html.erb +30 -0
  218. data/examples/rails_with_static_assets/app/views/articles/edit.html.erb +12 -0
  219. data/examples/rails_with_static_assets/app/views/articles/index.html.erb +29 -0
  220. data/examples/rails_with_static_assets/app/views/articles/index.json.jbuilder +1 -0
  221. data/examples/rails_with_static_assets/app/views/articles/new.html.erb +11 -0
  222. data/examples/rails_with_static_assets/app/views/articles/show.html.erb +10 -0
  223. data/examples/rails_with_static_assets/app/views/articles/show.json.jbuilder +1 -0
  224. data/examples/rails_with_static_assets/app/views/home/index.html.erb +8 -0
  225. data/examples/rails_with_static_assets/app/views/layouts/application.html.erb +34 -0
  226. data/examples/rails_with_static_assets/app/views/layouts/mailer.html.erb +13 -0
  227. data/examples/rails_with_static_assets/app/views/layouts/mailer.text.erb +1 -0
  228. data/examples/rails_with_static_assets/app/views/pwa/manifest.json.erb +22 -0
  229. data/examples/rails_with_static_assets/app/views/pwa/service-worker.js +26 -0
  230. data/examples/rails_with_static_assets/bin/brakeman +7 -0
  231. data/examples/rails_with_static_assets/bin/bundle +109 -0
  232. data/examples/rails_with_static_assets/bin/dev +2 -0
  233. data/examples/rails_with_static_assets/bin/docker-entrypoint +14 -0
  234. data/examples/rails_with_static_assets/bin/importmap +4 -0
  235. data/examples/rails_with_static_assets/bin/jobs +6 -0
  236. data/examples/rails_with_static_assets/bin/kamal +27 -0
  237. data/examples/rails_with_static_assets/bin/rails +4 -0
  238. data/examples/rails_with_static_assets/bin/rake +4 -0
  239. data/examples/rails_with_static_assets/bin/rubocop +8 -0
  240. data/examples/rails_with_static_assets/bin/setup +34 -0
  241. data/examples/rails_with_static_assets/bin/thrust +5 -0
  242. data/examples/rails_with_static_assets/config/application.rb +26 -0
  243. data/examples/rails_with_static_assets/config/boot.rb +4 -0
  244. data/examples/rails_with_static_assets/config/cable.yml +17 -0
  245. data/examples/rails_with_static_assets/config/cache.yml +16 -0
  246. data/examples/rails_with_static_assets/config/credentials.yml.enc +1 -0
  247. data/examples/rails_with_static_assets/config/database.yml +41 -0
  248. data/examples/rails_with_static_assets/config/deploy.yml +116 -0
  249. data/examples/rails_with_static_assets/config/environment.rb +5 -0
  250. data/examples/rails_with_static_assets/config/environments/development.rb +74 -0
  251. data/examples/rails_with_static_assets/config/environments/production.rb +90 -0
  252. data/examples/rails_with_static_assets/config/environments/test.rb +53 -0
  253. data/examples/rails_with_static_assets/config/importmap.rb +7 -0
  254. data/examples/rails_with_static_assets/config/initializers/assets.rb +7 -0
  255. data/examples/rails_with_static_assets/config/initializers/content_security_policy.rb +25 -0
  256. data/examples/rails_with_static_assets/config/initializers/filter_parameter_logging.rb +8 -0
  257. data/examples/rails_with_static_assets/config/initializers/inflections.rb +16 -0
  258. data/examples/rails_with_static_assets/config/locales/en.yml +31 -0
  259. data/examples/rails_with_static_assets/config/puma.rb +41 -0
  260. data/examples/rails_with_static_assets/config/queue.yml +18 -0
  261. data/examples/rails_with_static_assets/config/recurring.yml +10 -0
  262. data/examples/rails_with_static_assets/config/routes.rb +17 -0
  263. data/examples/rails_with_static_assets/config/storage.yml +34 -0
  264. data/examples/rails_with_static_assets/config.ru +6 -0
  265. data/examples/rails_with_static_assets/db/cable_schema.rb +11 -0
  266. data/examples/rails_with_static_assets/db/cache_schema.rb +14 -0
  267. data/examples/rails_with_static_assets/db/migrate/20250422211855_create_articles.rb +10 -0
  268. data/examples/rails_with_static_assets/db/queue_schema.rb +129 -0
  269. data/examples/rails_with_static_assets/db/schema.rb +20 -0
  270. data/examples/rails_with_static_assets/db/seeds.rb +9 -0
  271. data/examples/rails_with_static_assets/lib/tasks/.keep +0 -0
  272. data/examples/rails_with_static_assets/log/.keep +0 -0
  273. data/examples/rails_with_static_assets/public/400.html +114 -0
  274. data/examples/rails_with_static_assets/public/404.html +114 -0
  275. data/examples/rails_with_static_assets/public/406-unsupported-browser.html +114 -0
  276. data/examples/rails_with_static_assets/public/422.html +114 -0
  277. data/examples/rails_with_static_assets/public/500.html +114 -0
  278. data/examples/rails_with_static_assets/public/icon.png +0 -0
  279. data/examples/rails_with_static_assets/public/icon.svg +3 -0
  280. data/examples/rails_with_static_assets/public/robots.txt +1 -0
  281. data/examples/rails_with_static_assets/script/.keep +0 -0
  282. data/examples/rails_with_static_assets/storage/.keep +0 -0
  283. data/examples/rails_with_static_assets/test/application_system_test_case.rb +5 -0
  284. data/examples/rails_with_static_assets/test/controllers/.keep +0 -0
  285. data/examples/rails_with_static_assets/test/controllers/articles_controller_test.rb +48 -0
  286. data/examples/rails_with_static_assets/test/controllers/home_controller_test.rb +8 -0
  287. data/examples/rails_with_static_assets/test/fixtures/articles.yml +9 -0
  288. data/examples/rails_with_static_assets/test/fixtures/files/.keep +0 -0
  289. data/examples/rails_with_static_assets/test/helpers/.keep +0 -0
  290. data/examples/rails_with_static_assets/test/integration/.keep +0 -0
  291. data/examples/rails_with_static_assets/test/mailers/.keep +0 -0
  292. data/examples/rails_with_static_assets/test/models/.keep +0 -0
  293. data/examples/rails_with_static_assets/test/models/article_test.rb +7 -0
  294. data/examples/rails_with_static_assets/test/system/.keep +0 -0
  295. data/examples/rails_with_static_assets/test/system/articles_test.rb +43 -0
  296. data/examples/rails_with_static_assets/test/test_helper.rb +15 -0
  297. data/examples/rails_with_static_assets/tmp/.keep +0 -0
  298. data/examples/rails_with_static_assets/tmp/pids/.keep +0 -0
  299. data/examples/rails_with_static_assets/tmp/storage/.keep +0 -0
  300. data/examples/rails_with_static_assets/vendor/.keep +0 -0
  301. data/examples/rails_with_static_assets/vendor/javascript/.keep +0 -0
  302. data/examples/reverse_proxy/Itsi.rb +28 -0
  303. data/examples/reverse_proxy/README.md +14 -0
  304. data/examples/reverse_proxy/index.html +119 -0
  305. data/examples/reverse_proxy/rails_subapp/.dockerignore +51 -0
  306. data/examples/reverse_proxy/rails_subapp/.gitattributes +9 -0
  307. data/examples/reverse_proxy/rails_subapp/.github/dependabot.yml +12 -0
  308. data/examples/reverse_proxy/rails_subapp/.github/workflows/ci.yml +90 -0
  309. data/examples/reverse_proxy/rails_subapp/.gitignore +34 -0
  310. data/examples/reverse_proxy/rails_subapp/.kamal/hooks/docker-setup.sample +3 -0
  311. data/examples/reverse_proxy/rails_subapp/.kamal/hooks/post-app-boot.sample +3 -0
  312. data/examples/reverse_proxy/rails_subapp/.kamal/hooks/post-deploy.sample +14 -0
  313. data/examples/reverse_proxy/rails_subapp/.kamal/hooks/post-proxy-reboot.sample +3 -0
  314. data/examples/reverse_proxy/rails_subapp/.kamal/hooks/pre-app-boot.sample +3 -0
  315. data/examples/reverse_proxy/rails_subapp/.kamal/hooks/pre-build.sample +51 -0
  316. data/examples/reverse_proxy/rails_subapp/.kamal/hooks/pre-connect.sample +47 -0
  317. data/examples/reverse_proxy/rails_subapp/.kamal/hooks/pre-deploy.sample +109 -0
  318. data/examples/reverse_proxy/rails_subapp/.kamal/hooks/pre-proxy-reboot.sample +3 -0
  319. data/examples/reverse_proxy/rails_subapp/.kamal/secrets +17 -0
  320. data/examples/reverse_proxy/rails_subapp/.rubocop.yml +8 -0
  321. data/examples/reverse_proxy/rails_subapp/.ruby-version +1 -0
  322. data/examples/reverse_proxy/rails_subapp/Dockerfile +72 -0
  323. data/examples/reverse_proxy/rails_subapp/Gemfile +66 -0
  324. data/examples/reverse_proxy/rails_subapp/Gemfile.lock +416 -0
  325. data/examples/reverse_proxy/rails_subapp/README.md +24 -0
  326. data/examples/reverse_proxy/rails_subapp/Rakefile +6 -0
  327. data/examples/reverse_proxy/rails_subapp/app/assets/images/.keep +0 -0
  328. data/examples/reverse_proxy/rails_subapp/app/assets/stylesheets/application.css +161 -0
  329. data/examples/reverse_proxy/rails_subapp/app/controllers/application_controller.rb +4 -0
  330. data/examples/reverse_proxy/rails_subapp/app/controllers/articles_controller.rb +70 -0
  331. data/examples/reverse_proxy/rails_subapp/app/controllers/concerns/.keep +0 -0
  332. data/examples/reverse_proxy/rails_subapp/app/controllers/home_controller.rb +4 -0
  333. data/examples/reverse_proxy/rails_subapp/app/helpers/application_helper.rb +2 -0
  334. data/examples/reverse_proxy/rails_subapp/app/helpers/articles_helper.rb +2 -0
  335. data/examples/reverse_proxy/rails_subapp/app/helpers/home_helper.rb +2 -0
  336. data/examples/reverse_proxy/rails_subapp/app/javascript/application.js +3 -0
  337. data/examples/reverse_proxy/rails_subapp/app/javascript/controllers/application.js +9 -0
  338. data/examples/reverse_proxy/rails_subapp/app/javascript/controllers/hello_controller.js +7 -0
  339. data/examples/reverse_proxy/rails_subapp/app/javascript/controllers/index.js +4 -0
  340. data/examples/reverse_proxy/rails_subapp/app/jobs/application_job.rb +7 -0
  341. data/examples/reverse_proxy/rails_subapp/app/mailers/application_mailer.rb +4 -0
  342. data/examples/reverse_proxy/rails_subapp/app/models/application_record.rb +3 -0
  343. data/examples/reverse_proxy/rails_subapp/app/models/article.rb +2 -0
  344. data/examples/reverse_proxy/rails_subapp/app/models/concerns/.keep +0 -0
  345. data/examples/reverse_proxy/rails_subapp/app/views/articles/_article.html.erb +14 -0
  346. data/examples/reverse_proxy/rails_subapp/app/views/articles/_article.json.jbuilder +2 -0
  347. data/examples/reverse_proxy/rails_subapp/app/views/articles/_form.html.erb +30 -0
  348. data/examples/reverse_proxy/rails_subapp/app/views/articles/edit.html.erb +12 -0
  349. data/examples/reverse_proxy/rails_subapp/app/views/articles/index.html.erb +29 -0
  350. data/examples/reverse_proxy/rails_subapp/app/views/articles/index.json.jbuilder +1 -0
  351. data/examples/reverse_proxy/rails_subapp/app/views/articles/new.html.erb +11 -0
  352. data/examples/reverse_proxy/rails_subapp/app/views/articles/show.html.erb +10 -0
  353. data/examples/reverse_proxy/rails_subapp/app/views/articles/show.json.jbuilder +1 -0
  354. data/examples/reverse_proxy/rails_subapp/app/views/home/index.html.erb +8 -0
  355. data/examples/reverse_proxy/rails_subapp/app/views/layouts/application.html.erb +34 -0
  356. data/examples/reverse_proxy/rails_subapp/app/views/layouts/mailer.html.erb +13 -0
  357. data/examples/reverse_proxy/rails_subapp/app/views/layouts/mailer.text.erb +1 -0
  358. data/examples/reverse_proxy/rails_subapp/app/views/pwa/manifest.json.erb +22 -0
  359. data/examples/reverse_proxy/rails_subapp/app/views/pwa/service-worker.js +26 -0
  360. data/examples/reverse_proxy/rails_subapp/bin/brakeman +7 -0
  361. data/examples/reverse_proxy/rails_subapp/bin/bundle +109 -0
  362. data/examples/reverse_proxy/rails_subapp/bin/dev +2 -0
  363. data/examples/reverse_proxy/rails_subapp/bin/docker-entrypoint +14 -0
  364. data/examples/reverse_proxy/rails_subapp/bin/importmap +4 -0
  365. data/examples/reverse_proxy/rails_subapp/bin/jobs +6 -0
  366. data/examples/reverse_proxy/rails_subapp/bin/kamal +27 -0
  367. data/examples/reverse_proxy/rails_subapp/bin/rails +4 -0
  368. data/examples/reverse_proxy/rails_subapp/bin/rake +4 -0
  369. data/examples/reverse_proxy/rails_subapp/bin/rubocop +8 -0
  370. data/examples/reverse_proxy/rails_subapp/bin/setup +34 -0
  371. data/examples/reverse_proxy/rails_subapp/bin/thrust +5 -0
  372. data/examples/reverse_proxy/rails_subapp/config/application.rb +26 -0
  373. data/examples/reverse_proxy/rails_subapp/config/boot.rb +4 -0
  374. data/examples/reverse_proxy/rails_subapp/config/cable.yml +17 -0
  375. data/examples/reverse_proxy/rails_subapp/config/cache.yml +16 -0
  376. data/examples/reverse_proxy/rails_subapp/config/credentials.yml.enc +1 -0
  377. data/examples/reverse_proxy/rails_subapp/config/database.yml +41 -0
  378. data/examples/reverse_proxy/rails_subapp/config/deploy.yml +116 -0
  379. data/examples/reverse_proxy/rails_subapp/config/environment.rb +5 -0
  380. data/examples/reverse_proxy/rails_subapp/config/environments/development.rb +72 -0
  381. data/examples/reverse_proxy/rails_subapp/config/environments/production.rb +90 -0
  382. data/examples/reverse_proxy/rails_subapp/config/environments/test.rb +53 -0
  383. data/examples/reverse_proxy/rails_subapp/config/importmap.rb +7 -0
  384. data/examples/reverse_proxy/rails_subapp/config/initializers/assets.rb +7 -0
  385. data/examples/reverse_proxy/rails_subapp/config/initializers/content_security_policy.rb +25 -0
  386. data/examples/reverse_proxy/rails_subapp/config/initializers/filter_parameter_logging.rb +8 -0
  387. data/examples/reverse_proxy/rails_subapp/config/initializers/inflections.rb +16 -0
  388. data/examples/reverse_proxy/rails_subapp/config/locales/en.yml +31 -0
  389. data/examples/reverse_proxy/rails_subapp/config/puma.rb +41 -0
  390. data/examples/reverse_proxy/rails_subapp/config/queue.yml +18 -0
  391. data/examples/reverse_proxy/rails_subapp/config/recurring.yml +10 -0
  392. data/examples/reverse_proxy/rails_subapp/config/routes.rb +17 -0
  393. data/examples/reverse_proxy/rails_subapp/config/storage.yml +34 -0
  394. data/examples/reverse_proxy/rails_subapp/config.ru +6 -0
  395. data/examples/reverse_proxy/rails_subapp/db/cable_schema.rb +11 -0
  396. data/examples/reverse_proxy/rails_subapp/db/cache_schema.rb +14 -0
  397. data/examples/reverse_proxy/rails_subapp/db/migrate/20250422211855_create_articles.rb +10 -0
  398. data/examples/reverse_proxy/rails_subapp/db/queue_schema.rb +129 -0
  399. data/examples/reverse_proxy/rails_subapp/db/schema.rb +20 -0
  400. data/examples/reverse_proxy/rails_subapp/db/seeds.rb +9 -0
  401. data/examples/reverse_proxy/rails_subapp/lib/tasks/.keep +0 -0
  402. data/examples/reverse_proxy/rails_subapp/log/.keep +0 -0
  403. data/examples/reverse_proxy/rails_subapp/public/400.html +114 -0
  404. data/examples/reverse_proxy/rails_subapp/public/404.html +114 -0
  405. data/examples/reverse_proxy/rails_subapp/public/406-unsupported-browser.html +114 -0
  406. data/examples/reverse_proxy/rails_subapp/public/422.html +114 -0
  407. data/examples/reverse_proxy/rails_subapp/public/500.html +114 -0
  408. data/examples/reverse_proxy/rails_subapp/public/icon.png +0 -0
  409. data/examples/reverse_proxy/rails_subapp/public/icon.svg +3 -0
  410. data/examples/reverse_proxy/rails_subapp/public/robots.txt +1 -0
  411. data/examples/reverse_proxy/rails_subapp/script/.keep +0 -0
  412. data/examples/reverse_proxy/rails_subapp/storage/.keep +0 -0
  413. data/examples/reverse_proxy/rails_subapp/test/application_system_test_case.rb +5 -0
  414. data/examples/reverse_proxy/rails_subapp/test/controllers/.keep +0 -0
  415. data/examples/reverse_proxy/rails_subapp/test/controllers/articles_controller_test.rb +48 -0
  416. data/examples/reverse_proxy/rails_subapp/test/controllers/home_controller_test.rb +8 -0
  417. data/examples/reverse_proxy/rails_subapp/test/fixtures/articles.yml +9 -0
  418. data/examples/reverse_proxy/rails_subapp/test/fixtures/files/.keep +0 -0
  419. data/examples/reverse_proxy/rails_subapp/test/helpers/.keep +0 -0
  420. data/examples/reverse_proxy/rails_subapp/test/integration/.keep +0 -0
  421. data/examples/reverse_proxy/rails_subapp/test/mailers/.keep +0 -0
  422. data/examples/reverse_proxy/rails_subapp/test/models/.keep +0 -0
  423. data/examples/reverse_proxy/rails_subapp/test/models/article_test.rb +7 -0
  424. data/examples/reverse_proxy/rails_subapp/test/system/.keep +0 -0
  425. data/examples/reverse_proxy/rails_subapp/test/system/articles_test.rb +43 -0
  426. data/examples/reverse_proxy/rails_subapp/test/test_helper.rb +15 -0
  427. data/examples/reverse_proxy/rails_subapp/tmp/.keep +0 -0
  428. data/examples/reverse_proxy/rails_subapp/tmp/pids/.keep +0 -0
  429. data/examples/reverse_proxy/rails_subapp/tmp/storage/.keep +0 -0
  430. data/examples/reverse_proxy/rails_subapp/vendor/.keep +0 -0
  431. data/examples/reverse_proxy/rails_subapp/vendor/javascript/.keep +0 -0
  432. data/examples/reverse_proxy/sinatra_subapp/Gemfile +2 -0
  433. data/examples/reverse_proxy/sinatra_subapp/Gemfile.lock +46 -0
  434. data/examples/reverse_proxy/sinatra_subapp/config.ru +2 -0
  435. data/examples/reverse_proxy/sinatra_subapp/my_app.rb +96 -0
  436. data/examples/simple_api/Itsi.rb +127 -0
  437. data/examples/simple_api_no_schema/Itsi.rb +86 -0
  438. data/examples/spa/Itsi.rb +5 -0
  439. data/examples/spa/README.md +3 -0
  440. data/examples/spa/dist/assets/index-2cf7be43.js +40 -0
  441. data/examples/spa/dist/index.html +13 -0
  442. data/examples/spa/index.html +12 -0
  443. data/examples/spa/package-lock.json +1265 -0
  444. data/examples/spa/package.json +18 -0
  445. data/examples/spa/src/App.jsx +49 -0
  446. data/examples/spa/src/main.jsx +6 -0
  447. data/examples/spa/src/pages/About.jsx +9 -0
  448. data/examples/spa/src/pages/Home.jsx +9 -0
  449. data/examples/spa/vite.config.js +9 -0
  450. data/gems/scheduler/Cargo.lock +74 -17
  451. data/gems/scheduler/itsi-scheduler.gemspec +2 -2
  452. data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
  453. data/gems/server/Cargo.lock +28 -29
  454. data/gems/server/itsi-server.gemspec +2 -2
  455. data/gems/server/lib/itsi/http_request.rb +31 -34
  456. data/gems/server/lib/itsi/http_response.rb +10 -8
  457. data/gems/server/lib/itsi/passfile.rb +6 -6
  458. data/gems/server/lib/itsi/server/config/config_helpers.rb +33 -33
  459. data/gems/server/lib/itsi/server/config/dsl.rb +16 -21
  460. data/gems/server/lib/itsi/server/config/known_paths.rb +11 -7
  461. data/gems/server/lib/itsi/server/config/middleware/endpoint/endpoint.rb +0 -4
  462. data/gems/server/lib/itsi/server/config/middleware/error_response.md +13 -0
  463. data/gems/server/lib/itsi/server/config/middleware/location.rb +25 -21
  464. data/gems/server/lib/itsi/server/config/middleware/proxy.rb +15 -14
  465. data/gems/server/lib/itsi/server/config/middleware/rackup_file.rb +7 -10
  466. data/gems/server/lib/itsi/server/config/middleware/static_assets.md +40 -0
  467. data/gems/server/lib/itsi/server/config/middleware/static_assets.rb +8 -4
  468. data/gems/server/lib/itsi/server/config/middleware/string_rewrite.md +14 -0
  469. data/gems/server/lib/itsi/server/config/option.rb +0 -1
  470. data/gems/server/lib/itsi/server/config/options/include.rb +1 -1
  471. data/gems/server/lib/itsi/server/config/options/nodelay.md +2 -2
  472. data/gems/server/lib/itsi/server/config/options/reuse_address.md +1 -1
  473. data/gems/server/lib/itsi/server/config/typed_struct.rb +32 -35
  474. data/gems/server/lib/itsi/server/config.rb +107 -92
  475. data/gems/server/lib/itsi/server/default_app/default_app.rb +1 -1
  476. data/gems/server/lib/itsi/server/grpc/grpc_call.rb +4 -5
  477. data/gems/server/lib/itsi/server/grpc/grpc_interface.rb +6 -7
  478. data/gems/server/lib/itsi/server/rack/handler/itsi.rb +0 -1
  479. data/gems/server/lib/itsi/server/rack_interface.rb +1 -2
  480. data/gems/server/lib/itsi/server/route_tester.rb +26 -24
  481. data/gems/server/lib/itsi/server/typed_handlers/param_parser.rb +25 -0
  482. data/gems/server/lib/itsi/server/typed_handlers/source_parser.rb +9 -7
  483. data/gems/server/lib/itsi/server/version.rb +1 -1
  484. data/gems/server/lib/itsi/server.rb +22 -22
  485. data/gems/server/lib/itsi/standard_headers.rb +80 -80
  486. data/gems/server/test/helpers/test_helper.rb +17 -16
  487. data/gems/server/test/middleware/static_assets.rb +6 -4
  488. data/gems/server/test/middleware/string_rewrite.rb +54 -0
  489. data/gems/server/test/middleware/test_log_requests.rb +66 -2
  490. data/gems/server/test/options/test_workers.rb +12 -5
  491. data/lib/itsi/version.rb +1 -1
  492. metadata +435 -13
  493. data/examples/static_assets_example.rb +0 -83
  494. data/grpc_test/Itsi.rb +0 -11
  495. data/grpc_test/echo.proto +0 -14
  496. data/grpc_test/echo_pb.rb +0 -16
  497. data/grpc_test/echo_service_impl.rb +0 -8
  498. data/grpc_test/echo_services_pb.rb +0 -22
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "my-app",
3
+ "version": "0.0.1",
4
+ "private": true,
5
+ "scripts": {
6
+ "dev": "vite",
7
+ "build": "vite build",
8
+ "preview": "vite preview"
9
+ },
10
+ "dependencies": {
11
+ "react": "^18.2.0",
12
+ "react-dom": "^18.2.0"
13
+ },
14
+ "devDependencies": {
15
+ "@vitejs/plugin-react": "^4.0.0",
16
+ "vite": "^4.4.0"
17
+ }
18
+ }
@@ -0,0 +1,49 @@
1
+ import React, { useState, useEffect } from "react";
2
+ import Home from "./pages/Home";
3
+ import About from "./pages/About";
4
+
5
+ export default function App() {
6
+ const [path, setPath] = useState(window.location.pathname);
7
+
8
+ useEffect(() => {
9
+ const onPop = () => setPath(window.location.pathname);
10
+ window.addEventListener("popstate", onPop);
11
+ return () => window.removeEventListener("popstate", onPop);
12
+ }, []);
13
+
14
+ const navigate = (to) => {
15
+ window.history.pushState(null, "", to);
16
+ setPath(to);
17
+ };
18
+
19
+ let Page;
20
+ if (path === "/about") Page = About;
21
+ else Page = Home;
22
+
23
+ return (
24
+ <div style={{ padding: 20, fontFamily: "sans-serif" }}>
25
+ <nav style={{ marginBottom: 20 }}>
26
+ <a
27
+ href="/"
28
+ onClick={(e) => {
29
+ e.preventDefault();
30
+ navigate("/");
31
+ }}
32
+ style={{ marginRight: 10 }}
33
+ >
34
+ Home
35
+ </a>
36
+ <a
37
+ href="/about"
38
+ onClick={(e) => {
39
+ e.preventDefault();
40
+ navigate("/about");
41
+ }}
42
+ >
43
+ About
44
+ </a>
45
+ </nav>
46
+ <Page />
47
+ </div>
48
+ );
49
+ }
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { createRoot } from "react-dom/client";
3
+ import App from "./App";
4
+
5
+ const rootEl = document.getElementById("root");
6
+ createRoot(rootEl).render(<App />);
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ export default function About() {
3
+ return (
4
+ <div>
5
+ <h1>About</h1>
6
+ <p>This is the About page.</p>
7
+ </div>
8
+ );
9
+ }
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ export default function Home() {
3
+ return (
4
+ <div>
5
+ <h1>Home</h1>
6
+ <p>Welcome to the minimal React SPA.</p>
7
+ </div>
8
+ );
9
+ }
@@ -0,0 +1,9 @@
1
+ import { defineConfig } from "vite";
2
+ import react from "@vitejs/plugin-react";
3
+
4
+ export default defineConfig({
5
+ plugins: [react()],
6
+ server: {
7
+ open: true,
8
+ },
9
+ });
@@ -13,9 +13,9 @@ dependencies = [
13
13
 
14
14
  [[package]]
15
15
  name = "anyhow"
16
- version = "1.0.97"
16
+ version = "1.0.98"
17
17
  source = "registry+https://github.com/rust-lang/crates.io-index"
18
- checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f"
18
+ checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
19
19
 
20
20
  [[package]]
21
21
  name = "atty"
@@ -213,7 +213,7 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
213
213
 
214
214
  [[package]]
215
215
  name = "itsi-scheduler"
216
- version = "0.2.2"
216
+ version = "0.2.4"
217
217
  dependencies = [
218
218
  "bytes",
219
219
  "derive_more",
@@ -286,9 +286,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
286
286
 
287
287
  [[package]]
288
288
  name = "libc"
289
- version = "0.2.171"
289
+ version = "0.2.172"
290
290
  source = "registry+https://github.com/rust-lang/crates.io-index"
291
- checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
291
+ checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
292
292
 
293
293
  [[package]]
294
294
  name = "libloading"
@@ -297,7 +297,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
297
297
  checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
298
298
  dependencies = [
299
299
  "cfg-if",
300
- "windows-targets",
300
+ "windows-targets 0.48.5",
301
301
  ]
302
302
 
303
303
  [[package]]
@@ -443,7 +443,7 @@ dependencies = [
443
443
  "libc",
444
444
  "redox_syscall",
445
445
  "smallvec",
446
- "windows-targets",
446
+ "windows-targets 0.52.6",
447
447
  ]
448
448
 
449
449
  [[package]]
@@ -470,9 +470,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
470
470
 
471
471
  [[package]]
472
472
  name = "proc-macro2"
473
- version = "1.0.94"
473
+ version = "1.0.95"
474
474
  source = "registry+https://github.com/rust-lang/crates.io-index"
475
- checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
475
+ checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
476
476
  dependencies = [
477
477
  "unicode-ident",
478
478
  ]
@@ -932,7 +932,22 @@ version = "0.52.0"
932
932
  source = "registry+https://github.com/rust-lang/crates.io-index"
933
933
  checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
934
934
  dependencies = [
935
- "windows-targets",
935
+ "windows-targets 0.52.6",
936
+ ]
937
+
938
+ [[package]]
939
+ name = "windows-targets"
940
+ version = "0.48.5"
941
+ source = "registry+https://github.com/rust-lang/crates.io-index"
942
+ checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
943
+ dependencies = [
944
+ "windows_aarch64_gnullvm 0.48.5",
945
+ "windows_aarch64_msvc 0.48.5",
946
+ "windows_i686_gnu 0.48.5",
947
+ "windows_i686_msvc 0.48.5",
948
+ "windows_x86_64_gnu 0.48.5",
949
+ "windows_x86_64_gnullvm 0.48.5",
950
+ "windows_x86_64_msvc 0.48.5",
936
951
  ]
937
952
 
938
953
  [[package]]
@@ -941,28 +956,46 @@ version = "0.52.6"
941
956
  source = "registry+https://github.com/rust-lang/crates.io-index"
942
957
  checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
943
958
  dependencies = [
944
- "windows_aarch64_gnullvm",
945
- "windows_aarch64_msvc",
946
- "windows_i686_gnu",
959
+ "windows_aarch64_gnullvm 0.52.6",
960
+ "windows_aarch64_msvc 0.52.6",
961
+ "windows_i686_gnu 0.52.6",
947
962
  "windows_i686_gnullvm",
948
- "windows_i686_msvc",
949
- "windows_x86_64_gnu",
950
- "windows_x86_64_gnullvm",
951
- "windows_x86_64_msvc",
963
+ "windows_i686_msvc 0.52.6",
964
+ "windows_x86_64_gnu 0.52.6",
965
+ "windows_x86_64_gnullvm 0.52.6",
966
+ "windows_x86_64_msvc 0.52.6",
952
967
  ]
953
968
 
969
+ [[package]]
970
+ name = "windows_aarch64_gnullvm"
971
+ version = "0.48.5"
972
+ source = "registry+https://github.com/rust-lang/crates.io-index"
973
+ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
974
+
954
975
  [[package]]
955
976
  name = "windows_aarch64_gnullvm"
956
977
  version = "0.52.6"
957
978
  source = "registry+https://github.com/rust-lang/crates.io-index"
958
979
  checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
959
980
 
981
+ [[package]]
982
+ name = "windows_aarch64_msvc"
983
+ version = "0.48.5"
984
+ source = "registry+https://github.com/rust-lang/crates.io-index"
985
+ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
986
+
960
987
  [[package]]
961
988
  name = "windows_aarch64_msvc"
962
989
  version = "0.52.6"
963
990
  source = "registry+https://github.com/rust-lang/crates.io-index"
964
991
  checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
965
992
 
993
+ [[package]]
994
+ name = "windows_i686_gnu"
995
+ version = "0.48.5"
996
+ source = "registry+https://github.com/rust-lang/crates.io-index"
997
+ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
998
+
966
999
  [[package]]
967
1000
  name = "windows_i686_gnu"
968
1001
  version = "0.52.6"
@@ -975,24 +1008,48 @@ version = "0.52.6"
975
1008
  source = "registry+https://github.com/rust-lang/crates.io-index"
976
1009
  checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
977
1010
 
1011
+ [[package]]
1012
+ name = "windows_i686_msvc"
1013
+ version = "0.48.5"
1014
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1015
+ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
1016
+
978
1017
  [[package]]
979
1018
  name = "windows_i686_msvc"
980
1019
  version = "0.52.6"
981
1020
  source = "registry+https://github.com/rust-lang/crates.io-index"
982
1021
  checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
983
1022
 
1023
+ [[package]]
1024
+ name = "windows_x86_64_gnu"
1025
+ version = "0.48.5"
1026
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1027
+ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
1028
+
984
1029
  [[package]]
985
1030
  name = "windows_x86_64_gnu"
986
1031
  version = "0.52.6"
987
1032
  source = "registry+https://github.com/rust-lang/crates.io-index"
988
1033
  checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
989
1034
 
1035
+ [[package]]
1036
+ name = "windows_x86_64_gnullvm"
1037
+ version = "0.48.5"
1038
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1039
+ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
1040
+
990
1041
  [[package]]
991
1042
  name = "windows_x86_64_gnullvm"
992
1043
  version = "0.52.6"
993
1044
  source = "registry+https://github.com/rust-lang/crates.io-index"
994
1045
  checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
995
1046
 
1047
+ [[package]]
1048
+ name = "windows_x86_64_msvc"
1049
+ version = "0.48.5"
1050
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1051
+ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
1052
+
996
1053
  [[package]]
997
1054
  name = "windows_x86_64_msvc"
998
1055
  version = "0.52.6"
@@ -16,8 +16,8 @@ Gem::Specification.new do |spec|
16
16
  spec.required_rubygems_version = ">= 3.1.11"
17
17
 
18
18
  spec.metadata["homepage_uri"] = spec.homepage
19
- spec.metadata["source_code_uri"] = "https://github.com/wouterken/itsi/scheduler"
20
- spec.metadata["changelog_uri"] = "https://github.com/wouterken/itsi/scheduler/blob/main/CHANGELOG.md"
19
+ spec.metadata["source_code_uri"] = "https://github.com/wouterken/itsi"
20
+ spec.metadata["changelog_uri"] = "https://github.com/wouterken/itsi/blob/main/CHANGELOG.md"
21
21
 
22
22
  # Specify which files should be added to the gem when it is released.
23
23
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Itsi
4
4
  class Scheduler
5
- VERSION = "0.2.2"
5
+ VERSION = "0.2.4"
6
6
  end
7
7
  end
@@ -117,9 +117,9 @@ dependencies = [
117
117
 
118
118
  [[package]]
119
119
  name = "anyhow"
120
- version = "1.0.97"
120
+ version = "1.0.98"
121
121
  source = "registry+https://github.com/rust-lang/crates.io-index"
122
- checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f"
122
+ checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
123
123
 
124
124
  [[package]]
125
125
  name = "arc-swap"
@@ -253,9 +253,9 @@ dependencies = [
253
253
 
254
254
  [[package]]
255
255
  name = "aws-lc-sys"
256
- version = "0.28.0"
256
+ version = "0.28.2"
257
257
  source = "registry+https://github.com/rust-lang/crates.io-index"
258
- checksum = "b9f7720b74ed28ca77f90769a71fd8c637a0137f6fae4ae947e1050229cff57f"
258
+ checksum = "bfa9b6986f250236c27e5a204062434a773a13243d2ffc2955f37bdba4c5c6a1"
259
259
  dependencies = [
260
260
  "bindgen",
261
261
  "cc",
@@ -467,9 +467,9 @@ dependencies = [
467
467
 
468
468
  [[package]]
469
469
  name = "brotli-decompressor"
470
- version = "4.0.2"
470
+ version = "4.0.3"
471
471
  source = "registry+https://github.com/rust-lang/crates.io-index"
472
- checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37"
472
+ checksum = "a334ef7c9e23abf0ce748e8cd309037da93e606ad52eb372e4ce327a0dcfbdfd"
473
473
  dependencies = [
474
474
  "alloc-no-stdlib",
475
475
  "alloc-stdlib",
@@ -587,9 +587,9 @@ dependencies = [
587
587
 
588
588
  [[package]]
589
589
  name = "clap"
590
- version = "4.5.36"
590
+ version = "4.5.37"
591
591
  source = "registry+https://github.com/rust-lang/crates.io-index"
592
- checksum = "2df961d8c8a0d08aa9945718ccf584145eee3f3aa06cddbeac12933781102e04"
592
+ checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071"
593
593
  dependencies = [
594
594
  "clap_builder",
595
595
  "clap_derive",
@@ -597,9 +597,9 @@ dependencies = [
597
597
 
598
598
  [[package]]
599
599
  name = "clap_builder"
600
- version = "4.5.36"
600
+ version = "4.5.37"
601
601
  source = "registry+https://github.com/rust-lang/crates.io-index"
602
- checksum = "132dbda40fb6753878316a489d5a1242a8ef2f0d9e47ba01c951ea8aa7d013a5"
602
+ checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2"
603
603
  dependencies = [
604
604
  "anstream",
605
605
  "anstyle",
@@ -764,9 +764,9 @@ dependencies = [
764
764
 
765
765
  [[package]]
766
766
  name = "data-encoding"
767
- version = "2.8.0"
767
+ version = "2.9.0"
768
768
  source = "registry+https://github.com/rust-lang/crates.io-index"
769
- checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010"
769
+ checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
770
770
 
771
771
  [[package]]
772
772
  name = "der-parser"
@@ -1176,9 +1176,9 @@ dependencies = [
1176
1176
 
1177
1177
  [[package]]
1178
1178
  name = "h2"
1179
- version = "0.4.8"
1179
+ version = "0.4.9"
1180
1180
  source = "registry+https://github.com/rust-lang/crates.io-index"
1181
- checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2"
1181
+ checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633"
1182
1182
  dependencies = [
1183
1183
  "atomic-waker",
1184
1184
  "bytes",
@@ -1363,7 +1363,7 @@ dependencies = [
1363
1363
  "bytes",
1364
1364
  "futures-channel",
1365
1365
  "futures-util",
1366
- "h2 0.4.8",
1366
+ "h2 0.4.9",
1367
1367
  "http 1.3.1",
1368
1368
  "http-body 1.0.1",
1369
1369
  "httparse",
@@ -1644,7 +1644,7 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
1644
1644
 
1645
1645
  [[package]]
1646
1646
  name = "itsi-server"
1647
- version = "0.2.2"
1647
+ version = "0.2.4"
1648
1648
  dependencies = [
1649
1649
  "argon2",
1650
1650
  "async-channel",
@@ -1681,7 +1681,7 @@ dependencies = [
1681
1681
  "parking_lot",
1682
1682
  "percent-encoding",
1683
1683
  "pin-project",
1684
- "rand 0.9.0",
1684
+ "rand 0.9.1",
1685
1685
  "rcgen",
1686
1686
  "redis",
1687
1687
  "regex",
@@ -1713,7 +1713,7 @@ dependencies = [
1713
1713
  "axum-server",
1714
1714
  "base64 0.22.1",
1715
1715
  "chrono",
1716
- "clap 4.5.36",
1716
+ "clap 4.5.37",
1717
1717
  "futures",
1718
1718
  "log",
1719
1719
  "num-bigint",
@@ -1841,9 +1841,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
1841
1841
 
1842
1842
  [[package]]
1843
1843
  name = "libc"
1844
- version = "0.2.171"
1844
+ version = "0.2.172"
1845
1845
  source = "registry+https://github.com/rust-lang/crates.io-index"
1846
- checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
1846
+ checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
1847
1847
 
1848
1848
  [[package]]
1849
1849
  name = "libloading"
@@ -1852,7 +1852,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1852
1852
  checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
1853
1853
  dependencies = [
1854
1854
  "cfg-if",
1855
- "windows-targets 0.52.6",
1855
+ "windows-targets 0.48.5",
1856
1856
  ]
1857
1857
 
1858
1858
  [[package]]
@@ -2366,9 +2366,9 @@ dependencies = [
2366
2366
 
2367
2367
  [[package]]
2368
2368
  name = "proc-macro2"
2369
- version = "1.0.94"
2369
+ version = "1.0.95"
2370
2370
  source = "registry+https://github.com/rust-lang/crates.io-index"
2371
- checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
2371
+ checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
2372
2372
  dependencies = [
2373
2373
  "unicode-ident",
2374
2374
  ]
@@ -2401,7 +2401,7 @@ checksum = "b820744eb4dc9b57a3398183639c511b5a26d2ed702cedd3febaa1393caa22cc"
2401
2401
  dependencies = [
2402
2402
  "bytes",
2403
2403
  "getrandom 0.3.2",
2404
- "rand 0.9.0",
2404
+ "rand 0.9.1",
2405
2405
  "ring",
2406
2406
  "rustc-hash 2.1.1",
2407
2407
  "rustls",
@@ -2466,13 +2466,12 @@ dependencies = [
2466
2466
 
2467
2467
  [[package]]
2468
2468
  name = "rand"
2469
- version = "0.9.0"
2469
+ version = "0.9.1"
2470
2470
  source = "registry+https://github.com/rust-lang/crates.io-index"
2471
- checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94"
2471
+ checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97"
2472
2472
  dependencies = [
2473
2473
  "rand_chacha 0.9.0",
2474
2474
  "rand_core 0.9.3",
2475
- "zerocopy",
2476
2475
  ]
2477
2476
 
2478
2477
  [[package]]
@@ -3062,9 +3061,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
3062
3061
 
3063
3062
  [[package]]
3064
3063
  name = "signal-hook-registry"
3065
- version = "1.4.2"
3064
+ version = "1.4.5"
3066
3065
  source = "registry+https://github.com/rust-lang/crates.io-index"
3067
- checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
3066
+ checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
3068
3067
  dependencies = [
3069
3068
  "libc",
3070
3069
  ]
@@ -16,8 +16,8 @@ Gem::Specification.new do |spec|
16
16
  spec.required_rubygems_version = ">= 3.1"
17
17
 
18
18
  spec.metadata["homepage_uri"] = spec.homepage
19
- spec.metadata["source_code_uri"] = "https://github.com/wouterken/itsi/server"
20
- spec.metadata["changelog_uri"] = "https://github.com/wouterken/itsi/server/blob/main/CHANGELOG.md"
19
+ spec.metadata["source_code_uri"] = "https://github.com/wouterken/itsi"
20
+ spec.metadata["changelog_uri"] = "https://github.com/wouterken/itsi/blob/main/CHANGELOG.md"
21
21
 
22
22
  # Specify which files should be added to the gem when it is released.
23
23
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -3,7 +3,7 @@
3
3
  require "stringio"
4
4
  require "socket"
5
5
  require "uri"
6
- require_relative 'http_request/response_status_shortcodes'
6
+ require_relative "http_request/response_status_shortcodes"
7
7
 
8
8
  module Itsi
9
9
  class HttpRequest
@@ -22,7 +22,7 @@ module Itsi
22
22
  end
23
23
  [header, rack_form]
24
24
  end.to_h.tap do |hm|
25
- hm.default_proc = proc { |hsh, key| "HTTP_#{key.upcase.gsub(/-/, "_")}" }
25
+ hm.default_proc = proc { |_, key| "HTTP_#{key.upcase.gsub(/-/, "_")}" }
26
26
  end
27
27
 
28
28
  def to_rack_env
@@ -78,7 +78,7 @@ module Itsi
78
78
  end
79
79
 
80
80
  def respond(
81
- _body = nil, _status = 200, _headers = nil,
81
+ _body = nil, _status = 200, _headers = nil, # rubocop:disable Lint/UnderscorePrefixedVariableName
82
82
  json: nil,
83
83
  html: nil,
84
84
  text: nil,
@@ -90,13 +90,12 @@ module Itsi
90
90
  body: _body,
91
91
  &blk
92
92
  )
93
-
94
93
  if json
95
94
  if as
96
95
  begin
97
96
  validate!(json, as: as)
98
97
  rescue ValidationError => e
99
- json = {type: 'error', message: "Validation Error: #{e.message}"}
98
+ json = { type: "error", message: "Validation Error: #{e.message}" }
100
99
  status = 400
101
100
  end
102
101
  end
@@ -118,15 +117,13 @@ module Itsi
118
117
  end
119
118
 
120
119
  response.respond(status: status, headers: headers, body: body, hijack: hijack, &blk)
121
-
122
-
123
120
  end
124
121
 
125
122
  def hijack
126
123
  self.hijacked = true
127
124
  UNIXSocket.pair.yield_self do |(server_sock, app_sock)|
128
125
  server_sock.autoclose = false
129
- self.response.hijack(server_sock.fileno)
126
+ response.hijack(server_sock.fileno)
130
127
  server_sock.sync = true
131
128
  app_sock.sync = true
132
129
  app_sock
@@ -150,37 +147,37 @@ module Itsi
150
147
  as ? apply_schema!(params, as) : params
151
148
  end
152
149
 
153
- def params(schema=nil)
154
- params = case
155
- when url_encoded? then URI.decode_www_form(build_input_io.read).to_h
156
- when json? then JSON.parse(build_input_io.read)
157
- when multipart?
158
- Rack::Multipart::Parser.parse(
159
- build_input_io,
160
- content_length,
161
- content_type,
162
- Rack::Multipart::Parser::TEMPFILE_FACTORY,
163
- Rack::Multipart::Parser::BUFSIZE,
164
- Rack::Utils.default_query_parser
165
- ).params
166
- else
167
- {}
168
- end
150
+ def params(schema = nil)
151
+ params = if url_encoded?
152
+ URI.decode_www_form(build_input_io.read).to_h
153
+ elsif json?
154
+ JSON.parse(build_input_io.read)
155
+ elsif multipart?
156
+ Rack::Multipart::Parser.parse(
157
+ build_input_io,
158
+ content_length,
159
+ content_type,
160
+ Rack::Multipart::Parser::TEMPFILE_FACTORY,
161
+ Rack::Multipart::Parser::BUFSIZE,
162
+ Rack::Utils.default_query_parser
163
+ ).params
164
+ else
165
+ {}
166
+ end
169
167
 
170
168
  params.merge!(query_params).merge!(url_params)
171
169
  validated = schema ? apply_schema!(params, schema) : params
172
- unless block_given?
173
- if multipart?
174
- raise "#params must take a block for multipart requests"
175
- else
176
- return validated
177
- end
178
- else
170
+ if block_given?
179
171
  yield validated
172
+ else
173
+ raise "#params must take a block for multipart requests" if multipart?
174
+
175
+ validated
176
+
180
177
  end
181
178
  rescue ValidationError => e
182
179
  if response.json?
183
- respond(json: {error: e.message}, status: 400)
180
+ respond(json: { error: e.message }, status: 400)
184
181
  else
185
182
  respond(e.message, 400)
186
183
  end
@@ -191,7 +188,7 @@ module Itsi
191
188
  # Unexpected error.
192
189
  # Don't reveal potential sensitive information to client.
193
190
  if response.json?
194
- respond(json: {error: "Internal Server Error"}, status: 500)
191
+ respond(json: { error: "Internal Server Error" }, status: 500)
195
192
  else
196
193
  respond("Internal Server Error", 500)
197
194
  end
@@ -205,7 +202,7 @@ module Itsi
205
202
  if params.key?(:tempfile)
206
203
  params[:tempfile].unlink
207
204
  else
208
- params.each_value { |v| clean_temp_files(v) }
205
+ params.each_value { |v| clean_temp_files(v) }
209
206
  end
210
207
  when Array then params.each { |v| clean_temp_files(v) }
211
208
  end