eac_tools 0.70.1 → 0.73.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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +31 -31
  3. data/lib/eac_tools/version.rb +1 -1
  4. data/sub/avm/avm.gemspec +3 -3
  5. data/sub/avm/lib/avm/applications/base.rb +1 -0
  6. data/sub/avm/lib/avm/registry/applications.rb +7 -0
  7. data/sub/avm/lib/avm/registry/config_objects.rb +18 -0
  8. data/sub/avm/lib/avm/registry.rb +3 -2
  9. data/sub/avm/lib/avm/version.rb +1 -1
  10. data/sub/avm-tools/avm-tools.gemspec +3 -3
  11. data/sub/avm-tools/lib/avm/tools/runner/applications/list.rb +31 -0
  12. data/sub/avm-tools/lib/avm/tools/runner/applications.rb +16 -0
  13. data/sub/avm-tools/lib/avm/tools/version.rb +1 -1
  14. data/sub/eac_config/eac_config.gemspec +2 -2
  15. data/sub/eac_config/lib/eac_config/entries.rb +35 -0
  16. data/sub/eac_config/lib/eac_config/entry_path.rb +27 -0
  17. data/sub/eac_config/lib/eac_config/envvars_node.rb +6 -0
  18. data/sub/eac_config/lib/eac_config/node.rb +11 -3
  19. data/sub/eac_config/lib/eac_config/node_entry.rb +1 -0
  20. data/sub/eac_config/lib/eac_config/node_uri/instanciate_single.rb +29 -0
  21. data/sub/eac_config/lib/eac_config/node_uri.rb +15 -8
  22. data/sub/eac_config/lib/eac_config/version.rb +1 -1
  23. data/sub/eac_config/lib/eac_config/yaml_file_node/self_entries.rb +72 -0
  24. data/sub/eac_config/lib/eac_config/yaml_file_node.rb +3 -0
  25. data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec.rb +62 -26
  26. data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1.yaml +5 -1
  27. data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1_1.yaml +2 -0
  28. data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1_2/storage1_2_1.yaml +2 -0
  29. data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1_2.yaml +6 -0
  30. data/sub/eac_envs-http/eac_envs-http.gemspec +3 -3
  31. data/sub/eac_envs-http/lib/eac_envs/http/response/body.rb +5 -0
  32. data/sub/eac_envs-http/lib/eac_envs/http/version.rb +1 -1
  33. data/sub/eac_envs-http/spec/lib/eac_envs/http/request_spec_files/get.target.yaml +1 -1
  34. data/sub/eac_envs-http/spec/lib/eac_envs/http/request_spec_files/get_with_auth.target.yaml +1 -1
  35. data/sub/eac_envs-http/spec/lib/eac_envs/http/request_spec_files/post_array_body.target.yaml +1 -1
  36. data/sub/eac_envs-http/spec/lib/eac_envs/http/request_spec_files/post_string_body.target.yaml +1 -1
  37. data/sub/eac_envs-http/spec/lib/eac_envs/http/request_spec_files/put_hash_body.target.yaml +1 -1
  38. data/sub/eac_envs-http/spec/lib/eac_envs/http/request_spec_files/put_with_file.target.yaml +1 -1
  39. data/sub/eac_envs-http/spec/lib/eac_envs/http/request_spec_files/root.target.yaml +1 -1
  40. data/sub/eac_envs-http/spec/spec_helper/request_builder.rb +1 -0
  41. data/sub/eac_rest/eac_rest.gemspec +2 -2
  42. data/sub/eac_rest/lib/eac_rest/api.rb +1 -1
  43. data/sub/eac_rest/lib/eac_rest/version.rb +1 -1
  44. data/sub/eac_rest/spec/lib/eac_rest/api_spec_files/get.target.yaml +1 -1
  45. data/sub/eac_rest/spec/lib/eac_rest/api_spec_files/get_with_auth.target.yaml +1 -1
  46. data/sub/eac_rest/spec/lib/eac_rest/api_spec_files/post_array_body.target.yaml +1 -1
  47. data/sub/eac_rest/spec/lib/eac_rest/api_spec_files/post_string_body.target.yaml +1 -1
  48. data/sub/eac_rest/spec/lib/eac_rest/api_spec_files/put_hash_body.target.yaml +1 -1
  49. data/sub/eac_rest/spec/lib/eac_rest/api_spec_files/put_with_file.target.yaml +1 -1
  50. data/sub/eac_rest/spec/lib/eac_rest/api_spec_files/root.target.yaml +1 -1
  51. data/sub/eac_rest/spec/spec_helper/request_builder.rb +2 -1
  52. data/sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_instance_method.rb +34 -0
  53. data/sub/eac_ruby_utils/lib/eac_ruby_utils/gems_registry.rb +0 -1
  54. data/sub/eac_ruby_utils/lib/eac_ruby_utils/method_class.rb +7 -15
  55. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/acts_as_instance_method.rb +10 -0
  56. data/sub/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  57. data/sub/eac_ruby_utils/lib/eac_ruby_utils/wildcards.rb +26 -0
  58. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/wildcards_spec.rb +27 -0
  59. metadata +18 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a4db50c78d5717141a92f0bf2836e5e019afe0da8fa52f40999ac5a214e21d8
