ehbrs-tools 0.16.5 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ehbrs/cooking_book.rb +9 -0
  3. data/lib/ehbrs/cooking_book/build.rb +45 -0
  4. data/lib/ehbrs/cooking_book/build/base_page.rb +43 -0
  5. data/lib/ehbrs/cooking_book/build/index_page.rb +26 -0
  6. data/lib/ehbrs/cooking_book/build/recipe_page.rb +27 -0
  7. data/lib/ehbrs/cooking_book/project.rb +31 -0
  8. data/lib/ehbrs/cooking_book/recipe.rb +37 -0
  9. data/lib/ehbrs/cooking_book/recipe/ingredient.rb +21 -0
  10. data/lib/ehbrs/cooking_book/recipe/measure.rb +60 -0
  11. data/lib/ehbrs/cooking_book/recipe/part.rb +32 -0
  12. data/lib/ehbrs/music.rb +9 -0
  13. data/lib/ehbrs/music/album.rb +42 -0
  14. data/lib/ehbrs/observers/base.rb +1 -1
  15. data/lib/ehbrs/observers/with_persistence.rb +1 -1
  16. data/lib/ehbrs/patches/module/erb_template.rb +11 -0
  17. data/lib/ehbrs/patches/object/erb_template.rb +9 -0
  18. data/lib/ehbrs/patches/object/template.rb +7 -0
  19. data/lib/ehbrs/runner.rb +6 -13
  20. data/lib/ehbrs/runner/cooking_book.rb +30 -0
  21. data/lib/ehbrs/runner/cooking_book/build.rb +50 -0
  22. data/lib/ehbrs/runner/fs/used_space.rb +1 -1
  23. data/lib/ehbrs/runner/music.rb +16 -0
  24. data/lib/ehbrs/runner/music/selected.rb +63 -0
  25. data/lib/ehbrs/runner/telegram.rb +26 -0
  26. data/lib/ehbrs/runner/telegram/send_message.rb +29 -0
  27. data/lib/ehbrs/runner/videos/probe.rb +2 -2
  28. data/lib/ehbrs/runner/videos/unsupported.rb +1 -1
  29. data/lib/ehbrs/runner/web_utils/videos/upload.rb +1 -1
  30. data/lib/ehbrs/telegram.rb +9 -0
  31. data/lib/ehbrs/telegram/message_sending.rb +32 -0
  32. data/lib/ehbrs/tools/application.rb +13 -0
  33. data/lib/ehbrs/tools/instance.rb +16 -0
  34. data/lib/ehbrs/tools/version.rb +1 -1
  35. data/lib/ehbrs/videos/convert_job.rb +1 -1
  36. data/lib/ehbrs/videos/series/rename/line_result.rb +1 -1
  37. data/lib/ehbrs/videos/unsupported/check_support.rb +3 -2
  38. data/lib/ehbrs/videos/unsupported/fixes/supported_codec.rb +1 -1
  39. data/lib/ehbrs/videos/unsupported/profiles/aoc.rb +27 -0
  40. data/lib/ehbrs/videos/unsupported/search.rb +1 -1
  41. data/lib/ehbrs/videos/unsupported/track.rb +1 -1
  42. data/template/ehbrs/cooking_book/build/base_page/layout.html.erb +20 -0
  43. data/template/ehbrs/cooking_book/build/index_page/inner.html.erb +6 -0
  44. data/template/ehbrs/cooking_book/build/recipe_page/inner.html.erb +6 -0
  45. data/template/ehbrs/cooking_book/build/recipe_page/part.html.erb +27 -0
  46. data/vendor/aranha-selenium/lib/aranha/selenium/driver_factory/base.rb +8 -0
  47. data/vendor/aranha-selenium/lib/aranha/selenium/driver_factory/chrome.rb +10 -5
  48. data/vendor/aranha-selenium/lib/aranha/selenium/driver_factory/firefox.rb +25 -11
  49. data/vendor/aranha-selenium/lib/aranha/selenium/version.rb +1 -1
  50. data/vendor/eac_cli/eac_cli.gemspec +5 -2
  51. data/vendor/eac_cli/lib/eac_cli/core_ext.rb +2 -0
  52. data/vendor/eac_cli/lib/eac_cli/default_runner.rb +1 -1
  53. data/vendor/eac_cli/lib/eac_cli/definition/alternative.rb +4 -7
  54. data/vendor/eac_cli/lib/eac_cli/definition/argument_option.rb +8 -0
  55. data/vendor/eac_cli/lib/eac_cli/definition/base_option.rb +26 -10
  56. data/vendor/eac_cli/lib/eac_cli/definition/base_option/initialize_args_parser.rb +47 -0
  57. data/vendor/eac_cli/lib/eac_cli/definition/boolean_option.rb +8 -0
  58. data/vendor/eac_cli/lib/eac_cli/definition/help_formatter.rb +2 -2
  59. data/vendor/eac_cli/lib/eac_cli/definition/positional_argument.rb +12 -0
  60. data/vendor/eac_cli/lib/eac_cli/docopt/doc_builder.rb +18 -2
  61. data/vendor/eac_cli/lib/eac_cli/docopt/doc_builder/alternative.rb +3 -3
  62. data/vendor/eac_cli/lib/eac_cli/docopt/runner_context_replacement.rb +15 -0
  63. data/vendor/eac_cli/lib/eac_cli/docopt/runner_extension.rb +7 -2
  64. data/vendor/eac_cli/lib/eac_cli/docopt_runner.rb +43 -0
  65. data/vendor/eac_cli/lib/eac_cli/docopt_runner/_class_methods.rb +16 -0
  66. data/vendor/eac_cli/lib/eac_cli/docopt_runner/_doc.rb +23 -0
  67. data/vendor/eac_cli/lib/eac_cli/docopt_runner/_settings.rb +17 -0
  68. data/vendor/eac_cli/lib/eac_cli/docopt_runner/_subcommands.rb +152 -0
  69. data/vendor/eac_cli/lib/eac_cli/old_configs.rb +36 -0
  70. data/vendor/eac_cli/lib/eac_cli/old_configs/entry_reader.rb +80 -0
  71. data/vendor/eac_cli/lib/eac_cli/old_configs/password_entry_reader.rb +16 -0
  72. data/vendor/eac_cli/lib/eac_cli/old_configs/read_entry_options.rb +44 -0
  73. data/vendor/eac_cli/lib/eac_cli/old_configs/store_passwords_entry_reader.rb +25 -0
  74. data/vendor/eac_cli/lib/eac_cli/parser/alternative.rb +4 -4
  75. data/vendor/eac_cli/lib/eac_cli/parser/alternative/long_options.rb +37 -0
  76. data/vendor/eac_cli/lib/eac_cli/parser/alternative/option_argument.rb +29 -0
  77. data/vendor/eac_cli/lib/eac_cli/parser/alternative/options.rb +7 -36
  78. data/vendor/eac_cli/lib/eac_cli/parser/alternative/short_options.rb +47 -0
  79. data/vendor/eac_cli/lib/eac_cli/parser/collector.rb +3 -17
  80. data/vendor/eac_cli/lib/eac_cli/patches/module.rb +4 -0
  81. data/vendor/eac_cli/lib/eac_cli/patches/module/speaker.rb +10 -0
  82. data/vendor/eac_cli/lib/eac_cli/patches/object/runner_with.rb +3 -2
  83. data/vendor/eac_cli/lib/eac_cli/runner.rb +0 -48
  84. data/vendor/eac_cli/lib/eac_cli/runner/after_class_methods.rb +29 -0
  85. data/vendor/eac_cli/lib/eac_cli/runner/context.rb +2 -1
  86. data/vendor/eac_cli/lib/eac_cli/runner/instance_methods.rb +38 -0
  87. data/vendor/eac_cli/lib/eac_cli/runner_with/subcommands.rb +19 -3
  88. data/vendor/eac_cli/lib/eac_cli/runner_with/subcommands/definition_concern.rb +10 -0
  89. data/vendor/eac_cli/lib/eac_cli/runner_with_set.rb +50 -0
  90. data/vendor/eac_cli/lib/eac_cli/speaker.rb +131 -0
  91. data/vendor/eac_cli/lib/eac_cli/speaker/_class_methods.rb +37 -0
  92. data/vendor/eac_cli/lib/eac_cli/speaker/_constants.rb +12 -0
  93. data/vendor/eac_cli/lib/eac_cli/speaker/list.rb +61 -0
  94. data/vendor/eac_cli/lib/eac_cli/speaker/node.rb +24 -0
  95. data/vendor/eac_cli/lib/eac_cli/version.rb +1 -1
  96. data/vendor/eac_cli/spec/lib/eac_cli/definition/alternative_spec.rb +4 -0
  97. data/vendor/eac_cli/spec/lib/eac_cli/docopt/runner_extension_spec.rb +1 -1
  98. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/console → eac_cli/spec/lib/eac_cli}/docopt_runner_spec.rb +5 -5
  99. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/console/configs_spec.rb → eac_cli/spec/lib/eac_cli/old_configs_spec.rb} +2 -2
  100. data/vendor/eac_cli/spec/lib/eac_cli/runner_spec.rb +44 -5
  101. data/vendor/{eac_ruby_utils/spec/lib/eac_ruby_utils/console → eac_cli/spec/lib/eac_cli}/speaker_spec.rb +2 -2
  102. data/vendor/eac_cli/spec/lib/module/speaker_spec.rb +13 -0
  103. data/vendor/eac_cli/spec/rubocop_spec.rb +1 -5
  104. data/vendor/eac_cli/spec/spec_helper.rb +3 -0
  105. data/vendor/eac_docker/eac_docker.gemspec +3 -2
  106. data/vendor/eac_docker/lib/eac_docker/images/templatized.rb +1 -0
  107. data/vendor/eac_docker/lib/eac_docker/version.rb +1 -1
  108. data/vendor/eac_docker/spec/lib/eac_docker/images/templatized_spec.rb +2 -1
  109. data/vendor/eac_docker/spec/rubocop_spec.rb +1 -5
  110. data/vendor/eac_docker/spec/spec_helper.rb +3 -0
  111. data/vendor/eac_ruby_base0/Gemfile +5 -0
  112. data/vendor/eac_ruby_base0/eac_ruby_base0.gemspec +20 -0
  113. data/vendor/eac_ruby_base0/lib/eac_ruby_base0.rb +7 -0
  114. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/application.rb +69 -0
  115. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/core_ext.rb +4 -0
  116. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/jobs_runner.rb +31 -0
  117. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/patches.rb +4 -0
  118. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/patches/class.rb +4 -0
  119. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/patches/class/jobs_runner.rb +10 -0
  120. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/patches/object.rb +5 -0
  121. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/patches/object/runner_with.rb +5 -0
  122. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner.rb +52 -0
  123. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner/test_all.rb +22 -0
  124. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner_with.rb +9 -0
  125. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner_with/confirmation.rb +36 -0
  126. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner_with/filesystem_traverser.rb +52 -0
  127. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner_with/input.rb +36 -0
  128. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner_with/output.rb +58 -0
  129. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/version.rb +5 -0
  130. data/vendor/eac_ruby_base0/spec/lib/eac_ruby_base0/runner_with/confirmation_spec.rb +42 -0
  131. data/vendor/eac_ruby_base0/spec/lib/eac_ruby_base0/runner_with/output_spec.rb +81 -0
  132. data/vendor/eac_ruby_base0/spec/rubocop_spec.rb +3 -0
  133. data/vendor/eac_ruby_base0/spec/spec_helper.rb +103 -0
  134. data/vendor/eac_ruby_utils/eac_ruby_utils.gemspec +2 -3
  135. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/common_concern/module_setup.rb +16 -6
  136. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/common_constructor.rb +2 -99
  137. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/class_initialize.rb +29 -0
  138. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb +53 -0
  139. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/super_args.rb +54 -0
  140. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/command.rb +10 -5
  141. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/filesystem_cache.rb +6 -0
  142. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/logs.rb +63 -0
  143. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb +0 -2
  144. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/inflector.rb +13 -2
  145. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/list.rb +3 -2
  146. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/local_time_zone.rb +48 -0
  147. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/class/settings_provider.rb +10 -0
  148. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/kernel.rb +4 -0
  149. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/kernel/nyi.rb +10 -0
  150. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/common_concern.rb +0 -1
  151. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_nil.rb +17 -0
  152. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp/to_parser.rb +10 -0
  153. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/string/inflector.rb +4 -2
  154. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/time/required_zone.rb +11 -0
  155. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/regexp_parser.rb +34 -0
  156. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/conditional.rb +1 -4
  157. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/settings_provider.rb +10 -29
  158. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/settings_provider/setting_value.rb +69 -0
  159. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/simple_cache.rb +18 -5
  160. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  161. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/yaml.rb +8 -0
  162. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/common_concern_spec.rb +14 -4
  163. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/common_constructor_spec.rb +30 -0
  164. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/inflector_spec.rb +2 -1
  165. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/local_time_zone_spec.rb +17 -0
  166. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/settings_provider_spec.rb +8 -0
  167. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/simple_cache_spec.rb +9 -0
  168. data/vendor/eac_ruby_utils/spec/rubocop_check_spec.rb +1 -5
  169. data/vendor/eac_ruby_utils/spec/spec_helper.rb +3 -0
  170. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/videos/convert_job.rb +1 -1
  171. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/web_utils/videos/files_list.rb +1 -1
  172. metadata +134 -62
  173. data/vendor/eac_cli/lib/eac_cli/runner_with/output_file.rb +0 -30
  174. data/vendor/eac_cli/spec/lib/eac_cli/runner_with/output_file_spec.rb +0 -53
  175. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/configs.rb +0 -74
  176. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/configs/base.rb +0 -43
  177. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/configs/file.rb +0 -47
  178. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console.rb +0 -5
  179. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs.rb +0 -38
  180. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs/entry_reader.rb +0 -81
  181. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs/password_entry_reader.rb +0 -18
  182. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs/read_entry_options.rb +0 -46
  183. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs/store_passwords_entry_reader.rb +0 -27
  184. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner.rb +0 -45
  185. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_class_methods.rb +0 -18
  186. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_doc.rb +0 -25
  187. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_settings.rb +0 -19
  188. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_subcommands.rb +0 -145
  189. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker.rb +0 -133
  190. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/_class_methods.rb +0 -39
  191. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/_constants.rb +0 -14
  192. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb +0 -63
  193. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/node.rb +0 -26
  194. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/console_speaker.rb +0 -10
  195. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/template.rb +0 -16
  196. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/time/default_time_zone_set.rb +0 -5
  197. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/time/local_time_zone.rb +0 -25
  198. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash.rb +0 -56
  199. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash/entry_key_error.rb +0 -8
  200. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash/node.rb +0 -67
  201. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash/path_search.rb +0 -39
  202. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates.rb +0 -9
  203. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/directory.rb +0 -110
  204. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/file.rb +0 -50
  205. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/searcher.rb +0 -55
  206. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/variable_not_found_error.rb +0 -7
  207. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/variable_providers.rb +0 -25
  208. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/variable_providers/base.rb +0 -23
  209. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/variable_providers/entries_reader.rb +0 -25
  210. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/variable_providers/generic.rb +0 -25
  211. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/variable_providers/hash.rb +0 -29
  212. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/configs_spec.rb +0 -46
  213. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/console_speaker_spec.rb +0 -13
  214. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/template_spec.rb +0 -23
  215. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/paths_hash_spec.rb +0 -88
  216. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/file_spec.rb +0 -35
  217. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/file_spec_files/expected_content +0 -2
  218. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/file_spec_files/source.template +0 -2
  219. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/searcher_spec.rb +0 -30
  220. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/searcher_spec_files/path1/subdir1/file1.template +0 -1
  221. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/searcher_spec_files/path1/subdir1/file2 +0 -1
  222. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/searcher_spec_files/path2/subdir1/file3.template +0 -1
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/old_configs/entry_reader'
4
+
5
+ module EacCli
6
+ class OldConfigs
7
+ class PasswordEntryReader < ::EacCli::OldConfigs::EntryReader
8
+ ENTRY_KEY = 'core.store_passwords'
9
+
10
+ def initialize(console_configs, entry_key, options = {})
11
+ super(console_configs, entry_key, options.merge(noecho: true,
12
+ store: console_configs.store_passwords?))
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacCli
6
+ class OldConfigs
7
+ class ReadEntryOptions
8
+ enable_simple_cache
9
+ common_constructor :options do
10
+ self.options = options.to_h.symbolize_keys
11
+ .assert_valid_keys(DEFAULT_VALUES.keys).freeze
12
+ end
13
+
14
+ DEFAULT_VALUES = {
15
+ before_input: nil, bool: false, list: false, noecho: false, noenv: false, noinput: false,
16
+ required: true, store: true, validator: nil
17
+ }.freeze
18
+
19
+ delegate :to_h, to: :options
20
+
21
+ def [](key)
22
+ values.fetch(key.to_sym)
23
+ end
24
+
25
+ def request_input_options
26
+ values.slice(:bool, :list, :noecho)
27
+ end
28
+
29
+ private
30
+
31
+ def values_uncached
32
+ consumer = options.to_options_consumer
33
+ r = {}
34
+ DEFAULT_VALUES.each do |key, default_value|
35
+ value = consumer.consume(key)
36
+ value = default_value if value.nil?
37
+ r[key] = value
38
+ end
39
+ consumer.validate
40
+ r
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/old_configs/entry_reader'
4
+
5
+ module EacCli
6
+ class OldConfigs
7
+ class StorePasswordsEntryReader < ::EacCli::OldConfigs::EntryReader
8
+ ENTRY_KEY = 'core.store_passwords'
9
+
10
+ def initialize(console_configs)
11
+ super(console_configs, ENTRY_KEY,
12
+ before_input: -> { banner },
13
+ validator: ->(entry_value) { %w[yes no].include?(entry_value) }
14
+ )
15
+ end
16
+
17
+ def banner
18
+ infom 'Do you wanna to store passwords?'
19
+ infom 'Warning: the passwords will be store in clear text in ' \
20
+ "\"#{console_configs.configs.storage_path}\""
21
+ infom 'Enter "yes" or "no"'
22
+ end
23
+ end
24
+ end
25
+ end
@@ -35,11 +35,11 @@ module EacCli
35
35
  attr_accessor :phase
