eac_tools 0.99.1 → 0.100.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 (294) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +55 -27
  3. data/lib/eac_tools/version.rb +1 -1
  4. data/lib/eac_tools.rb +17 -0
  5. data/sub/avm/avm.gemspec +3 -3
  6. data/sub/avm/lib/avm/rspec/setup.rb +1 -0
  7. data/sub/avm/lib/avm/version.rb +1 -1
  8. data/sub/avm-eac_ruby_base1/Gemfile +8 -0
  9. data/sub/avm-eac_ruby_base1/avm-eac_ruby_base1.gemspec +22 -0
  10. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/bundler/gemfile/add_or_replace_gem_line.rb +54 -0
  11. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/bundler/gemfile/dependency.rb +17 -0
  12. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/bundler/gemfile.rb +32 -0
  13. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/bundler/incompatible_parser/depends_on.rb +22 -0
  14. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/bundler/incompatible_parser/gem_conflict.rb +41 -0
  15. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/bundler/incompatible_parser/in_gemfile.rb +14 -0
  16. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/bundler/incompatible_parser/line_buffer.rb +73 -0
  17. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/bundler/incompatible_parser/line_factory.rb +26 -0
  18. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/bundler/incompatible_parser/line_parser_base.rb +17 -0
  19. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/bundler/incompatible_parser/ruby_requirement.rb +13 -0
  20. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/bundler/incompatible_parser/version_requirement.rb +23 -0
  21. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/bundler/incompatible_parser.rb +23 -0
  22. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/file_formats/base/file_resource_name.rb +44 -0
  23. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/file_formats/base.rb +21 -0
  24. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/instances/mixin.rb +17 -0
  25. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/launcher/gem/build.rb +120 -0
  26. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/launcher/gem/specification.rb +61 -0
  27. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/launcher_stereotypes/base/local_project_mixin.rb +24 -0
  28. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/launcher_stereotypes/base/publish.rb +122 -0
  29. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/launcher_stereotypes/base.rb +33 -0
  30. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/preferred_version_requirements.rb +40 -0
  31. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rspec/setup.rb +15 -0
  32. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rspec/source_generator.rb +20 -0
  33. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rspec.rb +9 -0
  34. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubocop/configured.rb +29 -0
  35. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubocop/envvar.rb +15 -0
  36. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubocop/gemfile.rb +39 -0
  37. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubocop.rb +52 -0
  38. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb +69 -0
  39. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/dependency.rb +23 -0
  40. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec.rb +57 -0
  41. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/remote.rb +33 -0
  42. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/version_file.rb +43 -0
  43. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems.rb +9 -0
  44. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/runners/base/lib_rename.rb +74 -0
  45. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/runners/base/rubocop.rb +27 -0
  46. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/runners/base.rb +16 -0
  47. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/runners.rb +9 -0
  48. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/source_generators/base/dependencies.rb +59 -0
  49. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/source_generators/base/gemfile_lock.rb +23 -0
  50. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/source_generators/base/options.rb +32 -0
  51. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/source_generators/base/root_module.rb +35 -0
  52. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/source_generators/base/version_builder.rb +58 -0
  53. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/source_generators/base.rb +83 -0
  54. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/base/bundle_command.rb +35 -0
  55. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/base/bundler.rb +64 -0
  56. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/base/rake.rb +39 -0
  57. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/base/rubocop.rb +23 -0
  58. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/base/rubocop_command.rb +70 -0
  59. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/base/rubygems.rb +40 -0
  60. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/base/update.rb +21 -0
  61. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/base/version.rb +29 -0
  62. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/base/version_bump.rb +16 -0
  63. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/base.rb +58 -0
  64. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/bundle_update.rb +21 -0
  65. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/gemfile_local/sibling.rb +51 -0
  66. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/gemfile_local.rb +67 -0
  67. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/namespace_replacer.rb +55 -0
  68. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/runners/bundle.rb +26 -0
  69. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/runners/bundler/gemfile_local.rb +57 -0
  70. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/runners/bundler/gemfile_lock/git.rb +58 -0
  71. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/runners/bundler/gemfile_lock.rb +87 -0
  72. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/runners/bundler/incompatible.rb +73 -0
  73. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/runners/bundler.rb +17 -0
  74. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/runners/update_dependencies_requirements.rb +67 -0
  75. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/runners.rb +11 -0
  76. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/tests/base.rb +55 -0
  77. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/tests/minitest.rb +27 -0
  78. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/tests/multiple/decorated_gem.rb +50 -0
  79. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/tests/multiple/result.rb +29 -0
  80. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/tests/multiple.rb +86 -0
  81. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/tests/rspec.rb +23 -0
  82. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/update/sub_update.rb +57 -0
  83. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/update_dependency_requirements.rb +63 -0
  84. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/version.rb +7 -0
  85. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1.rb +14 -0
  86. data/sub/avm-eac_ruby_base1/locale/en.yml +9 -0
  87. data/sub/avm-eac_ruby_base1/locale/pt-BR.yml +9 -0
  88. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/bundler/incompatible_parser_spec.rb +5 -0
  89. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/bundler/incompatible_parser_spec_files/1.source.out +192 -0
  90. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/bundler/incompatible_parser_spec_files/1.target.yaml +300 -0
  91. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/bundler/incompatible_parser_spec_files/2.source.out +245 -0
  92. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/bundler/incompatible_parser_spec_files/2.target.yaml +355 -0
  93. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/bundler/incompatible_parser_spec_files/3.source.out +0 -0
  94. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/bundler/incompatible_parser_spec_files/3.target.yaml +305 -0
  95. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/file_formats/base_spec.rb +13 -0
  96. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/file_formats/base_spec_files/Gemfile.source +6 -0
  97. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/file_formats/base_spec_files/Gemfile.target +3 -0
  98. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/file_formats/base_spec_files/ruby_code.rb.source +6 -0
  99. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/file_formats/base_spec_files/ruby_code.rb.target +5 -0
  100. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/launcher/gem/build_spec.rb +43 -0
  101. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/launcher/gem/specification_spec.rb +57 -0
  102. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/launcher_stereotypes/base/publish_spec.rb +25 -0
  103. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/launcher_stereotypes/base_spec.rb +21 -0
  104. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/preferred_version_requirements_spec.rb +21 -0
  105. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/rubygems/gemspec_spec.rb +35 -0
  106. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/rubygems/gemspec_spec_files/changes1.source.yaml +5 -0
  107. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/rubygems/gemspec_spec_files/changes1.target.txt +15 -0
  108. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/rubygems/gemspec_spec_files/the_gem.gemspec +15 -0
  109. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/rubygems/version_file_spec.rb +13 -0
  110. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/rubygems/version_file_spec_files/a_version_file.rb +7 -0
  111. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/runners/base/rubocop_spec.rb +33 -0
  112. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/runners/base/rubocop_spec_files/dir1/dir3/Gemfile +5 -0
  113. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/runners/base/rubocop_spec_files/dir1/dir3/Gemfile.lock +27 -0
  114. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/runners/base/rubocop_spec_files/dir2/empty.rb +1 -0
  115. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/runners/base/rubocop_spec_files/dir4/false_command.rb +4 -0
  116. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec.rb +16 -0
  117. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/dashed-mygem/Gemfile +8 -0
  118. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/dashed-mygem/Gemfile.lock +1 -0
  119. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/dashed-mygem/_gitignore +2 -0
  120. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/dashed-mygem/dashed-mygem.gemspec +19 -0
  121. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/dashed-mygem/lib/dashed/mygem/version.rb +7 -0
  122. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/dashed-mygem/lib/dashed/mygem.rb +9 -0
  123. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/dashed-mygem/spec/rubocop_spec.rb +3 -0
  124. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/dashed-mygem/spec/spec_helper.rb +5 -0
  125. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/mygem/Gemfile +8 -0
  126. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/mygem/Gemfile.lock +1 -0
  127. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/mygem/_gitignore +2 -0
  128. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/mygem/lib/mygem/version.rb +5 -0
  129. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/mygem/lib/mygem.rb +7 -0
  130. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/mygem/mygem.gemspec +19 -0
  131. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/mygem/spec/rubocop_spec.rb +3 -0
  132. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/mygem/spec/spec_helper.rb +5 -0
  133. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/sources/base/bundler_spec.rb +28 -0
  134. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/sources/base/bundler_spec_files/mygem/Gemfile +5 -0
  135. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/sources/base/bundler_spec_files/mygem/Gemfile.lock +19 -0
  136. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/sources/base/bundler_spec_files/mygem/Rakefile +14 -0
  137. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/sources/base/bundler_spec_files/mygem/exe/myrunner +5 -0
  138. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/sources/base/bundler_spec_files/mygem/lib/mygem/version.rb +5 -0
  139. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/sources/base/bundler_spec_files/mygem/lib/mygem.rb +7 -0
  140. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/sources/base/bundler_spec_files/mygem/mygem.gemspec +17 -0
  141. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/sources/base_spec.rb +13 -0
  142. data/sub/avm-eac_ruby_base1/spec/rubocop_spec.rb +3 -0
  143. data/sub/avm-eac_ruby_base1/spec/spec_helper.rb +5 -0
  144. data/sub/avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base/gemspec.template +19 -0
  145. data/sub/avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base/root_lib.template +7 -0
  146. data/sub/avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base/static/Gemfile +8 -0
  147. data/sub/avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base/static/spec/rubocop_spec.rb +3 -0
  148. data/sub/avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base/static/spec/spec_helper.rb.template +5 -0
  149. data/sub/avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base/version.template +5 -0
  150. data/sub/eac_ruby_base0/Gemfile +8 -0
  151. data/sub/eac_ruby_base0/eac_ruby_base0.gemspec +22 -0
  152. data/sub/eac_ruby_base0/lib/eac_ruby_base0/application.rb +88 -0
  153. data/sub/eac_ruby_base0/lib/eac_ruby_base0/application_xdg.rb +34 -0
  154. data/sub/eac_ruby_base0/lib/eac_ruby_base0/core_ext.rb +5 -0
  155. data/sub/eac_ruby_base0/lib/eac_ruby_base0/jobs_runner.rb +31 -0
  156. data/sub/eac_ruby_base0/lib/eac_ruby_base0/patches/class/jobs_runner.rb +9 -0
  157. data/sub/eac_ruby_base0/lib/eac_ruby_base0/patches/class.rb +4 -0
  158. data/sub/eac_ruby_base0/lib/eac_ruby_base0/patches.rb +4 -0
  159. data/sub/eac_ruby_base0/lib/eac_ruby_base0/rspec/setup.rb +14 -0
  160. data/sub/eac_ruby_base0/lib/eac_ruby_base0/rspec.rb +9 -0
  161. data/sub/eac_ruby_base0/lib/eac_ruby_base0/runner/contexts.rb +52 -0
  162. data/sub/eac_ruby_base0/lib/eac_ruby_base0/runner/prepend.rb +39 -0
  163. data/sub/eac_ruby_base0/lib/eac_ruby_base0/runner.rb +37 -0
  164. data/sub/eac_ruby_base0/lib/eac_ruby_base0/runner_with.rb +9 -0
  165. data/sub/eac_ruby_base0/lib/eac_ruby_base0/version.rb +5 -0
  166. data/sub/eac_ruby_base0/lib/eac_ruby_base0.rb +12 -0
  167. data/sub/eac_ruby_base0/spec/rubocop_spec.rb +3 -0
  168. data/sub/eac_ruby_base0/spec/spec_helper.rb +4 -0
  169. data/sub/eac_ruby_gem_support/Gemfile +8 -0
  170. data/sub/eac_ruby_gem_support/eac_ruby_gem_support.gemspec +25 -0
  171. data/sub/eac_ruby_gem_support/lib/eac_ruby_gem_support/rspec/helpers/filesystem.rb +73 -0
  172. data/sub/eac_ruby_gem_support/lib/eac_ruby_gem_support/rspec/helpers/utils.rb +22 -0
  173. data/sub/eac_ruby_gem_support/lib/eac_ruby_gem_support/rspec/setup.rb +55 -0
  174. data/sub/eac_ruby_gem_support/lib/eac_ruby_gem_support/rspec/shared_examples/source_target_fixtures.rb +76 -0
  175. data/sub/eac_ruby_gem_support/lib/eac_ruby_gem_support/rspec/shared_examples/spec_paths.rb +14 -0
  176. data/sub/eac_ruby_gem_support/lib/eac_ruby_gem_support/rspec/source_target_fixtures_controller.rb +32 -0
  177. data/sub/eac_ruby_gem_support/lib/eac_ruby_gem_support/rspec/spec_paths_controller.rb +29 -0
  178. data/sub/eac_ruby_gem_support/lib/eac_ruby_gem_support/rspec/specs/rubocop.rb +33 -0
  179. data/sub/eac_ruby_gem_support/lib/eac_ruby_gem_support/source_target_fixtures/source_target_file.rb +19 -0
  180. data/sub/eac_ruby_gem_support/lib/eac_ruby_gem_support/source_target_fixtures.rb +74 -0
  181. data/sub/eac_ruby_gem_support/lib/eac_ruby_gem_support/version.rb +5 -0
  182. data/sub/eac_ruby_gem_support/lib/eac_ruby_gem_support.rb +11 -0
  183. data/sub/eac_ruby_gem_support/spec/lib/eac_ruby_gem_support/rspec/helpers/filesystem_spec.rb +30 -0
  184. data/sub/eac_ruby_gem_support/spec/lib/eac_ruby_gem_support/rspec/shared_examples/source_target_fixtures_spec.rb +11 -0
  185. data/sub/eac_ruby_gem_support/spec/lib/eac_ruby_gem_support/rspec/shared_examples/source_target_fixtures_spec_files/one.source.yaml +2 -0
  186. data/sub/eac_ruby_gem_support/spec/lib/eac_ruby_gem_support/rspec/shared_examples/source_target_fixtures_spec_files/one.target.yaml +2 -0
  187. data/sub/eac_ruby_gem_support/spec/lib/eac_ruby_gem_support/rspec/shared_examples/spec_paths_spec.rb +19 -0
  188. data/sub/eac_ruby_gem_support/spec/lib/eac_ruby_gem_support/source_target_fixtures_spec.rb +27 -0
  189. data/sub/eac_ruby_gem_support/spec/lib/eac_ruby_gem_support/source_target_fixtures_spec_files/stub1.source.txt +1 -0
  190. data/sub/eac_ruby_gem_support/spec/lib/eac_ruby_gem_support/source_target_fixtures_spec_files/stub1.target.html +1 -0
  191. data/sub/eac_ruby_gem_support/spec/lib/eac_ruby_gem_support/source_target_fixtures_spec_files/stub2.source.html +1 -0
  192. data/sub/eac_ruby_gem_support/spec/lib/eac_ruby_gem_support/source_target_fixtures_spec_files/stub3.target.yaml +1 -0
  193. data/sub/eac_ruby_gem_support/spec/lib/rubocop_check_spec.rb +3 -0
  194. data/sub/eac_ruby_gem_support/spec/spec_helper.rb +103 -0
  195. data/sub/eac_templates/Gemfile +8 -0
  196. data/sub/eac_templates/README.textile +59 -0
  197. data/sub/eac_templates/eac_templates.gemspec +21 -0
  198. data/sub/eac_templates/lib/eac_templates/abstract/directory.rb +42 -0
  199. data/sub/eac_templates/lib/eac_templates/abstract/file.rb +25 -0
  200. data/sub/eac_templates/lib/eac_templates/abstract/fs_object.rb +99 -0
  201. data/sub/eac_templates/lib/eac_templates/abstract/fs_object_by_pathname.rb +13 -0
  202. data/sub/eac_templates/lib/eac_templates/abstract/with_directory_file_methods.rb +77 -0
  203. data/sub/eac_templates/lib/eac_templates/core_ext.rb +4 -0
  204. data/sub/eac_templates/lib/eac_templates/errors/not_found.rb +8 -0
  205. data/sub/eac_templates/lib/eac_templates/errors/type_mismatch.rb +8 -0
  206. data/sub/eac_templates/lib/eac_templates/errors.rb +9 -0
  207. data/sub/eac_templates/lib/eac_templates/interface_methods.rb +12 -0
  208. data/sub/eac_templates/lib/eac_templates/modules/ancestor/directory.rb +37 -0
  209. data/sub/eac_templates/lib/eac_templates/modules/ancestor/file.rb +64 -0
  210. data/sub/eac_templates/lib/eac_templates/modules/ancestor/fs_object.rb +26 -0
  211. data/sub/eac_templates/lib/eac_templates/modules/ancestor.rb +37 -0
  212. data/sub/eac_templates/lib/eac_templates/modules/base/directory.rb +72 -0
  213. data/sub/eac_templates/lib/eac_templates/modules/base/file.rb +31 -0
  214. data/sub/eac_templates/lib/eac_templates/modules/base/fs_object.rb +16 -0
  215. data/sub/eac_templates/lib/eac_templates/modules/base.rb +93 -0
  216. data/sub/eac_templates/lib/eac_templates/modules.rb +9 -0
  217. data/sub/eac_templates/lib/eac_templates/patches/module/erb_template.rb +9 -0
  218. data/sub/eac_templates/lib/eac_templates/patches/module/template.rb +9 -0
  219. data/sub/eac_templates/lib/eac_templates/patches/module.rb +4 -0
  220. data/sub/eac_templates/lib/eac_templates/patches/object/erb_template.rb +9 -0
  221. data/sub/eac_templates/lib/eac_templates/patches/object/template.rb +7 -0
  222. data/sub/eac_templates/lib/eac_templates/patches/object.rb +4 -0
  223. data/sub/eac_templates/lib/eac_templates/patches.rb +4 -0
  224. data/sub/eac_templates/lib/eac_templates/sources/directory.rb +37 -0
  225. data/sub/eac_templates/lib/eac_templates/sources/file.rb +13 -0
  226. data/sub/eac_templates/lib/eac_templates/sources/from_all_gems.rb +4 -0
  227. data/sub/eac_templates/lib/eac_templates/sources/from_gem.rb +37 -0
  228. data/sub/eac_templates/lib/eac_templates/sources/fs_object.rb +58 -0
  229. data/sub/eac_templates/lib/eac_templates/sources/internal_set.rb +27 -0
  230. data/sub/eac_templates/lib/eac_templates/sources/set.rb +61 -0
  231. data/sub/eac_templates/lib/eac_templates/sources/single.rb +34 -0
  232. data/sub/eac_templates/lib/eac_templates/sources.rb +9 -0
  233. data/sub/eac_templates/lib/eac_templates/variables/content.rb +52 -0
  234. data/sub/eac_templates/lib/eac_templates/variables/directory.rb +48 -0
  235. data/sub/eac_templates/lib/eac_templates/variables/file.rb +26 -0
  236. data/sub/eac_templates/lib/eac_templates/variables/fs_object.rb +65 -0
  237. data/sub/eac_templates/lib/eac_templates/variables/not_found_error.rb +7 -0
  238. data/sub/eac_templates/lib/eac_templates/variables/providers/base.rb +24 -0
  239. data/sub/eac_templates/lib/eac_templates/variables/providers/config_reader.rb +29 -0
  240. data/sub/eac_templates/lib/eac_templates/variables/providers/entries_reader.rb +25 -0
  241. data/sub/eac_templates/lib/eac_templates/variables/providers/generic.rb +25 -0
  242. data/sub/eac_templates/lib/eac_templates/variables/providers/hash.rb +29 -0
  243. data/sub/eac_templates/lib/eac_templates/variables/providers.rb +25 -0
  244. data/sub/eac_templates/lib/eac_templates/variables.rb +9 -0
  245. data/sub/eac_templates/lib/eac_templates/version.rb +5 -0
  246. data/sub/eac_templates/lib/eac_templates.rb +15 -0
  247. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec.rb +28 -0
  248. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/a_module/a/a_a +1 -0
  249. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/a_module/a/a_b +1 -0
  250. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/a_module/b +1 -0
  251. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/a_module/c +1 -0
  252. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/prepended_module/a/a_d +1 -0
  253. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/prepended_module/c +1 -0
  254. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/prepended_module/d +1 -0
  255. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/sub_class/a/a_a +1 -0
  256. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/sub_class/a/a_b +1 -0
  257. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/sub_class/a/a_c +1 -0
  258. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/sub_class/a/a_d +1 -0
  259. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/sub_class/b +1 -0
  260. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/sub_class/c +1 -0
  261. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/sub_class/d +1 -0
  262. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/super_class/a/a_a +1 -0
  263. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/super_class/a/a_b +1 -0
  264. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/super_class/b +1 -0
  265. data/sub/eac_templates/spec/lib/eac_templates/modules/base/apply_spec_files/super_class/c +1 -0
  266. data/sub/eac_templates/spec/lib/eac_templates/modules/base/child_spec.rb +110 -0
  267. data/sub/eac_templates/spec/lib/eac_templates/patches/object/template_spec.rb +26 -0
  268. data/sub/eac_templates/spec/lib/eac_templates/patches/object/template_spec_files/path/my_stub_with_template +1 -0
  269. data/sub/eac_templates/spec/lib/eac_templates/sources/set_spec.rb +42 -0
  270. data/sub/eac_templates/spec/lib/eac_templates/sources/set_spec_files/path1/subdir1/file1.template +1 -0
  271. data/sub/eac_templates/spec/lib/eac_templates/sources/set_spec_files/path1/subdir1/file2 +1 -0
  272. data/sub/eac_templates/spec/lib/eac_templates/sources/set_spec_files/path2/subdir1/file3.template +1 -0
  273. data/sub/eac_templates/spec/lib/eac_templates/variables/content_spec.rb +35 -0
  274. data/sub/eac_templates/spec/lib/eac_templates/variables/content_spec_files/expected_content +2 -0
  275. data/sub/eac_templates/spec/lib/eac_templates/variables/content_spec_files/source.template +2 -0
  276. data/sub/eac_templates/spec/rubocop_spec.rb +3 -0
  277. data/sub/eac_templates/spec/spec_helper/modules_resources_context.rb +45 -0
  278. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path1/a_module/a/a_a +1 -0
  279. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path1/a_module/b +1 -0
  280. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path1/prepended_module/a/a_d.template +1 -0
  281. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path1/sub_class/a/a_c +1 -0
  282. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path1/super_class/a/a_b +1 -0
  283. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path1/super_class/b +1 -0
  284. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path2/a_module/a/a_b +1 -0
  285. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path2/a_module/b +1 -0
  286. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path2/a_module/c +1 -0
  287. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path2/prepended_module/c +1 -0
  288. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path2/prepended_module/d.template +1 -0
  289. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path2/sub_class/a/a_d +1 -0
  290. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path2/sub_class/b +1 -0
  291. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path2/super_class/a/a_b +1 -0
  292. data/sub/eac_templates/spec/spec_helper/modules_resources_context_files/path2/super_class/b +1 -0
  293. data/sub/eac_templates/spec/spec_helper.rb +6 -0
  294. metadata +294 -20
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+ require 'eac_templates/interface_methods'
5
+ require 'eac_templates/abstract/with_directory_file_methods'
6
+
7
+ module EacTemplates
8
+ module Modules
9
+ class Ancestor
10
+ include ::EacTemplates::Abstract::WithDirectoryFileMethods
11
+
12
+ class << self
13
+ # @param a_module [Module]
14
+ # @return [Pathname]
15
+ def path_for_search(a_module)
16
+ a_module.name.underscore.to_pathname
17
+ end
18
+ end
19
+
20
+ common_constructor :base, :ancestor
21
+ delegate :subpath, :source_set, to: :base
22
+ delegate(*::EacTemplates::InterfaceMethods::ALL + [:children_basenames], to: :sub_fs_object)
23
+
24
+ def ancestor_path_for_search
25
+ self.class.path_for_search(ancestor)
26
+ end
27
+
28
+ # @return [Pathname]
29
+ def path_for_search
30
+ r = ancestor_path_for_search
31
+ subpath.if_present(r) { |v| r.join(v) }
32
+ end
33
+
34
+ require_sub __FILE__
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+ require 'eac_templates/abstract/directory'
5
+ require 'eac_templates/interface_methods'
6
+ require 'eac_templates/modules/base/fs_object'
7
+
8
+ module EacTemplates
9
+ module Modules
10
+ class Base
11
+ class Directory < ::EacTemplates::Abstract::Directory
12
+ include ::EacTemplates::Modules::Base::FsObject
13
+ delegate(*(EacTemplates::InterfaceMethods::DIRECTORY - %i[apply child children]),
14
+ to: :self_ancestor)
15
+
16
+ # @param variables_source [Object]
17
+ # @param target_path [Pathname]
18
+ def apply(variables_source, target_path)
19
+ target_path = target_path.to_pathname
20
+ target_path.mkpath
21
+ children.each do |child|
22
+ child_apply(child, variables_source, target_path.join(child.basename))
23
+ end
24
+ end
25
+
26
+ # @!method build_child(child_basename, child_type)
27
+ # @param child_basename [Pathname]
28
+ # @param child_type [Symbol]
29
+ # @return [EacTemplates::Modules::Base]
30
+ delegate :build_child, to: :owner
31
+
32
+ # @return [Hash<Pathname, Symbol>]
33
+ def children_basenames
34
+ owner.ancestors.select(&:directory?).each_with_object({}) do |e, a|
35
+ ancestor_children_names(e, a)
36
+ end
37
+ end
38
+
39
+ # @return [Boolean]
40
+ def found?
41
+ children.any?
42
+ end
43
+
44
+ protected
45
+
46
+ # @param ancestor []
47
+ # @param result [Hash<Pathname, Symbol>]
48
+ # @return [void]
49
+ def ancestor_children_names(ancestor, result)
50
+ ancestor.children_basenames.each do |path, type|
51
+ result[path] = type
52
+ end
53
+ end
54
+
55
+ # @param child [EacTemplates::Modules::Base]
56
+ # # @param variables_source [Object]
57
+ # @param target_path [Pathname]
58
+ def child_apply(child, variables_source, target_path)
59
+ if child.directory?
60
+ child.apply(variables_source, target_path)
61
+ elsif child.file_template?
62
+ child.apply_to_file(variables_source, target_path)
63
+ elsif child.file?
64
+ ::FileUtils.cp(child.path, target_path)
65
+ else
66
+ ibr
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+ require 'eac_templates/abstract/file'
5
+ require 'eac_templates/interface_methods'
6
+ require 'eac_templates/modules/base/fs_object'
7
+
8
+ module EacTemplates
9
+ module Modules
10
+ class Base
11
+ class File < ::EacTemplates::Abstract::File
12
+ include ::EacTemplates::Modules::Base::FsObject
13
+ delegate(*EacTemplates::InterfaceMethods::FILE + [:template?], to: :ancestor_found)
14
+
15
+ def basename
16
+ ancestor_found.if_present(&:basename)
17
+ end
18
+
19
+ def found?
20
+ ancestor_found.present?
21
+ end
22
+
23
+ private
24
+
25
+ def ancestor_found_uncached
26
+ owner.ancestors.lazy.map(&:file).select(&:found?).first
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+ require 'eac_templates/interface_methods'
5
+
6
+ module EacTemplates
7
+ module Modules
8
+ class Base
9
+ module FsObject
10
+ def self_ancestor
11
+ owner.self_ancestor.send(type)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+ require 'eac_templates/interface_methods'
5
+ require 'eac_templates/abstract/with_directory_file_methods'
6
+ require 'eac_templates/modules/ancestor'
7
+ require 'eac_templates/sources/set'
8
+ require 'eac_templates/errors/type_mismatch'
9
+
10
+ module EacTemplates
11
+ module Modules
12
+ class Base
13
+ include ::EacTemplates::Abstract::WithDirectoryFileMethods
14
+ enable_listable
15
+ enable_simple_cache
16
+ lists.add_symbol :option, :source_set, :subpath
17
+ common_constructor :the_module, :options, default: [{}] do
18
+ self.options = self.class.lists.option.hash_keys_validate!(options)
19
+ end
20
+ delegate(*::EacTemplates::InterfaceMethods::ONLY_DIRECTORY, to: :directory)
21
+ delegate(*::EacTemplates::InterfaceMethods::ONLY_FILE, to: :file)
22
+ delegate(*::EacTemplates::InterfaceMethods::COMMON, :basename, :path_for_search,
23
+ :source_object, :type, to: :sub_fs_object)
24
+
25
+ # @param child_basename [Pathname]
26
+ # @param child_type [Symbol]
27
+ # @return [EacTemplates::Modules::Base]
28
+ def build_child(child_basename, child_type)
29
+ r = ::EacTemplates::Modules::Base.new(
30
+ the_module, subpath: child_subpath(child_basename), source_set: source_set
31
+ )
32
+ return r.validate_type(child_type) if r.found?
33
+
34
+ raise ::EacTemplates::Errors::NotFound,
35
+ "No child for #{self} found with basename \"#{child_basename}\""
36
+ end
37
+
38
+ # @return [Boolean]
39
+ def found?
40
+ file.found? || directory.found?
41
+ end
42
+
43
+ # @return [EacTemplates::SourceSet]
44
+ def source_set
45
+ options[OPTION_SOURCE_SET] || ::EacTemplates::Sources::Set.default
46
+ end
47
+
48
+ # @return [Pathname, nil]
49
+ def subpath
50
+ options[OPTION_SUBPATH].if_present(&:to_pathname)
51
+ end
52
+
53
+ # @return [String]
54
+ def to_s
55
+ "#{self.class}[#{the_module.name}#\"#{subpath}\"]"
56
+ end
57
+
58
+ # @param required_type [Symbol]
59
+ # @return [self]
60
+ # @raise [EacTemplates::Errors::TypeMismatch]
61
+ def validate_type(required_type)
62
+ return self if valid_type?(required_type)
63
+
64
+ raise ::EacTemplates::Errors::TypeMismatch, "A #{required_type} type was expected, but a " \
65
+ "#{type} was builded"
66
+ end
67
+
68
+ private
69
+
70
+ # @return [Enumerable<EacTemplates::Modules::Ancestor>]
71
+ def ancestors_uncached
72
+ the_module.ancestors.map { |a| ::EacTemplates::Modules::Ancestor.new(self, a) }
73
+ end
74
+
75
+ # @return [EacTemplates::Modules::Ancestor]
76
+ def self_ancestor_uncached
77
+ ancestors.find { |a| a.ancestor == the_module } || ibr
78
+ end
79
+
80
+ # @return [Boolean]
81
+ def valid_type?(required_type)
82
+ file_types = %i[file file_template]
83
+ if file_types.include?(required_type)
84
+ file_types.include?(type)
85
+ else
86
+ type == required_type
87
+ end
88
+ end
89
+
90
+ require_sub __FILE__
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+
5
+ module EacTemplates
6
+ module Modules
7
+ require_sub __FILE__
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'erb'
4
+
5
+ class Module
6
+ def erb_template(subpath, binding_obj)
7
+ ::ERB.new(template.child(subpath).path.read).result(binding_obj)
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_templates/modules/base'
4
+
5
+ class Module
6
+ def template
7
+ @template ||= ::EacTemplates::Modules::Base.new(self)
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+ EacRubyUtils.require_sub __FILE__
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_templates/patches/module/erb_template'
4
+
5
+ class Object
6
+ def erb_template(subpath, binding_obj = nil)
7
+ self.class.erb_template(subpath, binding_obj || binding)
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_templates/patches/module/template'
4
+
5
+ class Object
6
+ delegate :template, to: :class
7
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+ EacRubyUtils.require_sub __FILE__
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+ EacRubyUtils.require_sub __FILE__
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+ require 'eac_templates/abstract/directory'
5
+ require 'eac_templates/sources/fs_object'
6
+
7
+ module EacTemplates
8
+ module Sources
9
+ class Directory < ::EacTemplates::Abstract::Directory
10
+ include ::EacTemplates::Sources::FsObject
11
+
12
+ # @return [Hash<Pathname, Symbol>]
13
+ def children_basenames
14
+ r = {}
15
+ real_paths.each do |real_path|
16
+ real_path.children.each do |child|
17
+ next if r.key?(child.basename)
18
+
19
+ r[child.basename] = real_path_type(child)
20
+ end
21
+ end
22
+ r
23
+ end
24
+
25
+ # @return [Pathname]
26
+ def real_path_type(path)
27
+ if path.file?
28
+ :file
29
+ elsif path.directory?
30
+ :directory
31
+ else
32
+ raise "Path \"#{path}\" is not a file nor a directory"
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+ require 'eac_templates/abstract/file'
5
+ require 'eac_templates/sources/fs_object'
6
+
7
+ module EacTemplates
8
+ module Sources
9
+ class File < ::EacTemplates::Abstract::File
10
+ include ::EacTemplates::Sources::FsObject
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_templates/sources/from_gem'
4
+ EacTemplates::Sources::FromGem.include_all
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_templates/sources/set'
4
+
5
+ module EacTemplates
6
+ module Sources
7
+ class FromGem
8
+ class << self
9
+ def include_all(searcher = nil)
10
+ ::Gem::Specification.each { |gemspec| new(gemspec, searcher).include }
11
+ end
12
+ end
13
+
14
+ TEMPLATES_DIR_SUBPATH = 'template'
15
+
16
+ common_constructor :gemspec, :searcher, default: [nil] do
17
+ self.searcher ||= ::EacTemplates::Sources::Set.default
18
+ end
19
+
20
+ # @return [Boolean]
21
+ delegate :exist?, to: :path
22
+
23
+ # @return [Pathname]
24
+ def include
25
+ return nil unless exist?
26
+
27
+ searcher.included_paths << path
28
+ path
29
+ end
30
+
31
+ # @return [Pathname]
32
+ def path
33
+ gemspec.gem_dir.to_pathname.join(TEMPLATES_DIR_SUBPATH)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+ require 'eac_templates/errors/not_found'
5
+
6
+ module EacTemplates
7
+ module Sources
8
+ module FsObject
9
+ PATH_FOR_SEARCH_PREFIX = ::Pathname.new('')
10
+
11
+ common_concern do
12
+ enable_abstract_methods
13
+ enable_simple_cache
14
+ end
15
+
16
+ # @return [Boolean]
17
+ def found?
18
+ real_paths.any?
19
+ end
20
+
21
+ # @return [Pathname]
22
+ def path
23
+ real_paths.first
24
+ end
25
+
26
+ # @return [Pathname]
27
+ def path_for_search_prefix
28
+ PATH_FOR_SEARCH_PREFIX
29
+ end
30
+
31
+ # @return [String]
32
+ def to_s
33
+ "#{self.class.name}[#{path_for_search}]"
34
+ end
35
+
36
+ protected
37
+
38
+ # @return [Array<Pathname>]
39
+ def real_paths_uncached
40
+ source_set.included_paths.lazy.map { |source_single| source_single_search(source_single) }
41
+ .reject(&:nil?) # rubocop:disable Style/CollectionCompact
42
+ end
43
+
44
+ # @param path [Pathname]
45
+ # @return [Boolean]
46
+ def select_path?(path)
47
+ !path.nil? && path.send("#{type}?")
48
+ end
49
+
50
+ # @param source_single [EacTemplates::Sources::Single]
51
+ # @return [Pathname, nil]
52
+ def source_single_search(source_single)
53
+ r = source_single.search(path_for_search)
54
+ select_path?(r) ? r : nil
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+ require 'eac_templates/sources/single'
5
+
6
+ module EacTemplates
7
+ module Sources
8
+ class InternalSet < ::Set
9
+ # @param single [EacTemplates::Sources::Single]
10
+ # @return [self]
11
+ def add(single)
12
+ super(::EacTemplates::Sources::Single.assert(single))
13
+ end
14
+
15
+ # @param single [EacTemplates::Sources::Single]
16
+ # @return [self]
17
+ def <<(single)
18
+ add(single)
19
+ end
20
+
21
+ # @return [String]
22
+ def to_s
23
+ "#{self.class.name}[#{map(&:to_s).join(', ')}]"
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/object/blank'
4
+ require 'eac_templates/sources/directory'
5
+ require 'eac_templates/sources/file'
6
+ require 'eac_templates/sources/internal_set'
7
+ require 'eac_templates/errors/not_found'
8
+
9
+ module EacTemplates
10
+ module Sources
11
+ class Set
12
+ class << self
13
+ def default
14
+ @default ||= new
15
+ end
16
+ end
17
+
18
+ # @param subpath [Pathname]
19
+ # @return [EacTemplates::Sources::Directory]
20
+ def directory(subpath)
21
+ ::EacTemplates::Sources::Directory.by_subpath(self, nil, subpath, source_set: self)
22
+ end
23
+
24
+ # @param subpath [Pathname]
25
+ # @return [EacTemplates::Sources::Directory]
26
+ def file(subpath)
27
+ ::EacTemplates::Sources::File.by_subpath(self, nil, subpath, source_set: self)
28
+ end
29
+
30
+ def template(subpath, required = true) # rubocop:disable Style/OptionalBooleanParameter
31
+ found_file = file(subpath)
32
+ return found_file if found_file.found?
33
+
34
+ found_directory = directory(subpath)
35
+ return found_directory if found_directory.found?
36
+
37
+ return nil unless required
38
+
39
+ raise_template_not_found(subpath)
40
+ end
41
+
42
+ # @return [EacTemplates::Sources::InternalSet]
43
+ def included_paths
44
+ @included_paths ||= ::EacTemplates::Sources::InternalSet.new
45
+ end
46
+
47
+ # @return [String]
48
+ def to_s
49
+ "#{self.class.name}[#{included_paths}]"
50
+ end
51
+
52
+ private
53
+
54
+ def raise_template_not_found(subpath)
55
+ raise ::EacTemplates::Errors::NotFound,
56
+ 'Template not found for subpath ' \
57
+ "\"#{subpath}\" (Included paths: #{included_paths.to_a.join(::File::PATH_SEPARATOR)})"
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+
5
+ module EacTemplates
6
+ module Sources
7
+ class Single
8
+ class << self
9
+ # @param object [EacTemplates::Sources::Single, Pathname]
10
+ # @return [EacTemplates::Sources::Single]
11
+ def assert(object)
12
+ return object if object.is_a?(self)
13
+
14
+ new(object.to_pathname)
15
+ end
16
+ end
17
+
18
+ common_constructor :path do
19
+ self.path = path.to_pathname.expand_path
20
+ end
21
+
22
+ # @return [Pathname, nil]
23
+ def search(subpath)
24
+ r = path.join(subpath)
25
+ r.exist? ? r : nil
26
+ end
27
+
28
+ # @return [String]
29
+ def to_s
30
+ "#{self.class.name}[#{path}]"
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+
5
+ module EacTemplates
6
+ module Sources
7
+ require_sub __FILE__
8
+ end
9
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils'
4
+ require 'eac_templates/variables/providers'
5
+
6
+ module EacTemplates
7
+ module Variables
8
+ class Content
9
+ VARIABLE_DELIMITER = ::Regexp.quote('%%')
10
+ VARIABLE_PATTERN = /#{VARIABLE_DELIMITER}([a-z0-9\._]*)#{VARIABLE_DELIMITER}/i.freeze
11
+
12
+ class << self
13
+ # @param path [Pathname]
14
+ # @return [EacTemplates::Variables::Content]
15
+ def from_file(path)
16
+ new(path.to_pathname.read)
17
+ end
18
+ end
19
+
20
+ enable_simple_cache
21
+ common_constructor :content
22
+
23
+ # +variables_provider+ A [Hash] or object which responds to +read_entry(entry_name)+.
24
+ def apply(variables_source)
25
+ variables_provider = ::EacTemplates::Variables::Providers.build(variables_source)
26
+ variables.inject(content) do |a, e|
27
+ a.gsub(variable_pattern(e), variables_provider.variable_value(e).to_s)
28
+ end
29
+ end
30
+
31
+ def apply_to_file(variables_source, output_file_path)
32
+ output_file_path.to_pathname.write(apply(variables_source))
33
+ end
34
+
35
+ private
36
+
37
+ def variables_uncached
38
+ content.scan(VARIABLE_PATTERN).map(&:first).to_set do |name| # rubocop:disable Style/MapToSet
39
+ sanitize_variable_name(name)
40
+ end
41
+ end
42
+
43
+ def sanitize_variable_name(variable_name)
44
+ variable_name.to_s.downcase
45
+ end
46
+
47
+ def variable_pattern(name)
48
+ /#{VARIABLE_DELIMITER}#{::Regexp.quote(name)}#{VARIABLE_DELIMITER}/i
49
+ end
50
+ end
51
+ end
52
+ end