eac_tools 0.16.1 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +27 -15
  3. data/lib/eac_tools/version.rb +1 -1
  4. data/sub/avm/lib/avm/entries/auto_values/uri_entry.rb +24 -0
  5. data/sub/avm/lib/avm/entries/uri_builder.rb +85 -0
  6. data/sub/avm/lib/avm/instances/base/auto_values/install.rb +6 -9
  7. data/sub/avm/lib/avm/instances/base/auto_values.rb +2 -8
  8. data/sub/avm/lib/avm/instances/entry_keys.rb +1 -1
  9. data/sub/avm/lib/avm/registry/source_generators.rb +3 -2
  10. data/sub/avm/lib/avm/source_generators/base.rb +16 -1
  11. data/sub/avm/lib/avm/source_generators/option.rb +11 -0
  12. data/sub/avm/lib/avm/source_generators/option_list.rb +32 -0
  13. data/sub/avm/lib/avm/source_generators/runner.rb +52 -0
  14. data/sub/avm/lib/avm/sources/runner.rb +38 -0
  15. data/sub/avm/lib/avm/version.rb +1 -1
  16. data/sub/avm/spec/lib/avm/instances/base_spec.rb +18 -1
  17. data/sub/avm/spec/lib/avm/instances/base_spec_configs_storage.yml +6 -0
  18. data/sub/avm/spec/lib/avm/sources/runner_spec.rb +9 -0
  19. data/sub/avm-eac_generic_base0/lib/avm/eac_generic_base0/instances/base.rb +12 -0
  20. data/sub/{avm-tools/lib/avm/rails.rb → avm-eac_generic_base0/lib/avm/eac_generic_base0/instances.rb} +4 -2
  21. data/sub/avm-eac_generic_base0/lib/avm/eac_generic_base0/version.rb +1 -1
  22. data/sub/avm-eac_latex_base0/Gemfile +8 -0
  23. data/sub/avm-eac_latex_base0/avm-eac_latex_base0.gemspec +20 -0
  24. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/instances/apache_host.rb +19 -0
  25. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/instances/base.rb +13 -0
  26. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/instances/deploy.rb +38 -0
  27. data/sub/{avm-tools/lib/avm/ruby/bundler.rb → avm-eac_latex_base0/lib/avm/eac_latex_base0/instances.rb} +2 -2
  28. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/base.rb +44 -0
  29. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/chapters_content.rb +49 -0
  30. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/commons.rb +16 -0
  31. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/copy_files.rb +45 -0
  32. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/file/base_stereotype.rb +23 -0
  33. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/file/chapter_index.rb +27 -0
  34. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/file/tex_source.rb +37 -0
  35. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/file.rb +49 -0
  36. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build.rb +119 -0
  37. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/runners/build_chapters.rb +43 -0
  38. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/runners/build_single.rb +33 -0
  39. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/runners/info.rb +32 -0
  40. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/runners.rb +13 -0
  41. data/sub/{avm-tools/lib/avm/ruby/gems.rb → avm-eac_latex_base0/lib/avm/eac_latex_base0/sources.rb} +2 -2
  42. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/version.rb +7 -0
  43. data/sub/{avm-tools/lib/avm/ruby.rb → avm-eac_latex_base0/lib/avm/eac_latex_base0.rb} +1 -1
  44. data/sub/{avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files/dashed-mygem → avm-eac_latex_base0}/spec/rubocop_spec.rb +0 -0
  45. data/sub/{avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files/dashed-mygem → avm-eac_latex_base0}/spec/spec_helper.rb +0 -0
  46. data/sub/{avm-tools/template/avm/eac_writings_base0 → avm-eac_latex_base0/template/avm/eac_latex_base0/sources/build}/commons/all.tex +0 -0
  47. data/sub/{avm-tools/template/avm/eac_writings_base0 → avm-eac_latex_base0/template/avm/eac_latex_base0/sources/build}/commons/ebook.tex +0 -0
  48. data/sub/{avm-tools/template/avm/eac_writings_base0 → avm-eac_latex_base0/template/avm/eac_latex_base0/sources/build}/commons/images.tex +0 -0
  49. data/sub/{avm-tools/template/avm/eac_writings_base0 → avm-eac_latex_base0/template/avm/eac_latex_base0/sources/build}/commons/links.tex +0 -0
  50. data/sub/{avm-tools/template/avm/eac_writings_base0 → avm-eac_latex_base0/template/avm/eac_latex_base0/sources/build}/commons/portuguese.tex +0 -0
  51. data/sub/{avm-tools/template/avm/eac_writings_base0 → avm-eac_latex_base0/template/avm/eac_latex_base0/sources/build}/commons/source_code/java.tex +0 -0
  52. data/sub/{avm-tools/template/avm/eac_writings_base0 → avm-eac_latex_base0/template/avm/eac_latex_base0/sources/build}/commons/source_code.tex +0 -0
  53. data/sub/{avm-tools/template/avm/eac_writings_base0 → avm-eac_latex_base0/template/avm/eac_latex_base0/sources/build}/commons/utils.tex +0 -0
  54. data/sub/avm-eac_ruby_base1/avm-eac_ruby_base1.gemspec +2 -2
  55. data/sub/{avm-tools/lib/avm/ruby/gems/generator.rb → avm-eac_ruby_base1/lib/avm/eac_ruby_base1/source_generators/base.rb} +27 -16
  56. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/source_generators.rb +11 -0
  57. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/sources/runners/bundler/gemfile_local.rb +84 -0
  58. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/version.rb +1 -1
  59. data/sub/{avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec.rb → avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec.rb} +8 -6
  60. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/dashed-mygem/Gemfile +8 -0
  61. data/sub/{avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files → avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files}/dashed-mygem/dashed-mygem.gemspec +0 -0
  62. data/sub/{avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files → avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files}/dashed-mygem/lib/dashed/mygem/version.rb +0 -0
  63. data/sub/{avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files → avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files}/dashed-mygem/lib/dashed/mygem.rb +0 -0
  64. data/sub/{avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files/mygem → avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/dashed-mygem}/spec/rubocop_spec.rb +0 -0
  65. data/sub/{avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files/mygem → avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/dashed-mygem}/spec/spec_helper.rb +0 -0
  66. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/mygem/Gemfile +8 -0
  67. data/sub/{avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files → avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files}/mygem/lib/mygem/version.rb +0 -0
  68. data/sub/{avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files → avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files}/mygem/lib/mygem.rb +0 -0
  69. data/sub/{avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files → avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files}/mygem/mygem.gemspec +0 -0
  70. data/sub/{avm-tools/template/avm/ruby/gems/generator/static → avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/mygem}/spec/rubocop_spec.rb +0 -0
  71. data/sub/{avm-tools/template/avm/ruby/gems/generator/static → avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/mygem}/spec/spec_helper.rb +0 -0
  72. data/sub/{avm-tools/template/avm/ruby/gems/generator → avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base}/gemspec.template +0 -0
  73. data/sub/{avm-tools/template/avm/ruby/gems/generator → avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base}/root_lib.template +0 -0
  74. data/sub/avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base/static/Gemfile +8 -0
  75. data/sub/avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base/static/spec/rubocop_spec.rb +3 -0
  76. data/sub/avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base/static/spec/spec_helper.rb +4 -0
  77. data/sub/{avm-tools/template/avm/ruby/gems/generator → avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base}/version.template +0 -0
  78. data/sub/avm-eac_wordpress_base0/avm-eac_wordpress_base0.gemspec +1 -0
  79. data/sub/avm-eac_wordpress_base0/lib/avm/eac_wordpress_base0/instances/apache_host.rb +2 -2
  80. data/sub/avm-eac_wordpress_base0/lib/avm/eac_wordpress_base0/version.rb +1 -1
  81. data/sub/avm-eac_wordpress_base0/spec/lib/avm/eac_wordpress_base0/instances/apache_host_spec.rb +4 -3
  82. data/sub/avm-tools/avm-tools.gemspec +1 -1
  83. data/sub/avm-tools/lib/avm/tools/runner/app_src.rb +4 -14
  84. data/sub/avm-tools/lib/avm/tools/runner/source_generate.rb +2 -35
  85. data/sub/avm-tools/lib/avm/tools/version.rb +1 -1
  86. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/addressable/uri/query_value.rb +37 -0
  87. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/addressable/uri.rb +4 -0
  88. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/addressable.rb +4 -0
  89. data/sub/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  90. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/addressable/uri/query_value_spec.rb +25 -0
  91. metadata +111 -71
  92. data/sub/avm/lib/avm/instances/base/auto_values/system.rb +0 -23
  93. data/sub/avm-tools/lib/avm/eac_writings_base0/apache_host.rb +0 -17
  94. data/sub/avm-tools/lib/avm/eac_writings_base0/commons.rb +0 -12
  95. data/sub/avm-tools/lib/avm/eac_writings_base0/deploy.rb +0 -36
  96. data/sub/avm-tools/lib/avm/eac_writings_base0/file_build/base_stereotype.rb +0 -19
  97. data/sub/avm-tools/lib/avm/eac_writings_base0/file_build/chapter_index.rb +0 -23
  98. data/sub/avm-tools/lib/avm/eac_writings_base0/file_build/tex_source.rb +0 -33
  99. data/sub/avm-tools/lib/avm/eac_writings_base0/file_build.rb +0 -45
  100. data/sub/avm-tools/lib/avm/eac_writings_base0/instance.rb +0 -11
  101. data/sub/avm-tools/lib/avm/eac_writings_base0/project.rb +0 -33
  102. data/sub/avm-tools/lib/avm/eac_writings_base0/project_build/chapters_content.rb +0 -47
  103. data/sub/avm-tools/lib/avm/eac_writings_base0/project_build/copy_files.rb +0 -42
  104. data/sub/avm-tools/lib/avm/eac_writings_base0/project_build.rb +0 -117
  105. data/sub/avm-tools/lib/avm/eac_writings_base0.rb +0 -9
  106. data/sub/avm-tools/lib/avm/tools/runner/app_src/eac_writings_base0/build_chapters.rb +0 -45
  107. data/sub/avm-tools/lib/avm/tools/runner/app_src/eac_writings_base0/build_single.rb +0 -35
  108. data/sub/avm-tools/lib/avm/tools/runner/app_src/eac_writings_base0/info.rb +0 -34
  109. data/sub/avm-tools/lib/avm/tools/runner/app_src/eac_writings_base0.rb +0 -33
  110. data/sub/avm-tools/lib/avm/tools/runner/eac_writings_base0.rb +0 -14
  111. data/sub/avm-tools/lib/avm/tools/runner/ruby/gems/generate.rb +0 -39
  112. data/sub/avm-tools/lib/avm/tools/runner/ruby/gems.rb +0 -19
  113. data/sub/avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files/dashed-mygem/Gemfile +0 -5
  114. data/sub/avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files/dashed-mygem/Gemfile.lock +0 -1
  115. data/sub/avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files/mygem/Gemfile +0 -5
  116. data/sub/avm-tools/spec/lib/avm/tools/runner/ruby/gems/generate_spec_files/mygem/Gemfile.lock +0 -1
  117. data/sub/avm-tools/template/avm/ruby/gems/generator/static/Gemfile +0 -5
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_webapp_base0/deploy'
4
+ require 'avm/eac_latex_base0/sources/base'
5
+ require 'avm/eac_latex_base0/sources/build'
6
+
7
+ module Avm
8
+ module EacLatexBase0
9
+ module Instances
10
+ class Deploy < ::Avm::EacWebappBase0::Deploy
11
+ def build_content
12
+ ::Avm::EacLatexBase0::Sources::Build.new(project, output_file:
13
+ build_dir.join(pdf_path))
14
+ end
15
+
16
+ def title
17
+ instance.id.humanize
18
+ end
19
+
20
+ def pdf_path
21
+ "#{instance.id.underscore}.pdf"
22
+ end
23
+
24
+ def variables_source
25
+ self
26
+ end
27
+
28
+ private
29
+
30
+ def project_uncached
31
+ ::Avm::EacLatexBase0::Sources::Base.new(
32
+ instance.source_instance.read_entry(::Avm::Instances::EntryKeys::FS_PATH)
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -3,8 +3,8 @@
3
3
  require 'eac_ruby_utils/core_ext'
4
4
 
5
5
  module Avm
6
- module Ruby
7
- module Bundler
6
+ module EacLatexBase0
7
+ module Instances
8
8
  require_sub __FILE__
9
9
  end
10
10
  end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/sources/base'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module EacLatexBase0
8
+ module Sources
9
+ class Base < ::Avm::Sources::Base
10
+ def chapters
11
+ chapters_file.read.split("\n").map(&:strip).reject { |c| c == '' }
12
+ end
13
+
14
+ def chapters_file
15
+ root.join('chapters')
16
+ end
17
+
18
+ def main_file
19
+ path.join('main.tex')
20
+ end
21
+
22
+ def name
23
+ root.basename.to_s
24
+ end
25
+
26
+ def default_output_dir
27
+ root.join('dist')
28
+ end
29
+
30
+ def default_output_file
31
+ root.join("#{name}.pdf")
32
+ end
33
+
34
+ def root
35
+ path
36
+ end
37
+
38
+ def valid?
39
+ main_file.file?
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module EacLatexBase0
5
+ module Sources
6
+ class Build
7
+ class << self
8
+ def chapter_filename(chapter_name)
9
+ "chapter_#{chapter_name}"
10
+ end
11
+ end
12
+
13
+ module ChaptersContent
14
+ private
15
+
16
+ def chapter
17
+ options[:chapter]
18
+ end
19
+
20
+ def chapter_filename(chapter_name)
21
+ ::Avm::EacLatexBase0::Sources::Build.chapter_filename(chapter_name)
22
+ end
23
+
24
+ def check_chapter
25
+ return unless chapter
26
+ return if project.chapters.include?(chapter)
27
+
28
+ fatal_error("Chapter not found: \"#{chapter}\" (List: #{project.chapters})")
29
+ end
30
+
31
+ def include_content
32
+ main_path = source_temp_dir.join('main.tex')
33
+ main_path.write(main_path.read.gsub(CONTENT_VAR, include_chapters_content))
34
+ end
35
+
36
+ def include_chapters_content
37
+ r = chapters_content
38
+ r = "\\maketitle\n\n#{r}" if chapter.blank?
39
+ r
40
+ end
41
+
42
+ def chapters_content
43
+ project.chapters.map { |c| "\\include{#{chapter_filename(c)}}" }.join("\n")
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_templates/core_ext'
4
+ require 'singleton'
5
+
6
+ module Avm
7
+ module EacLatexBase0
8
+ module Sources
9
+ class Build
10
+ class Commons
11
+ include ::Singleton
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_latex_base0/sources/build/commons'
4
+ require 'avm/eac_latex_base0/sources/build/file'
5
+
6
+ module Avm
7
+ module EacLatexBase0
8
+ module Sources
9
+ class Build
10
+ module CopyFiles
11
+ def copy_project_files
12
+ copy_project_dir('.')
13
+ end
14
+
15
+ def copy_project_obj(subpath)
16
+ return if File.basename(subpath).start_with?('.')
17
+
18
+ if File.directory?(File.join(project.root, subpath))
19
+ copy_project_dir(subpath)
20
+ else
21
+ copy_project_file(subpath)
22
+ end
23
+ end
24
+
25
+ def copy_project_file(subpath)
26
+ ::Avm::EacLatexBase0::Sources::Build::File.new(project, subpath)
27
+ .build_to_dir(source_temp_dir)
28
+ end
29
+
30
+ def copy_project_dir(subpath)
31
+ Dir.entries(File.join(project.root, subpath)).each do |f|
32
+ copy_project_obj(File.join(subpath, f))
33
+ end
34
+ end
35
+
36
+ def copy_commons_files
37
+ target_dir = source_temp_dir.join('commons')
38
+ target_dir.mkpath
39
+ ::Avm::EacLatexBase0::Sources::Build::Commons.instance.template.apply(self, target_dir)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module EacLatexBase0
5
+ module Sources
6
+ class Build
7
+ class File
8
+ module BaseStereotype
9
+ private
10
+
11
+ def target_subpath
12
+ subpath
13
+ end
14
+
15
+ def copy(target_path)
16
+ FileUtils.copy_file(source_path, target_path)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module EacLatexBase0
5
+ module Sources
6
+ class Build
7
+ class File
8
+ module ChapterIndex
9
+ class << self
10
+ def match?(subpath)
11
+ ::File.basename(subpath) == 'index.tex'
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def target_subpath
18
+ ::Avm::EacLatexBase0::Sources::Build.chapter_filename(
19
+ File.basename(File.dirname(subpath))
20
+ ) + '.tex'
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module EacLatexBase0
5
+ module Sources
6
+ class Build
7
+ class File
8
+ module TexSource
9
+ class << self
10
+ def match?(subpath)
11
+ ::File.extname(subpath) == '.tex'
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def copy(target_path)
18
+ ::File.write(target_path, target_content)
19
+ end
20
+
21
+ def target_content
22
+ s = ::File.read(source_path)
23
+ replacements.each do |from, to|
24
+ s = s.gsub(from, to)
25
+ end
26
+ s
27
+ end
28
+
29
+ def replacements
30
+ { '%dir%' => ::File.dirname(subpath) }
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacLatexBase0
7
+ module Sources
8
+ class Build
9
+ class File
10
+ require_sub __FILE__
11
+ include ::Avm::EacLatexBase0::Sources::Build::File::BaseStereotype
12
+ DEFAULT_STEREOTYPES = [::Avm::EacLatexBase0::Sources::Build::File::ChapterIndex,
13
+ ::Avm::EacLatexBase0::Sources::Build::File::TexSource].freeze
14
+
15
+ class << self
16
+ def stereotypes
17
+ DEFAULT_STEREOTYPES
18
+ end
19
+ end
20
+
21
+ common_constructor :project, :subpath do
22
+ self.class.stereotypes.each do |stereotype|
23
+ singleton_class.prepend(stereotype) if stereotype.match?(subpath)
24
+ end
25
+ end
26
+
27
+ def build_to_dir(build_root_target_dir)
28
+ create_target_dir(build_root_target_dir)
29
+ copy(target_path(build_root_target_dir))
30
+ end
31
+
32
+ private
33
+
34
+ def create_target_dir(build_root_target_dir)
35
+ FileUtils.mkdir_p(File.dirname(target_path(build_root_target_dir)))
36
+ end
37
+
38
+ def source_path
39
+ File.join(project.root, subpath)
40
+ end
41
+
42
+ def target_path(build_root_target_dir)
43
+ File.join(build_root_target_dir, target_subpath)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,119 @@
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 EacLatexBase0
10
+ module Sources
11
+ class Build
12
+ require_sub __FILE__, include_modules: true
13
+ enable_speaker
14
+
15
+ CONTENT_VAR = '%%%CONTENT%%%'
16
+
17
+ common_constructor :project, :options do
18
+ run
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :source_temp_dir
24
+
25
+ def run
26
+ start_banner
27
+ check_chapter
28
+ build
29
+ success('Done!')
30
+ end
31
+
32
+ def start_banner
33
+ infov('Chapter', chapter)
34
+ infov('Output file', output_file)
35
+ end
36
+
37
+ def build
38
+ on_temp_source_dir do
39
+ copy_project_files
40
+ copy_commons_files
41
+ include_content
42
+ compile
43
+ check
44
+ move_output_to_target
45
+ open_output
46
+ end
47
+ end
48
+
49
+ def check
50
+ return if ::File.size(temp_output_file).positive?
51
+
52
+ fatal_error("Zero-size file builded: #{temp_output_file}")
53
+ end
54
+
55
+ def compile
56
+ compile_command.execute!.each_line do |line|
57
+ if line.include?('No file')
58
+ raise 'Command returned without error, but there is at least one "No file" line in' \
59
+ "log: #{line}"
60
+ end
61
+ end
62
+ end
63
+
64
+ def compile_command
65
+ ::Avm::Executables.latex.command(*compile_command_args).chdir(source_temp_dir)
66
+ end
67
+
68
+ def compile_command_args
69
+ r = ["-output-director=#{build_dir}", '-output-format=pdf',
70
+ '-interaction=nonstopmode', '-halt-on-error', '-file-line-error']
71
+ r << if chapter.present?
72
+ "\\includeonly{#{chapter_filename(chapter)}}\\input{main.tex}"
73
+ else
74
+ './main.tex'
75
+ end
76
+ r
77
+ end
78
+
79
+ def move_output_to_target
80
+ File.rename(temp_output_file, output_file)
81
+ infov('Size', ::Filesize.from("#{File.size(output_file)} B").pretty)
82
+ end
83
+
84
+ def temp_output_file
85
+ File.join(build_dir, 'main.pdf')
86
+ end
87
+
88
+ def on_temp_source_dir
89
+ if options[:source_dir].present?
90
+ @source_temp_dir = ::EacRubyUtils::Fs::ClearableDirectory.new(options.source_dir).clear
91
+ yield
92
+ else
93
+ ::EacRubyUtils::Fs::Temp.on_directory do |directory|
94
+ @source_temp_dir = directory
95
+ yield
96
+ end
97
+ end
98
+ end
99
+
100
+ def build_dir
101
+ r = project.root.join('build')
102
+ r.mkpath
103
+ r
104
+ end
105
+
106
+ def output_file
107
+ (options[:output_file] || project.default_output_file)
108
+ end
109
+
110
+ def open_output
111
+ return unless options[:open]
112
+
113
+ infom("Opening \"#{output_file}\"")
114
+ ::Avm::Executables.xdg_open.command(output_file).system!
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_latex_base0/sources/build'
4
+ require 'eac_cli/core_ext'
5
+
6
+ module Avm
7
+ module EacLatexBase0
8
+ module Sources
9
+ module Runners
10
+ class BuildChapters
11
+ runner_with :help do
12
+ arg_opt '-o', '--output-dir', 'Output chapters to specific directory.'
13
+ end
14
+
15
+ def run
16
+ runner_context.call(:project_banner)
17
+ output_dir.mkpath
18
+ project.chapters.each_with_index do |c, i|
19
+ ::Avm::EacLatexBase0::Sources::Build.new(project, chapter_build_options(c, i))
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def chapter_build_options(chapter, index)
26
+ output_name = "#{(index + 1).to_s.rjust(3, '0')}_#{chapter}.pdf"
27
+ { output_file: output_dir.join(output_name), chapter: chapter }
28
+ end
29
+
30
+ def output_dir_uncached
31
+ (
32
+ parsed.output_dir || project.default_output_dir.join('chapters')
33
+ ).to_pathname
34
+ end
35
+
36
+ def project
37
+ runner_context.call(:project)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_latex_base0/sources/build'
4
+ require 'eac_cli/core_ext'
5
+
6
+ module Avm
7
+ module EacLatexBase0
8
+ module Sources
9
+ module Runners
10
+ class BuildSingle
11
+ runner_with :help do
12
+ arg_opt '-s', '--source-dir', 'Write .tex source code in specific directory.'
13
+ arg_opt '-f', '--output-file', 'Output to specific file.'
14
+ arg_opt '-c', '--chapter', 'Write only the chapter <chapter>.'
15
+ bool_opt '-o', '--open', 'Open the file after build.'
16
+ end
17
+
18
+ def run
19
+ runner_context.call(:project_banner)
20
+ infov 'Build options', build_options
21
+ ::Avm::EacLatexBase0::Sources::Build.new(runner_context.call(:project), parsed)
22
+ end
23
+
24
+ private
25
+
26
+ def build_options
27
+ parsed.slice_fetch(:output_file, :open, :chapter, :source_dir)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_latex_base0/sources/build'
4
+ require 'eac_cli/core_ext'
5
+
6
+ module Avm
7
+ module EacLatexBase0
8
+ module Sources
9
+ module Runners
10
+ class Info
11
+ runner_with :help do
12
+ desc 'Information about a loca EacRailsBase0 local project.'
13
+ end
14
+
15
+ def run
16
+ runner_context.call(:project_banner)
17
+ infov 'Chapters', project.chapters.count
18
+ project.chapters.each_with_index do |chapter, index|
19
+ infov " * #{index + 1}", chapter
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def project
26
+ runner_context.call(:project)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacLatexBase0
7
+ module Sources
8
+ module Runners
9
+ require_sub __FILE__
10
+ end
11
+ end
12
+ end
13
+ end
@@ -3,8 +3,8 @@
3
3
  require 'eac_ruby_utils/core_ext'
4
4
 
5
5
  module Avm
6
- module Ruby
7
- module Gems
6
+ module EacLatexBase0
7
+ module Sources
8
8
  require_sub __FILE__
9
9
  end
10
10
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module EacLatexBase0
5
+ VERSION = '0.1.0'
6
+ end
7
+ end
@@ -3,7 +3,7 @@
3
3
  require 'eac_ruby_utils/core_ext'
4
4
 
5
5
  module Avm
6
- module Ruby
6
+ module EacLatexBase0
7
7
  require_sub __FILE__
8
8
  end
9
9
  end
@@ -10,9 +10,9 @@ Gem::Specification.new do |s|
10
10
  s.authors = ['Put here the authors']
11
11
  s.summary = 'Put here de description.'
12
12
 
13
- s.files = Dir['{lib,locale}/**/*']
13
+ s.files = Dir['{lib,locale,template}/**/*']
14
14
 
15
- s.add_dependency 'avm', '~> 0.26'
15
+ s.add_dependency 'avm', '~> 0.34'
16
16
  s.add_dependency 'avm-eac_generic_base0', '~> 0.2'
17
17
  s.add_dependency 'eac_ruby_utils', '~> 0.95', '>= 0.95.1'
18
18