eac_tools 0.2.2 → 0.5.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 (256) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +42 -30
  3. data/lib/eac_tools/version.rb +1 -1
  4. data/sub/avm/lib/avm/sources/base/configuration.rb +14 -6
  5. data/sub/avm/lib/avm/sources/base/testing.rb +50 -7
  6. data/sub/avm/lib/avm/sources/tests/builder.rb +8 -1
  7. data/sub/avm/lib/avm/sources/tests/single.rb +28 -9
  8. data/sub/avm/lib/avm/version.rb +1 -1
  9. data/sub/avm-eac_generic_base0/Gemfile +3 -0
  10. data/sub/avm-eac_generic_base0/avm-eac_generic_base0.gemspec +3 -3
  11. data/sub/avm-eac_generic_base0/lib/avm/eac_generic_base0/sources/base.rb +0 -6
  12. data/sub/avm-eac_generic_base0/lib/avm/eac_generic_base0/version.rb +1 -1
  13. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/Gemfile +0 -0
  14. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/avm-eac_rails_base0.gemspec +0 -0
  15. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/lib/avm/eac_rails_base0/apache_host.rb +0 -0
  16. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/lib/avm/eac_rails_base0/apache_path.rb +0 -0
  17. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/lib/avm/eac_rails_base0/deploy.rb +0 -0
  18. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/lib/avm/eac_rails_base0/instance.rb +0 -0
  19. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/lib/avm/eac_rails_base0/runners/base.rb +0 -0
  20. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/lib/avm/eac_rails_base0/runners.rb +0 -0
  21. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/lib/avm/eac_rails_base0/sources/base.rb +14 -1
  22. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/lib/avm/eac_rails_base0/version.rb +1 -1
  23. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/lib/avm/eac_rails_base0.rb +0 -0
  24. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/spec/lib/avm/eac_rails_base0/apache_host_spec.rb +0 -0
  25. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/spec/lib/avm/eac_rails_base0/apache_host_spec_files/apache_host_spec_no_ssl_content.conf +0 -0
  26. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/spec/lib/avm/eac_rails_base0/apache_path_spec.rb +0 -0
  27. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/spec/lib/avm/eac_rails_base0/apache_path_spec_files/stub-app_0_apache_path.conf +0 -0
  28. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/spec/rubocop_spec.rb +0 -0
  29. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/spec/spec_helper.rb +0 -0
  30. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/template/avm/eac_rails_base0/apache_path/extra_content.conf +0 -0
  31. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/template/avm/eac_rails_base0/deploy/config/database.yml.template +0 -0
  32. data/sub/{avm-tools/sub/avm-eac_rails_base0 → avm-eac_rails_base0}/template/avm/eac_rails_base0/deploy/config/envvars.d/email.yml.template +0 -0
  33. data/sub/avm-eac_rails_base1/Gemfile +3 -0
  34. data/sub/avm-eac_rails_base1/avm-eac_rails_base1.gemspec +2 -2
  35. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/sources/base.rb +16 -0
  36. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/version.rb +1 -1
  37. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/version.rb +1 -1
  38. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/deploy/config/install.sh.template +4 -0
  39. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/base.rb +15 -7
  40. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/version.rb +1 -1
  41. data/sub/avm-tools/Gemfile.lock +24 -28
  42. data/sub/avm-tools/lib/avm/tools/version.rb +1 -1
  43. data/sub/eac_ruby_utils/Gemfile +16 -0
  44. data/sub/eac_ruby_utils/MIT-LICENCE +16 -0
  45. data/sub/eac_ruby_utils/README.rdoc +3 -0
  46. data/sub/eac_ruby_utils/eac_ruby_utils.gemspec +24 -0
  47. data/sub/eac_ruby_utils/lib/eac_ruby_utils/abstract_methods.rb +68 -0
  48. data/sub/eac_ruby_utils/lib/eac_ruby_utils/arguments_consumer.rb +81 -0
  49. data/sub/eac_ruby_utils/lib/eac_ruby_utils/bit.rb +46 -0
  50. data/sub/eac_ruby_utils/lib/eac_ruby_utils/bit_array.rb +81 -0
  51. data/sub/eac_ruby_utils/lib/eac_ruby_utils/blank_not_blank.rb +19 -0
  52. data/sub/eac_ruby_utils/lib/eac_ruby_utils/boolean.rb +31 -0
  53. data/sub/eac_ruby_utils/lib/eac_ruby_utils/by_reference.rb +23 -0
  54. data/sub/eac_ruby_utils/lib/eac_ruby_utils/byte.rb +105 -0
  55. data/sub/eac_ruby_utils/lib/eac_ruby_utils/byte_array.rb +36 -0
  56. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_concern/class_setup.rb +52 -0
  57. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_concern/module_setup.rb +41 -0
  58. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_concern.rb +20 -0
  59. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/class_initialize.rb +29 -0
  60. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb +53 -0
  61. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/super_args.rb +54 -0
  62. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor.rb +89 -0
  63. data/sub/eac_ruby_utils/lib/eac_ruby_utils/compact.rb +22 -0
  64. data/sub/eac_ruby_utils/lib/eac_ruby_utils/compare_by.rb +28 -0
  65. data/sub/eac_ruby_utils/lib/eac_ruby_utils/context.rb +33 -0
  66. data/sub/eac_ruby_utils/lib/eac_ruby_utils/contextualizable.rb +21 -0
  67. data/sub/eac_ruby_utils/lib/eac_ruby_utils/core_ext.rb +7 -0
  68. data/sub/eac_ruby_utils/lib/eac_ruby_utils/custom_format.rb +53 -0
  69. data/sub/eac_ruby_utils/lib/eac_ruby_utils/enum.rb +102 -0
  70. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/base_env.rb +28 -0
  71. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/command/concat.rb +33 -0
  72. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/command/envvars.rb +24 -0
  73. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/command/extra_options.rb +33 -0
  74. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/command.rb +172 -0
  75. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb +81 -0
  76. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/file.rb +22 -0
  77. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/local_env.rb +17 -0
  78. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/process.rb +27 -0
  79. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/spawn.rb +32 -0
  80. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/dasho_options.rb +53 -0
  81. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/identity_file.rb +25 -0
  82. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/quiet.rb +24 -0
  83. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/terminal.rb +34 -0
  84. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env.rb +75 -0
  85. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs.rb +23 -0
  86. data/sub/eac_ruby_utils/lib/eac_ruby_utils/fs/clearable_directory.rb +57 -0
  87. data/sub/eac_ruby_utils/lib/eac_ruby_utils/fs/extname.rb +30 -0
  88. data/sub/eac_ruby_utils/lib/eac_ruby_utils/fs/temp/directory.rb +16 -0
  89. data/sub/eac_ruby_utils/lib/eac_ruby_utils/fs/temp/file.rb +34 -0
  90. data/sub/eac_ruby_utils/lib/eac_ruby_utils/fs/temp.rb +52 -0
  91. data/sub/eac_ruby_utils/lib/eac_ruby_utils/fs.rb +9 -0
  92. data/sub/eac_ruby_utils/lib/eac_ruby_utils/gems_registry/gem.rb +79 -0
  93. data/sub/eac_ruby_utils/lib/eac_ruby_utils/gems_registry.rb +35 -0
  94. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/array_accessor.rb +32 -0
  95. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/base_accessor.rb +23 -0
  96. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/boolean_accessor.rb +16 -0
  97. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/class_methods.rb +20 -0
  98. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/common_accessor.rb +30 -0
  99. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/hash_accessor.rb +46 -0
  100. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/instance_methods.rb +21 -0
  101. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable.rb +15 -0
  102. data/sub/eac_ruby_utils/lib/eac_ruby_utils/inflector.rb +29 -0
  103. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/class_methods.rb +14 -0
  104. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/instance_methods.rb +30 -0
  105. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/integer_list.rb +23 -0
  106. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/list.rb +111 -0
  107. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/lists.rb +59 -0
  108. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/string_list.rb +19 -0
  109. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/symbol_list.rb +19 -0
  110. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/value.rb +49 -0
  111. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable.rb +17 -0
  112. data/sub/eac_ruby_utils/lib/eac_ruby_utils/local_time_zone.rb +48 -0
  113. data/sub/eac_ruby_utils/lib/eac_ruby_utils/locales/from_all_gems.rb +4 -0
  114. data/sub/eac_ruby_utils/lib/eac_ruby_utils/locales/from_gem.rb +47 -0
  115. data/sub/eac_ruby_utils/lib/eac_ruby_utils/locales/module_i18n_translate.rb +74 -0
  116. data/sub/eac_ruby_utils/lib/eac_ruby_utils/locales.rb +9 -0
  117. data/sub/eac_ruby_utils/lib/eac_ruby_utils/method_class.rb +35 -0
  118. data/sub/eac_ruby_utils/lib/eac_ruby_utils/options_consumer.rb +62 -0
  119. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patch.rb +11 -0
  120. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/class/abstract.rb +9 -0
  121. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/class/common_constructor.rb +9 -0
  122. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/class/self_included_modules.rb +7 -0
  123. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/class/settings_provider.rb +10 -0
  124. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/class.rb +4 -0
  125. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerable/boolean_combinations.rb +45 -0
  126. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerable.rb +4 -0
  127. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerator/current.rb +9 -0
  128. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerator/stopped.rb +14 -0
  129. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerator.rb +4 -0
  130. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/hash/options_consumer.rb +10 -0
  131. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/hash/sym_keys_hash.rb +10 -0
  132. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/hash/to_struct.rb +10 -0
  133. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/hash.rb +5 -0
  134. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/kernel/nyi.rb +10 -0
  135. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/kernel.rb +4 -0
  136. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/abstract_methods.rb +10 -0
  137. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/common_concern.rb +9 -0
  138. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/compare_by.rb +9 -0
  139. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/context.rb +11 -0
  140. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/i18n_translate.rb +9 -0
  141. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/immutable.rb +10 -0
  142. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/listable.rb +10 -0
  143. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/method_class.rb +9 -0
  144. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/patch.rb +9 -0
  145. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/require_sub.rb +9 -0
  146. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/simple_cache.rb +10 -0
  147. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/speaker.rb +9 -0
  148. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module.rb +4 -0
  149. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/asserts.rb +25 -0
  150. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/call_if_proc.rb +11 -0
  151. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/compact.rb +20 -0
  152. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/debug.rb +23 -0
  153. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/i18n_translate.rb +13 -0
  154. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_nil.rb +17 -0
  155. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_present.rb +19 -0
  156. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_respond.rb +22 -0
  157. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/to_pathname.rb +15 -0
  158. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/to_uri.rb +15 -0
  159. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object.rb +5 -0
  160. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/basename_noext.rb +10 -0
  161. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/basename_sub.rb +9 -0
  162. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/if_exist.rb +10 -0
  163. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/mkpath_s.rb +12 -0
  164. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/parent_n.rb +11 -0
  165. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/readlink_r.rb +11 -0
  166. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/reqdir_glob.rb +13 -0
  167. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname.rb +4 -0
  168. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp/if_match.rb +16 -0
  169. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp/to_parser.rb +10 -0
  170. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp.rb +4 -0
  171. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/string/delimited.rb +16 -0
  172. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/string/inflector.rb +11 -0
  173. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/string.rb +4 -0
  174. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/time/required_zone.rb +11 -0
  175. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/time.rb +4 -0
  176. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches.rb +4 -0
  177. data/sub/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb +51 -0
  178. data/sub/eac_ruby_utils/lib/eac_ruby_utils/regexp_parser.rb +34 -0
  179. data/sub/eac_ruby_utils/lib/eac_ruby_utils/require_sub.rb +134 -0
  180. data/sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/default_setup.rb +20 -0
  181. data/sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup/conditionals.rb +17 -0
  182. data/sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup.rb +12 -0
  183. data/sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup_manager.rb +49 -0
  184. data/sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/stub_speaker.rb +39 -0
  185. data/sub/eac_ruby_utils/lib/eac_ruby_utils/rspec.rb +9 -0
  186. data/sub/eac_ruby_utils/lib/eac_ruby_utils/ruby/command.rb +32 -0
  187. data/sub/eac_ruby_utils/lib/eac_ruby_utils/ruby/on_clean_environment.rb +38 -0
  188. data/sub/eac_ruby_utils/lib/eac_ruby_utils/ruby.rb +9 -0
  189. data/sub/eac_ruby_utils/lib/eac_ruby_utils/settings_provider/setting_value.rb +69 -0
  190. data/sub/eac_ruby_utils/lib/eac_ruby_utils/settings_provider.rb +46 -0
  191. data/sub/eac_ruby_utils/lib/eac_ruby_utils/simple_cache.rb +77 -0
  192. data/sub/eac_ruby_utils/lib/eac_ruby_utils/speaker/receiver.rb +64 -0
  193. data/sub/eac_ruby_utils/lib/eac_ruby_utils/speaker/sender.rb +32 -0
  194. data/sub/eac_ruby_utils/lib/eac_ruby_utils/speaker.rb +16 -0
  195. data/sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb +70 -0
  196. data/sub/eac_ruby_utils/lib/eac_ruby_utils/struct.rb +63 -0
  197. data/sub/eac_ruby_utils/lib/eac_ruby_utils/version.rb +5 -0
  198. data/sub/eac_ruby_utils/lib/eac_ruby_utils/yaml.rb +105 -0
  199. data/sub/eac_ruby_utils/lib/eac_ruby_utils.rb +6 -0
  200. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/abstract_methods_spec.rb +28 -0
  201. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/arguments_consumer_spec.rb +17 -0
  202. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/bit_array_spec.rb +22 -0
  203. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/blank_not_blank_spec.rb +16 -0
  204. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/byte_spec.rb +54 -0
  205. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/common_concern_spec.rb +65 -0
  206. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/common_constructor_spec.rb +125 -0
  207. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/compact_spec.rb +20 -0
  208. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/compare_by_spec.rb +38 -0
  209. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/custom_format_spec.rb +60 -0
  210. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/enum_spec.rb +43 -0
  211. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/envs/executable_spec.rb +37 -0
  212. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/envs/ssh_env_spec.rb +25 -0
  213. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/fs/extname_spec.rb +18 -0
  214. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/fs/temp/directory_spec.rb +12 -0
  215. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/fs/temp_spec.rb +52 -0
  216. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/inflector_spec.rb +16 -0
  217. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/listable_spec.rb +275 -0
  218. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/local_time_zone_spec.rb +17 -0
  219. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/method_class_spec.rb +46 -0
  220. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/options_consumer_spec.rb +80 -0
  221. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/class/abstract_spec.rb +25 -0
  222. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/class/self_included_modules_spec.rb +30 -0
  223. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/enumerable/boolean_combinations_spec.rb +39 -0
  224. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/enumerator/current_spec.rb +26 -0
  225. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/enumerator/stopped_spec.rb +32 -0
  226. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/hash/options_consumer_spec.rb +17 -0
  227. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/hash/sym_keys_hash_spec.rb +13 -0
  228. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/compare_by_spec.rb +36 -0
  229. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/listable_spec.rb +15 -0
  230. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/method_class_spec.rb +20 -0
  231. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/simple_cache_spec.rb +15 -0
  232. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/speaker_spec.rb +13 -0
  233. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/call_if_proc_spec.rb +11 -0
  234. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/compact_spec.rb +20 -0
  235. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/if_present_spec.rb +13 -0
  236. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/template_spec_files/path/my_stub_with_template +1 -0
  237. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/pathname/basename_noext_spec.rb +26 -0
  238. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/pathname/basename_sub_spec.rb +17 -0
  239. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/pathname/parent_n_spec.rb +33 -0
  240. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/string/delimited_spec.rb +34 -0
  241. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/recursive_builder_spec.rb +65 -0
  242. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/require_sub_spec/stubbed_module_a.rb +6 -0
  243. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/require_sub_spec/stubbed_not_module.rb +6 -0
  244. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/require_sub_spec.rb +19 -0
  245. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/ruby_spec.rb +22 -0
  246. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/settings_provider_spec.rb +57 -0
  247. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/simple_cache_spec.rb +129 -0
  248. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/struct_spec.rb +57 -0
  249. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/yaml_spec.rb +75 -0
  250. data/sub/eac_ruby_utils/spec/locales/pt-BR.yml +58 -0
  251. data/sub/eac_ruby_utils/spec/rubocop_check_spec.rb +3 -0
  252. data/sub/eac_ruby_utils/spec/spec_helper.rb +15 -0
  253. metadata +255 -52
  254. data/sub/avm/lib/avm/sources/tester.rb +0 -24
  255. data/sub/avm-eac_generic_base0/lib/avm/eac_generic_base0/sources/tester.rb +0 -56
  256. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/tester.rb +0 -36
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/listable/value'
4
+
5
+ module EacRubyUtils
6
+ module Listable
7
+ class List
8
+ BLANK_VALUE = nil
9
+ BLANK_KEY = :__blank
10
+
11
+ attr_reader :item
12
+
13
+ def initialize(lists, item, labels)
14
+ @lists = lists
15
+ @item = item
16
+ @values = build_values(labels)
17
+ apply_constants
18
+ end
19
+
20
+ def blank_value
21
+ @blank_value ||= ::EacRubyUtils::Listable::Value.new(self, BLANK_VALUE, BLANK_KEY, false)
22
+ end
23
+
24
+ def each_value(&block)
25
+ values.each(&block)
26
+ end
27
+
28
+ def values
29
+ @values.values.map(&:value)
30
+ end
31
+
32
+ def options
33
+ @values.values.map { |v| [v.label, v.value] }
34
+ end
35
+
36
+ def method_missing(name, *args, &block)
37
+ list = find_list_by_method(name)
38
+ list || super
39
+ end
40
+
41
+ def respond_to_missing?(name, include_all = false)
42
+ find_list_by_method(name) || super
43
+ end
44
+
45
+ def hash_keys_validate!(hash, error_class = ::StandardError)
46
+ hash.each_key { |key| value_validate!(key, error_class) }
47
+ hash
48
+ end
49
+
50
+ def i18n_key
51
+ "eac_ruby_utils.listable.#{class_i18n_key}.#{item}"
52
+ end
53
+
54
+ # @return [EacRubyUtils::Listable::Value, nil]
55
+ def instance_value(instance)
56
+ v = instance.send(item)
57
+ return blank_value if v.blank?
58
+ return @values[v] if @values.key?(v)
59
+
60
+ raise "List value unkown: \"#{v}\" (Source: #{@lists.source}, Item: #{item}, Instance: " \
61
+ "#{instance.to_debug}, Values: #{@values.keys})"
62
+ end
63
+
64
+ def value_valid?(value)
65
+ values.include?(value)
66
+ end
67
+
68
+ def value_validate!(value, error_class = ::StandardError)
69
+ return value if value_valid?(value)
70
+
71
+ raise(error_class, "Invalid value: \"#{value}\" (Valid: #{values_to_s})")
72
+ end
73
+
74
+ def values_to_s
75
+ values.map { |v| "\"#{v}\"" }.join(', ')
76
+ end
77
+
78
+ private
79
+
80
+ def class_i18n_key
81
+ @lists.source.name.underscore.to_sym
82
+ end
83
+
84
+ def find_list_by_method(method)
85
+ @values.each_value do |v|
86
+ return v if method.to_s == "value_#{v.key}"
87
+ end
88
+ nil
89
+ end
90
+
91
+ def constants
92
+ labels.each_with_index.map { |v, i| ["#{item.upcase}_#{v.upcase}", values[i]] }
93
+ end
94
+
95
+ def apply_constants
96
+ @values.each_value do |v|
97
+ @lists.source.const_set(v.constant_name, v.value)
98
+ end
99
+ end
100
+
101
+ def build_values(labels)
102
+ vs = {}
103
+ parse_labels(labels).each do |value, key|
104
+ v = Value.new(self, value, key)
105
+ vs[v.value] = v
106
+ end
107
+ vs
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/hash_with_indifferent_access'
4
+ require 'active_support/core_ext/string/inflections'
5
+ require_relative 'integer_list'
6
+ require_relative 'string_list'
7
+ require_relative 'symbol_list'
8
+
9
+ module EacRubyUtils
10
+ module Listable
11
+ class Lists
12
+ attr_reader :source
13
+
14
+ def initialize(source)
15
+ @source = source
16
+ end
17
+
18
+ %w[integer string symbol].each do |list_type|
19
+ define_method "add_#{list_type}" do |item, *labels|
20
+ add(::EacRubyUtils::Listable.const_get("#{list_type}_list".camelize), item, labels)
21
+ end
22
+ end
23
+
24
+ def method_missing(name, *args, &block)
25
+ list = find_list_by_method(name)
26
+ list || super
27
+ end
28
+
29
+ def respond_to_missing?(name, include_all = false)
30
+ find_list_by_method(name) || super
31
+ end
32
+
33
+ def acts_as_listable_items
34
+ @acts_as_listable_items ||= ActiveSupport::HashWithIndifferentAccess.new
35
+ end
36
+
37
+ private
38
+
39
+ def add(list_class, item, labels)
40
+ check_acts_as_listable_new_item(item)
41
+ acts_as_listable_items[item] = list_class.new(self, item, labels)
42
+ end
43
+
44
+ def check_acts_as_listable_new_item(item)
45
+ return unless acts_as_listable_items.key?(item)
46
+
47
+ raise "Item já adicionado anteriormente: #{item} em #{self} " \
48
+ "(#{acts_as_listable_items.keys})"
49
+ end
50
+
51
+ def find_list_by_method(method)
52
+ acts_as_listable_items.each do |item, list|
53
+ return list if method.to_sym == item.to_sym
54
+ end
55
+ nil
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'list'
4
+
5
+ module EacRubyUtils
6
+ module Listable
7
+ class StringList < ::EacRubyUtils::Listable::List
8
+ protected
9
+
10
+ def parse_labels(labels)
11
+ if labels.first.is_a?(Hash)
12
+ Hash[labels.first.map { |k, v| [k.to_s, v.to_s] }]
13
+ else
14
+ Hash[labels.map { |v| [v.to_s, v.to_s] }]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'list'
4
+
5
+ module EacRubyUtils
6
+ module Listable
7
+ class SymbolList < ::EacRubyUtils::Listable::List
8
+ protected
9
+
10
+ def parse_labels(labels)
11
+ if labels.first.is_a?(Hash)
12
+ Hash[labels.first.map { |k, v| [k.to_sym, v.to_sym] }]
13
+ else
14
+ Hash[labels.map { |v| [v.to_sym, v.to_sym] }]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/inflector'
4
+
5
+ module EacRubyUtils
6
+ module Listable
7
+ class Value
8
+ attr_reader :value, :key
9
+
10
+ def initialize(list, value, key, translation_required = true)
11
+ @list = list
12
+ @value = value
13
+ @key = key
14
+ @translation_required = translation_required
15
+ end
16
+
17
+ def to_s
18
+ "I: #{@list.item}, V: #{@value}, K: #{@key}"
19
+ end
20
+
21
+ def constant_name
22
+ ::EacRubyUtils::Inflector.variableize("#{@list.item}_#{@key}").upcase
23
+ end
24
+
25
+ def label
26
+ translate('label')
27
+ end
28
+
29
+ def description
30
+ translate('description')
31
+ end
32
+
33
+ def translation_required?
34
+ @translation_required
35
+ end
36
+
37
+ private
38
+
39
+ def translate(translate_key)
40
+ full_translate_key = "#{@list.i18n_key}.#{@key}.#{translate_key}"
41
+ if !::I18n.exists?(full_translate_key) && !translation_required?
42
+ ''
43
+ else
44
+ ::I18n.t(full_translate_key)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
4
+ Dir["#{__dir__}/#{::File.basename(__FILE__, '.*')}/*.rb"].sort.each do |partial|
5
+ require partial
6
+ end
7
+
8
+ module EacRubyUtils
9
+ module Listable
10
+ extend ActiveSupport::Concern
11
+
12
+ included do
13
+ extend(ClassMethods)
14
+ include(InstanceMethods)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/object/blank'
4
+ require 'active_support/values/time_zone'
5
+
6
+ module EacRubyUtils
7
+ module LocalTimeZone
8
+ DEBIAN_CONFIG_PATH = '/etc/timezone'
9
+
10
+ class << self
11
+ TIMEDATECTL_TIMEZONE_LINE_PATTERN = %r{\s*Time zone:\s*(\S+/\S+)\s}.freeze
12
+
13
+ # @return [ActiveSupport::TimeZone]
14
+ def auto
15
+ %w[tz_env debian_config offset].lazy.map { |s| send("by_#{s}") }.find(&:present?)
16
+ end
17
+
18
+ def auto_set
19
+ ::Time.zone = auto
20
+ end
21
+
22
+ # @return [ActiveSupport::TimeZone]
23
+ def by_debian_config
24
+ path = ::Pathname.new(DEBIAN_CONFIG_PATH)
25
+ path.exist? ? path.read.strip.if_present { |v| ::ActiveSupport::TimeZone[v] } : nil
26
+ end
27
+
28
+ # @return [ActiveSupport::TimeZone]
29
+ def by_offset
30
+ ::ActiveSupport::TimeZone[::Time.now.getlocal.gmt_offset]
31
+ end
32
+
33
+ # @return [ActiveSupport::TimeZone]
34
+ def by_timedatectl
35
+ executable = ::EacRubyUtils::Envs.local.executable('timedatectl', '--version')
36
+ return nil unless executable.exist?
37
+
38
+ TIMEDATECTL_TIMEZONE_LINE_PATTERN.if_match(executable.command.execute!) { |m| m[1] }
39
+ .if_present { |v| ::ActiveSupport::TimeZone[v] }
40
+ end
41
+
42
+ # @return [ActiveSupport::TimeZone]
43
+ def by_tz_env
44
+ ENV['TZ'].presence
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/locales/from_gem'
4
+ ::EacRubyUtils::Locales::FromGem.include_all
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'i18n'
4
+ require 'eac_ruby_utils/patches/class/common_constructor'
5
+ require 'eac_ruby_utils/patches/object/to_pathname'
6
+
7
+ module EacRubyUtils
8
+ module Locales
9
+ class FromGem
10
+ class << self
11
+ def include_all(i18n_obj = nil)
12
+ ::Gem::Specification.each { |gemspec| new(gemspec, i18n_obj).include }
13
+ end
14
+ end
15
+
16
+ LOCALES_DIR_SUBPATH = 'locale'
17
+ LOCALES_FILES_GLOB_PATTERNS = %w[*.yaml *.yml].freeze
18
+
19
+ common_constructor :gemspec, :i18n_obj, default: [nil] do
20
+ self.i18n_obj ||= ::I18n
21
+ end
22
+
23
+ # @return [Boolean]
24
+ delegate :exist?, to: :path
25
+
26
+ # @return [Pathname, nil]
27
+ def include
28
+ return nil unless exist?
29
+
30
+ ::I18n.load_path += paths_to_load.map(&:to_path)
31
+ path
32
+ end
33
+
34
+ # @return [Pathname]
35
+ def path
36
+ gemspec.gem_dir.to_pathname.join(LOCALES_DIR_SUBPATH)
37
+ end
38
+
39
+ # @return [Pathname]
40
+ def paths_to_load
41
+ return [] unless exist?
42
+
43
+ LOCALES_FILES_GLOB_PATTERNS.inject([]) { |a, e| a + path.glob(e) }
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/string/inflections'
4
+ require 'eac_ruby_utils/common_constructor'
5
+ require 'i18n'
6
+
7
+ module EacRubyUtils
8
+ module Locales
9
+ class ModuleI18nTranslate
10
+ TRANSLATE_LOCALE_KEY = :__locale
11
+
12
+ common_constructor :the_module, :entry_suffix, :values, default: [{}]
13
+
14
+ def ancestor_i18n_translate(ancestor)
15
+ t = self.class.new(ancestor, entry_suffix, values)
16
+ t.exists? ? t.i18n_translate : nil
17
+ end
18
+
19
+ def ancestors_i18n_translate
20
+ the_module.ancestors.lazy.map { |v| ancestor_i18n_translate(v) }.find(&:present?)
21
+ end
22
+
23
+ def exists?
24
+ ::I18n.exists?(i18n_key)
25
+ end
26
+
27
+ def i18n_key
28
+ "#{module_entry_prefix}.#{entry_suffix}"
29
+ end
30
+
31
+ def i18n_options
32
+ values.except(TRANSLATE_LOCALE_KEY)
33
+ end
34
+
35
+ def i18n_translate
36
+ ::I18n.translate(i18n_key, i18n_options)
37
+ end
38
+
39
+ def locale
40
+ values[TRANSLATE_LOCALE_KEY]
41
+ end
42
+
43
+ def module_entry_prefix
44
+ the_module.name.underscore.gsub('/', '.')
45
+ end
46
+
47
+ def on_locale(&block)
48
+ if locale.present?
49
+ on_present_locale(&block)
50
+ else
51
+ block.call
52
+ end
53
+ end
54
+
55
+ def result
56
+ on_locale do
57
+ ancestors_i18n_translate || i18n_translate
58
+ end
59
+ end
60
+
61
+ private
62
+
63
+ def on_present_locale(&block)
64
+ old_locale = ::I18n.locale
65
+ begin
66
+ ::I18n.locale = locale
67
+ block.call
68
+ ensure
69
+ ::I18n.locale = old_locale
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/require_sub'
4
+
5
+ module EacRubyUtils
6
+ module Locales
7
+ ::EacRubyUtils.require_sub __FILE__
8
+ end
9
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/module/introspection'
4
+ require 'eac_ruby_utils/patches/class/common_constructor'
5
+ require 'eac_ruby_utils/patches/module/common_concern'
6
+ require 'eac_ruby_utils/patches/string/inflector'
7
+
8
+ module EacRubyUtils
9
+ module MethodClass
10
+ common_concern do
11
+ ::EacRubyUtils::MethodClass::Setup.new(self)
12
+ end
13
+
14
+ class Setup
15
+ common_constructor :method_class do
16
+ perform
17
+ end
18
+
19
+ def perform
20
+ the_setup = self
21
+ sender_module.define_method(method_name) do |*args, &block|
22
+ the_setup.method_class.new(self, *args, &block).result
23
+ end
24
+ end
25
+
26
+ def method_name
27
+ method_class.name.demodulize.underscore.variableize
28
+ end
29
+
30
+ def sender_module
31
+ method_class.module_parent
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/hash/indifferent_access'
4
+ require 'ostruct'
5
+
6
+ module EacRubyUtils
7
+ class OptionsConsumer
8
+ DEFAULT_OPTIONS = { validate: true, ostruct: false }.with_indifferent_access.freeze
9
+
10
+ def initialize(data)
11
+ @data = data.with_indifferent_access
12
+ end
13
+
14
+ def consume(key, default_value = nil, &block)
15
+ return default_value unless data.key?(key)
16
+
17
+ value = data.delete(key)
18
+ value = yield(value) if block
19
+ value
20
+ end
21
+
22
+ # If last argument is a Hash it is used a options.
23
+ # Options:
24
+ # * +validate+: validate after consume.
25
+ # * +ostruct+: return a [OpenStruct] instead a [Hash].
26
+ # @return [Hash] (Default) or [OpenStruct].
27
+ def consume_all(*keys)
28
+ options = consume_all_extract_options(keys)
29
+ result = consume_all_build_result(keys, options.fetch(:ostruct))
30
+ validate if options.fetch(:validate)
31
+ result
32
+ end
33
+
34
+ def validate
35
+ return if data.empty?
36
+
37
+ raise "Invalid keys: #{data.keys}"
38
+ end
39
+
40
+ def left_data
41
+ data.dup
42
+ end
43
+
44
+ private
45
+
46
+ attr_reader :data
47
+
48
+ def consume_all_extract_options(keys)
49
+ options = DEFAULT_OPTIONS
50
+ options = options.merge(keys.pop.with_indifferent_access) if keys.last.is_a?(Hash)
51
+ options
52
+ end
53
+
54
+ def consume_all_build_result(keys, ostruct)
55
+ if ostruct
56
+ ::OpenStruct.new(keys.map { |key| [key, consume(key)] }.to_h)
57
+ else
58
+ keys.map { |key| consume(key) }
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRubyUtils
4
+ class << self
5
+ def patch(target, patch)
6
+ return if target.included_modules.include?(patch)
7
+
8
+ target.send(:include, patch)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/abstract_methods'
4
+
5
+ class Class
6
+ def abstract?
7
+ ::EacRubyUtils::AbstractMethods.abstract?(self)
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/common_constructor'
4
+
5
+ class Class
6
+ def common_constructor(*args, &block)
7
+ ::EacRubyUtils::CommonConstructor.new(*args, &block).setup_class(self)
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Class
4
+ def self_included_modules
5
+ ancestors.take_while { |a| a != superclass }.select { |ancestor| ancestor.instance_of?(Module) }
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/patch'
4
+ require 'eac_ruby_utils/settings_provider'
5
+
6
+ class Class
7
+ def enable_settings_provider
8
+ ::EacRubyUtils.patch(self, ::EacRubyUtils::SettingsProvider)
9
+ end
10
+ 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,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Enumerable
4
+ # Produces a array with values's all combinations.
5
+ #
6
+ # Example:
7
+ # %i[a b].boolean_combinations
8
+ # => [[], [:a], [:b], [:a, :b]]
9
+ #
10
+ # @return [Array]
11
+ def bool_array_combs
12
+ bool_combs([], method(:bool_array_combs_new_comb))
13
+ end
14
+
15
+ # Produces a hash with values's all combinations.
16
+ #
17
+ # Example:
18
+ # %i[a b].boolean_combinations
19
+ # => [{a: false, b: false}, {a: false, b: true}, {a: true, b: false}, {a: true, b: true}]
20
+ #
21
+ # @return [Hash]
22
+ def bool_hash_combs
23
+ bool_combs({}, method(:bool_hash_combs_new_comb))
24
+ end
25
+
26
+ private
27
+
28
+ def bool_combs(empty_value, new_comb_method)
29
+ head = [empty_value]
30
+ r = inject(head) do |a, value|
31
+ new_comb_method.call(value, a)
32
+ end
33
+ r == head ? [] : r
34
+ end
35
+
36
+ def bool_array_combs_new_comb(value, combs)
37
+ combs + combs.map { |c| c + [value] }
38
+ end
39
+
40
+ def bool_hash_combs_new_comb(value, combs)
41
+ combs.flat_map do |comb|
42
+ [false, true].map { |bool_value| comb.dup.merge(value => bool_value) }
43
+ end
44
+ end
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,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Enumerator
4
+ def current(default_value = nil)
5
+ peek
6
+ rescue ::StopIteration
7
+ default_value
8
+ end
9
+ end