avm-tools 0.70.2 → 0.74.1

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 (128) hide show
  1. checksums.yaml +4 -4
  2. data/lib/avm/{stereotypes/eac_rails_base0.rb → eac_rails_base0.rb} +1 -3
  3. data/lib/avm/eac_rails_base0/instance.rb +2 -5
  4. data/lib/avm/{rails/runners.rb → eac_rails_base1.rb} +2 -4
  5. data/lib/avm/eac_rails_base1/instance.rb +24 -0
  6. data/lib/avm/eac_rails_base1/runner.rb +12 -0
  7. data/lib/avm/eac_rails_base1/runner/bundle.rb +28 -0
  8. data/lib/avm/eac_rails_base1/runner/code_runner.rb +28 -0
  9. data/lib/avm/eac_rails_base1/runner_with/bundle.rb +57 -0
  10. data/lib/avm/{stereotypes/rails.rb → eac_redmine_base0.rb} +2 -4
  11. data/lib/avm/eac_redmine_base0/instance.rb +2 -4
  12. data/lib/avm/{stereotypes/eac_ubuntu_base0.rb → eac_ubuntu_base0.rb} +1 -3
  13. data/lib/avm/{stereotypes/eac_webapp_base0.rb → eac_webapp_base0.rb} +1 -3
  14. data/lib/avm/eac_webapp_base0/instance.rb +2 -2
  15. data/lib/avm/eac_webapp_base0/runner.rb +12 -0
  16. data/lib/avm/eac_webapp_base0/runner/apache_host.rb +2 -3
  17. data/lib/avm/eac_webapp_base0/runner/data.rb +1 -1
  18. data/lib/avm/eac_webapp_base0/runner/data/dump.rb +1 -1
  19. data/lib/avm/eac_webapp_base0/runner/data/load.rb +1 -1
  20. data/lib/avm/eac_webapp_base0/runner/deploy.rb +3 -16
  21. data/lib/avm/eac_wordpress_base0.rb +9 -0
  22. data/lib/avm/eac_wordpress_base0/apache_host.rb +25 -0
  23. data/lib/avm/eac_wordpress_base0/deploy.rb +10 -0
  24. data/lib/avm/eac_wordpress_base0/instance.rb +24 -0
  25. data/lib/avm/eac_writings_base0.rb +9 -0
  26. data/lib/avm/eac_writings_base0/commons.rb +12 -0
  27. data/lib/avm/eac_writings_base0/file_build.rb +45 -0
  28. data/lib/avm/eac_writings_base0/file_build/base_stereotype.rb +19 -0
  29. data/lib/avm/eac_writings_base0/file_build/chapter_index.rb +23 -0
  30. data/lib/avm/eac_writings_base0/file_build/tex_source.rb +33 -0
  31. data/lib/avm/eac_writings_base0/project.rb +33 -0
  32. data/lib/avm/eac_writings_base0/project_build.rb +117 -0
  33. data/lib/avm/eac_writings_base0/project_build/chapters_content.rb +47 -0
  34. data/lib/avm/eac_writings_base0/project_build/copy_files.rb +42 -0
  35. data/lib/avm/executables.rb +1 -1
  36. data/lib/avm/instances/application.rb +4 -0
  37. data/lib/avm/instances/base.rb +2 -1
  38. data/lib/avm/instances/base/auto_values.rb +2 -1
  39. data/lib/avm/instances/base/auto_values/access.rb +5 -4
  40. data/lib/avm/instances/base/auto_values/admin.rb +2 -2
  41. data/lib/avm/instances/base/auto_values/database.rb +1 -1
  42. data/lib/avm/instances/base/auto_values/filesystem.rb +6 -2
  43. data/lib/avm/instances/base/auto_values/mailer.rb +34 -0
  44. data/lib/avm/instances/base/auto_values/ruby.rb +1 -1
  45. data/lib/avm/instances/base/auto_values/system.rb +2 -2
  46. data/lib/avm/instances/entry.rb +7 -1
  47. data/lib/avm/instances/entry_keys.rb +42 -7
  48. data/lib/avm/instances/runner.rb +40 -0
  49. data/lib/avm/{stereotypes/postgresql.rb → postgresql.rb} +1 -3
  50. data/lib/avm/postgresql/instance.rb +63 -0
  51. data/lib/avm/postgresql/instance/data_unit.rb +39 -0
  52. data/lib/avm/postgresql/instance_with.rb +18 -0
  53. data/lib/avm/projects/stereotypes/git_subtree/publish.rb +2 -0
  54. data/lib/avm/projects/stereotypes/git_subtree/warp.rb +3 -0
  55. data/lib/avm/tools/runner.rb +3 -3
  56. data/lib/avm/tools/runner/eac_rails_base0.rb +5 -18
  57. data/lib/avm/tools/runner/eac_rails_base0/apache_path.rb +1 -1
  58. data/lib/avm/tools/runner/eac_rails_base0/bundle.rb +3 -3
  59. data/lib/avm/tools/runner/eac_rails_base0/rails_server.rb +35 -0
  60. data/lib/avm/tools/runner/eac_rails_base0/runner.rb +3 -3
  61. data/lib/avm/tools/runner/eac_redmine_base0.rb +5 -23
  62. data/lib/avm/tools/runner/eac_redmine_base0/core_update.rb +1 -1
  63. data/lib/avm/tools/runner/eac_redmine_base0/docker.rb +1 -1
  64. data/lib/avm/tools/runner/eac_redmine_base0/project_rename.rb +3 -3
  65. data/lib/avm/tools/runner/eac_wordpress_base0.rb +5 -24
  66. data/lib/avm/tools/runner/instance.rb +28 -0
  67. data/lib/avm/tools/runner/instance/info.rb +44 -0
  68. data/lib/avm/tools/runner/local_project/eac_writings_base0.rb +35 -0
  69. data/lib/avm/tools/runner/local_project/eac_writings_base0/build_chapters.rb +48 -0
  70. data/lib/avm/tools/runner/local_project/eac_writings_base0/build_single.rb +37 -0
  71. data/lib/avm/tools/runner/local_project/eac_writings_base0/info.rb +36 -0
  72. data/lib/avm/tools/version.rb +1 -1
  73. data/template/avm/eac_rails_base0/deploy/config/envvars.d/email.yml.template +11 -0
  74. data/template/avm/eac_writings_base0/commons/all.tex +5 -0
  75. data/template/avm/eac_writings_base0/commons/ebook.tex +11 -0
  76. data/template/avm/eac_writings_base0/commons/images.tex +11 -0
  77. data/template/avm/eac_writings_base0/commons/links.tex +2 -0
  78. data/template/avm/eac_writings_base0/commons/portuguese.tex +8 -0
  79. data/template/avm/eac_writings_base0/commons/source_code.tex +21 -0
  80. data/template/avm/eac_writings_base0/commons/source_code/java.tex +15 -0
  81. data/template/avm/eac_writings_base0/commons/utils.tex +6 -0
  82. data/vendor/eac_cli/lib/eac_cli/runner.rb +1 -1
  83. data/vendor/eac_cli/lib/eac_cli/runner/context.rb +19 -2
  84. data/vendor/eac_cli/lib/eac_cli/version.rb +1 -1
  85. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner.rb +12 -0
  86. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/version.rb +1 -1
  87. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/gem.rb +2 -1
  88. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/gem/command.rb +1 -1
  89. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/tests/multiple/decorated_gem.rb +10 -6
  90. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/version.rb +1 -1
  91. data/vendor/eac_ruby_gems_utils/spec/{rubocop_check_spec.rb → code/rubocop_check_spec.rb} +0 -0
  92. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/blank_not_blank.rb +19 -0
  93. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/configs/base.rb +43 -0
  94. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/configs/file.rb +12 -31
  95. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs.rb +4 -1
  96. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/clearable_directory.rb +57 -0
  97. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash.rb +21 -58
  98. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash/entry_key_error.rb +8 -0
  99. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash/node.rb +67 -0
  100. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash/path_search.rb +39 -0
  101. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/ruby/command.rb +2 -1
  102. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/struct.rb +4 -0
  103. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  104. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/blank_not_blank_spec.rb +16 -0
  105. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/configs_spec.rb +15 -0
  106. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/paths_hash_spec.rb +52 -13
  107. metadata +57 -30
  108. data/lib/avm/rails/runners/bundle.rb +0 -35
  109. data/lib/avm/rails/runners/runner.rb +0 -48
  110. data/lib/avm/stereotypes/eac_redmine_base0.rb +0 -11
  111. data/lib/avm/stereotypes/eac_wordpress_base0/apache_host.rb +0 -27
  112. data/lib/avm/stereotypes/eac_wordpress_base0/deploy.rb +0 -12
  113. data/lib/avm/stereotypes/eac_wordpress_base0/instance.rb +0 -26
  114. data/lib/avm/stereotypes/postgresql/instance.rb +0 -65
  115. data/lib/avm/stereotypes/postgresql/instance/data_unit.rb +0 -41
  116. data/lib/avm/stereotypes/postgresql/instance_with.rb +0 -20
  117. data/lib/avm/stereotypes/rails/instance.rb +0 -20
  118. data/lib/avm/tools/runner/eac_rails_base0/apache_host.rb +0 -16
  119. data/lib/avm/tools/runner/eac_rails_base0/data.rb +0 -15
  120. data/lib/avm/tools/runner/eac_rails_base0/deploy.rb +0 -15
  121. data/lib/avm/tools/runner/eac_redmine_base0/bundle.rb +0 -14
  122. data/lib/avm/tools/runner/eac_redmine_base0/data.rb +0 -27
  123. data/lib/avm/tools/runner/eac_redmine_base0/data/dump.rb +0 -16
  124. data/lib/avm/tools/runner/eac_redmine_base0/deploy.rb +0 -15
  125. data/lib/avm/tools/runner/eac_redmine_base0/runner.rb +0 -14
  126. data/lib/avm/tools/runner/eac_wordpress_base0/apache_host.rb +0 -17
  127. data/lib/avm/tools/runner/eac_wordpress_base0/data.rb +0 -15
  128. data/lib/avm/tools/runner/eac_wordpress_base0/deploy.rb +0 -15
