fluid_cli 0.1.2

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 (329) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +1 -0
  3. data/dev.yml +5 -0
  4. data/exe/fluid +24 -0
  5. data/lib/fluid_cli/api.rb +135 -0
  6. data/lib/fluid_cli/assets/post_auth_page/index.html.erb +34 -0
  7. data/lib/fluid_cli/assets/post_auth_page/style.css +58 -0
  8. data/lib/fluid_cli/command.rb +55 -0
  9. data/lib/fluid_cli/commands/help.rb +21 -0
  10. data/lib/fluid_cli/commands/login.rb +30 -0
  11. data/lib/fluid_cli/commands/logout.rb +38 -0
  12. data/lib/fluid_cli/commands/switch.rb +23 -0
  13. data/lib/fluid_cli/commands/theme/common/company_helper.rb +15 -0
  14. data/lib/fluid_cli/commands/theme/common/root_helper.rb +95 -0
  15. data/lib/fluid_cli/commands/theme/dev.rb +61 -0
  16. data/lib/fluid_cli/commands/theme/help.rb +21 -0
  17. data/lib/fluid_cli/commands/theme/init.rb +46 -0
  18. data/lib/fluid_cli/commands/theme/pull.rb +68 -0
  19. data/lib/fluid_cli/commands/theme/push.rb +132 -0
  20. data/lib/fluid_cli/commands/theme.rb +23 -0
  21. data/lib/fluid_cli/commands/whoami.rb +23 -0
  22. data/lib/fluid_cli/commands.rb +19 -0
  23. data/lib/fluid_cli/company_switcher.rb +69 -0
  24. data/lib/fluid_cli/context.rb +691 -0
  25. data/lib/fluid_cli/db.rb +114 -0
  26. data/lib/fluid_cli/entry_point.rb +10 -0
  27. data/lib/fluid_cli/environment.rb +32 -0
  28. data/lib/fluid_cli/file_system_listener.rb +29 -0
  29. data/lib/fluid_cli/form.rb +42 -0
  30. data/lib/fluid_cli/git.rb +319 -0
  31. data/lib/fluid_cli/http_request.rb +54 -0
  32. data/lib/fluid_cli/identity_auth/servlet.rb +39 -0
  33. data/lib/fluid_cli/identity_auth.rb +126 -0
  34. data/lib/fluid_cli/options.rb +38 -0
  35. data/lib/fluid_cli/theme/dev_server/certificate_manager.rb +79 -0
  36. data/lib/fluid_cli/theme/dev_server/errors.rb +9 -0
  37. data/lib/fluid_cli/theme/dev_server/header_hash.rb +98 -0
  38. data/lib/fluid_cli/theme/dev_server/hooks/file_change_hook.rb +39 -0
  39. data/lib/fluid_cli/theme/dev_server/hot_reload/resources/hot-reload-no-script.html +27 -0
  40. data/lib/fluid_cli/theme/dev_server/hot_reload/resources/hot_reload.js +28 -0
  41. data/lib/fluid_cli/theme/dev_server/hot_reload/resources/sse_client.js +43 -0
  42. data/lib/fluid_cli/theme/dev_server/hot_reload/resources/theme.js +16 -0
  43. data/lib/fluid_cli/theme/dev_server/hot_reload/script_injector.rb +54 -0
  44. data/lib/fluid_cli/theme/dev_server/hot_reload.rb +75 -0
  45. data/lib/fluid_cli/theme/dev_server/local_assets.rb +92 -0
  46. data/lib/fluid_cli/theme/dev_server/proxy.rb +235 -0
  47. data/lib/fluid_cli/theme/dev_server/proxy_param_builder.rb +82 -0
  48. data/lib/fluid_cli/theme/dev_server/reload_mode.rb +34 -0
  49. data/lib/fluid_cli/theme/dev_server/sse.rb +75 -0
  50. data/lib/fluid_cli/theme/dev_server/watcher.rb +57 -0
  51. data/lib/fluid_cli/theme/dev_server/web_server.rb +140 -0
  52. data/lib/fluid_cli/theme/dev_server.rb +289 -0
  53. data/lib/fluid_cli/theme/development_theme.rb +101 -0
  54. data/lib/fluid_cli/theme/file.rb +105 -0
  55. data/lib/fluid_cli/theme/forms/select.rb +33 -0
  56. data/lib/fluid_cli/theme/mime_type.rb +34 -0
  57. data/lib/fluid_cli/theme/presenters/theme_presenter.rb +49 -0
  58. data/lib/fluid_cli/theme/presenters/themes_presenter.rb +31 -0
  59. data/lib/fluid_cli/theme/root.rb +62 -0
  60. data/lib/fluid_cli/theme/syncer/checksums.rb +66 -0
  61. data/lib/fluid_cli/theme/syncer/downloader.rb +54 -0
  62. data/lib/fluid_cli/theme/syncer/error_reporter.rb +45 -0
  63. data/lib/fluid_cli/theme/syncer/merger.rb +53 -0
  64. data/lib/fluid_cli/theme/syncer/operation.rb +58 -0
  65. data/lib/fluid_cli/theme/syncer/standard_reporter.rb +32 -0
  66. data/lib/fluid_cli/theme/syncer/unsupported_script_warning.rb +90 -0
  67. data/lib/fluid_cli/theme/syncer/uploader/forms/apply_to_all.rb +41 -0
  68. data/lib/fluid_cli/theme/syncer/uploader/forms/apply_to_all_form.rb +37 -0
  69. data/lib/fluid_cli/theme/syncer/uploader/forms/base_strategy_form.rb +64 -0
  70. data/lib/fluid_cli/theme/syncer/uploader/forms/select_delete_strategy.rb +29 -0
  71. data/lib/fluid_cli/theme/syncer/uploader/forms/select_update_strategy.rb +30 -0
  72. data/lib/fluid_cli/theme/syncer/uploader/json_delete_handler.rb +49 -0
  73. data/lib/fluid_cli/theme/syncer/uploader/json_update_handler.rb +71 -0
  74. data/lib/fluid_cli/theme/syncer/uploader.rb +105 -0
  75. data/lib/fluid_cli/theme/syncer.rb +412 -0
  76. data/lib/fluid_cli/theme/theme.rb +186 -0
  77. data/lib/fluid_cli/theme/ui/sync_progress_bar.rb +22 -0
  78. data/lib/fluid_cli/thread_pool/job.rb +35 -0
  79. data/lib/fluid_cli/thread_pool.rb +49 -0
  80. data/lib/fluid_cli/version.rb +3 -0
  81. data/lib/fluid_cli.rb +59 -0
  82. data/vendor/deps/base64/.document +5 -0
  83. data/vendor/deps/base64/.gitignore +9 -0
  84. data/vendor/deps/base64/BSDL +22 -0
  85. data/vendor/deps/base64/COPYING +56 -0
  86. data/vendor/deps/base64/Gemfile +9 -0
  87. data/vendor/deps/base64/LEGAL +60 -0
  88. data/vendor/deps/base64/README.md +48 -0
  89. data/vendor/deps/base64/Rakefile +31 -0
  90. data/vendor/deps/base64/base64.gemspec +28 -0
  91. data/vendor/deps/base64/bin/console +14 -0
  92. data/vendor/deps/base64/bin/setup +8 -0
  93. data/vendor/deps/base64/lib/base64.rb +382 -0
  94. data/vendor/deps/base64/sig/base64.rbs +358 -0
  95. data/vendor/deps/base64/test/base64/test_base64.rb +115 -0
  96. data/vendor/deps/base64/test_sig/test_base64.rb +44 -0
  97. data/vendor/deps/cli-kit/REVISION +1 -0
  98. data/vendor/deps/cli-kit/lib/cli/kit/args/definition.rb +286 -0
  99. data/vendor/deps/cli-kit/lib/cli/kit/args/evaluation.rb +215 -0
  100. data/vendor/deps/cli-kit/lib/cli/kit/args/parser/node.rb +128 -0
  101. data/vendor/deps/cli-kit/lib/cli/kit/args/parser.rb +125 -0
  102. data/vendor/deps/cli-kit/lib/cli/kit/args/tokenizer.rb +130 -0
  103. data/vendor/deps/cli-kit/lib/cli/kit/args.rb +16 -0
  104. data/vendor/deps/cli-kit/lib/cli/kit/base_command.rb +30 -0
  105. data/vendor/deps/cli-kit/lib/cli/kit/command_help.rb +268 -0
  106. data/vendor/deps/cli-kit/lib/cli/kit/command_registry.rb +150 -0
  107. data/vendor/deps/cli-kit/lib/cli/kit/config.rb +137 -0
  108. data/vendor/deps/cli-kit/lib/cli/kit/core_ext.rb +28 -0
  109. data/vendor/deps/cli-kit/lib/cli/kit/error_handler.rb +166 -0
  110. data/vendor/deps/cli-kit/lib/cli/kit/executor.rb +92 -0
  111. data/vendor/deps/cli-kit/lib/cli/kit/ini.rb +91 -0
  112. data/vendor/deps/cli-kit/lib/cli/kit/levenshtein.rb +92 -0
  113. data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +94 -0
  114. data/vendor/deps/cli-kit/lib/cli/kit/opts.rb +248 -0
  115. data/vendor/deps/cli-kit/lib/cli/kit/parse_args.rb +55 -0
  116. data/vendor/deps/cli-kit/lib/cli/kit/resolver.rb +66 -0
  117. data/vendor/deps/cli-kit/lib/cli/kit/support/test_helper.rb +260 -0
  118. data/vendor/deps/cli-kit/lib/cli/kit/support.rb +11 -0
  119. data/vendor/deps/cli-kit/lib/cli/kit/system.rb +290 -0
  120. data/vendor/deps/cli-kit/lib/cli/kit/util.rb +118 -0
  121. data/vendor/deps/cli-kit/lib/cli/kit/version.rb +7 -0
  122. data/vendor/deps/cli-kit/lib/cli/kit.rb +139 -0
  123. data/vendor/deps/cli-ui/REVISION +1 -0
  124. data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +218 -0
  125. data/vendor/deps/cli-ui/lib/cli/ui/color.rb +101 -0
  126. data/vendor/deps/cli-ui/lib/cli/ui/formatter.rb +219 -0
  127. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +67 -0
  128. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/box.rb +179 -0
  129. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/bracket.rb +152 -0
  130. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +127 -0
  131. data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +286 -0
  132. data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +92 -0
  133. data/vendor/deps/cli-ui/lib/cli/ui/os.rb +63 -0
  134. data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +64 -0
  135. data/vendor/deps/cli-ui/lib/cli/ui/progress.rb +132 -0
  136. data/vendor/deps/cli-ui/lib/cli/ui/progress_reporter.rb +209 -0
  137. data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +583 -0
  138. data/vendor/deps/cli-ui/lib/cli/ui/prompt/options_handler.rb +36 -0
  139. data/vendor/deps/cli-ui/lib/cli/ui/prompt.rb +381 -0
  140. data/vendor/deps/cli-ui/lib/cli/ui/spinner/async.rb +48 -0
  141. data/vendor/deps/cli-ui/lib/cli/ui/spinner/spin_group.rb +602 -0
  142. data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +79 -0
  143. data/vendor/deps/cli-ui/lib/cli/ui/stdout_router.rb +399 -0
  144. data/vendor/deps/cli-ui/lib/cli/ui/table.rb +83 -0
  145. data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +55 -0
  146. data/vendor/deps/cli-ui/lib/cli/ui/truncater.rb +106 -0
  147. data/vendor/deps/cli-ui/lib/cli/ui/version.rb +8 -0
  148. data/vendor/deps/cli-ui/lib/cli/ui/widgets/base.rb +46 -0
  149. data/vendor/deps/cli-ui/lib/cli/ui/widgets/status.rb +79 -0
  150. data/vendor/deps/cli-ui/lib/cli/ui/widgets.rb +89 -0
  151. data/vendor/deps/cli-ui/lib/cli/ui/work_queue.rb +142 -0
  152. data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +61 -0
  153. data/vendor/deps/cli-ui/lib/cli/ui.rb +359 -0
  154. data/vendor/deps/cli-ui/vendor/reentrant_mutex.rb +78 -0
  155. data/vendor/deps/debug/CONTRIBUTING.md +573 -0
  156. data/vendor/deps/debug/Gemfile +10 -0
  157. data/vendor/deps/debug/LICENSE.txt +22 -0
  158. data/vendor/deps/debug/README.md +996 -0
  159. data/vendor/deps/debug/Rakefile +57 -0
  160. data/vendor/deps/debug/TODO.md +23 -0
  161. data/vendor/deps/debug/debug.gemspec +33 -0
  162. data/vendor/deps/debug/exe/rdbg +53 -0
  163. data/vendor/deps/debug/ext/debug/Makefile +273 -0
  164. data/vendor/deps/debug/ext/debug/debug.c +228 -0
  165. data/vendor/deps/debug/ext/debug/debug_version.h +1 -0
  166. data/vendor/deps/debug/ext/debug/extconf.rb +27 -0
  167. data/vendor/deps/debug/ext/debug/iseq_collector.c +93 -0
  168. data/vendor/deps/debug/lib/debug/abbrev_command.rb +77 -0
  169. data/vendor/deps/debug/lib/debug/breakpoint.rb +556 -0
  170. data/vendor/deps/debug/lib/debug/client.rb +263 -0
  171. data/vendor/deps/debug/lib/debug/color.rb +123 -0
  172. data/vendor/deps/debug/lib/debug/config.rb +592 -0
  173. data/vendor/deps/debug/lib/debug/console.rb +224 -0
  174. data/vendor/deps/debug/lib/debug/dap_custom/traceInspector.rb +336 -0
  175. data/vendor/deps/debug/lib/debug/debug.bundle +0 -0
  176. data/vendor/deps/debug/lib/debug/frame_info.rb +190 -0
  177. data/vendor/deps/debug/lib/debug/irb_integration.rb +37 -0
  178. data/vendor/deps/debug/lib/debug/local.rb +115 -0
  179. data/vendor/deps/debug/lib/debug/open.rb +13 -0
  180. data/vendor/deps/debug/lib/debug/open_nonstop.rb +15 -0
  181. data/vendor/deps/debug/lib/debug/prelude.rb +50 -0
  182. data/vendor/deps/debug/lib/debug/server.rb +534 -0
  183. data/vendor/deps/debug/lib/debug/server_cdp.rb +1348 -0
  184. data/vendor/deps/debug/lib/debug/server_dap.rb +1108 -0
  185. data/vendor/deps/debug/lib/debug/session.rb +2667 -0
  186. data/vendor/deps/debug/lib/debug/source_repository.rb +150 -0
  187. data/vendor/deps/debug/lib/debug/start.rb +5 -0
  188. data/vendor/deps/debug/lib/debug/thread_client.rb +1457 -0
  189. data/vendor/deps/debug/lib/debug/tracer.rb +241 -0
  190. data/vendor/deps/debug/lib/debug/version.rb +5 -0
  191. data/vendor/deps/debug/lib/debug.rb +9 -0
  192. data/vendor/deps/debug/misc/README.md.erb +660 -0
  193. data/vendor/deps/listen/.github/release-drafter.yml +17 -0
  194. data/vendor/deps/listen/.github/workflows/development.yml +67 -0
  195. data/vendor/deps/listen/.github/workflows/push.yml +12 -0
  196. data/vendor/deps/listen/.gitignore +28 -0
  197. data/vendor/deps/listen/.rspec +3 -0
  198. data/vendor/deps/listen/.rubocop.yml +283 -0
  199. data/vendor/deps/listen/.yardopts +11 -0
  200. data/vendor/deps/listen/CHANGELOG.md +1 -0
  201. data/vendor/deps/listen/CONTRIBUTING.md +45 -0
  202. data/vendor/deps/listen/Gemfile +33 -0
  203. data/vendor/deps/listen/Guardfile +26 -0
  204. data/vendor/deps/listen/LICENSE.txt +22 -0
  205. data/vendor/deps/listen/README.md +490 -0
  206. data/vendor/deps/listen/Rakefile +154 -0
  207. data/vendor/deps/listen/bin/listen +11 -0
  208. data/vendor/deps/listen/lib/listen/adapter/base.rb +129 -0
  209. data/vendor/deps/listen/lib/listen/adapter/bsd.rb +104 -0
  210. data/vendor/deps/listen/lib/listen/adapter/config.rb +31 -0
  211. data/vendor/deps/listen/lib/listen/adapter/darwin.rb +77 -0
  212. data/vendor/deps/listen/lib/listen/adapter/linux.rb +108 -0
  213. data/vendor/deps/listen/lib/listen/adapter/polling.rb +40 -0
  214. data/vendor/deps/listen/lib/listen/adapter/windows.rb +96 -0
  215. data/vendor/deps/listen/lib/listen/adapter.rb +43 -0
  216. data/vendor/deps/listen/lib/listen/backend.rb +40 -0
  217. data/vendor/deps/listen/lib/listen/change.rb +69 -0
  218. data/vendor/deps/listen/lib/listen/cli.rb +65 -0
  219. data/vendor/deps/listen/lib/listen/directory.rb +93 -0
  220. data/vendor/deps/listen/lib/listen/error.rb +11 -0
  221. data/vendor/deps/listen/lib/listen/event/config.rb +39 -0
  222. data/vendor/deps/listen/lib/listen/event/loop.rb +92 -0
  223. data/vendor/deps/listen/lib/listen/event/processor.rb +128 -0
  224. data/vendor/deps/listen/lib/listen/event/queue.rb +52 -0
  225. data/vendor/deps/listen/lib/listen/file.rb +95 -0
  226. data/vendor/deps/listen/lib/listen/fsm.rb +131 -0
  227. data/vendor/deps/listen/lib/listen/listener/config.rb +41 -0
  228. data/vendor/deps/listen/lib/listen/listener.rb +136 -0
  229. data/vendor/deps/listen/lib/listen/logger.rb +65 -0
  230. data/vendor/deps/listen/lib/listen/monotonic_time.rb +27 -0
  231. data/vendor/deps/listen/lib/listen/options.rb +24 -0
  232. data/vendor/deps/listen/lib/listen/queue_optimizer.rb +129 -0
  233. data/vendor/deps/listen/lib/listen/record/entry.rb +66 -0
  234. data/vendor/deps/listen/lib/listen/record/symlink_detector.rb +47 -0
  235. data/vendor/deps/listen/lib/listen/record.rb +122 -0
  236. data/vendor/deps/listen/lib/listen/silencer/controller.rb +50 -0
  237. data/vendor/deps/listen/lib/listen/silencer.rb +106 -0
  238. data/vendor/deps/listen/lib/listen/thread.rb +54 -0
  239. data/vendor/deps/listen/lib/listen/version.rb +5 -0
  240. data/vendor/deps/listen/lib/listen.rb +47 -0
  241. data/vendor/deps/listen/listen.gemspec +40 -0
  242. data/vendor/deps/listen/spec/acceptance/listen_spec.rb +320 -0
  243. data/vendor/deps/listen/spec/lib/listen/adapter/base_spec.rb +101 -0
  244. data/vendor/deps/listen/spec/lib/listen/adapter/bsd_spec.rb +13 -0
  245. data/vendor/deps/listen/spec/lib/listen/adapter/config_spec.rb +122 -0
  246. data/vendor/deps/listen/spec/lib/listen/adapter/darwin_spec.rb +82 -0
  247. data/vendor/deps/listen/spec/lib/listen/adapter/linux_spec.rb +199 -0
  248. data/vendor/deps/listen/spec/lib/listen/adapter/polling_spec.rb +83 -0
  249. data/vendor/deps/listen/spec/lib/listen/adapter/windows_spec.rb +13 -0
  250. data/vendor/deps/listen/spec/lib/listen/adapter_spec.rb +69 -0
  251. data/vendor/deps/listen/spec/lib/listen/backend_spec.rb +82 -0
  252. data/vendor/deps/listen/spec/lib/listen/change_spec.rb +102 -0
  253. data/vendor/deps/listen/spec/lib/listen/cli_spec.rb +116 -0
  254. data/vendor/deps/listen/spec/lib/listen/directory_spec.rb +284 -0
  255. data/vendor/deps/listen/spec/lib/listen/event/config_spec.rb +33 -0
  256. data/vendor/deps/listen/spec/lib/listen/event/loop_spec.rb +118 -0
  257. data/vendor/deps/listen/spec/lib/listen/event/processor_spec.rb +250 -0
  258. data/vendor/deps/listen/spec/lib/listen/event/queue_spec.rb +118 -0
  259. data/vendor/deps/listen/spec/lib/listen/file_spec.rb +254 -0
  260. data/vendor/deps/listen/spec/lib/listen/fsm_spec.rb +147 -0
  261. data/vendor/deps/listen/spec/lib/listen/listener/config_spec.rb +29 -0
  262. data/vendor/deps/listen/spec/lib/listen/listener_spec.rb +321 -0
  263. data/vendor/deps/listen/spec/lib/listen/logger_spec.rb +212 -0
  264. data/vendor/deps/listen/spec/lib/listen/monotonic_time_spec.rb +58 -0
  265. data/vendor/deps/listen/spec/lib/listen/queue_optimizer_spec.rb +111 -0
  266. data/vendor/deps/listen/spec/lib/listen/record_spec.rb +424 -0
  267. data/vendor/deps/listen/spec/lib/listen/silencer/controller_spec.rb +97 -0
  268. data/vendor/deps/listen/spec/lib/listen/silencer_spec.rb +109 -0
  269. data/vendor/deps/listen/spec/lib/listen/thread_spec.rb +133 -0
  270. data/vendor/deps/listen/spec/lib/listen_spec.rb +25 -0
  271. data/vendor/deps/listen/spec/spec_helper.rb +49 -0
  272. data/vendor/deps/listen/spec/support/acceptance_helper.rb +260 -0
  273. data/vendor/deps/listen/spec/support/fixtures_helper.rb +32 -0
  274. data/vendor/deps/listen/spec/support/platform_helper.rb +17 -0
  275. data/vendor/deps/observer/.github/dependabot.yml +6 -0
  276. data/vendor/deps/observer/.github/workflows/test.yml +33 -0
  277. data/vendor/deps/observer/.gitignore +8 -0
  278. data/vendor/deps/observer/BSDL +22 -0
  279. data/vendor/deps/observer/COPYING +56 -0
  280. data/vendor/deps/observer/Gemfile +9 -0
  281. data/vendor/deps/observer/README.md +139 -0
  282. data/vendor/deps/observer/Rakefile +10 -0
  283. data/vendor/deps/observer/bin/console +14 -0
  284. data/vendor/deps/observer/bin/setup +8 -0
  285. data/vendor/deps/observer/lib/observer.rb +229 -0
  286. data/vendor/deps/observer/observer.gemspec +32 -0
  287. data/vendor/deps/observer/test/test_observer.rb +66 -0
  288. data/vendor/deps/webrick/.gitignore +9 -0
  289. data/vendor/deps/webrick/Gemfile +3 -0
  290. data/vendor/deps/webrick/LICENSE.txt +22 -0
  291. data/vendor/deps/webrick/README.md +61 -0
  292. data/vendor/deps/webrick/Rakefile +10 -0
  293. data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
  294. data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
  295. data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
  296. data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
  297. data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
  298. data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
  299. data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
  300. data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
  301. data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
  302. data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
  303. data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
  304. data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
  305. data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
  306. data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
  307. data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
  308. data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
  309. data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
  310. data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
  311. data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
  312. data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
  313. data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  314. data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
  315. data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
  316. data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
  317. data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
  318. data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
  319. data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
  320. data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
  321. data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
  322. data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
  323. data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
  324. data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
  325. data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
  326. data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
  327. data/vendor/deps/webrick/lib/webrick.rb +232 -0
  328. data/vendor/deps/webrick/webrick.gemspec +74 -0
  329. metadata +412 -0