4
- data.tar.gz: 8398de9a43cdbd4c3757836fa352de365f80b7f1aa2d9bb264cabe15095e7bbe
3
+ metadata.gz: 3741d3890696e7b076cffae0313ed3ad82d5fc68fe41ba2ae64d75cd3a1a474e
4
+ data.tar.gz: 6685e1624bb09bbebfdc04b5d05046cd24106c25c336af3117936ec57aa48947
5
5
  SHA512:
6
- metadata.gz: 81ac5304d8e40cdf57563d35aaad5205b66782e756c269f9260791c1001e1ab210b19bc4eac67769da6546ae9935030a29fd1714ff23d1854123082974adb239
7
- data.tar.gz: 6fbe5c417b970d88be91efce68db390c861a6d34f9178500352576873c614dc8e93cc193307350fb89473f68d3ff1ac3d7b01c026d63833e2e234b78f1ee5558
6
+ metadata.gz: 69304f63883050fd2811ef4762a96e8a8fee1091ba1cd7cc768f93c70075a27e89fc49c800b89dfa40683e26e02a006a123b8ad72e42ea7813ab816e1d0702ec
7
+ data.tar.gz: a03de22b8a063b57beaab4d7862e2cdbf84842b429afa6f7fdbfb6d60414f006b0cc8b55c260c41d4309f0c428c4a6ecc868526560ddc299ba53ea885c2ef8c6
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- eac_tools (0.70.1)
5
- avm (~> 0.78)
4
+ eac_tools (0.73.0)
5
+ avm (~> 0.79)
6
6
  avm-eac_asciidoctor_base0 (~> 0.19)
7
7
  avm-eac_generic_base0 (~> 0.12)
8
8
  avm-eac_latex_base0 (~> 0.3, >= 0.3.1)
@@ -17,8 +17,8 @@ PATH
17
17
  avm-eac_webapp_base0 (~> 0.18, >= 0.18.1)
18
18
  avm-eac_wordpress_base0 (~> 0.3, >= 0.3.1)
19
19
  avm-git (~> 0.13, >= 0.13.3)
20
- avm-tools (~> 0.151, >= 0.151.1)
21
- eac_ruby_utils (~> 0.117, >= 0.117.1)
20
+ avm-tools (~> 0.153)
21
+ eac_ruby_utils (~> 0.119)
22
22
 
23
23
  PATH
24
24
  remote: sub/avm-eac_asciidoctor_base0
@@ -163,11 +163,11 @@ PATH
163
163
  PATH
164
164
  remote: sub/avm-tools
165
165
  specs:
166
- avm-tools (0.151.1)
167
- aranha-parsers (~> 0.19)
168
- avm (~> 0.76)
166
+ avm-tools (0.153.0)
167
+ aranha-parsers (~> 0.21)
168
+ avm (~> 0.79)
169
169
  avm-eac_ruby_base1 (~> 0.30, >= 0.30.3)
170
- avm-eac_ubuntu_base0 (~> 0.4, >= 0.4.3)
170
+ avm-eac_ubuntu_base0 (~> 0.5)
171
171
  avm-files (~> 0.6, >= 0.6.2)
172
172
  avm-git (~> 0.13, >= 0.13.3)
173
173
  clipboard (~> 1.3, >= 1.3.6)
@@ -181,14 +181,14 @@ PATH
181
181
  PATH
182
182
  remote: sub/avm
183
183
  specs:
