avm 0.27.0 → 0.30.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e8acabcae2be2a5ede0d16f23948a2fde0073eadcb0aa4affec5af992db9ee9
4
- data.tar.gz: e2a626b43d125f5f3c79173753e8a94edf8d1894aca17ba5299a94a5e9f3639c
3
+ metadata.gz: 056fb39001835d22921692f1801a184d8b94852259e282520eb992ce5ffa29f4
4
+ data.tar.gz: 4f951bd5a35dfe20f25c27f67e7c6ee6c1db3cc4a6d9a8529d614b57bd655cee
5
5
  SHA512:
6
- metadata.gz: 758bf21073943b0e38cb7dccd36592220a6b55c4286e37be1b7fd33cb4476d3d4d72a3e4d097b64b2aad6a0790685ebf89460d51ecbe4bd60334051cd6a4af26
7
- data.tar.gz: 827a1b04ef6b93dface81cf9d6e1c30f78d4b60fa3246a35147f124acbcc57839f7b26302b977fab10ddd9189894ab3536108d244c1920fa0f43c71fbbed8123
6
+ metadata.gz: 69a12b474da5a2aa07e41250569f4ce0786e51800958157b6d437a74480f5244e5f2846ca7b8ee2c495a5907adf8c7d289f7eef8e313244cc8ccc8f2066ef29e
7
+ data.tar.gz: a52eb72873f40f8fe55ed3009ecb3b3914512f8a17159f1dbed1aeda3383d76911947c7eef2ccb7a33af1a3c8294ee0767f18a6dc4a03cf78a8faa1f9f998325
@@ -5,7 +5,11 @@ require 'eac_ruby_utils/core_ext'
5
5
  module Avm
6
6
  module ApplicationStereotypes
7
7
  class Base
8
- common_constructor :namespace_module, :instance_class, :source_class
8
+ enable_listable
9
+ lists.add_symbol :resource, :instance, :source, :source_generator
10
+ common_constructor :namespace_module, :resources do
11
+ self.resources = self.class.lists.resource.hash_keys_validate!(resources)
12
+ end
9
13
 
10
14
  # @return [String]
11
15
  def name
@@ -16,6 +20,12 @@ module Avm
16
20
  def to_s
17
21
  name
18
22
  end
23
+
24
+ lists.resource.each_value do |resource|
25
+ define_method "#{resource}_class" do
26
+ resources[resource]
27
+ end
28
+ end
19
29
  end
20
30
  end
21
31
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/registry'
4
+
5
+ module Avm
6
+ module Applications
7
+ class Base
8
+ module Stereotype
9
+ # @return [Avm::ApplicationStereotypes::Base, nil]
10
+ def stereotype_by_configuration
11
+ entry('stereotype').optional_value.if_present do |v|
12
+ ::Avm::Registry.application_stereotypes.detect(v)
13
+ end
14
+ end
15
+
16
+ # @return [Avm::ApplicationStereotypes::Base, nil]
17
+ def stereotype_by_source
18
+ ::Avm::Registry.application_stereotypes.detect_optional(local_source.class)
19
+ end
20
+
21
+ private
22
+
23
+ # @return [Avm::ApplicationStereotypes::Base]
24
+ def stereotype_uncached
25
+ stereotype_by_configuration || stereotype_by_source ||
26
+ raise("Could not find stereotype for application \"#{self}\"")
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,13 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'avm/instances/entries'
4
+ require 'avm/registry'
4
5
  require 'eac_ruby_utils/core_ext'
5
6
 
6
7
  module Avm
7
8
  module Applications
8
9
  class Base
10
+ enable_simple_cache
11
+ require_sub __FILE__, include_modules: true
9
12
  include ::Avm::Instances::Entries
10
13
 
14
+ LOCAL_INSTANCE_SUFFIX = 'dev'
15
+
11
16
  common_constructor :id do
12
17
  self.id = id.to_s
13
18
  end
@@ -23,6 +28,18 @@ module Avm
23
28
  def name
24
29
  entry(::Avm::Instances::EntryKeys::NAME).read
25
30
  end
