avm 0.33.0 → 0.34.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/avm/registry/source_generators.rb +3 -2
- data/lib/avm/source_generators/base.rb +16 -1
- data/lib/avm/source_generators/option.rb +11 -0
- data/lib/avm/source_generators/option_list.rb +32 -0
- data/lib/avm/source_generators/runner.rb +52 -0
- data/lib/avm/sources/runner.rb +38 -0
- data/lib/avm/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f010253f1247e81a5935385a2c1070e5d4217948b31258c5e4286d3b1453fee
|
4
|
+
data.tar.gz: 000a1a2a76b966b3f353c251cbb8ded41cf9719cf9b13f056f768d6a16d6c377
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9f61d3c21cef4aaed1a8c5c4eecbcc20aab3247c8a28098f0aefff9818a578bb3e8450aff34b9b1bcced1ecbbb58ce3f011ee426d470e51cb840396fd98a8d8
|
7
|
+
data.tar.gz: c6019a2b01b64630a9c61d870e48d35a3e4ded56c6e67e1be74fdfa524d7700c72b55cae69a188ac1f3df318c8a0d7aca87c1eac7eda5f0f4b2be807c6da8069
|
@@ -8,8 +8,9 @@ module Avm
|
|
8
8
|
class SourceGenerators < ::Avm::Registry::FromGems
|
9
9
|
# @return [Avm::Instances::Base, nil]
|
10
10
|
def class_detect(klass, detect_args)
|
11
|
-
|
12
|
-
|
11
|
+
detect_args = detect_args.dup
|
12
|
+
stereotype_name = detect_args.shift
|
13
|
+
klass.application_stereotype.name == stereotype_name ? klass.new(*detect_args) : nil
|
13
14
|
end
|
14
15
|
end
|
15
16
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'avm/source_generators/option_list'
|
3
4
|
require 'avm/with/application_stereotype'
|
4
5
|
require 'eac_ruby_utils/core_ext'
|
5
6
|
|
@@ -7,8 +8,22 @@ module Avm
|
|
7
8
|
module SourceGenerators
|
8
9
|
class Base
|
9
10
|
include ::Avm::With::ApplicationStereotype
|
10
|
-
|
11
|
+
|
12
|
+
class << self
|
13
|
+
# @return [Avm::SourceGenerators::OptionList]
|
14
|
+
def option_list
|
15
|
+
Avm::SourceGenerators::OptionList.new
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
common_constructor :target_path, :options, default: [{}] do
|
11
20
|
self.target_path = target_path.to_pathname
|
21
|
+
self.options = option_list.validate(options)
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Avm::SourceGenerators::OptionList]
|
25
|
+
def option_list
|
26
|
+
self.class.option_list
|
12
27
|
end
|
13
28
|
|
14
29
|
def perform
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/source_generators/option'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module SourceGenerators
|
8
|
+
class OptionList
|
9
|
+
enable_immutable
|
10
|
+
immutable_accessor :option, type: :array
|
11
|
+
|
12
|
+
alias immutable_option option
|
13
|
+
|
14
|
+
def option(*args)
|
15
|
+
immutable_option(::Avm::SourceGenerators::Option.new(*args))
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [Hash<Symbol, String>]
|
19
|
+
def validate(options_hash)
|
20
|
+
options_hash.transform_keys { |k| validate_option(k) }
|
21
|
+
end
|
22
|
+
|
23
|
+
def validate_option(option_name)
|
24
|
+
option_name = option_name.to_sym
|
25
|
+
|
26
|
+
return option_name if options.any? { |option| option.name == option_name }
|
27
|
+
|
28
|
+
raise "No option found with name \"#{option_name}\""
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/registry'
|
4
|
+
require 'eac_cli/core_ext'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module SourceGenerators
|
8
|
+
class Runner
|
9
|
+
OPTION_NAME_VALUE_SEPARATOR = ':'
|
10
|
+
|
11
|
+
runner_with :help do
|
12
|
+
arg_opt '-o', '--option', 'Option for generator.', repeat: true, optional: true
|
13
|
+
pos_arg :stereotype_name
|
14
|
+
pos_arg :target_path
|
15
|
+
end
|
16
|
+
|
17
|
+
def run
|
18
|
+
start_banner
|
19
|
+
generate
|
20
|
+
end
|
21
|
+
|
22
|
+
def generate
|
23
|
+
infom 'Generating...'
|
24
|
+
generator.perform
|
25
|
+
success "Source generated in \"#{generator.target_path}\""
|
26
|
+
end
|
27
|
+
|
28
|
+
def start_banner
|
29
|
+
infov 'Stereotype', stereotype_name
|
30
|
+
infov 'Target path', target_path
|
31
|
+
infov 'Generator', generator.class
|
32
|
+
end
|
33
|
+
|
34
|
+
def generator_uncached
|
35
|
+
::Avm::Registry.source_generators
|
36
|
+
.detect_optional(stereotype_name, target_path, options) ||
|
37
|
+
fatal_error("No generator found for stereotype \"#{stereotype_name}\"")
|
38
|
+
end
|
39
|
+
|
40
|
+
delegate :stereotype_name, to: :parsed
|
41
|
+
|
42
|
+
# @return [Hash<String, String>]
|
43
|
+
def options
|
44
|
+
parsed.option.map { |v| v.split(OPTION_NAME_VALUE_SEPARATOR) }.to_h
|
45
|
+
end
|
46
|
+
|
47
|
+
def target_path
|
48
|
+
parsed.target_path.to_pathname
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_cli/core_ext'
|
4
|
+
|
5
|
+
module Avm
|
6
|
+
module Sources
|
7
|
+
class Runner
|
8
|
+
runner_with :help, :subcommands do
|
9
|
+
desc 'Root command for sources.'
|
10
|
+
arg_opt '-C', '--path', 'Path to the source.', default: '.'
|
11
|
+
subcommands
|
12
|
+
end
|
13
|
+
|
14
|
+
def extra_available_subcommands
|
15
|
+
optional_source.if_present({}, &:extra_available_subcommands)
|
16
|
+
end
|
17
|
+
|
18
|
+
def source_banner
|
19
|
+
infov 'Source', source
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Pathname]
|
23
|
+
def source_path
|
24
|
+
parsed.path.to_pathname
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def source_uncached
|
30
|
+
::Avm::Registry.sources.detect(source_path)
|
31
|
+
end
|
32
|
+
|
33
|
+
def optional_source_uncached
|
34
|
+
::Avm::Registry.sources.detect_optional(source_path)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/avm/version.rb
CHANGED
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.
|
4
|
+
version: 0.34.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-08-
|
11
|
+
date: 2022-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eac_cli
|
@@ -272,6 +272,9 @@ files:
|
|
272
272
|
- lib/avm/self/instance/entry_keys.rb
|
273
273
|
- lib/avm/source_generators.rb
|
274
274
|
- lib/avm/source_generators/base.rb
|
275
|
+
- lib/avm/source_generators/option.rb
|
276
|
+
- lib/avm/source_generators/option_list.rb
|
277
|
+
- lib/avm/source_generators/runner.rb
|
275
278
|
- lib/avm/sources.rb
|
276
279
|
- lib/avm/sources/base.rb
|
277
280
|
- lib/avm/sources/base/configuration.rb
|
@@ -283,6 +286,7 @@ files:
|
|
283
286
|
- lib/avm/sources/base/testing.rb
|
284
287
|
- lib/avm/sources/configuration.rb
|
285
288
|
- lib/avm/sources/configuration/rubocop.rb
|
289
|
+
- lib/avm/sources/runner.rb
|
286
290
|
- lib/avm/sources/tests.rb
|
287
291
|
- lib/avm/sources/tests/builder.rb
|
288
292
|
- lib/avm/sources/tests/performer.rb
|