184
- avm (0.78.0)
185
- aranha-parsers (~> 0.20)
184
+ avm (0.79.0)
185
+ aranha-parsers (~> 0.21)
186
186
  eac_cli (~> 0.35, >= 0.35.1)
187
- eac_config (~> 0.12)
187
+ eac_config (~> 0.14)
188
188
  eac_docker (~> 0.7)
189
189
  eac_fs (~> 0.16)
190
190
  eac_git (~> 0.14, >= 0.14.1)
191
- eac_ruby_utils (~> 0.117, >= 0.117.1)
191
+ eac_ruby_utils (~> 0.119)
192
192
  eac_templates (~> 0.5)
193
193
  filesize (~> 0.2)
194
194
  htmlbeautifier (~> 1.4, >= 1.4.2)
@@ -205,9 +205,9 @@ PATH
205
205
  PATH
206
206
  remote: sub/eac_config
207
207
  specs:
208
- eac_config (0.12.0)
209
- addressable (~> 2.8, >= 2.8.1)
210
- eac_ruby_utils (~> 0.107)
208
+ eac_config (0.14.0)
209
+ addressable (~> 2.8, >= 2.8.4)
210
+ eac_ruby_utils (~> 0.119)
211
211
 
212
212
  PATH
213
213
  remote: sub/eac_docker
@@ -219,14 +219,14 @@ PATH
219
219
  PATH
220
220
  remote: sub/eac_envs-http
221
221
  specs:
222
- eac_envs-http (0.3.2)
222
+ eac_envs-http (0.4.0)
223
223
  eac_fs (~> 0.16)
224
- eac_ruby_utils (~> 0.116)
225
- faraday (~> 2.7, >= 2.7.4)
224
+ eac_ruby_utils (~> 0.117, >= 0.117.1)
225
+ faraday (~> 2.7, >= 2.7.6)
226
226
  faraday-follow_redirects (~> 0.3)
227
227
  faraday-gzip (~> 0.1)
228
228
  faraday-multipart (~> 1.0, >= 1.0.4)
229
- faraday-retry (~> 2.1)
229
+ faraday-retry (~> 2.2)
230
230
 
231
231
  PATH
232
232
  remote: sub/eac_fs
@@ -246,10 +246,10 @@ PATH
246
246
  PATH
247
247
  remote: sub/eac_rest
248
248
  specs:
249
- eac_rest (0.9.0)
250
- eac_envs-http (~> 0.3, >= 0.3.1)
249
+ eac_rest (0.9.1)
250
+ eac_envs-http (~> 0.4)
251
251
  eac_fs (~> 0.16)
252
- eac_ruby_utils (~> 0.112)
252
+ eac_ruby_utils (~> 0.117, >= 0.117.1)
253
253
 
254
254
  PATH
255
255
  remote: sub/eac_ruby_base0
@@ -263,7 +263,7 @@ PATH
263
263
  PATH
264
264
  remote: sub/eac_ruby_utils
265
265
  specs:
266
- eac_ruby_utils (0.117.1)
266
+ eac_ruby_utils (0.119.0)
267
267
  activesupport (>= 4, < 7)
268
268
  addressable (~> 2.8, >= 2.8.4)
269
269
  bundler
@@ -280,7 +280,7 @@ PATH
280
280
  GEM
281
281
  remote: https://rubygems.org/
282
282
  specs:
283
- activesupport (6.1.7.3)
283
+ activesupport (6.1.7.4)
284
284
  concurrent-ruby (~> 1.0, >= 1.0.2)
285
285
  i18n (>= 1.6, < 2)
286
286
  minitest (>= 5.1)
@@ -288,10 +288,10 @@ GEM
288
288
  zeitwerk (~> 2.3)
289
289
  addressable (2.8.4)
290
290
  public_suffix (>= 2.0.2, < 6.0)
291
- aranha-parsers (0.20.0)
291
+ aranha-parsers (0.21.0)
292
292
  activesupport (>= 4.0.0)
293
293
  addressable (~> 2.8, >= 2.8.4)
294
- eac_envs-http (~> 0.3, >= 0.3.2)
294
+ eac_envs-http (~> 0.4)
295
295
  eac_ruby_utils (~> 0.117, >= 0.117.1)
296
296
  nokogiri (~> 1.15, >= 1.15.2)
297
297
  ofx-parser (~> 1.1)