31
+
32
+ private
33
+
34
+ # @return [Avm::Instances::Base]
35
+ def local_instance_uncached
36
+ instance(LOCAL_INSTANCE_SUFFIX)
37
+ end
38
+
39
+ # @return [Avm::Sources::Base]
40
+ def local_source_uncached
41
+ ::Avm::Registry.sources.detect(local_instance.fs_path)
42
+ end
26
43
  end
27
44
  end
28
45
  end
@@ -3,16 +3,26 @@
3
3
  require 'avm/version'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
  require 'eac_docker/images/templatized'
6
+ require 'eac_docker/registry'
6
7
 
7
8
  module Avm
8
9
  module Docker
9
10
  class Image < ::EacDocker::Images::Templatized
11
+ DEFAULT_REGISTRY_NAME = 'local'
12
+
13
+ class << self
14
+ # @return [EacDocker::Registry]
15
+ def default_registry
16
+ ::EacDocker::Registry.new(DEFAULT_REGISTRY_NAME)
17
+ end
18
+ end
19
+
10
20
  attr_reader :registry
11
21
  attr_accessor :snapshot
12
22
  attr_accessor :version
13
23
 
14
- def initialize(registry)
15
- @registry = registry
24
+ def initialize(registry = nil)
25
+ @registry = registry || self.class.default_registry
16
26
  self.snapshot = true
17
27
  self.version = true
18
28
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avm/application_stereotypes/base'
3
4
  require 'avm/registry/application_stereotypes/stereotype_builder'
4
5
  require 'eac_ruby_utils/core_ext'
5
6
 
@@ -13,8 +14,7 @@ module Avm
13
14
 
14
15
  def result
15
16
  reset_buffer
16
- read_instances_registry
17
- read_sources_registry
17
+ read_registries
18
18
  buffer.values.map(&:build)
19
19
  end
20
20
 
@@ -29,12 +29,15 @@ module Avm
29
29
  buffer[object.stereotype_namespace_module].add_object(type, object)
30
30
  end
31
31
 
32
- def read_instances_registry
33
- ::Avm::Registry.instances.available.each { |instance| read_object(:instance, instance) }
32
+ def read_registries
33
+ ::Avm::ApplicationStereotypes::Base.lists.resource.each_value do |resource|
34
+ read_registry(resource)
35
+ end
34
36
  end
35
37
 
36
- def read_sources_registry
37
- ::Avm::Registry.sources.available.each { |source| read_object(:source, source) }
38
+ def read_registry(resource)
39
+ ::Avm::Registry.send(resource.to_s.pluralize).available
40
+ .each { |obj| read_object(resource, obj) }
38
41
  end
39
42
 
40
43
  def reset_buffer
@@ -10,20 +10,23 @@ module Avm
10
10
  common_constructor :namespace_module
11
11
 
12
12
  def add_object(type, object)
13
- attr_method = "#{type}_class"
14
- raise "#{attr_method} is already present" if send(attr_method).present?
13
+ type = type.to_sym
14
+ raise "#{attr_method} is already present" if resources.key?(type)
15
15
 
16
- send("#{attr_method}=", object)
16
+ resources[::Avm::ApplicationStereotypes::Base.lists.resource.value_validate!(type)] =
17
+ object
17
18
  end
18
19
 
19
20
  # @return [Avm::ApplicationStereotypes::Base]
20
21
  def build
21
- ::Avm::ApplicationStereotypes::Base.new(namespace_module, instance_class, source_class)
22
+ ::Avm::ApplicationStereotypes::Base.new(namespace_module, resources)
22
23
  end
23
24
 
24
25
  private
25
26
 
26
- attr_accessor :instance_class, :source_class
27
+ def resources
28
+ @resources ||= {}
29
+ end
27
30
  end
28
31
  end
29
32
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avm/instances/base'
4
+ require 'avm/sources/base'
3
5
  require 'eac_ruby_utils/core_ext'
4
6
 
5
7
  module Avm
@@ -10,26 +12,40 @@ module Avm
10
12
 
11
13
  common_constructor :module_suffix
12
14
 
