eac_tools 0.17.0 → 0.18.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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +23 -11
  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/version.rb +1 -1
  10. data/sub/avm/spec/lib/avm/instances/base_spec.rb +18 -1
  11. data/sub/avm/spec/lib/avm/instances/base_spec_configs_storage.yml +6 -0
  12. data/sub/avm-eac_generic_base0/lib/avm/eac_generic_base0/instances/base.rb +12 -0
  13. data/sub/avm-eac_generic_base0/lib/avm/eac_generic_base0/instances.rb +11 -0
  14. data/sub/avm-eac_generic_base0/lib/avm/eac_generic_base0/version.rb +1 -1
  15. data/sub/avm-eac_latex_base0/Gemfile +8 -0
  16. data/sub/avm-eac_latex_base0/avm-eac_latex_base0.gemspec +20 -0
  17. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/instances/apache_host.rb +19 -0
  18. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/instances/base.rb +13 -0
  19. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/instances/deploy.rb +38 -0
  20. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/instances.rb +11 -0
  21. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/base.rb +44 -0
  22. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/chapters_content.rb +49 -0
  23. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/commons.rb +16 -0
  24. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/copy_files.rb +45 -0
  25. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/file/base_stereotype.rb +23 -0
  26. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/file/chapter_index.rb +27 -0
  27. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/file/tex_source.rb +37 -0
  28. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/file.rb +49 -0
  29. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build.rb +119 -0
  30. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/runners/build_chapters.rb +43 -0
  31. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/runners/build_single.rb +33 -0
  32. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/runners/info.rb +32 -0
  33. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/runners.rb +13 -0
  34. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources.rb +11 -0
  35. data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/version.rb +7 -0
  36. data/sub/{avm-tools/lib/avm/eac_writings_base0.rb → avm-eac_latex_base0/lib/avm/eac_latex_base0.rb} +1 -1
  37. data/sub/avm-eac_latex_base0/spec/rubocop_spec.rb +3 -0
  38. data/sub/avm-eac_latex_base0/spec/spec_helper.rb +4 -0
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/version.rb +1 -1
  48. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/dashed-mygem/Gemfile +3 -0
  49. data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/mygem/Gemfile +3 -0
  50. data/sub/avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base/static/Gemfile +3 -0
  51. data/sub/avm-eac_wordpress_base0/avm-eac_wordpress_base0.gemspec +1 -0
  52. data/sub/avm-eac_wordpress_base0/lib/avm/eac_wordpress_base0/instances/apache_host.rb +2 -2
  53. data/sub/avm-eac_wordpress_base0/lib/avm/eac_wordpress_base0/version.rb +1 -1
  54. data/sub/avm-eac_wordpress_base0/spec/lib/avm/eac_wordpress_base0/instances/apache_host_spec.rb +4 -3
  55. data/sub/avm-tools/lib/avm/tools/version.rb +1 -1
  56. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/addressable/uri/query_value.rb +37 -0
  57. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/addressable/uri.rb +4 -0
  58. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/addressable.rb +4 -0
  59. data/sub/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  60. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/addressable/uri/query_value_spec.rb +25 -0
  61. metadata +78 -37
  62. data/sub/avm/lib/avm/instances/base/auto_values/system.rb +0 -23
  63. data/sub/avm-tools/lib/avm/eac_writings_base0/apache_host.rb +0 -17
  64. data/sub/avm-tools/lib/avm/eac_writings_base0/commons.rb +0 -12
  65. data/sub/avm-tools/lib/avm/eac_writings_base0/deploy.rb +0 -36
  66. data/sub/avm-tools/lib/avm/eac_writings_base0/file_build/base_stereotype.rb +0 -19
  67. data/sub/avm-tools/lib/avm/eac_writings_base0/file_build/chapter_index.rb +0 -23
  68. data/sub/avm-tools/lib/avm/eac_writings_base0/file_build/tex_source.rb +0 -33
  69. data/sub/avm-tools/lib/avm/eac_writings_base0/file_build.rb +0 -45
  70. data/sub/avm-tools/lib/avm/eac_writings_base0/instance.rb +0 -11
  71. data/sub/avm-tools/lib/avm/eac_writings_base0/project.rb +0 -33
  72. data/sub/avm-tools/lib/avm/eac_writings_base0/project_build/chapters_content.rb +0 -47
  73. data/sub/avm-tools/lib/avm/eac_writings_base0/project_build/copy_files.rb +0 -42
  74. data/sub/avm-tools/lib/avm/eac_writings_base0/project_build.rb +0 -117
  75. data/sub/avm-tools/lib/avm/tools/runner/app_src/eac_writings_base0/build_chapters.rb +0 -45
  76. data/sub/avm-tools/lib/avm/tools/runner/app_src/eac_writings_base0/build_single.rb +0 -35
  77. data/sub/avm-tools/lib/avm/tools/runner/app_src/eac_writings_base0/info.rb +0 -34
  78. data/sub/avm-tools/lib/avm/tools/runner/app_src/eac_writings_base0.rb +0 -33
  79. data/sub/avm-tools/lib/avm/tools/runner/eac_writings_base0.rb +0 -14
@@ -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
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacLatexBase0
7
+ module Sources
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ 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 EacWritingsBase0
6
+ module EacLatexBase0
7
7
  require_sub __FILE__