@@ -0,0 +1,11 @@
1
+ \documentclass[a4paper,twoside,final,12pt,openany]{memoir}
2
+ \input{commons/all}
3
+ \setlength{\parindent}{0em}
4
+ \setlength{\parskip}{1em}
5
+ \setlrmarginsandblock{1cm}{1cm}{*}
6
+ \setulmarginsandblock{2cm}{2cm}{*}
7
+ \checkandfixthelayout
8
+
9
+ \newcommand{\chapref}[1] {
10
+ Cap. \ref{chap:#1} - \nameref{chap:#1}
11
+ }
@@ -0,0 +1,11 @@
1
+ \usepackage{graphicx}
2
+ \usepackage[font=small,labelfont=bf]{caption}
3
+
4
+ \newcommand{\inputimage}[2] {
5
+ \begin{minipage}{\linewidth}
6
+ \begin{center}
7
+ \includegraphics{#1}
8
+ \captionof{figure}{#2}
9
+ \end{center}
10
+ \end{minipage}
11
+ }
@@ -0,0 +1,2 @@
1
+ \usepackage{hyperref}
2
+ \hypersetup{colorlinks=true}
@@ -0,0 +1,8 @@
1
+ \usepackage[utf8]{inputenc}
2
+ \usepackage[portuguese]{babel}
3
+ \usepackage{listings}
4
+ \lstset{
5
+ inputencoding=utf8,
6
+ extendedchars=true,
7
+ literate={á}{{\'a}}1 {à}{{\`a}}1 {ã}{{\~a}}1 {â}{{\^a}}1 {é}{{\'e}}1 {ê}{{\^e}}1 {ë}{{\"e}}1 {í}{{\'i}}1 {ç}{{\c{c}}}1 {Ç}{{\c{C}}}1 {õ}{{\~o}}1 {Õ}{{\~O}}1 {ó}{{\'o}}1 {ô}{{\^o}}1 {ú}{{\'u}}1
8
+ }
@@ -0,0 +1,21 @@
1
+ \usepackage[dvipsnames]{xcolor}
2
+ \usepackage{listings}
3
+ \usepackage{courier}
4
+ \usepackage[T1]{fontenc}
5
+ \usepackage{textcomp}
6
+ \definecolor{code_background}{rgb}{0.95,0.95,0.95}
7
+ \lstset{
8
+ backgroundcolor=\color{code_background},
9
+ breakatwhitespace=false,
10
+ breaklines=true,
11
+ basicstyle=\ttfamily\color{black},
12
+ commentstyle = \ttfamily\color{gray},
13
+ keywordstyle=\ttfamily\color{blue},
14
+ stringstyle=\color{orange},
15
+ showstringspaces=false,
16
+ frame=single,
17
+ basicstyle=\ttfamily\tiny,
18
+ columns=flexible,
19
+ upquote=true,
20
+ }
21
+ \input{commons/source_code/java}
@@ -0,0 +1,15 @@
1
+ \lstloadlanguages{Java}
2
+ \newcommand{\java}[1] {
3
+ \lstinline[language=Java]{#1}
4
+ }
5
+ \newcommand{\javafile}[1] {
6
+ \begin{minipage}{\linewidth}
7
+ \lstinputlisting[language=Java,caption=$#1$]{#1}
8
+ \end{minipage}
9
+ }
10
+ \lstnewenvironment{javaenv} {
11
+ \lstset{language=Java}
12
+ \minipage\linewidth
13
+ } {
14
+ \endminipage
15
+ }
@@ -0,0 +1,6 @@
1
+ \newcommand{\todo}[0] {
2
+ \textcolor{red}{\textbf{TO-DO}}
3
+ }
4
+ \newcommand{\dq}[1] {
5
+ ``#1''
6
+ }
@@ -45,7 +45,7 @@ module EacCli
45
45
  module AfterClassMethods
46
46
  def create(*runner_context_args)
47
47
  r = new
48
- r.runner_context = ::EacCli::Runner::Context.new(*runner_context_args)
48
+ r.runner_context = ::EacCli::Runner::Context.new(r, *runner_context_args)
49
49
  r
50
50
  end
51
51
 
@@ -5,13 +5,30 @@ require 'eac_ruby_utils/core_ext'
5
5
  module EacCli
6
6
  module Runner
7
7
  class Context
8
- attr_reader :argv, :parent, :program_name
8
+ attr_reader :argv, :parent, :program_name, :runner
9
9
 
10
- def initialize(*context_args)
10
+ def initialize(runner, *context_args)
11
11
  options = context_args.extract_options!
12
12
  @argv = (context_args[0] || options.delete(:argv) || ARGV).dup.freeze
13
13
  @parent = context_args[1] || options.delete(:parent)
14
14
  @program_name = options.delete(:program_name)
15
+ @runner = runner
16
+ end
17
+
18
+ # Call a method in the runner or in one of it ancestors.
19
+ def call(method_name, *args)
20
+ return runner.send(method_name, *args) if runner.respond_to?(method_name)
21
+ return parent_call(method_name, *args) if parent.present?
22
+
23
+ raise ::NameError, "No method \"#{method_name}\" found in #{runner} or in its ancestors"
24
+ end
25
+
26
+ protected
27
+
28
+ def parent_call(method_name, *args)
29
+ return parent.context(method_name, *args) if parent.respond_to?(:context)
30
+
31
+ parent.runner_context.call(method_name, *args)
15
32
  end
16
33
  end
17
34
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacCli
4
- VERSION = '0.8.0'
4
+ VERSION = '0.9.0'
5
5
  end
@@ -10,6 +10,7 @@ module EacRubyBase0
10
10
  include ::EacCli::DefaultRunner
11
11
  runner_definition do
12
12
  bool_opt '-q', '--quiet', 'Quiet mode.'
13
+ bool_opt '-I', '--no-input', 'Fail if a input is requested.'
13
14
  subcommands
14
15
  alt do
15
16
  bool_opt '-V', '--version', 'Show version.'
@@ -20,6 +21,7 @@ module EacRubyBase0
20
21
  def run
21
22
  on_speaker_node do |node|
22
23
  node.stderr = ::StringIO.new if options.fetch('--quiet')
24
+ node.stdin = FailIfRequestInput.new if options.fetch('--no-input')
23
25
  if options.fetch('--version')
24
26
  show_version
25
27
  else
@@ -35,5 +37,15 @@ module EacRubyBase0
35
37
  def show_version
36
38
  out("#{application_version}\n")
37
39
  end
40
+
41
+ class FailIfRequestInput
42
+ enable_console_speaker
43
+
44
+ %w[gets noecho].each do |method|
45
+ define_method(method) do
46
+ raise "Input method requested (\"#{method}\") and option --no-input is set"
47
+ end
48
+ end
49
+ end
38
50
  end
39
51
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyBase0
4
- VERSION = '0.1.1'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -11,8 +11,9 @@ module EacRubyGemsUtils
11
11
 
12
12
  GEMSPEC_EXTNAME = '.gemspec'
13
13
 
14
- common_constructor :root do
14
+ common_constructor :root, :host_env, default: [nil] do
15
15
  @root = ::Pathname.new(root).expand_path
16
+ self.host_env ||= ::EacRubyUtils::Envs.local
16
17
  end
17
18
 
18
19
  def to_s
@@ -11,7 +11,7 @@ module EacRubyGemsUtils
11
11
 
12
12
  def initialize(gem, command_args, extra_options = {})
13
13
  @gem = gem
14
- super(command_args, extra_options)
14
+ super(command_args, extra_options.merge(host_env: gem.host_env))
15
15
  end
16
16
 
17
17
  # Changes current directory to the gem's directory.
@@ -12,14 +12,12 @@ module EacRubyGemsUtils
12
12
  log('running "bundle install"...')
13
13
  return if bundle('install').execute.fetch(:exit_code).zero?
14
14
 
15
- if can_remove_gemfile_lock?
16
- log('"bundle install" failed, removing Gemfile.lock and trying again...')
17
- gemfile_lock_path.unlink if gemfile_lock_path.exist?
18
- bundle('install').execute!
19
- else
15
+ unless can_remove_gemfile_lock?
20
16
  raise '"bundle install" failed and the Gemfile.lock is part of gem' \
21
- '(Should be changed by developer)'
17
+ '(Should be changed by developer)'
22
18
  end
19
+
20
+ prepare_with_removable_gemfile_lock
23
21
  end
24
22
 
25
23
  def tests
@@ -33,6 +31,12 @@ module EacRubyGemsUtils
33
31
  infov self, message
34
32
  end
35
33
 
34
+ def prepare_with_removable_gemfile_lock
35
+ log('"bundle install" failed, removing Gemfile.lock and trying again...')
36
+ gemfile_lock_path.unlink if gemfile_lock_path.exist?
37
+ bundle('install').execute!
38
+ end
39
+
36
40
  def can_remove_gemfile_lock?
37
41
  !files.include?(gemfile_lock_path.relative_path_from(root))
38
42
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyGemsUtils
4
- VERSION = '0.7.2'
4
+ VERSION = '0.8.0'
5
5
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/object/blank'
4
+ require 'singleton'
5
+
6
+ module EacRubyUtils
7
+ # A blank string which returns +false+ for +blank?+ method.
8
+ class BlankNotBlank < String
9
+ include ::Singleton
10
+
11
+ def initialize
12
+ super('')
13
+ end
14
+
15
+ def blank?
16
+ false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/blank_not_blank'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'eac_ruby_utils/paths_hash'
6
+
7
+ module EacRubyUtils
8
+ class Configs
9
+ class Base
10
+ enable_simple_cache
11
+
12
+ common_constructor :data, default: [{}] do
13
+ self.data = ::EacRubyUtils::PathsHash.new(data)
14
+ end
15
+
16
+ def []=(entry_key, entry_value)
17
+ write(entry_key, entry_value)
18
+ end
19
+
20
+ def [](entry_key)
21
+ read(entry_key)
22
+ end
23
+
24
+ def clear
25
+ replace({})
26
+ end
27
+
28
+ def read(entry_key)
29
+ return nil unless data.key?(entry_key)
30
+
31
+ data.fetch(entry_key).if_present(::EacRubyUtils::BlankNotBlank.instance)
32
+ end
33
+
34
+ def replace(new_data)
35
+ self.data = ::EacRubyUtils::PathsHash.new(new_data)
36
+ end
37
+
38
+ def write(entry_key, entry_value)
39
+ data[entry_key] = entry_value
40
+ end
41
+ end
42
+ end
43
+ end
@@ -1,27 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/core_ext/string'
3
+ require 'eac_ruby_utils/configs/base'
4
4
  require 'yaml'
5
- require 'eac_ruby_utils/patches/hash/sym_keys_hash'
6
- require 'eac_ruby_utils/paths_hash'
7
- require 'eac_ruby_utils/simple_cache'
8
5
 
9
6
  module EacRubyUtils
10
7
  class Configs
11
- class File
12
- include ::EacRubyUtils::SimpleCache
13
-
8
+ class File < ::EacRubyUtils::Configs::Base
14
9
  attr_reader :path, :options
15
10
 
16
11
  # Valid options: [:autosave]
17
12
  def initialize(path, options = {})
18
13
  @path = path
19
14
  @options = options.to_sym_keys_hash.freeze
20
- load
21
- end
22
-
23
- def clear
24
- self.data = ::EacRubyUtils::PathsHash.new({})
15
+ super(raw_data_from_file)
25
16
  end
26
17
 
27
18
  def save
@@ -30,37 +21,27 @@ module EacRubyUtils
30
21
  end
31
22
 
32
23
  def load
33
- self.data = if ::File.exist?(path) && ::File.size(path).positive?
34
- ::EacRubyUtils::PathsHash.new(YAML.load_file(path))
35
- else
36
- {}
37
- end
38
- end
39
-
40
- def []=(entry_key, entry_value)
41
- write(entry_key, entry_value)
24
+ replace(raw_data_from_file)
42
25
  end
43
26
 
44
27
  def write(entry_key, entry_value)
45
- data[entry_key] = entry_value
28
+ super
46
29
  save if autosave?
47
30
  end
48
31
 
49
- def [](entry_key)
50
- read(entry_key)
51
- end
52
-
53
- def read(entry_key)
54
- data[entry_key]
55
- end
56
-
57
32
  def autosave?
58
33
  options[:autosave] ? true : false
59
34
  end
60
35
 
61
36
  private
62
37
 
63
- attr_accessor :data
38
+ def raw_data_from_file
39
+ if ::File.exist?(path) && ::File.size(path).positive?
40
+ ::YAML.load_file(path)
41
+ else
42
+ {}
43
+ end
44
+ end
64
45
  end
65
46
  end
66
47
  end
@@ -66,7 +66,10 @@ module EacRubyUtils
66
66
  protected
67
67
 
68
68
  def envvar_read_entry(entry_key)
69
- ENV[self.class.entry_key_to_envvar_name(entry_key)]
69
+ env_entry_key = self.class.entry_key_to_envvar_name(entry_key)
70
+ return nil unless ENV.key?(env_entry_key)
71
+
72
+ ENV.fetch(env_entry_key).if_present(::EacRubyUtils::BlankNotBlank.instance)
70
73
  end
71
74
 
72
75
  def read_entry_from_console(entry_key, options)
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require 'pathname'
5
+
6
+ module EacRubyUtils
7
+ module Fs
8
+ class ClearableDirectory < ::Pathname
9
+ CLEARABLE_BASENAME = '.clearable_directory'
10
+
11
+ def clear
12
+ validate_clearable
13
+ directory? ? clear_directory : clear_no_directory
14
+ mkpath
15
+ ::FileUtils.touch(clearable_note_file.to_path)
16
+ self
17
+ end
18
+
19
+ def clearable?
20
+ clearable_negate_message ? true : false
21
+ end
22
+
23
+ def clearable_negate_message
24
+ return if !exist? || empty?
25
+ return "Path \"#{self}\" exists, is not empty and is not a directory" unless directory?
26
+ return if clearable_note_file.exist?
27
+
28
+ "Directory \"#{self}\" is not empty and does not have a #{CLEARABLE_BASENAME} file"
29
+ end
30
+
31
+ def clearable_note_file
32
+ join(CLEARABLE_BASENAME)
33
+ end
34
+
35
+ def validate_clearable
36
+ message = clearable_negate_message
37
+ raise message if message
38
+ end
39
+
40
+ private
41
+
42
+ def clear_directory
43
+ children.each do |child|
44
+ if child.directory?
45
+ child.rmtree
46
+ elsif child.file?
47
+ child.unlink
48
+ end
49
+ end
50
+ end
51
+
52
+ def clear_no_directory
53
+ ::FileUtils.rm_rf(to_path)
54
+ end
55
+ end
56
+ end
57
+ end