avm-tools 0.70.1 → 0.74.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 (78) hide show
  1. checksums.yaml +4 -4
  2. data/lib/avm/data/instance/files_unit.rb +1 -0
  3. data/lib/avm/{stereotypes/eac_rails_base0.rb → eac_rails_base0.rb} +1 -3
  4. data/lib/avm/eac_rails_base0/instance.rb +2 -2
  5. data/lib/avm/eac_redmine_base0.rb +9 -0
  6. data/lib/avm/eac_redmine_base0/instance.rb +2 -2
  7. data/lib/avm/{stereotypes/eac_webapp_base0.rb → eac_webapp_base0.rb} +1 -3
  8. data/lib/avm/eac_writings_base0.rb +9 -0
  9. data/lib/avm/eac_writings_base0/commons.rb +12 -0
  10. data/lib/avm/eac_writings_base0/file_build.rb +45 -0
  11. data/lib/avm/eac_writings_base0/file_build/base_stereotype.rb +19 -0
  12. data/lib/avm/eac_writings_base0/file_build/chapter_index.rb +23 -0
  13. data/lib/avm/eac_writings_base0/file_build/tex_source.rb +33 -0
  14. data/lib/avm/eac_writings_base0/project.rb +33 -0
  15. data/lib/avm/eac_writings_base0/project_build.rb +117 -0
  16. data/lib/avm/eac_writings_base0/project_build/chapters_content.rb +47 -0
  17. data/lib/avm/eac_writings_base0/project_build/copy_files.rb +42 -0
  18. data/lib/avm/executables.rb +1 -1
  19. data/lib/avm/instances/application.rb +4 -0
  20. data/lib/avm/instances/base.rb +2 -1
  21. data/lib/avm/instances/base/auto_values.rb +2 -1
  22. data/lib/avm/instances/base/auto_values/access.rb +5 -4
  23. data/lib/avm/instances/base/auto_values/admin.rb +2 -2
  24. data/lib/avm/instances/base/auto_values/database.rb +1 -1
  25. data/lib/avm/instances/base/auto_values/filesystem.rb +6 -2
  26. data/lib/avm/instances/base/auto_values/mailer.rb +34 -0
  27. data/lib/avm/instances/base/auto_values/ruby.rb +1 -1
  28. data/lib/avm/instances/base/auto_values/system.rb +2 -2
  29. data/lib/avm/instances/entry.rb +7 -1
  30. data/lib/avm/instances/entry_keys.rb +42 -7
  31. data/lib/avm/projects/stereotypes/git_subtree/publish.rb +2 -0
  32. data/lib/avm/projects/stereotypes/git_subtree/warp.rb +3 -0
  33. data/lib/avm/rails/instance.rb +19 -0
  34. data/lib/avm/tools/runner/eac_rails_base0/rails_server.rb +41 -0
  35. data/lib/avm/tools/runner/instance.rb +28 -0
  36. data/lib/avm/tools/runner/instance/info.rb +44 -0
  37. data/lib/avm/tools/runner/local_project/eac_writings_base0.rb +35 -0
  38. data/lib/avm/tools/runner/local_project/eac_writings_base0/build_chapters.rb +48 -0
  39. data/lib/avm/tools/runner/local_project/eac_writings_base0/build_single.rb +37 -0
  40. data/lib/avm/tools/runner/local_project/eac_writings_base0/info.rb +36 -0
  41. data/lib/avm/tools/version.rb +1 -1
  42. data/template/avm/eac_rails_base0/deploy/config/envvars.d/email.yml.template +11 -0
  43. data/template/avm/eac_writings_base0/commons/all.tex +5 -0
  44. data/template/avm/eac_writings_base0/commons/ebook.tex +11 -0
  45. data/template/avm/eac_writings_base0/commons/images.tex +11 -0
  46. data/template/avm/eac_writings_base0/commons/links.tex +2 -0
  47. data/template/avm/eac_writings_base0/commons/portuguese.tex +8 -0
  48. data/template/avm/eac_writings_base0/commons/source_code.tex +21 -0
  49. data/template/avm/eac_writings_base0/commons/source_code/java.tex +15 -0
  50. data/template/avm/eac_writings_base0/commons/utils.tex +6 -0
  51. data/vendor/eac_cli/lib/eac_cli/runner.rb +1 -1
  52. data/vendor/eac_cli/lib/eac_cli/runner/context.rb +19 -2
  53. data/vendor/eac_cli/lib/eac_cli/version.rb +1 -1
  54. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/runner.rb +12 -0
  55. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/version.rb +1 -1
  56. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/gem.rb +2 -1
  57. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/gem/command.rb +1 -1
  58. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/tests/multiple/decorated_gem.rb +10 -6
  59. data/vendor/eac_ruby_gems_utils/lib/eac_ruby_gems_utils/version.rb +1 -1
  60. data/vendor/eac_ruby_gems_utils/spec/{rubocop_check_spec.rb → code/rubocop_check_spec.rb} +0 -0
  61. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/blank_not_blank.rb +19 -0
  62. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/configs/base.rb +43 -0
  63. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/configs/file.rb +12 -31
  64. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs.rb +4 -1
  65. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/clearable_directory.rb +57 -0
  66. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash.rb +21 -58
  67. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash/entry_key_error.rb +8 -0
  68. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash/node.rb +67 -0
  69. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash/path_search.rb +39 -0
  70. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/ruby/command.rb +2 -1
  71. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/struct.rb +4 -0
  72. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  73. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/blank_not_blank_spec.rb +16 -0
  74. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/configs_spec.rb +15 -0
  75. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/paths_hash_spec.rb +52 -13
  76. metadata +41 -7
  77. data/lib/avm/stereotypes/eac_redmine_base0.rb +0 -11
  78. data/lib/avm/stereotypes/rails/instance.rb +0 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd285f0a29d0c49864ce1fa57b8278572d5410c02c1adb88d4f45c5ebfccc5c8