@@ -310,7 +310,7 @@ GEM
310
310
  rubocop (~> 0.80.1)
311
311
  rubocop-rails (~> 2.4.2)
312
312
  rubocop-rspec (~> 1.38.1)
313
- faraday (2.7.6)
313
+ faraday (2.7.7)
314
314
  faraday-net_http (>= 2.0, < 3.1)
315
315
  ruby2_keywords (>= 0.0.4)
316
316
  faraday-follow_redirects (0.3.0)
@@ -333,7 +333,7 @@ GEM
333
333
  concurrent-ruby (~> 1.0)
334
334
  jaro_winkler (1.5.6)
335
335
  minitar (0.9)
336
- minitest (5.18.0)
336
+ minitest (5.18.1)
337
337
  multipart-post (2.3.0)
338
338
  net-ssh (4.2.0)
339
339
  nokogiri (1.15.2-x86_64-linux)
@@ -348,8 +348,8 @@ GEM
348
348
  racc
349
349
  parslet (2.0.0)
350
350
  public_suffix (5.0.1)
351
- racc (1.7.0)
352
- rack (3.0.7)
351
+ racc (1.7.1)
352
+ rack (3.0.8)
353
353
  rainbow (3.1.1)
354
354
  rchardet (1.8.0)
355
355
  rexml (3.2.5)
@@ -366,7 +366,7 @@ GEM
366
366
  rspec-mocks (3.12.5)
367
367
  diff-lcs (>= 1.2.0, < 2.0)
368
368
  rspec-support (~> 3.12.0)
369
- rspec-support (3.12.0)
369
+ rspec-support (3.12.1)
370
370
  rubocop (0.80.1)
371
371
  jaro_winkler (~> 1.5.1)
372
372
  parallel (~> 1.10)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacTools
4
- VERSION = '0.70.1'
4
+ VERSION = '0.73.0'
5
5
  end
data/sub/avm/avm.gemspec CHANGED
@@ -12,13 +12,13 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.files = Dir['{lib}/**/*']
14
14
 
15
- s.add_dependency 'aranha-parsers', '~> 0.20'
15
+ s.add_dependency 'aranha-parsers', '~> 0.21'
16
16
  s.add_dependency 'eac_cli', '~> 0.35', '>= 0.35.1'
17
- s.add_dependency 'eac_config', '~> 0.12'
17
+ s.add_dependency 'eac_config', '~> 0.14'
18
18
  s.add_dependency 'eac_docker', '~> 0.7'
19
19
  s.add_dependency 'eac_fs', '~> 0.16'
20
20
  s.add_dependency 'eac_git', '~> 0.14', '>= 0.14.1'
21
- s.add_dependency 'eac_ruby_utils', '~> 0.117', '>= 0.117.1'
21
+ s.add_dependency 'eac_ruby_utils', '~> 0.119'
22
22
  s.add_dependency 'eac_templates', '~> 0.5'
23
23
  s.add_dependency 'filesize', '~> 0.2'
24
24
  s.add_dependency 'htmlbeautifier', '~> 1.4', '>= 1.4.2'
@@ -12,6 +12,7 @@ module Avm
12
12
  require_sub __FILE__, include_modules: true
13
13
  include ::Avm::Entries::Base
14
14
 
15
+ AVM_TYPE = 'Application'
15
16
  LOCAL_INSTANCE_SUFFIX = 'dev'
16
17
 
17
18
  common_constructor :id do
@@ -10,6 +10,7 @@ module Avm
10
10
 
11
11
  # @return [Array<Avm::Applications::Base>]
12
12
  def available
13
+ load_config
13
14
  detected.values
14
15
  end
15
16
 
@@ -26,6 +27,12 @@ module Avm
26
27
  def detected
27
28
  @detected ||= {}
28
29
  end
30
+
31
+ def load_config
32
+ ::Avm::Registry.config_objects.available.each do |id, type|
33
+ detect(id) if type == ::Avm::Applications::Base::AVM_TYPE
34
+ end
35
+ end
29
36
  end
30
37
  end
31
38
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/applications/base'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module Registry
8
+ class ConfigObjects
9
+ def initialize(*args); end
10
+
11
+ # @return [Array<Avm::Applications::Base>]
12
+ def available
13
+ ::EacConfig::Node.context.current.entries('*.avm_type').node_entries
14
+ .map { |ne| [ne.path.first, ne.value] }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -7,8 +7,9 @@ module Avm
7
7
  module Registry
