eac_tools 0.3.0 → 0.4.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 (228) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +20 -14
  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-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/base.rb +15 -7
  14. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/version.rb +1 -1
  15. data/sub/eac_ruby_utils/Gemfile +16 -0
  16. data/sub/eac_ruby_utils/MIT-LICENCE +16 -0
  17. data/sub/eac_ruby_utils/README.rdoc +3 -0
  18. data/sub/eac_ruby_utils/eac_ruby_utils.gemspec +24 -0
  19. data/sub/eac_ruby_utils/lib/eac_ruby_utils/abstract_methods.rb +68 -0
  20. data/sub/eac_ruby_utils/lib/eac_ruby_utils/arguments_consumer.rb +81 -0
  21. data/sub/eac_ruby_utils/lib/eac_ruby_utils/bit.rb +46 -0
  22. data/sub/eac_ruby_utils/lib/eac_ruby_utils/bit_array.rb +81 -0
  23. data/sub/eac_ruby_utils/lib/eac_ruby_utils/blank_not_blank.rb +19 -0
  24. data/sub/eac_ruby_utils/lib/eac_ruby_utils/boolean.rb +31 -0
  25. data/sub/eac_ruby_utils/lib/eac_ruby_utils/by_reference.rb +23 -0
  26. data/sub/eac_ruby_utils/lib/eac_ruby_utils/byte.rb +105 -0
  27. data/sub/eac_ruby_utils/lib/eac_ruby_utils/byte_array.rb +36 -0
  28. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_concern/class_setup.rb +52 -0
  29. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_concern/module_setup.rb +41 -0
  30. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_concern.rb +20 -0
  31. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/class_initialize.rb +29 -0
  32. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb +53 -0
  33. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/super_args.rb +54 -0
  34. data/sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor.rb +89 -0
  35. data/sub/eac_ruby_utils/lib/eac_ruby_utils/compact.rb +22 -0
  36. data/sub/eac_ruby_utils/lib/eac_ruby_utils/compare_by.rb +28 -0
  37. data/sub/eac_ruby_utils/lib/eac_ruby_utils/context.rb +33 -0
  38. data/sub/eac_ruby_utils/lib/eac_ruby_utils/contextualizable.rb +21 -0
  39. data/sub/eac_ruby_utils/lib/eac_ruby_utils/core_ext.rb +7 -0
  40. data/sub/eac_ruby_utils/lib/eac_ruby_utils/custom_format.rb +53 -0
  41. data/sub/eac_ruby_utils/lib/eac_ruby_utils/enum.rb +102 -0
  42. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/base_env.rb +28 -0
  43. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/command/concat.rb +33 -0
  44. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/command/envvars.rb +24 -0
  45. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/command/extra_options.rb +33 -0
  46. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/command.rb +172 -0
  47. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb +81 -0
  48. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/file.rb +22 -0
  49. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/local_env.rb +17 -0
  50. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/process.rb +27 -0
  51. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/spawn.rb +32 -0
  52. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/dasho_options.rb +53 -0
  53. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/identity_file.rb +25 -0
  54. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/quiet.rb +24 -0
  55. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/terminal.rb +34 -0
  56. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env.rb +75 -0
  57. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs.rb +23 -0
  58. data/sub/eac_ruby_utils/lib/eac_ruby_utils/fs/clearable_directory.rb +57 -0
  59. data/sub/eac_ruby_utils/lib/eac_ruby_utils/fs/extname.rb +30 -0
  60. data/sub/eac_ruby_utils/lib/eac_ruby_utils/fs/temp/directory.rb +16 -0
  61. data/sub/eac_ruby_utils/lib/eac_ruby_utils/fs/temp/file.rb +34 -0
  62. data/sub/eac_ruby_utils/lib/eac_ruby_utils/fs/temp.rb +52 -0
  63. data/sub/eac_ruby_utils/lib/eac_ruby_utils/fs.rb +9 -0
  64. data/sub/eac_ruby_utils/lib/eac_ruby_utils/gems_registry/gem.rb +79 -0
  65. data/sub/eac_ruby_utils/lib/eac_ruby_utils/gems_registry.rb +35 -0
  66. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/array_accessor.rb +32 -0
  67. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/base_accessor.rb +23 -0
  68. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/boolean_accessor.rb +16 -0
  69. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/class_methods.rb +20 -0
  70. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/common_accessor.rb +30 -0
  71. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/hash_accessor.rb +46 -0
  72. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/instance_methods.rb +21 -0
  73. data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable.rb +15 -0
  74. data/sub/eac_ruby_utils/lib/eac_ruby_utils/inflector.rb +29 -0
  75. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/class_methods.rb +14 -0
  76. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/instance_methods.rb +30 -0
  77. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/integer_list.rb +23 -0
  78. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/list.rb +111 -0
  79. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/lists.rb +59 -0
  80. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/string_list.rb +19 -0
  81. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/symbol_list.rb +19 -0
  82. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/value.rb +49 -0
  83. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable.rb +17 -0
  84. data/sub/eac_ruby_utils/lib/eac_ruby_utils/local_time_zone.rb +48 -0
  85. data/sub/eac_ruby_utils/lib/eac_ruby_utils/locales/from_all_gems.rb +4 -0
  86. data/sub/eac_ruby_utils/lib/eac_ruby_utils/locales/from_gem.rb +47 -0
  87. data/sub/eac_ruby_utils/lib/eac_ruby_utils/locales/module_i18n_translate.rb +74 -0
  88. data/sub/eac_ruby_utils/lib/eac_ruby_utils/locales.rb +9 -0
  89. data/sub/eac_ruby_utils/lib/eac_ruby_utils/method_class.rb +35 -0
  90. data/sub/eac_ruby_utils/lib/eac_ruby_utils/options_consumer.rb +62 -0
  91. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patch.rb +11 -0
  92. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/class/abstract.rb +9 -0
  93. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/class/common_constructor.rb +9 -0
  94. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/class/self_included_modules.rb +7 -0
  95. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/class/settings_provider.rb +10 -0
  96. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/class.rb +4 -0
  97. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerable/boolean_combinations.rb +45 -0
  98. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerable.rb +4 -0
  99. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerator/current.rb +9 -0
  100. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerator/stopped.rb +14 -0
  101. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerator.rb +4 -0
  102. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/hash/options_consumer.rb +10 -0
  103. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/hash/sym_keys_hash.rb +10 -0
  104. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/hash/to_struct.rb +10 -0
  105. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/hash.rb +5 -0
  106. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/kernel/nyi.rb +10 -0
  107. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/kernel.rb +4 -0
  108. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/abstract_methods.rb +10 -0
  109. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/common_concern.rb +9 -0
  110. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/compare_by.rb +9 -0
  111. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/context.rb +11 -0
  112. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/i18n_translate.rb +9 -0
  113. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/immutable.rb +10 -0
  114. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/listable.rb +10 -0
  115. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/method_class.rb +9 -0
  116. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/patch.rb +9 -0
  117. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/require_sub.rb +9 -0
  118. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/simple_cache.rb +10 -0
  119. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/speaker.rb +9 -0
  120. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module.rb +4 -0
  121. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/asserts.rb +25 -0
  122. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/call_if_proc.rb +11 -0
  123. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/compact.rb +20 -0
  124. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/debug.rb +23 -0
  125. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/i18n_translate.rb +13 -0
  126. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_nil.rb +17 -0
  127. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_present.rb +19 -0
  128. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_respond.rb +22 -0
  129. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/to_pathname.rb +15 -0
  130. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/to_uri.rb +15 -0
  131. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object.rb +5 -0
  132. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/basename_noext.rb +10 -0
  133. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/basename_sub.rb +9 -0
  134. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/if_exist.rb +10 -0
  135. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/mkpath_s.rb +12 -0
  136. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/parent_n.rb +11 -0
  137. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/readlink_r.rb +11 -0
  138. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/reqdir_glob.rb +13 -0
  139. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname.rb +4 -0
  140. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp/if_match.rb +16 -0
  141. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp/to_parser.rb +10 -0
  142. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp.rb +4 -0
  143. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/string/delimited.rb +16 -0
  144. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/string/inflector.rb +11 -0
  145. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/string.rb +4 -0
  146. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/time/required_zone.rb +11 -0
  147. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/time.rb +4 -0
  148. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches.rb +4 -0
  149. data/sub/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb +51 -0
  150. data/sub/eac_ruby_utils/lib/eac_ruby_utils/regexp_parser.rb +34 -0
  151. data/sub/eac_ruby_utils/lib/eac_ruby_utils/require_sub.rb +134 -0
  152. data/sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/default_setup.rb +20 -0
  153. data/sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup/conditionals.rb +17 -0
  154. data/sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup.rb +12 -0
  155. data/sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup_manager.rb +49 -0
  156. data/sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/stub_speaker.rb +39 -0
  157. data/sub/eac_ruby_utils/lib/eac_ruby_utils/rspec.rb +9 -0
  158. data/sub/eac_ruby_utils/lib/eac_ruby_utils/ruby/command.rb +32 -0
  159. data/sub/eac_ruby_utils/lib/eac_ruby_utils/ruby/on_clean_environment.rb +38 -0
  160. data/sub/eac_ruby_utils/lib/eac_ruby_utils/ruby.rb +9 -0
  161. data/sub/eac_ruby_utils/lib/eac_ruby_utils/settings_provider/setting_value.rb +69 -0
  162. data/sub/eac_ruby_utils/lib/eac_ruby_utils/settings_provider.rb +46 -0
  163. data/sub/eac_ruby_utils/lib/eac_ruby_utils/simple_cache.rb +77 -0
  164. data/sub/eac_ruby_utils/lib/eac_ruby_utils/speaker/receiver.rb +64 -0
  165. data/sub/eac_ruby_utils/lib/eac_ruby_utils/speaker/sender.rb +32 -0
  166. data/sub/eac_ruby_utils/lib/eac_ruby_utils/speaker.rb +16 -0
  167. data/sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb +70 -0
  168. data/sub/eac_ruby_utils/lib/eac_ruby_utils/struct.rb +63 -0
  169. data/sub/eac_ruby_utils/lib/eac_ruby_utils/version.rb +5 -0
  170. data/sub/eac_ruby_utils/lib/eac_ruby_utils/yaml.rb +105 -0
  171. data/sub/eac_ruby_utils/lib/eac_ruby_utils.rb +6 -0
  172. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/abstract_methods_spec.rb +28 -0
  173. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/arguments_consumer_spec.rb +17 -0
  174. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/bit_array_spec.rb +22 -0
  175. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/blank_not_blank_spec.rb +16 -0
  176. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/byte_spec.rb +54 -0
  177. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/common_concern_spec.rb +65 -0
  178. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/common_constructor_spec.rb +125 -0
  179. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/compact_spec.rb +20 -0
  180. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/compare_by_spec.rb +38 -0
  181. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/custom_format_spec.rb +60 -0
  182. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/enum_spec.rb +43 -0
  183. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/envs/executable_spec.rb +37 -0
  184. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/envs/ssh_env_spec.rb +25 -0
  185. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/fs/extname_spec.rb +18 -0
  186. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/fs/temp/directory_spec.rb +12 -0
  187. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/fs/temp_spec.rb +52 -0
  188. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/inflector_spec.rb +16 -0
  189. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/listable_spec.rb +275 -0
  190. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/local_time_zone_spec.rb +17 -0
  191. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/method_class_spec.rb +46 -0
  192. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/options_consumer_spec.rb +80 -0
  193. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/class/abstract_spec.rb +25 -0
  194. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/class/self_included_modules_spec.rb +30 -0
  195. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/enumerable/boolean_combinations_spec.rb +39 -0
  196. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/enumerator/current_spec.rb +26 -0
  197. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/enumerator/stopped_spec.rb +32 -0
  198. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/hash/options_consumer_spec.rb +17 -0
  199. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/hash/sym_keys_hash_spec.rb +13 -0
  200. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/compare_by_spec.rb +36 -0
  201. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/listable_spec.rb +15 -0
  202. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/method_class_spec.rb +20 -0
  203. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/simple_cache_spec.rb +15 -0
  204. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/speaker_spec.rb +13 -0
  205. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/call_if_proc_spec.rb +11 -0
  206. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/compact_spec.rb +20 -0
  207. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/if_present_spec.rb +13 -0
  208. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/template_spec_files/path/my_stub_with_template +1 -0
  209. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/pathname/basename_noext_spec.rb +26 -0
  210. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/pathname/basename_sub_spec.rb +17 -0
  211. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/pathname/parent_n_spec.rb +33 -0
  212. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/string/delimited_spec.rb +34 -0
  213. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/recursive_builder_spec.rb +65 -0
  214. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/require_sub_spec/stubbed_module_a.rb +6 -0
  215. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/require_sub_spec/stubbed_not_module.rb +6 -0
  216. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/require_sub_spec.rb +19 -0
  217. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/ruby_spec.rb +22 -0
  218. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/settings_provider_spec.rb +57 -0
  219. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/simple_cache_spec.rb +129 -0
  220. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/struct_spec.rb +57 -0
  221. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/yaml_spec.rb +75 -0
  222. data/sub/eac_ruby_utils/spec/locales/pt-BR.yml +58 -0
  223. data/sub/eac_ruby_utils/spec/rubocop_check_spec.rb +3 -0
  224. data/sub/eac_ruby_utils/spec/spec_helper.rb +15 -0
  225. metadata +218 -23
  226. data/sub/avm/lib/avm/sources/tester.rb +0 -24
  227. data/sub/avm-eac_generic_base0/lib/avm/eac_generic_base0/sources/tester.rb +0 -56
  228. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/tester.rb +0 -36
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRubyUtils
4
+ class Context
5
+ delegate :any?, to: :stack
6
+
7
+ def current
8
+ optional_current || raise('No elements in context')
9
+ end
10
+
11
+ def optional_current
12
+ stack.last
13
+ end
14
+
15
+ delegate :pop, to: :stack
16
+ delegate :push, to: :stack
17
+
18
+ def on(obj)
19
+ push(obj)
20
+ begin
21
+ yield
22
+ ensure
23
+ pop
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def stack
30
+ @stack ||= []
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/context'
4
+
5
+ module EacRubyUtils
6
+ module Contextualizable
7
+ common_concern
8
+
9
+ module ClassMethods
10
+ def context
11
+ @context ||= ::EacRubyUtils::Context.new
12
+ end
13
+ end
14
+
15
+ module InstanceMethods
16
+ def context
17
+ self.class.context
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/locales/from_all_gems'
4
+ require 'eac_ruby_utils/patches'
5
+ require 'active_support/dependencies/autoload'
6
+ require 'active_support/core_ext'
7
+ require 'active_support/json'
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRubyUtils
4
+ # A formatter like [String.sprintf].
5
+ class CustomFormat
6
+ TYPE_PATTERN = /[a-zA-Z]/.freeze
7
+ SEQUENCE_PATTERN = /(?<!%)%(#{TYPE_PATTERN})/.freeze
8
+
9
+ attr_reader :mapping
10
+
11
+ def initialize(mapping)
12
+ @mapping = mapping.transform_keys(&:to_sym).freeze
13
+ end
14
+
15
+ def format(string)
16
+ ::EacRubyUtils::CustomFormat::String.new(self, string)
17
+ end
18
+
19
+ class String
20
+ attr_reader :format, :string
21
+
22
+ def initialize(format, string)
23
+ @format = format
24
+ @string = string
25
+ end
26
+
27
+ def mapping
28
+ @mapping ||= format.mapping.select do |k, _v|
29
+ sequences.include?(k)
30
+ end
31
+ end
32
+
33
+ def sequences
34
+ @sequences ||= string.scan(SEQUENCE_PATTERN).map(&:first).uniq.map(&:to_sym)
35
+ end
36
+
37
+ def source_object_value(object, method)
38
+ return object.send(method) if object.respond_to?(method)
39
+ return object[method] if object.respond_to?('[]')
40
+
41
+ raise ::ArgumentError, "Methods \"#{method}\" or \"[]\" not found for #{object}"
42
+ end
43
+
44
+ def with(source_object)
45
+ r = string
46
+ mapping.each do |key, method|
47
+ r = r.gsub(/%#{::Regexp.quote(key)}/, source_object_value(source_object, method).to_s)
48
+ end
49
+ r.gsub('%%', '%')
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/inflector'
4
+
5
+ module EacRubyUtils
6
+ # Similar to Java's enum type (https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html).
7
+ class Enum
8
+ class << self
9
+ def enum(key, *args, &block)
10
+ value = Value.new(self, key, args, &block)
11
+ raise ::ArgumentError, "#{self} already has a value with key=#{value.key}" if
12
+ value_set.include?(value)
13
+
14
+ value_set << value.apply
15
+
16
+ self
17
+ end
18
+
19
+ def values
20
+ value_set.map(&:value)
21
+ end
22
+
23
+ private
24
+
25
+ def value_set
26
+ @value_set ||= []
27
+ end
28
+ end
29
+
30
+ attr_reader :key
31
+
32
+ protected
33
+
34
+ def initialize(key)
35
+ @key = key
36
+ end
37
+
38
+ class Value
39
+ include ::Comparable
40
+
41
+ attr_reader :klass, :key, :args, :block
42
+
43
+ def initialize(klass, key, args, &block)
44
+ @klass = klass
45
+ @key = ::EacRubyUtils::Inflector.variableize(key.to_s).to_sym
46
+ @args = args
47
+ @block = block
48
+ end
49
+
50
+ def <=>(other)
51
+ key <=> other.key
52
+ end
53
+
54
+ def apply
55
+ define_constant
56
+ define_class_method
57
+
58
+ self
59
+ end
60
+
61
+ # @return [String]
62
+ def class_method_name
63
+ key.to_s
64
+ end
65
+
66
+ # @return [String]
67
+ def constant_name
68
+ class_method_name.upcase
69
+ end
70
+
71
+ def value
72
+ @value ||= uncached_value
73
+ end
74
+
75
+ private
76
+
77
+ def define_class_method
78
+ the_value = self
79
+ klass.define_singleton_method(class_method_name) { the_value.value }
80
+ end
81
+
82
+ def define_constant
83
+ klass.const_set(constant_name, value)
84
+ end
85
+
86
+ def uncached_value
87
+ klass.new(key, *value_args)
88
+ end
89
+
90
+ def value_args
91
+ r = if block
92
+ block.call
93
+ elsif args.count == 1 && args.first.is_a?(::Enumerable)
94
+ args.first
95
+ else
96
+ args
97
+ end
98
+ r.is_a?(::Enumerable) ? r : [r]
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/envs/command'
4
+ require 'eac_ruby_utils/envs/executable'
5
+ require 'eac_ruby_utils/envs/file'
6
+
7
+ module EacRubyUtils
8
+ module Envs
9
+ class BaseEnv
10
+ def command(*args)
11
+ ::EacRubyUtils::Envs::Command.new(self, args)
12
+ end
13
+
14
+ # <b>DEPRECATED:</b> Please use <tt>file(file).exist?</tt> instead.
15
+ def file_exist?(file)
16
+ self.file(file).exist?
17
+ end
18
+
19
+ def executable(*executable_new_args)
20
+ ::EacRubyUtils::Envs::Executable.new(self, *executable_new_args)
21
+ end
22
+
23
+ def file(path)
24
+ ::EacRubyUtils::Envs::File.new(self, path)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/struct'
4
+
5
+ module EacRubyUtils
6
+ module Envs
7
+ class Command
8
+ module Concat
9
+ def concat(operator, other_command)
10
+ duplicate_by_extra_options(concat: ::EacRubyUtils::Struct.new(
11
+ operator: operator, command: other_command
12
+ ))
13
+ end
14
+
15
+ def or(other_command)
16
+ concat('||', other_command)
17
+ end
18
+
19
+ def pipe(other_command)
20
+ concat('|', other_command)
21
+ end
22
+
23
+ private
24
+
25
+ def append_concat(command)
26
+ extra_options[:concat].if_present(command) do |v|
27
+ "#{command} #{v.operator} #{v.command.command}"
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRubyUtils
4
+ module Envs
5
+ class Command
6
+ module Envvars
7
+ def envvar(name, value)
8
+ duplicate_by_extra_options(envvars: envvars.merge(name => value))
9
+ end
10
+
11
+ private
12
+
13
+ def append_envvars(command)
14
+ e = envvars.map { |k, v| "#{Shellwords.escape(k)}=#{Shellwords.escape(v)}" }.join(' ')
15
+ e.present? ? "#{e} #{command}" : command
16
+ end
17
+
18
+ def envvars
19
+ extra_options[:envvars] ||= {}.with_indifferent_access
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/hash/indifferent_access'
4
+ require 'active_support/core_ext/object/blank'
5
+ require 'shellwords'
6
+
7
+ module EacRubyUtils
8
+ module Envs
9
+ class Command
10
+ module ExtraOptions
11
+ def chdir(dir)
12
+ duplicate_by_extra_options(chdir: dir)
13
+ end
14
+
15
+ def status_result(status_code, result)
16
+ duplicate_by_extra_options(status_results: status_results.merge(status_code => result))
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :extra_options
22
+
23
+ def status_results
24
+ extra_options[:status_results] ||= {}.with_indifferent_access
25
+ end
26
+
27
+ def append_chdir(command)
28
+ extra_options[:chdir].present? ? "(cd '#{extra_options[:chdir]}' ; #{command} )" : command
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,172 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_ruby_utils/envs/process'
5
+ require 'eac_ruby_utils/envs/spawn'
6
+ require 'pp'
7
+ require 'shellwords'
8
+
9
+ module EacRubyUtils
10
+ module Envs
11
+ class Command
12
+ require_sub __FILE__, include_modules: true
13
+
14
+ def initialize(env, command, extra_options = {})
15
+ @env = env
16
+ @extra_options = extra_options.with_indifferent_access
17
+ if command.count == 1 && command.first.is_a?(Array)
18
+ @command = command.first
19
+ elsif command.is_a?(Array)
20
+ @command = command
21
+ else
22
+ raise "Invalid argument command: #{command}|#{command.class}"
23
+ end
24
+ end
25
+
26
+ def args
27
+ @command
28
+ end
29
+
30
+ def append(args)
31
+ duplicate_by_command(@command + args)
32
+ end
33
+
34
+ def prepend(args)
35
+ duplicate_by_command(args + @command)
36
+ end
37
+
38
+ def to_s
39
+ "#{@command} [ENV: #{@env}]"
40
+ end
41
+
42
+ def command(options = {})
43
+ c = @command
44
+ c = c.map { |x| escape(x) }.join(' ') if c.is_a?(Enumerable)
45
+ append_command_options(
46
+ @env.command_line(
47
+ append_chdir(append_concat(append_envvars(c)))
48
+ ),
49
+ options
50
+ )
51
+ end
52
+
53
+ def execute!(options = {})
54
+ options[:exit_outputs] = status_results.merge(options[:exit_outputs].presence || {})
55
+ er = ExecuteResult.new(execute(options), options)
56
+ return er.result if er.success?
57
+
58
+ raise "execute! command failed: #{self}\n#{er.r.pretty_inspect}"
59
+ end
60
+
61
+ def execute(options = {})
62
+ c = command(options)
63
+ debug_print("BEFORE: #{c}")
64
+ t1 = Time.now
65
+ r = ::EacRubyUtils::Envs::Process.new(c).to_h
66
+ i = Time.now - t1
67
+ debug_print("AFTER [#{i}]: #{c}")
68
+ r
69
+ end
70
+
71
+ def spawn(options = {})
72
+ c = command(options)
73
+ debug_print("SPAWN: #{c}")
74
+ ::EacRubyUtils::Envs::Spawn.new(c)
75
+ end
76
+
77
+ def system!(options = {})
78
+ return if system(options)
79
+
80
+ raise "system! command failed: #{self}"
81
+ end
82
+
83
+ def system(options = {})
84
+ c = command(options)
85
+ debug_print(c)
86
+ Kernel.system(c)
87
+ end
88
+
89
+ protected
90
+
91
+ def duplicate(command, extra_options)
92
+ self.class.new(@env, command, extra_options)
93
+ end
94
+
95
+ private
96
+
97
+ attr_reader :extra_options
98
+
99
+ def duplicate_by_command(new_command)
100
+ duplicate(new_command, @extra_options)
101
+ end
102
+
103
+ def duplicate_by_extra_options(set_extra_options)
104
+ duplicate(@command, @extra_options.merge(set_extra_options))
105
+ end
106
+
107
+ def debug?
108
+ ENV['DEBUG'].to_s.strip != ''
109
+ end
110
+
111
+ # Print a message if debugging is enabled.
112
+ def debug_print(message)
113
+ message = message.to_s
114
+ puts message.if_respond(:light_red, message) if debug?
115
+ end
116
+
117
+ def append_command_options(command, options)
118
+ command = options[:input].command + ' | ' + command if options[:input]
119
+ if options[:input_file]
120
+ command = "cat #{Shellwords.escape(options[:input_file])}" \
121
+ " | #{command}"
122
+ end
123
+ command += ' > ' + Shellwords.escape(options[:output_file]) if options[:output_file]
124
+ command
125
+ end
126
+
127
+ def escape(arg)
128
+ arg = arg.to_s
129
+ m = /^\@ESC_(.+)$/.match(arg)
130
+ m ? m[1] : Shellwords.escape(arg)
131
+ end
132
+
133
+ class ExecuteResult
134
+ attr_reader :r, :options
135
+
136
+ def initialize(result, options)
137
+ @r = result
138
+ @options = options
139
+ end
140
+
141
+ def result
142
+ return exit_code_zero_result if exit_code_zero?
143
+ return expected_error_result if expected_error?
144
+
145
+ raise 'Failed!'
146
+ end
147
+
148
+ def success?
149
+ exit_code_zero? || expected_error?
150
+ end
151
+
152
+ private
153
+
154
+ def exit_code_zero?
155
+ r[:exit_code]&.zero?
156
+ end
157
+
158
+ def exit_code_zero_result
159
+ r[options[:output] || :stdout]
160
+ end
161
+
162
+ def expected_error_result
163
+ options[:exit_outputs][r[:exit_code]]
164
+ end
165
+
166
+ def expected_error?
167
+ options[:exit_outputs].is_a?(Hash) && options[:exit_outputs].key?(r[:exit_code])
168
+ end
169
+ end
170
+ end
171
+ end
172
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/listable'
4
+ require 'eac_ruby_utils/simple_cache'
5
+
6
+ module EacRubyUtils
7
+ module Envs
8
+ class Executable
9
+ include ::EacRubyUtils::Listable
10
+ include ::EacRubyUtils::SimpleCache
11
+
12
+ lists.add_symbol :option, :check_args, :auto_validate
13
+
14
+ DEFAULT_AUTO_VALIDATE = true
15
+
16
+ attr_reader :env, :name, :options
17
+
18
+ def initialize(env, name, *check_args)
19
+ @env = env
20
+ @name = name
21
+ self.options = self.class.lists.option.hash_keys_validate!(check_args.extract_options!)
22
+ options[OPTION_CHECK_ARGS] = check_args unless options.key?(OPTION_CHECK_ARGS)
23
+ options.freeze
24
+ end
25
+
26
+ def auto_validate?
27
+ options.key?(OPTION_AUTO_VALIDATE) ? options[OPTION_AUTO_VALIDATE] : DEFAULT_AUTO_VALIDATE
28
+ end
29
+
30
+ def check_args
31
+ options[OPTION_CHECK_ARGS]
32
+ end
33
+
34
+ def exist?
35
+ exist
36
+ end
37
+
38
+ def validate
39
+ return nil if exist?
40
+
41
+ "Program \"#{::Shellwords.join(executable_args)}\" not found in environment #{env}"
42
+ end
43
+
44
+ def validate!
45
+ message = validate
46
+
47
+ raise ProgramNotFoundError, message if message
48
+ end
49
+
50
+ def command(*command_args)
51
+ validate! if auto_validate?
52
+ env.command(*executable_args, *command_args)
53
+ end
54
+
55
+ def executable_args
56
+ executable_args_from_envvar || [name]
57
+ end
58
+
59
+ def executable_args_envvar
60
+ "#{name}_command".variableize.upcase
61
+ end
62
+
63
+ def executable_args_from_envvar
64
+ ENV[executable_args_envvar].if_present { |v| ::Shellwords.split(v) }
65
+ end
66
+
67
+ private
68
+
69
+ attr_writer :options
70
+
71
+ def exist_uncached
72
+ env.command(*executable_args, *check_args).execute!
73
+ true
74
+ rescue Errno::ENOENT
75
+ false
76
+ end
77
+
78
+ class ProgramNotFoundError < ::StandardError; end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRubyUtils
4
+ module Envs
5
+ class File
6
+ attr_reader :env, :path
7
+
8
+ def initialize(env, path)
9
+ @env = env
10
+ @path = path
11
+ end
12
+
13
+ def exist?
14
+ env.command('stat', path).execute[:exit_code].zero?
15
+ end
16
+
17
+ def read
18
+ env.command('cat', path).execute!
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/envs/base_env'
4
+
5
+ module EacRubyUtils
6
+ module Envs
7
+ class LocalEnv < ::EacRubyUtils::Envs::BaseEnv
8
+ def to_s
9
+ 'LOCAL'
10
+ end
11
+
12
+ def command_line(line)
13
+ line
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+
5
+ module EacRubyUtils
6
+ module Envs
7
+ class Process
8
+ EXIT_CODE_KEY = :exit_code
9
+ ERR_KEY = :stderr
10
+ OUT_KEY = :stdout
11
+
12
+ def initialize(command)
13
+ self.data = { command: command }
14
+ data[OUT_KEY], data[ERR_KEY], data[EXIT_CODE_KEY] = Open3.capture3(command)
15
+ data[EXIT_CODE_KEY] = data[EXIT_CODE_KEY].to_i
16
+ end
17
+
18
+ def to_h
19
+ data.dup
20
+ end
21
+
22
+ private
23
+
24
+ attr_accessor :data
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRubyUtils
4
+ module Envs
5
+ class Spawn
6
+ attr_reader :command, :pid
7
+
8
+ def initialize(command)
9
+ @command = command
10
+ @pid = ::Process.spawn(command)
11
+ end
12
+
13
+ def kill(signal)
14
+ ::Process.kill(signal, pid)
15
+ end
16
+
17
+ def kill_at_end(&block)
18
+ block.call(self)
19
+ ensure
20
+ kill('KILL')
21
+ end
22
+
23
+ def to_h
24
+ { command: command, pid: pid }
25
+ end
26
+
27
+ def wait
28
+ ::Process.wait pid
29
+ end
30
+ end
31
+ end
32
+ end