4
- data.tar.gz: 1dbb0d31d4615cbb006b799d66206a2d0055afc7a9912a7475f72b8fc36c3094
3
+ metadata.gz: a4460b770d82c88ec42b81c1fa27af44d87957e92dcb46c32721a72ce64f3dc7
4
+ data.tar.gz: 4f79e81ef512e596af26e0fd18c13582518778233042ee05a1d846f6afd405a6
5
5
  SHA512:
6
- metadata.gz: 7e0e34a9d411c7f5be515ec78bb4a738e43ff45e1779194d69a0072de9487e7b788fff436f9bf354fcb846a89507d4ee77c36fa4fd3177b7775c9300ec56daf5
7
- data.tar.gz: a26a2065cd2022da2e0edd69d50735666d940310f1faf7d8a23919fc87e47b4dc8bc33cca7c38c15be422f499d3b2f017bc2b8e61086b3d7a31feb755fe6ae17
6
+ metadata.gz: c2520c8c2b7a9805ddd0a856b1ed8c9ec019d71abd6023bdb69bc4e5ab27ba7c3cfc4e7eb3b02c9051b9dca97e2196e51455843344d305fce1a466ba89bce7d7
7
+ data.tar.gz: 707b05197a270bd6442994390347713770505105ad1aeb32e6220f96571e184c78dd4ded315d9a993cbe45d0bd28a3e6b09dc708bd3fa39af291fb0df5f6b94f
@@ -31,6 +31,7 @@ module Avm
31
31
 
32
32
  def clear_files
33
33
  infom "Removing all files under #{files_path}..."
34
+ instance.host_env.command('mkdir', '-p', files_path).execute!
34
35
  instance.host_env.command('find', files_path, '-mindepth', 1, '-delete').execute!
35
36
  end
36
37
  end
@@ -4,8 +4,6 @@ require 'eac_ruby_utils/require_sub'
4
4
  ::EacRubyUtils.require_sub(__FILE__)
5
5
 
6
6
  module Avm
7
- module Stereotypes
8
- module EacRailsBase0
9
- end
7
+ module EacRailsBase0
10
8
  end
11
9
  end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'avm/eac_webapp_base0/instance'
4
- require 'avm/stereotypes/rails/instance'
4
+ require 'avm/rails/instance'
5
5
 
6
6
  module Avm
7
7
  module EacRailsBase0
8
8
  class Instance < ::Avm::EacWebappBase0::Instance
9
- include ::Avm::Stereotypes::Rails::Instance
9
+ include ::Avm::Rails::Instance
10
10
 
11
11
  FILES_UNITS = { uploads: 'public/uploads' }.freeze
12
12
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/require_sub'
4
+
5
+ module Avm
6
+ module EacRedmineBase0
7
+ ::EacRubyUtils.require_sub(__FILE__)
8
+ end
9
+ end
@@ -3,12 +3,12 @@
3
3
  require 'avm/eac_redmine_base0/data_unit'
4
4
  require 'avm/eac_ubuntu_base0/docker_image'
5
5
  require 'avm/eac_webapp_base0/instance'
6
- require 'avm/stereotypes/rails/instance'
6
+ require 'avm/rails/instance'
7
7
 
8
8
  module Avm
9
9
  module EacRedmineBase0
10
10
  class Instance < ::Avm::EacWebappBase0::Instance
11
- include ::Avm::Stereotypes::Rails::Instance
11
+ include ::Avm::Rails::Instance
12
12
 
13
13
  FILES_UNITS = { files: 'files' }.freeze
14
14
 