36
36
 
37
37
  def any_collect_argv_value
38
- if argv_current_option?
39
- option_collect_argv_value
40
- else
41
- positional_collect_argv_value
38
+ %w[double_dash long_option short_option].each do |arg_type|
39
+ return send("#{arg_type}_collect_argv_value") if send("argv_current_#{arg_type}?")
42
40
  end
41
+
42
+ positional_collect_argv_value
43
43
  end
44
44
 
45
45
  def collector
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacCli
4
+ class Parser
5
+ class Alternative
6
+ module LongOptions
7
+ LONG_OPTION_PREFIX = '--'
8
+ OPTION_WITH_ARGUMENT_PATTERN = /\A([^=]+)(?:=(.*))\z/.freeze
9
+
10
+ private
11
+
12
+ def argv_current_long_option?
13
+ phase == PHASE_ANY && argv_enum.peek.start_with?(LONG_OPTION_PREFIX) &&
14
+ !argv_current_double_dash?
15
+ end
16
+
17
+ def long_option_collect_argv_value
18
+ option_long, value = parse_option_current_argv
19
+ alternative.options.any? do |option|
20
+ next false unless option.long == option_long
21
+
22
+ if value.nil?
23
+ option_collect_option(option)
24
+ else
25
+ option_argument_collect(option, value)
26
+ end
27
+ end || raise_argv_current_invalid_option
28
+ end
29
+
30
+ def parse_option_current_argv
31
+ m = OPTION_WITH_ARGUMENT_PATTERN.match(argv_enum.peek)
32
+ m ? [m[1], m[2].if_present('')] : [argv_enum.peek, nil]
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacCli
4
+ class Parser
5
+ class Alternative
6
+ module OptionArgument
7
+ private
8
+
9
+ attr_accessor :argument_option
10
+
11
+ def argument_option_collect_argv(option)
12
+ self.argument_option = option
13
+ self.phase = PHASE_OPTION_ARGUMENT
14
+ end
15
+
16
+ def option_argument_collect(option, value)
17
+ collector.collect(option, value)
18
+ self.argument_option = nil
19
+ self.phase = PHASE_ANY
20
+ option
21
+ end
22
+
23
+ def option_argument_collect_argv_value
24
+ option_argument_collect(argument_option, argv_enum.peek)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -4,49 +4,20 @@ module EacCli
4
4
  class Parser