15
+ def detect(obj)
16
+ detect_optional(obj) || raise_not_found(obj)
17
+ end
18
+
19
+ def detect_optional(obj)
20
+ detect_by_instance_class(obj) || detect_by_source_class(obj) || detecy_by_name(obj)
21
+ end
22
+
13
23
  private
14
24
 
15
25
  def available_uncached
16
26
  build_available
17
27
  end
18
28
 
19
- # @return [Avm::Instances::Base, nil]
20
- def class_detect(klass, detect_args)
21
- r = ::Avm::Instances::Base.by_id(*detect_args)
22
- r.application.stereotype.instance_class == klass ? r : nil
29
+ def detect_by_instance_class(obj)
30
+ return nil unless obj.is_a?(::Class) && obj < ::Avm::Instances::Base
31
+
32
+ available.find { |a| a.instance_class == obj }
23
33
  end
24
34
 
25
- def detect(*registered_initialize_args)
26
- detect_optional(*registered_initialize_args) ||
27
- raise_not_found(*registered_initialize_args)
35
+ def detecy_by_name(obj)
36
+ return nil unless obj.is_a?(::String)
37
+
38
+ available.find { |a| a.name == obj }
39
+ end
40
+
41
+ def detect_by_source_class(obj)
42
+ return nil unless obj.is_a?(::Class) && obj < ::Avm::Sources::Base
43
+
44
+ available.find { |a| a.source_class == obj }
28
45
  end
29
46
 
30
- def detect_optional(*registered_initialize_args)
31
- registered_modules.reverse.lazy
32
- .map { |klass| class_detect(klass, registered_initialize_args) }.find(&:present?)
47
+ def raise_not_found(obj)
48
+ raise("No registered module valid for #{obj} (Available: #{available.join(', ')})")
33
49
  end
34
50
  end
35
51
  end
@@ -9,7 +9,7 @@ module Avm
9
9
  # @return [Avm::Instances::Base, nil]
10
10
  def class_detect(klass, detect_args)
11
11
  r = ::Avm::Instances::Base.by_id(*detect_args)
12
- r.application.stereotype.instance_class == klass ? r : nil
12
+ r.application.stereotype.instance_class == klass ? klass.by_id(*detect_args) : nil
13
13
  end
14
14
  end
15
15
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/instances/base'
4
+ require 'avm/registry/from_gems'
5
+
6
+ module Avm
7
+ module Registry
8
+ class SourceGenerators < ::Avm::Registry::FromGems
9
+ # @return [Avm::Instances::Base, nil]
10
+ def class_detect(klass, detect_args)
11
+ stereotype_name, target_path = detect_args
12
+ klass.application_stereotype.name == stereotype_name ? klass.new(target_path) : nil
13
+ end
14
+ end
15
+ end
16
+ end
data/lib/avm/registry.rb CHANGED
@@ -7,7 +7,8 @@ module Avm
7
7
  module Registry
8
8
  require_sub __FILE__
9
9
  enable_listable
10
- lists.add_symbol :category, :application_stereotypes, :instances, :runners, :scms, :sources
10
+ lists.add_symbol :category, :application_stereotypes, :instances, :runners, :scms,
11
+ :source_generators, :sources
11
12
 
12
13
  WITH_PATH = [CATEGORY_SCMS, CATEGORY_SOURCES].freeze
13
14
 
data/lib/avm/scms/base.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avm/with_application_stereotype'
3
4
  require 'eac_ruby_utils/core_ext'
4
5
 
5
6
  module Avm
@@ -7,6 +8,7 @@ module Avm
7
8
  class Base
8
9
  enable_abstract_methods
9
10
  enable_simple_cache
11
+ include ::Avm::WithApplicationStereotype
10
12
  abstract_methods :update, :valid?
11
13
  common_constructor :path do