8
8
  require_sub __FILE__
9
9
  enable_listable
10
- lists.add_symbol :category, :applications, :application_stereotypes, :file_formats, :instances,
11
- :launcher_stereotypes, :runners, :scms, :source_generators, :sources
10
+ lists.add_symbol :category, :applications, :application_stereotypes, :config_objects,
11
+ :file_formats, :instances, :launcher_stereotypes, :runners, :scms,
12
+ :source_generators, :sources
12
13
 
13
14
  class << self
14
15
  enable_simple_cache
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Avm
4
- VERSION = '0.78.0'
4
+ VERSION = '0.79.0'
5
5
  end
@@ -14,10 +14,10 @@ Gem::Specification.new do |s|
14
14
  s.bindir = 'exe'
15
15
  s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
16
16
 
17
- s.add_dependency 'aranha-parsers', '~> 0.19'
18
- s.add_dependency 'avm', '~> 0.76'
17
+ s.add_dependency 'aranha-parsers', '~> 0.21'
18
+ s.add_dependency 'avm', '~> 0.79'
19
19
  s.add_dependency 'avm-eac_ruby_base1', '~> 0.30', '>= 0.30.3'
20
- s.add_dependency 'avm-eac_ubuntu_base0', '~> 0.4', '>= 0.4.3'
20
+ s.add_dependency 'avm-eac_ubuntu_base0', '~> 0.5'
21
21
  s.add_dependency 'avm-files', '~> 0.6', '>= 0.6.2'
22
22
  s.add_dependency 'avm-git', '~> 0.13', '>= 0.13.3'
23
23
  s.add_dependency 'clipboard', '~> 1.3', '>= 1.3.6'
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/tools/core_ext'
4
+
5
+ module Avm
6
+ module Tools
7
+ class Runner
8
+ class Applications
9
+ class List
10
+ runner_with :help, :output
11
+
12
+ def run
13
+ infov 'Found', applications.count
14
+ run_output
15
+ end
16
+
17
+ def output_content
18
+ applications.map { |s| "#{s}\n" }.join
19
+ end
20
+
21
+ private
22
+
23
+ def applications_uncached
24
+ ::Avm::Registry.applications.available
25
+ .sort_by { |s| [s.id] }
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/core_ext'
4
+
5
+ module Avm
6
+ module Tools
7
+ class Runner
8
+ class Applications
9
+ require_sub __FILE__
10
+ runner_with :help, :subcommands do
11
+ subcommands
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Tools
5
- VERSION = '0.151.1'
5
+ VERSION = '0.153.0'
6
6
  end
7
7
  end
@@ -12,8 +12,8 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.files = Dir['{lib}/**/*']
14
14
 
15
- s.add_dependency 'addressable', '~> 2.8', '>= 2.8.1'
16
- s.add_dependency 'eac_ruby_utils', '~> 0.107'
15
+ s.add_dependency 'addressable', '~> 2.8', '>= 2.8.4'
16
+ s.add_dependency 'eac_ruby_utils', '~> 0.119'
17
17
 
18
18
  s.add_development_dependency 'eac_ruby_gem_support', '~> 0.5.1'
19
19
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_config/entry_path'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module EacConfig
7
+ class Entries
8
+ require_sub __FILE__
9
+ enable_simple_cache
10
+ common_constructor :root_node, :path do
11
+ self.path = ::EacConfig::EntryPath.assert(path)
12
+ end
13
+
14
+ def to_s
15
+ "#{self.class}[RootNode: #{root_node}, Path: #{path}]"
16
+ end
17
+
18
+ private
19
+
20
+ # @return [Array<EacConfig::Entries>]
21
+ def node_entries_uncached
22
+ node_entries_from_root + node_entries_from_load_path
23
+ end
24
+
25
+ # @return [Array<EacConfig::Entries>]
26
+ def node_entries_from_load_path_uncached
27
+ root_node.recursive_loaded_nodes.flat_map { |loaded_node| loaded_node.self_entries(path) }
28
+ end
29
+
30
+ # @return [Array<EacConfig::Entries>]
31
+ def node_entries_from_root_uncached
32
+ root_node.self_entries(path)
33
+ end
34
+ end
35
+ end
@@ -58,5 +58,32 @@ module EacConfig
58
58
  def to_string