8
8
  end
9
9
  end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ ::EacRubyUtils::Rspec.default_setup.describe_rubocop
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/rspec/default_setup'
4
+ ::EacRubyUtils::Rspec.default_setup_create(::File.expand_path('..', __dir__))
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module EacRubyBase1
5
- VERSION = '0.13.0'
5
+ VERSION = '0.15.0'
6
6
  end
7
7
  end
@@ -3,3 +3,6 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
+
7
+ local_gemfile = ::File.join(::File.dirname(__FILE__), 'Gemfile.local')
8
+ eval_gemfile local_gemfile if ::File.exist?(local_gemfile)
@@ -3,3 +3,6 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
+
7
+ local_gemfile = ::File.join(::File.dirname(__FILE__), 'Gemfile.local')
8
+ eval_gemfile local_gemfile if ::File.exist?(local_gemfile)
@@ -3,3 +3,6 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
+
7
+ local_gemfile = ::File.join(::File.dirname(__FILE__), 'Gemfile.local')
8
+ eval_gemfile local_gemfile if ::File.exist?(local_gemfile)
@@ -12,6 +12,7 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.files = Dir['{lib,template}/**/*']
14
14
 
15
+ s.add_dependency 'avm', '~> 0.35'
15
16
  s.add_dependency 'avm-eac_webapp_base0', '~> 0.3', '>= 0.3.1'
16
17
  s.add_dependency 'eac_ruby_utils', '~> 0.97'
17
18
 
@@ -15,11 +15,11 @@ module Avm
15
15
  end
16
16
 
17
17
  def system_user
18
- instance.read_entry('system.username')
18
+ instance.install_username
19
19
  end
20
20
 
21
21
  def system_group
22
- instance.read_entry('system.groupname')
22
+ instance.install_groupname
23
23
  end
24
24
  end
25
25
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module EacWordpressBase0
5
- VERSION = '0.1.0'
5
+ VERSION = '0.1.1'
6
6
  end
7
7
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avm/instances/entry_keys'
3
4
  require 'avm/eac_wordpress_base0/instances/apache_host'
4
5
  require 'avm/eac_wordpress_base0/instances/base'
5
6
 
@@ -12,9 +13,9 @@ RSpec.describe ::Avm::EacWordpressBase0::Instances::ApacheHost do
12
13
  end
13
14
 
14
15
  before do
15
- instance.entry('fs_path').write('/path/to/stub-app_0')
16
- instance.entry('web.url').write('http://stubapp.net')
17
- instance.entry('system.username').write('myuser')
16
+ instance.entry(::Avm::Instances::EntryKeys::FS_PATH).write('/path/to/stub-app_0')
17
+ instance.entry(::Avm::Instances::EntryKeys::WEB_URL).write('http://stubapp.net')
18
+ instance.entry(::Avm::Instances::EntryKeys::INSTALL_USERNAME).write('myuser')
18
19
  end
19
20
 
20
21
  it do
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Tools
5
- VERSION = '0.130.0'
5
+ VERSION = '0.131.0'
6
6
  end
7
7
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'addressable'
4
+
5
+ module Addressable
6
+ class URI
7
+ # @return [ActiveSupport:HashWithIndifferentAccess]
8
+ def hash_query_values
9
+ (query_values || {}).with_indifferent_access
10
+ end
11
+
12
+ def query_value(*args)
13
+ if args.count == 1
14
+ query_value_get(*args)
15
+ elsif args.count == 2
16
+ query_value_set(*args)
17
+ else
18
+ raise ::ArgumentError, "#{object.class}.#{__method__}: wrong number of arguments" \
19
+ " (given #{args.count}, expected 1..2)"
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def query_value_get(name)
26
+ hash_query_values[name]
27
+ end
28
+
29
+ def query_value_set(name, value)
30
+ new_query_values = hash_query_values
31
+ new_query_values[name] = value
32
+ self.query_values = new_query_values
33
+
34
+ self
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/require_sub'
4
+ ::EacRubyUtils.require_sub __FILE__
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/require_sub'
4
+ ::EacRubyUtils.require_sub __FILE__
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyUtils
4
- VERSION = '0.97.0'
4
+ VERSION = '0.98.0'
5
5
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/patches/addressable/uri/query_value'
4
+
5
+ RSpec.describe ::Addressable::URI do
6
+ subject(:instance) { described_class.parse('http://example.net') }
7
+
8
+ it { expect(instance.query_values).to be_nil }
9
+ it { expect(instance.hash_query_values).to eq({}) }
10
+
11
+ it { expect(instance.query_value('param1')).to be_nil }
12
+ it { expect(instance.query_value(:param1)).to be_nil }
13
+
14
+ context 'when param is set' do
15
+ let(:set_result) { instance.query_value(:param1, :value1) }
16
+
17
+ before { set_result }
18
+
19
+ it { expect(set_result).to eq(instance) }
20
+ it { expect(instance.query_values).to eq({ 'param1' => 'value1' }) }
21
+ it { expect(instance.hash_query_values).to eq({ 'param1' => 'value1' }) }
22
+ it { expect(instance.query_value('param1')).to eq('value1') }
23
+ it { expect(instance.query_value(:param1)).to eq('value1') }
24
+ end
25
+ end