eac_tools 0.17.0 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
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