59
59
  parts.join(PART_SEPARATOR)
60
60
  end
61
+
62
+ # @param part [String]
63
+ # @return [EacConfig::EntryPath]
64
+ def with_first(part)
65
+ new_parts = parts.dup
66
+ new_parts.unshift(part)
67
+ self.class.new(new_parts)
68
+ end
69
+
70
+ # @return [EacConfig::EntryPath]
71
+ def without_first
72
+ new_parts = parts.dup
73
+ new_parts.shift
74
+ self.class.new(new_parts)
75
+ end
76
+
77
+ # @return [EacConfig::EntryPath]
78
+ def with_last(part)
79
+ self.class.new(parts + [part])
80
+ end
81
+
82
+ # @return [EacConfig::EntryPath]
83
+ def without_last
84
+ new_parts = parts.dup
85
+ new_parts.pop
86
+ self.class.new(new_parts)
87
+ end
61
88
  end
62
89
  end
@@ -18,6 +18,12 @@ module EacConfig
18
18
  end
19
19
  end
20
20
 
21
+ # @param path [EacConfig::EntryPath]
22
+ # @return [Array<EacConfig::Entries>]
23
+ def self_entries(_path)
24
+ []
25
+ end
26
+
21
27
  def url
22
28
  URI
23
29
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_config/entries'
3
4
  require 'eac_config/entry'
4
5
  require 'eac_config/entry_path'
5
6
  require 'eac_config/load_path'
@@ -20,10 +21,15 @@ module EacConfig
20
21
  attr_accessor :write_node
21
22
 
22
23
  common_concern do
23
- enable_abstract_methods
24
+ acts_as_abstract :self_entries
24
25
  include ::Comparable
25
26
  end
26
27
 
28
+ # @return [Array<EacConfig::Entries>]
29
+ def entries(path)
30
+ ::EacConfig::Entries.new(self, path)
31
+ end
32
+
27
33
  def entry(path)
28
34
  ::EacConfig::Entry.new(self, path)
29
35
  end
@@ -50,7 +56,7 @@ module EacConfig
50
56
 
51
57
  # @return [Array<EacConfig::Node>]
52
58
  def self_loaded_nodes
53
- load_path.paths.map { |node_path| load_node(node_path) }
59
+ load_path.paths.flat_map { |node_path| load_nodes(node_path) }
54
60
  end
55
61
 
56
62
  # @return [Array<EacConfig::Node>]
@@ -66,7 +72,9 @@ module EacConfig
66
72
 
67
73
  private
68
74
 
69
- def load_node(node_path)
75
+ # @param node_path [String]
76
+ # @return [Array<EacConfig::Node>]
77
+ def load_nodes(node_path)
70
78
  ::EacConfig::NodeUri.new(node_path, url).instanciate
71
79
  end
72
80
  end
@@ -12,6 +12,7 @@ module EacConfig
12
12
  common_constructor :node, :path do
13
13
  self.path = ::EacConfig::EntryPath.assert(path)
14
14
  end
15
+ compare_by :node, :path
15
16
 
16
17
  abstract_methods :found?, :value, :value=
17
18
 
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacConfig
4
+ class NodeUri
5
+ class InstanciateSingle
6
+ acts_as_instance_method
7
+ enable_simple_cache
8
+ common_constructor :node_uri, :instance_uri
9
+
10
+ # @return [Array<Class>]
11
+ def available_node_classes
12
+ require 'eac_config/envvars_node'
13
+ require 'eac_config/yaml_file_node'
14
+ [::EacConfig::EnvvarsNode, ::EacConfig::YamlFileNode]
15
+ end
16
+
17
+ # @return [EacConfig::Node]
18
+ def result
19
+ available_node_classes.lazy.map { |k| k.from_uri(self) }.find(&:present?) ||
20
+ raise("No class mapped for \"#{to_addressable}\"")
21
+ end
22
+
23
+ # @return [Addressable::URI]
24
+ def to_addressable
25
+ instance_uri.to_uri
26
+ end
27
+ end
28
+ end
29
+ end
@@ -5,21 +5,26 @@ module EacConfig
5
5
  enable_simple_cache
6
6
  common_constructor :source, :loader_uri, default: [nil]
7
7
 
