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.
- checksums.yaml +4 -4
- data/Gemfile.lock +23 -11
- data/lib/eac_tools/version.rb +1 -1
- data/sub/avm/lib/avm/entries/auto_values/uri_entry.rb +24 -0
- data/sub/avm/lib/avm/entries/uri_builder.rb +85 -0
- data/sub/avm/lib/avm/instances/base/auto_values/install.rb +6 -9
- data/sub/avm/lib/avm/instances/base/auto_values.rb +2 -8
- data/sub/avm/lib/avm/instances/entry_keys.rb +1 -1
- data/sub/avm/lib/avm/version.rb +1 -1
- data/sub/avm/spec/lib/avm/instances/base_spec.rb +18 -1
- data/sub/avm/spec/lib/avm/instances/base_spec_configs_storage.yml +6 -0
- data/sub/avm-eac_generic_base0/lib/avm/eac_generic_base0/instances/base.rb +12 -0
- data/sub/avm-eac_generic_base0/lib/avm/eac_generic_base0/instances.rb +11 -0
- data/sub/avm-eac_generic_base0/lib/avm/eac_generic_base0/version.rb +1 -1
- data/sub/avm-eac_latex_base0/Gemfile +8 -0
- data/sub/avm-eac_latex_base0/avm-eac_latex_base0.gemspec +20 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/instances/apache_host.rb +19 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/instances/base.rb +13 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/instances/deploy.rb +38 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/instances.rb +11 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/base.rb +44 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/chapters_content.rb +49 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/commons.rb +16 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/copy_files.rb +45 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/file/base_stereotype.rb +23 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/file/chapter_index.rb +27 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/file/tex_source.rb +37 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build/file.rb +49 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/build.rb +119 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/runners/build_chapters.rb +43 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/runners/build_single.rb +33 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/runners/info.rb +32 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources/runners.rb +13 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/sources.rb +11 -0
- data/sub/avm-eac_latex_base0/lib/avm/eac_latex_base0/version.rb +7 -0
- data/sub/{avm-tools/lib/avm/eac_writings_base0.rb → avm-eac_latex_base0/lib/avm/eac_latex_base0.rb} +1 -1
- data/sub/avm-eac_latex_base0/spec/rubocop_spec.rb +3 -0
- data/sub/avm-eac_latex_base0/spec/spec_helper.rb +4 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- data/sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/version.rb +1 -1
- data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/dashed-mygem/Gemfile +3 -0
- data/sub/avm-eac_ruby_base1/spec/lib/avm/eac_ruby_base1/source_generators/base_spec_files/mygem/Gemfile +3 -0
- data/sub/avm-eac_ruby_base1/template/avm/eac_ruby_base1/source_generators/base/static/Gemfile +3 -0
- data/sub/avm-eac_wordpress_base0/avm-eac_wordpress_base0.gemspec +1 -0
- data/sub/avm-eac_wordpress_base0/lib/avm/eac_wordpress_base0/instances/apache_host.rb +2 -2
- data/sub/avm-eac_wordpress_base0/lib/avm/eac_wordpress_base0/version.rb +1 -1
- data/sub/avm-eac_wordpress_base0/spec/lib/avm/eac_wordpress_base0/instances/apache_host_spec.rb +4 -3
- data/sub/avm-tools/lib/avm/tools/version.rb +1 -1
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/addressable/uri/query_value.rb +37 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/addressable/uri.rb +4 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/addressable.rb +4 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
- data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/addressable/uri/query_value_spec.rb +25 -0
- metadata +78 -37
- data/sub/avm/lib/avm/instances/base/auto_values/system.rb +0 -23
- data/sub/avm-tools/lib/avm/eac_writings_base0/apache_host.rb +0 -17
- data/sub/avm-tools/lib/avm/eac_writings_base0/commons.rb +0 -12
- data/sub/avm-tools/lib/avm/eac_writings_base0/deploy.rb +0 -36
- data/sub/avm-tools/lib/avm/eac_writings_base0/file_build/base_stereotype.rb +0 -19
- data/sub/avm-tools/lib/avm/eac_writings_base0/file_build/chapter_index.rb +0 -23
- data/sub/avm-tools/lib/avm/eac_writings_base0/file_build/tex_source.rb +0 -33
- data/sub/avm-tools/lib/avm/eac_writings_base0/file_build.rb +0 -45
- data/sub/avm-tools/lib/avm/eac_writings_base0/instance.rb +0 -11
- data/sub/avm-tools/lib/avm/eac_writings_base0/project.rb +0 -33
- data/sub/avm-tools/lib/avm/eac_writings_base0/project_build/chapters_content.rb +0 -47
- data/sub/avm-tools/lib/avm/eac_writings_base0/project_build/copy_files.rb +0 -42
- data/sub/avm-tools/lib/avm/eac_writings_base0/project_build.rb +0 -117
- data/sub/avm-tools/lib/avm/tools/runner/app_src/eac_writings_base0/build_chapters.rb +0 -45
- data/sub/avm-tools/lib/avm/tools/runner/app_src/eac_writings_base0/build_single.rb +0 -35
- data/sub/avm-tools/lib/avm/tools/runner/app_src/eac_writings_base0/info.rb +0 -34
- data/sub/avm-tools/lib/avm/tools/runner/app_src/eac_writings_base0.rb +0 -33
- 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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/sub/avm-eac_wordpress_base0/spec/lib/avm/eac_wordpress_base0/instances/apache_host_spec.rb
CHANGED
@@ -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(
|
16
|
-
instance.entry(
|
17
|
-
instance.entry(
|
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
|
@@ -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,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
|