5
5
  class Alternative
6
6
  module Options
7
- DOUBLE_DASH = '--'
8
-
9
7
  private
10
8
 
11
- attr_accessor :argument_option, :double_dash
12
-
13
- def argument_option_collect_argv(option)
14
- self.argument_option = option
15
- self.phase = PHASE_OPTION_ARGUMENT
16
- end
17
-
18
- def argv_current_option?
19
- phase == PHASE_ANY && argv_enum.peek.start_with?('-')
20
- end
21
-
22
- def argv_current_double_dash?
23
- argv_enum.peek == DOUBLE_DASH && !double_dash
24
- end
25
-
26
9
  def boolean_option_collect_argv(option)
27
10
  collector.collect(option, true)
28
11
  end
29
12
 
30
- def option_argument_collect_argv_value
31
- collector.collect(argument_option, argv_enum.peek)
32
- self.argument_option = nil
33
- self.phase = PHASE_ANY
34
- end
35
-
36
- def option_collect_argv_value
37
- return double_dash_collect_argv_value if argv_current_double_dash?
38
-
39
- alternative.options.any? do |option|
40
- next false unless [option.short, option.long].include?(argv_enum.peek)
41
-
42
- if option.argument?
43
- argument_option_collect_argv(option)
44
- else
45
- boolean_option_collect_argv(option)
46
- end
13
+ def option_collect_option(option)
14
+ if option.argument?
15
+ argument_option_collect_argv(option)
16
+ else
17
+ boolean_option_collect_argv(option)
18
+ end
47
19
 