@@ -0,0 +1,399 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require 'cli/ui'
5
+ require 'stringio'
6
+ require_relative '../../../vendor/reentrant_mutex'
7
+
8
+ module CLI
9
+ module UI
10
+ module StdoutRouter
11
+ class Writer
12
+ #: (io_like stream, Symbol name) -> void
13
+ def initialize(stream, name)
14
+ @stream = stream
15
+ @name = name
16
+ end
17
+
18
+ #: (*Object args) -> Integer
19
+ def write(*args)
20
+ strs = args.map do |obj|
21
+ str = obj.to_s
22
+ if auto_frame_inset?
23
+ str = str.dup # unfreeze
24
+ str = str.to_s.force_encoding(Encoding::UTF_8)
25
+ apply_line_prefix(str, CLI::UI::Frame.prefix)
26
+ else
27
+ @pending_newline = false
28
+ str
29
+ end
30
+ end
31
+
32
+ # hook return of false suppresses output.
33
+ if (hook = Thread.current[:cliui_output_hook])
34
+ return 0 if hook.call(strs.join, @name) == false
35
+ end
36
+
37
+ stream_args = prepend_id(@stream, strs) #: as untyped
38
+ ret = @stream.write_without_cli_ui(*stream_args) #: as Integer
39
+ if (dup = StdoutRouter.duplicate_output_to)
40
+ begin
41
+ dup_args = prepend_id(dup, strs) #: as untyped
42
+ dup.write(*dup_args) #: as Integer
43
+ rescue IOError
44
+ # Ignore
45
+ end
46
+ end
47
+ ret
48
+ end
49
+
50
+ private
51
+
52
+ #: (io_like stream, Array[String] args) -> Array[String]
53
+ def prepend_id(stream, args)
54
+ return args unless prepend_id_for_stream(stream)
55
+
56
+ args.map do |a|
57
+ next a if a.chomp.empty? # allow new lines to be new lines
58
+
59
+ "[#{Thread.current[:cliui_output_id][:id]}] #{a}"
60
+ end
61
+ end
62
+
63
+ #: (io_like stream) -> bool
64
+ def prepend_id_for_stream(stream)
65
+ return false unless Thread.current[:cliui_output_id]
66
+ return true if Thread.current[:cliui_output_id][:streams].include?(stream)
67
+
68
+ false
69
+ end
70
+
71
+ #: -> bool
72
+ def auto_frame_inset?
73
+ !Thread.current[:no_cliui_frame_inset]
74
+ end
75
+
76
+ #: (String str, String prefix) -> String
77
+ def apply_line_prefix(str, prefix)
78
+ return '' if str.empty?
79
+
80
+ prefixed = +''
81
+ str.force_encoding(Encoding::UTF_8).lines.each do |line|
82
+ if @pending_newline
83
+ prefixed << line
84
+ @pending_newline = false
85
+ else
86
+ prefixed << prefix << line
87
+ end
88
+ end
89
+ @pending_newline = !str.end_with?("\n")
90
+ prefixed
91
+ end
92
+ end
93
+
94
+ class Capture
95
+ @capture_mutex = Mutex.new
96
+ @stdin_mutex = CLI::UI::ReentrantMutex.new
97
+ @active_captures = 0
98
+ @saved_stdin = nil
99
+
100
+ class << self
101
+ #: -> Capture?
102
+ def current_capture
103
+ Thread.current[:cliui_current_capture]
104
+ end
105
+
106
+ #: -> Capture
107
+ def current_capture!
108
+ current_capture #: as !nil
109
+ end
110
+
111
+ #: [T] { -> T } -> T
112
+ def in_alternate_screen(&block)
113
+ stdin_synchronize do
114
+ previous_print_captured_output = current_capture&.print_captured_output
115
+ current_capture&.print_captured_output = true
116
+ Spinner::SpinGroup.pause_spinners do
117
+ if outermost_uncaptured?
118
+ begin
119
+ prev_hook = Thread.current[:cliui_output_hook]
120
+ Thread.current[:cliui_output_hook] = nil
121
+ replay = current_capture!.stdout.gsub(ANSI.match_alternate_screen, '')
122
+ CLI::UI.raw do
123
+ print("#{ANSI.enter_alternate_screen}#{replay}")
124
+ end
125
+ ensure
126
+ Thread.current[:cliui_output_hook] = prev_hook
127
+ end
128
+ end
129
+ block.call
130
+ ensure
131
+ print(ANSI.exit_alternate_screen) if outermost_uncaptured?
132
+ end
133
+ ensure
134
+ current_capture&.print_captured_output = !!previous_print_captured_output
135
+ end
136
+ end
137
+
138
+ #: [T] { -> T } -> T
139
+ def stdin_synchronize(&block)
140
+ @stdin_mutex.synchronize do
141
+ case $stdin
142
+ when BlockingInput
143
+ $stdin.synchronize do
144
+ block.call
145
+ end
146
+ else
147
+ block.call
148
+ end
149
+ end
150
+ end
151
+
152
+ #: [T] { -> T } -> T
153
+ def with_stdin_masked(&block)
154
+ @capture_mutex.synchronize do
155
+ if @active_captures.zero?
156
+ @stdin_mutex.synchronize do
157
+ @saved_stdin = $stdin
158
+ $stdin = BlockingInput.new(@saved_stdin)
159
+ end
160
+ end
161
+ @active_captures += 1
162
+ end
163
+
164
+ yield
165
+ ensure
166
+ @capture_mutex.synchronize do
167
+ @active_captures -= 1
168
+ if @active_captures.zero?
169
+ @stdin_mutex.synchronize do
170
+ $stdin = @saved_stdin
171
+ end
172
+ end
173
+ end
174
+ end
175
+
176
+ private
177
+
178
+ #: -> bool
179
+ def outermost_uncaptured?
180
+ @stdin_mutex.count == 1 && $stdin.is_a?(BlockingInput)
181
+ end
182
+ end
183
+
184
+ #: (?with_frame_inset: bool, ?merged_output: bool, ?duplicate_output_to: IO) { -> void } -> void
185
+ def initialize(
186
+ with_frame_inset: true,
187
+ merged_output: false,
188
+ duplicate_output_to: File.open(File::NULL, 'w'),
189
+ &block
190
+ )
191
+ @with_frame_inset = with_frame_inset
192
+ @merged_output = merged_output
193
+ @duplicate_output_to = duplicate_output_to
194
+ @block = block
195
+ @print_captured_output = false
196
+ @out = StringIO.new
197
+ @err = StringIO.new
198
+ end
199
+
200
+ #: bool
201
+ attr_accessor :print_captured_output
202
+
203
+ #: -> untyped
204
+ def run
205
+ require 'stringio'
206
+
207
+ StdoutRouter.assert_enabled!
208
+
209
+ Thread.current[:cliui_current_capture] = self
210
+
211
+ prev_frame_inset = Thread.current[:no_cliui_frame_inset]
212
+ prev_hook = Thread.current[:cliui_output_hook]
213
+
214
+ if Thread.current.respond_to?(:report_on_exception)
215
+ Thread.current.report_on_exception = false
216
+ end
217
+
218
+ self.class.with_stdin_masked do
219
+ Thread.current[:no_cliui_frame_inset] = !@with_frame_inset
220
+ Thread.current[:cliui_output_hook] = ->(data, stream) do
221
+ stream = :stdout if @merged_output
222
+ case stream
223
+ when :stdout
224
+ @out.write(data)
225
+ @duplicate_output_to.write(data)
226
+ when :stderr
227
+ @err.write(data)
228
+ else raise
229
+ end
230
+ print_captured_output # suppress writing to terminal by default
231
+ end
232
+
233
+ @block.call
234
+ end
235
+ ensure
236
+ Thread.current[:cliui_output_hook] = prev_hook
237
+ Thread.current[:no_cliui_frame_inset] = prev_frame_inset
238
+ Thread.current[:cliui_current_capture] = nil
239
+ end
240
+
241
+ #: -> String
242
+ def stdout
243
+ @out.string
244
+ end
245
+
246
+ #: -> String
247
+ def stderr
248
+ @err.string
249
+ end
250
+
251
+ class BlockingInput
252
+ #: (IO stream) -> void
253
+ def initialize(stream)
254
+ @stream = stream
255
+ @m = CLI::UI::ReentrantMutex.new
256
+ end
257
+
258
+ #: [T] { -> T } -> T
259
+ def synchronize(&block)
260
+ @m.synchronize do
261
+ previous_allowed_to_read = Thread.current[:cliui_allowed_to_read]
262
+ Thread.current[:cliui_allowed_to_read] = true
263
+ block.call
264
+ ensure
265
+ Thread.current[:cliui_allowed_to_read] = previous_allowed_to_read
266
+ end
267
+ end
268
+
269
+ READING_METHODS = [
270
+ :each,
271
+ :each_byte,
272
+ :each_char,
273
+ :each_codepoint,
274
+ :each_line,
275
+ :getbyte,
276
+ :getc,
277
+ :getch,
278
+ :gets,
279
+ :read,
280
+ :read_nonblock,
281
+ :readbyte,
282
+ :readchar,
283
+ :readline,
284
+ :readlines,
285
+ :readpartial,
286
+ ]
287
+
288
+ NON_READING_METHODS = IO.instance_methods(false) - READING_METHODS
289
+
290
+ READING_METHODS.each do |method|
291
+ define_method(method) do |*args, **kwargs, &block|
292
+ raise(IOError, 'closed stream') unless Thread.current[:cliui_allowed_to_read]
293
+
294
+ @stream.send(method, *args, **kwargs, &block)
295
+ end
296
+ end
297
+
298
+ NON_READING_METHODS.each do |method|
299
+ define_method(method) do |*args, **kwargs, &block|
300
+ @stream.send(method, *args, **kwargs, &block)
301
+ end
302
+ end
303
+ end
304
+ end
305
+
306
+ class << self
307
+ WRITE_WITHOUT_CLI_UI = :write_without_cli_ui
308
+
309
+ NotEnabled = Class.new(StandardError)
310
+
311
+ #: io_like?
312
+ attr_accessor :duplicate_output_to
313
+
314
+ #: [T] (on_streams: Array[io_like]) { (String id) -> T } -> T
315
+ def with_id(on_streams:, &block)
316
+ require 'securerandom'
317
+ id = format('%05d', rand(10**5))
318
+ Thread.current[:cliui_output_id] = {
319
+ id: id,
320
+ streams: on_streams.map do |stream|
321
+ stream #: as io_like
322
+ end,
323
+ }
324
+ yield(id)
325
+ ensure
326
+ Thread.current[:cliui_output_id] = nil
327
+ end
328
+
329
+ #: -> Hash[Symbol, (String | io_like)]?
330
+ def current_id
331
+ Thread.current[:cliui_output_id]
332
+ end
333
+
334
+ #: -> void
335
+ def assert_enabled!
336
+ raise NotEnabled unless enabled?
337
+ end
338
+
339
+ #: [T] { -> T } -> T
340
+ def with_enabled(&block)
341
+ enable
342
+ yield
343
+ ensure
344
+ disable
345
+ end
346
+
347
+ # TODO: remove this
348
+ #: -> void
349
+ def ensure_activated
350
+ enable unless enabled?
351
+ end
352
+
353
+ #: -> bool
354
+ def enable
355
+ return false if enabled?($stdout) || enabled?($stderr)
356
+
357
+ activate($stdout, :stdout)
358
+ activate($stderr, :stderr)
359
+ true
360
+ end
361
+
362
+ #: (?io_like stream) -> bool
363
+ def enabled?(stream = $stdout)
364
+ stream.respond_to?(WRITE_WITHOUT_CLI_UI)
365
+ end
366
+
367
+ #: -> bool
368
+ def disable
369
+ return false unless enabled?($stdout) && enabled?($stderr)
370
+
371
+ deactivate($stdout)
372
+ deactivate($stderr)
373
+ true
374
+ end
375
+
376
+ private
377
+
378
+ #: (io_like stream) -> void
379
+ def deactivate(stream)
380
+ sc = stream.singleton_class
381
+ sc.send(:remove_method, :write)
382
+ sc.send(:alias_method, :write, WRITE_WITHOUT_CLI_UI)
383
+ end
384
+
385
+ #: (io_like stream, Symbol streamname) -> void
386
+ def activate(stream, streamname)
387
+ writer = StdoutRouter::Writer.new(stream, streamname)
388
+
389
+ raise if stream.respond_to?(WRITE_WITHOUT_CLI_UI)
390
+
391
+ stream.singleton_class.send(:alias_method, WRITE_WITHOUT_CLI_UI, :write)
392
+ stream.define_singleton_method(:write) do |*args|
393
+ writer.write(*args)
394
+ end
395
+ end
396
+ end
397
+ end
398
+ end
399
+ end
@@ -0,0 +1,83 @@
1
+ # typed: true
2
+
3
+ module CLI
4
+ module UI
5
+ module Table
6
+ class << self
7
+ # Prints a formatted table to the specified output
8
+ # Automatically pads columns to align based on the longest cell in each column,
9
+ # ignoring the width of ANSI color codes.
10
+ #
11
+ # ==== Attributes
12
+ #
13
+ # * +table+ - (required) 2D array of strings representing the table data
14
+ #
15
+ # ==== Options
16
+ #
17
+ # * +:col_spacing+ - Number of spaces between columns. Defaults to 1
18
+ # * +:to+ - Target stream, like $stdout or $stderr. Can be anything with print and puts methods,
19
+ # or under Sorbet, IO or StringIO. Defaults to $stdout
20
+ #
21
+ # ==== Example
22
+ #
23
+ # CLI::UI::Table.puts_table([
24
+ # ["{{bold:header_1}}", "{{bold:header_2}}"],
25
+ # ["really_long_cell", "short"],
26
+ # ["row2", "row2"]
27
+ # ])
28
+ #
29
+ # Default Output:
30
+ # header_1 header_2
31
+ # really_long_cell short
32
+ # row2 row2
33
+ #
34
+ #: (Array[Array[String]] table, ?col_spacing: Integer, ?to: io_like) -> void
35
+ def puts_table(table, col_spacing: 1, to: $stdout)
36
+ col_sizes = table.transpose.map do |col|
37
+ col.map { |cell| CLI::UI::ANSI.printing_width(CLI::UI.resolve_text(cell)) }.max
38
+ end
39
+
40
+ table.each do |row|
41
+ padded_row = row.each_with_index.map do |cell, i|
42
+ col_size = col_sizes[i] #: as !nil # guaranteed to be non-nil
43
+ cell_size = CLI::UI::ANSI.printing_width(CLI::UI.resolve_text(cell))
44
+ padded_cell = cell + ' ' * (col_size - cell_size)
45
+ padded_cell
46
+ end
47
+ CLI::UI.puts(padded_row.join(' ' * col_spacing), to: to)
48
+ end
49
+ end
50
+
51
+ # Captures a table's output as an array of strings without printing to the terminal
52
+ # Can be used to further manipulate or format the table output
53
+ #
54
+ # ==== Attributes
55
+ #
56
+ # * +table+ - (required) 2D array of strings representing the table data
57
+ #
58
+ # ==== Options
59
+ #
60
+ # * +:col_spacing+ - Number of spaces between columns. Defaults to 1
61
+ #
62
+ # ==== Returns
63
+ #
64
+ # * +Array[String]+ - Array of strings, each representing a row of the formatted table
65
+ #
66
+ # ==== Example
67
+ #
68
+ # CLI::UI::Table.capture_table([
69
+ # ["{{bold:header_1}}", "{{bold:header_2}}"],
70
+ # ["really_long_cell", "short"],
71
+ # ["row2", "row2"]
72
+ # ])
73
+ #
74
+ #: (Array[Array[String]] table, ?col_spacing: Integer) -> Array[String]
75
+ def capture_table(table, col_spacing: 1)
76
+ strio = StringIO.new
77
+ puts_table(table, col_spacing: col_spacing, to: strio)
78
+ strio.string.lines.map(&:chomp)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,55 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require 'cli/ui'
5
+ require 'io/console'
6
+
7
+ module CLI
8
+ module UI
9
+ module Terminal
10
+ DEFAULT_WIDTH = 80
11
+ DEFAULT_HEIGHT = 24
12
+
13
+ class << self
14
+ # Returns the width of the terminal, if possible
15
+ # Otherwise will return DEFAULT_WIDTH
16
+ #
17
+ #: -> Integer
18
+ def width
19
+ winsize[1]
20
+ end
21
+
22
+ # Returns the width of the terminal, if possible
23
+ # Otherwise, will return DEFAULT_HEIGHT
24
+ #
25
+ #: -> Integer
26
+ def height
27
+ winsize[0]
28
+ end
29
+
30
+ #: -> [Integer, Integer]
31
+ def winsize
32
+ @winsize ||= begin
33
+ winsize = IO.console.winsize
34
+ setup_winsize_trap
35
+
36
+ if winsize.any?(&:zero?)
37
+ [DEFAULT_HEIGHT, DEFAULT_WIDTH]
38
+ else
39
+ winsize
40
+ end
41
+ rescue
42
+ [DEFAULT_HEIGHT, DEFAULT_WIDTH]
43
+ end
44
+ end
45
+
46
+ #: -> void
47
+ def setup_winsize_trap
48
+ @winsize_trap ||= Signal.trap('WINCH') do
49
+ @winsize = nil
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,106 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require 'cli/ui'
5
+
6
+ module CLI
7
+ module UI
8
+ # Truncater truncates a string to a provided printable width.
9
+ module Truncater
10
+ PARSE_ROOT = :root
11
+ PARSE_ANSI = :ansi
12
+ PARSE_ESC = :esc
13
+ PARSE_ZWJ = :zwj
14
+
15
+ ESC = 0x1b
16
+ LEFT_SQUARE_BRACKET = 0x5b
17
+ ZWJ = 0x200d # emojipedia.org/emoji-zwj-sequences
18
+ SEMICOLON = 0x3b
19
+
20
+ # EMOJI_RANGE in particular is super inaccurate. This is best-effort.
21
+ # If you need this to be more accurate, we'll almost certainly accept a
22
+ # PR improving it.
23
+ EMOJI_RANGE = 0x1f300..0x1f5ff
24
+ NUMERIC_RANGE = 0x30..0x39
25
+ LC_ALPHA_RANGE = 0x40..0x5a
26
+ UC_ALPHA_RANGE = 0x60..0x71
27
+
28
+ TRUNCATED = "\x1b[0m…"
29
+
30
+ class << self
31
+ #: (String text, Integer printing_width) -> String
32
+ def call(text, printing_width)
33
+ return text if text.size <= printing_width
34
+
35
+ width = 0
36
+ mode = PARSE_ROOT
37
+ truncation_index = nil #: Integer?
38
+
39
+ codepoints = text.codepoints
40
+ codepoints.each.with_index do |cp, index|
41
+ case mode
42
+ when PARSE_ROOT
43
+ case cp
44
+ when ESC # non-printable, followed by some more non-printables.
45
+ mode = PARSE_ESC
46
+ when ZWJ # non-printable, followed by another non-printable.
47
+ mode = PARSE_ZWJ
48
+ else
49
+ width += width(cp)
50
+ if width >= printing_width
51
+ truncation_index ||= index
52
+ # it looks like we could break here but we still want the
53
+ # width calculation for the rest of the characters.
54
+ end
55
+ end
56
+ when PARSE_ESC
57
+ mode = case cp
58
+ when LEFT_SQUARE_BRACKET
59
+ PARSE_ANSI
60
+ else
61
+ PARSE_ROOT
62
+ end
63
+ when PARSE_ANSI
64
+ # ANSI escape codes preeeetty much have the format of:
65
+ # \x1b[0-9;]+[A-Za-z]
66
+ case cp
67
+ when NUMERIC_RANGE, SEMICOLON
68
+ when LC_ALPHA_RANGE, UC_ALPHA_RANGE
69
+ mode = PARSE_ROOT
70
+ else
71
+ # unexpected. let's just go back to the root state I guess?
72
+ mode = PARSE_ROOT
73
+ end
74
+ when PARSE_ZWJ
75
+ # consume any character and consider it as having no width
76
+ # width(x+ZWJ+y) = width(x).
77
+ mode = PARSE_ROOT
78
+ end
79
+ end
80
+
81
+ # Without the `width <= printing_width` check, we truncate
82
+ # "foo\x1b[0m" for a width of 3, but it should not be truncated.
83
+ # It's specifically for the case where we decided "Yes, this is the
84
+ # point at which we'd have to add a truncation!" but it's actually
85
+ # the end of the string.
86
+ return text if !truncation_index || width <= printing_width
87
+
88
+ slice = codepoints[0...truncation_index] #: as !nil
89
+ slice.pack('U*') + TRUNCATED
90
+ end
91
+
92
+ private
93
+
94
+ #: (Integer printable_codepoint) -> Integer
95
+ def width(printable_codepoint)
96
+ case printable_codepoint
97
+ when EMOJI_RANGE
98
+ 2
99
+ else
100
+ 1
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,8 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CLI
5
+ module UI
6
+ VERSION = '2.6.0'
7
+ end
8
+ end
@@ -0,0 +1,46 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require('cli/ui')
5
+
6
+ module CLI
7
+ module UI
8
+ module Widgets
9
+ # @abstract
10
+ class Base
11
+ class << self
12
+ #: (String argstring) -> String
13
+ def call(argstring)
14
+ new(argstring).render
15
+ end
16
+ end
17
+
18
+ #: (String argstring) -> void
19
+ def initialize(argstring)
20
+ pat = self.class.argparse_pattern
21
+ unless (@match_data = pat.match(argstring))
22
+ raise(Widgets::InvalidWidgetArguments.new(argstring, pat))
23
+ end
24
+
25
+ @match_data.names.each do |name|
26
+ instance_variable_set(:"@#{name}", @match_data[name])
27
+ end
28
+ end
29
+
30
+ class << self
31
+ # @abstract
32
+ #: -> Regexp
33
+ def argparse_pattern
34
+ raise(NotImplementedError)
35
+ end
36
+ end
37
+
38
+ # @abstract
39
+ #: -> String
40
+ def render
41
+ raise(NotImplementedError)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end