8
- def available_node_classes
9
- require 'eac_config/envvars_node'
10
- require 'eac_config/yaml_file_node'
11
- [::EacConfig::EnvvarsNode, ::EacConfig::YamlFileNode]
12
- end
13
-
8
+ # @return [Array<EacConfig::Node>]
14
9
  def instanciate
15
- available_node_classes.lazy.map { |k| k.from_uri(self) }.find(&:present?) ||
16
- raise("No class mapped for \"#{to_addressable}\"")
10
+ instance_uris.map { |uri| instanciate_single(uri) }
17
11
  end
18
12
 
19
13
  delegate :to_s, to: :to_addressable
20
14
 
21
15
  private
22
16
 
17
+ # @return [Array<Addressable::URI>]
18
+ def instance_uris
19
+ if to_addressable.scheme == 'file'
20
+ ::Pathname.glob(to_addressable.path).map do |found_path|
21
+ ::Addressable::URI.new(scheme: 'file', path: found_path.to_path)
22
+ end
23
+ else
24
+ [to_addressable]
25
+ end
26
+ end
27
+
23
28
  def to_addressable_uncached
24
29
  r = ::Addressable::URI.parse(source)
25
30
  path = r.path.to_pathname
@@ -34,5 +39,7 @@ module EacConfig
34
39
 
35
40
  r.to_pathname.parent
36
41
  end
42
+
43
+ require_sub __FILE__, require_mode: :kernel
37
44
  end
38
45
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacConfig
4
- VERSION = '0.12.0'
4
+ VERSION = '0.14.0'
5
5
  end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_config/entry_path'
4
+ require 'eac_config/yaml_file_node/entry'
5
+ require 'eac_ruby_utils/core_ext'
6
+ require 'eac_ruby_utils/wildcards'
7
+
8
+ module EacConfig
9
+ class YamlFileNode
10
+ class SelfEntries
11
+ acts_as_instance_method
12
+ common_constructor :node, :path do
13
+ self.path = ::EacConfig::EntryPath.assert(path)
14
+ end
15
+
16
+ # @return [Array<EacConfig::YamlFileNode>]
17
+ def result
18
+ head_node.result.map { |found_path| ::EacConfig::YamlFileNode::Entry.new(node, found_path) }
19
+ end
20
+
21
+ private
22
+
23
+ # @return [DataNode]
24
+ def head_node
25
+ DataNode.new(node.data, ::EacConfig::EntryPath.new, path)
26
+ end
27
+
28
+ class DataNode
29
+ common_constructor :data_node, :path_from, :path_to do
30
+ self.data_node = data_node.stringify_keys if data_node.is_a?(::Hash)
31
+ end
32
+
33
+ # @return [DataNode]
34
+ def child(child_key)
35
+ self.class.new(data_node.fetch(child_key), path_from.with_last(child_key),
36
+ path_to.without_first)
37
+ end
38
+
39
+ def children
40
+ return [] unless data_node.is_a?(::Hash)
41
+
42
+ data_node.keys.select { |k| key_matcher.match?(k) }.map { |k| child(k) }
43
+ end
44
+
45
+ # @return [Symbol]
46
+ def key
47
+ path_to.first
48
+ end
49
+
50
+ # @return [EacRubyUtils::Wildcards]
51
+ def key_matcher
52
+ @key_matcher ||= ::EacRubyUtils::Wildcards.new(key)
53
+ end
54
+
55
+ # @return [Array<EacConfig::EntryPath>]
56
+ def result
57
+ (path_to.empty? ? result_from_self : result_from_children)
58
+ end
59
+
60
+ # @return [Array<EacConfig::EntryPath>]
61
+ def result_from_self
62
+ [path_from]
63
+ end
64
+
65
+ # @return [Array<EacConfig::EntryPath>]
66
+ def result_from_children
67
+ children.flat_map(&:result)
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -20,6 +20,7 @@ module EacConfig
20
20
  common_constructor :path do
21
21
  self.path = path.to_pathname
22
22
  end
23
+ compare_by :path
23
24
 
24
25
  def persist_data(new_data)
25
26
  path.parent.mkpath
@@ -47,5 +48,7 @@ module EacConfig
47
48
 
48
49
  r.is_a?(::Hash) ? r : {}
49
50
  end
51
+
52
+ require_sub __FILE__, require_mode: :kernel
50
53
  end
51
54
  end