48
- true
49
- end || raise_argv_current_invalid_option
20
+ option
50
21
  end
51
22
 
52
23
  def raise_argv_current_invalid_option
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacCli
4
+ class Parser
5
+ class Alternative
6
+ module ShortOptions
7
+ SHORT_OPTION_PREFIX = '-'
8
+
9
+ private
10
+
11
+ def argv_current_short_option?
12
+ phase == PHASE_ANY && argv_enum.peek.start_with?(SHORT_OPTION_PREFIX) &&
13
+ !argv_current_long_option?
14
+ end
15
+
16
+ def find_short_option(char)
17
+ alternative.options.find do |option|
18
+ short_without_prefix(option.short).if_present(false) { |v| v == char }
19
+ end
20
+ end
21
+
22
+ def short_option_collect_argv_value
23
+ last_option = nil
24
+ short_without_prefix(argv_enum.peek).each_char do |char|
25
+ raise_error "Option \"#{last_option}\" requires a argument not provided" if
26
+ last_option.present?
27
+
28
+ collected_option = short_option_collect_char(char)
29
+ last_option = collected_option if collected_option.argument?
30
+ end
31
+ end
32
+
33
+ # @return [EacCli::Definition::BaseOption] The option collected.
34
+ def short_option_collect_char(char)
35
+ option = find_short_option(char)
36
+ raise_error "Invalid short option \"#{char}\"" unless option
37
+
38
+ option_collect_option(option)
39
+ end
40
+
41
+ def short_without_prefix(short)
42
+ short.to_s.gsub(/\A#{::Regexp.quote(SHORT_OPTION_PREFIX)}/, '')
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -24,11 +24,7 @@ module EacCli
24
24
  end
25
25
 
26
26
  def collect(option, value)
27
- if data[option].is_a?(::Array)
28
- data[option] << value
29
- else
30
- data[option] = value
31
- end
27
+ data[option] = option.build_value(value, data[option])
32
28
  end
33
29
 
34
30
  def supplied?(option)
@@ -42,18 +38,8 @@ module EacCli
42
38
  end
43
39
 
44
40
  def default_values
45
- definition.options.each { |option| data[option] = option_default_value(option) }
46
- definition.positional.each do |positional|
47
- data[positional] = positional_default_value(positional)
48
- end
49
- end
50
-
51
- def option_default_value(option)
52
- option.argument? ? nil : false
53
- end
54
-
55
- def positional_default_value(positional)
56
- positional.repeat? ? [] : nil
41
+ definition.options.each { |option| data[option] = option.default_value }
42
+ definition.positional.each { |positional| data[positional] = positional.default_value }
57
43
  end
58
44
  end
59
45
  end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/require_sub'
4
+ ::EacRubyUtils.require_sub(__FILE__)
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/speaker'
4
+ require 'eac_ruby_utils/patch'
5
+
6
+ class Module
7
+ def enable_speaker
8
+ ::EacRubyUtils.patch(self, ::EacCli::Speaker)
9
+ end
10
+ end
@@ -3,14 +3,15 @@
3
3
  require 'eac_ruby_utils/core_ext'
4
4
  require 'eac_cli/runner'
5
5
  require 'eac_cli/runner_with'
6
+ require 'eac_cli/runner_with_set'
6
7
 
7
8
  class Object
8
9
  def runner_with(*runners, &block)
9
10
  include ::EacCli::Runner
10
11
  enable_simple_cache
11
- enable_console_speaker
12
+ enable_speaker
12
13
  runners.each do |runner|
13
- include runner_with_to_module(runner)
14
+ include ::EacCli::RunnerWithSet.default.item_to_module(runner)
14
15
  end
15
16
  runner_definition(&block) if block
16
17
  end
@@ -47,53 +47,5 @@ module EacCli
47
47
  include ActiveSupport::Callbacks
48
48
  define_callbacks :run
49
49
  end
50
-
51
- module AfterClassMethods
52
- def create(*runner_context_args)
53
- r = new
54
- r.runner_context = ::EacCli::Runner::Context.new(r, *runner_context_args)
55
- r
56
- end
57
-
58
- def run(*runner_context_args)
59
- r = create(*runner_context_args)
60
- r.run_run
61
- r
62
- end
63
-
64
- def runner_definition(&block)
65
- @runner_definition ||= super_runner_definition
66
- @runner_definition.instance_eval(&block) if block
67
- @runner_definition
68
- end
69
-
70
- def super_runner_definition
71
- superclass.try(:runner_definition).if_present(&:dup) || ::EacCli::Definition.new
72
- end
73
- end
74
-
75
- module InstanceMethods
76
- def run_run
77
- parsed
78
- run_callbacks(:run) { run }
79
- rescue ::EacCli::Runner::Exit # rubocop:disable Lint/SuppressedException
80
- # Do nothing
81
- end
82
-
83
- def runner_context
84
- return @runner_context if @runner_context
85
-
86
- raise 'Context was required, but was not set yet'
87
- end
88
-
89
- def runner_context=(new_runner_context)
90
- @runner_context = new_runner_context
91
- @parsed = nil
92
- end
93
-
94
- def parsed
95
- @parsed ||= ::EacCli::Parser.new(self.class.runner_definition, runner_context.argv).parsed
96
- end
97
- end
98
50
  end
99
51
  end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacCli
4
+ module Runner
5
+ module AfterClassMethods
6
+ def create(*runner_context_args)
7
+ r = new
8
+ r.runner_context = ::EacCli::Runner::Context.new(r, *runner_context_args)
9
+ r
10
+ end
11
+
12
+ def run(*runner_context_args)
13
+ r = create(*runner_context_args)
14
+ r.run_run
15
+ r
16
+ end
17
+
18
+ def runner_definition(&block)
19
+ @runner_definition ||= super_runner_definition
20
+ @runner_definition.instance_eval(&block) if block
21
+ @runner_definition
22
+ end
23
+
24
+ def super_runner_definition
25
+ superclass.try(:runner_definition).if_present(&:dup) || ::EacCli::Definition.new
26
+ end
27
+ end
28
+ end
29
+ end
@@ -27,8 +27,9 @@ module EacCli
27
27
 
28
28
  def parent_call(method_name, *args)
29
29
  return parent.context(method_name, *args) if parent.respond_to?(:context)
30
+ return parent.runner_context.call(method_name, *args) if parent.respond_to?(:runner_context)
30
31
 
31
- parent.runner_context.call(method_name, *args)
32
+ raise "Parent #{parent} do not respond to .context or .runner_context (Runner: #{runner})"
32
33
  end
33
34
  end
34
35
  end