@@ -4,8 +4,6 @@ require 'eac_ruby_utils/require_sub'
4
4
  ::EacRubyUtils.require_sub(__FILE__)
5
5
 
6
6
  module Avm
7
- module Stereotypes
8
- module EacWebappBase0
9
- end
7
+ module EacWebappBase0
10
8
  end
11
9
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacWritingsBase0
7
+ require_sub __FILE__
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/patches/object/template'
4
+ require 'singleton'
5
+
6
+ module Avm
7
+ module EacWritingsBase0
8
+ class Commons
9
+ include ::Singleton
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacWritingsBase0
7
+ class FileBuild
8
+ require_sub __FILE__
9
+ include ::Avm::EacWritingsBase0::FileBuild::BaseStereotype
10
+ DEFAULT_STEREOTYPES = [::Avm::EacWritingsBase0::FileBuild::ChapterIndex,
11
+ ::Avm::EacWritingsBase0::FileBuild::TexSource].freeze
12
+
13
+ class << self
14
+ def stereotypes
15
+ DEFAULT_STEREOTYPES
16
+ end
17
+ end
18
+
19
+ common_constructor :project, :subpath do
20
+ self.class.stereotypes.each do |stereotype|
21
+ singleton_class.prepend(stereotype) if stereotype.match?(subpath)
22
+ end
23
+ end
24
+
25
+ def build_to_dir(build_root_target_dir)
26
+ create_target_dir(build_root_target_dir)
27
+ copy(target_path(build_root_target_dir))
28
+ end
29
+
30
+ private
31
+
32
+ def create_target_dir(build_root_target_dir)
33
+ FileUtils.mkdir_p(File.dirname(target_path(build_root_target_dir)))
34
+ end
35
+
36
+ def source_path
37
+ File.join(project.root, subpath)
38
+ end
39
+
40
+ def target_path(build_root_target_dir)
41
+ File.join(build_root_target_dir, target_subpath)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module EacWritingsBase0
5
+ class FileBuild
6
+ module BaseStereotype
7
+ private
8
+
9
+ def target_subpath
10
+ subpath
11
+ end
12
+
13
+ def copy(target_path)
14
+ FileUtils.copy_file(source_path, target_path)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module EacWritingsBase0
5
+ class FileBuild
6
+ module ChapterIndex
7
+ class << self
8
+ def match?(subpath)
9
+ ::File.basename(subpath) == 'index.tex'
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def target_subpath
16
+ ::Avm::EacWritingsBase0::ProjectBuild.chapter_filename(
17
+ File.basename(File.dirname(subpath))
18
+ ) + '.tex'
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module EacWritingsBase0
5
+ class FileBuild
6
+ module TexSource
7
+ class << self
8
+ def match?(subpath)
9
+ ::File.extname(subpath) == '.tex'
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def copy(target_path)
16
+ ::File.write(target_path, target_content)
17
+ end
18
+
19
+ def target_content
20
+ s = ::File.read(source_path)
21
+ replacements.each do |from, to|
22
+ s = s.gsub(from, to)
23
+ end
24
+ s
25
+ end
26
+
27
+ def replacements
28
+ { '%dir%' => ::File.dirname(subpath) }
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacWritingsBase0
7
+ class Project
8
+ common_constructor :root do
9
+ self.root = root.to_pathname
10
+ end
11
+
12
+ def chapters
13
+ chapters_file.read.split("\n").map(&:strip).reject { |c| c == '' }
14
+ end
15
+
16
+ def chapters_file
17
+ root.join('chapters')
18
+ end
19
+
20
+ def name
21
+ root.basename.to_s
22
+ end
23
+
24
+ def default_output_dir
25
+ root.join('dist')
26
+ end
27
+
28
+ def default_output_file
29
+ root.join("#{name}.pdf")
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,117 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/executables'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'eac_ruby_utils/fs/temp'
6
+ require 'eac_ruby_utils/fs/clearable_directory'
7
+
8
+ module Avm
9
+ module EacWritingsBase0
10
+ class ProjectBuild
11
+ require_sub __FILE__, include_modules: true
12
+ enable_console_speaker
13
+
14
+ CONTENT_VAR = '%%%CONTENT%%%'
15
+
16
+ common_constructor :project, :options do
17
+ run
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :source_temp_dir
23
+
24
+ def run
25
+ start_banner
26
+ check_chapter
27
+ build
28
+ success('Done!')
29
+ end
30
+
31
+ def start_banner
32
+ infov('Chapter', chapter)
33
+ infov('Output file', output_file)
34
+ end
35
+
36
+ def build
37
+ on_temp_source_dir do
38
+ copy_project_files
39
+ copy_commons_files
40
+ include_content
41
+ compile
42
+ check
43
+ move_output_to_target
44
+ open_output
45
+ end
46
+ end
47
+
48
+ def check
49
+ return if ::File.size(temp_output_file).positive?
50
+
51
+ fatal_error("Zero-size file builded: #{temp_output_file}")
52
+ end
53
+
54
+ def compile
55
+ compile_command.execute!.each_line do |line|
56
+ if line.include?('No file')
57
+ raise 'Command returned without error, but there is at least one "No file" line in' \
58
+ "log: #{line}"
59
+ end
60
+ end
61
+ end
62
+
63
+ def compile_command
64
+ ::Avm::Executables.latex.command(*compile_command_args).chdir(source_temp_dir)
65
+ end
66
+
67
+ def compile_command_args
68
+ r = ["-output-director=#{build_dir}", '-output-format=pdf',
69
+ '-interaction=nonstopmode', '-halt-on-error', '-file-line-error']
70
+ r << if chapter.present?
71
+ "\\includeonly{#{chapter_filename(chapter)}}\\input{main.tex}"
72
+ else
73
+ './main.tex'
74
+ end
75
+ r
76
+ end
77
+
78
+ def move_output_to_target
79
+ File.rename(temp_output_file, output_file)
80
+ infov('Size', ::Filesize.from("#{File.size(output_file)} B").pretty)
81
+ end
82
+
83
+ def temp_output_file
84
+ File.join(build_dir, 'main.pdf')
85
+ end
86
+
87
+ def on_temp_source_dir
88
+ if options[:source_dir].present?
89
+ @source_temp_dir = ::EacRubyUtils::Fs::ClearableDirectory.new(options.source_dir).clear
90
+ yield
91
+ else
92
+ ::EacRubyUtils::Fs::Temp.on_directory do |directory|
93
+ @source_temp_dir = directory
94
+ yield
95
+ end
96
+ end
97
+ end
98
+
99
+ def build_dir
100
+ r = project.root.join('build')
101
+ r.mkpath
102
+ r
103
+ end
104
+
105
+ def output_file
106
+ (options[:output_file] || project.default_output_file)
107
+ end
108
+
109
+ def open_output
110
+ return unless options[:open]
111
+
112
+ infom("Opening \"#{output_file}\"")
113
+ ::Avm::Executables.xdg_open.command(output_file).system!
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module EacWritingsBase0
5
+ class ProjectBuild
6
+ class << self
7
+ def chapter_filename(chapter_name)
8
+ "chapter_#{chapter_name}"
9
+ end
10
+ end
11
+
12
+ module ChaptersContent
13
+ private
14
+
15
+ def chapter
16
+ options[:chapter]
17
+ end
18
+
19
+ def chapter_filename(chapter_name)
20
+ ::Avm::EacWritingsBase0::ProjectBuild.chapter_filename(chapter_name)
21
+ end
22
+
23
+ def check_chapter
24
+ return unless chapter
25
+ return if project.chapters.include?(chapter)
26
+
27
+ fatal_error("Chapter not found: \"#{chapter}\" (List: #{project.chapters})")
28
+ end
29
+
30
+ def include_content
31
+ main_path = source_temp_dir.join('main.tex')
32
+ main_path.write(main_path.read.gsub(CONTENT_VAR, include_chapters_content))
33
+ end
34
+
35
+ def include_chapters_content
36
+ r = chapters_content
37
+ r = "\\maketitle\n\n#{r}" if chapter.blank?
38
+ r
39
+ end
40
+
41
+ def chapters_content
42
+ project.chapters.map { |c| "\\include{#{chapter_filename(c)}}" }.join("\n")
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_writings_base0/commons'
4
+ require 'avm/eac_writings_base0/file_build'
5
+
6
+ module Avm
7
+ module EacWritingsBase0
8
+ class ProjectBuild
9
+ module CopyFiles
10
+ def copy_project_files
11
+ copy_project_dir('.')
12
+ end
13
+
14
+ def copy_project_obj(subpath)
15
+ return if File.basename(subpath).start_with?('.')
16
+
17
+ if File.directory?(File.join(project.root, subpath))
18
+ copy_project_dir(subpath)
19
+ else
20
+ copy_project_file(subpath)
21
+ end
22
+ end
23
+
24
+ def copy_project_file(subpath)
25
+ ::Avm::EacWritingsBase0::FileBuild.new(project, subpath).build_to_dir(source_temp_dir)
26
+ end
27
+
28
+ def copy_project_dir(subpath)
29
+ Dir.entries(File.join(project.root, subpath)).each do |f|
30
+ copy_project_obj(File.join(subpath, f))
31
+ end
32
+ end
33
+
34
+ def copy_commons_files
35
+ target_dir = source_temp_dir.join('commons')
36
+ target_dir.mkpath
37
+ ::Avm::EacWritingsBase0::Commons.instance.template.apply(self, target_dir)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end