12
14
  self.path = path.to_pathname
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/with_application_stereotype'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module SourceGenerators
8
+ class Base
9
+ include ::Avm::WithApplicationStereotype
10
+ common_constructor :target_path do
11
+ self.target_path = target_path.to_pathname
12
+ end
13
+
14
+ def perform
15
+ assert_clear_directory
16
+ apply_template
17
+ end
18
+
19
+ def assert_clear_directory
20
+ target_path.mkpath
21
+ raise "\"#{target_path}\" is not empty" if target_path.children.any?
22
+ end
23
+
24
+ def apply_template
25
+ template.apply(self, target_path)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module SourceGenerators
7
+ require_sub __FILE__
8
+ end
9
+ end
data/lib/avm/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Avm
4
- VERSION = '0.27.0'
4
+ VERSION = '0.30.0'
5
5
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_cli/runner_with/subcommands'
4
3
  require 'eac_ruby_utils/core_ext'
5
4
 
6
5
  module Avm
@@ -10,6 +9,17 @@ module Avm
10
9
  end
11
10
 
12
11
  module ClassMethods
12
+ # @return [Avm::ApplicationStereotype::Base]
13
+ def application_stereotype
14
+ @application_stereotype ||=
15
+ ::Avm::Registry.application_stereotypes.detect(application_stereotype_name)
16
+ end
17
+
18
+ # @return [String]
19
+ def application_stereotype_name
20
+ stereotype_namespace_module.name.demodulize
21
+ end
22
+
13
23
  # @return [Module]
14
24
  def stereotype_namespace_module
15
25
  module_parent.module_parent
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.0
4
+ version: 0.30.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo H. Bogoni
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-22 00:00:00.000000000 Z
11
+ date: 2022-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_cli
@@ -197,10 +197,9 @@ files:
197
197
  - lib/avm.rb
198
198
  - lib/avm/application_stereotypes.rb
199
199
  - lib/avm/application_stereotypes/base.rb
200
- - lib/avm/application_stereotypes/base/by_gem.rb
201
- - lib/avm/application_stereotypes/base/detection.rb
202
200
  - lib/avm/applications.rb
203
201
  - lib/avm/applications/base.rb
202
+ - lib/avm/applications/base/stereotype.rb
204
203
  - lib/avm/data/instance.rb
205
204
  - lib/avm/data/instance/files_unit.rb
206
205
  - lib/avm/data/instance/package.rb
@@ -251,6 +250,7 @@ files:
251
250
  - lib/avm/registry/instances.rb
252
251
  - lib/avm/registry/runners.rb
253
252
  - lib/avm/registry/scms.rb
253
+ - lib/avm/registry/source_generators.rb
254
254
  - lib/avm/registry/sources.rb
255
255
  - lib/avm/registry/with_path.rb
256
256
  - lib/avm/registry/with_path/cache.rb
@@ -267,6 +267,8 @@ files:
267
267
  - lib/avm/self/docker_image.rb
268
268
  - lib/avm/self/instance.rb
269
269
  - lib/avm/self/instance/entry_keys.rb
270
+ - lib/avm/source_generators.rb
271
+ - lib/avm/source_generators/base.rb
270
272
  - lib/avm/sources.rb
271
273
  - lib/avm/sources/base.rb
272
274
  - lib/avm/sources/base/configuration.rb
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Avm
4
- module ApplicationStereotypes
5
- class Base
6
- module ByGem
7
- common_concern
8
-
9
- module ClassMethods
10
- def by_gem(gem_name)
11
- new(gem_name.gsub('-', '/').camelize)
12
- end
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Avm
4
- module ApplicationStereotypes
5
- class Base
6
- module Detection
7
- common_concern
8
-
9
- module ClassMethods
10
- # @return [Class<Avm::Sources::Base>, nil]
11
- def detect(object)
12
- return singleton_instance if
13
- %w[name instance_class source_class].any? { |t| send("detect_by_#{t}?", object) }
14
- end
15
-
16
- # @return [Boolean]
17
- def detect_by_instance_class?(object)
18
- object.is_a?(::Class) && singleton_instance.instance_class == object
19
- end
20
-
21
- # @return [Boolean]
22
- def detect_by_name?(object)
23
- object.is_a?(::String) && singleton_instance.name == object
24
- end
25
-
26
- # @return [Boolean]
27
- def detect_by_source_class?(object)
28
- object.is_a?(::Class) && singleton_instance.source_class == object
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end