avm 0.3.2 → 0.4.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: 664fd8172f0c55acb9025054087777483a8442028c94cf287fa4c868e9dcb19b
4
- data.tar.gz: 4d7bd04f6ee20c46b1abbbebe2cab10a3cf786cb4b34a557cf157d72d565b2a7
3
+ metadata.gz: 0a5a8832847c76afcae4e76ef3e8f7d1391d7cfb0b13788c3dc7273f9ef879f1
4
+ data.tar.gz: 0b89bd147edb92e0e3e4d158d16f0995ef41f0544a680beb053f9fa55b96a282
5
5
  SHA512:
6
- metadata.gz: '08719226470ae5fd2c38ae2c9afd83e259a1f9517f17c8e2c18ffd56b7ae8cee593097d2e1afbf82dfeb05125c208c02ff4b71cae5eed858c7ad213a66c22d0d'
7
- data.tar.gz: 4b7cc1247fb8bcb7f289a28f6b1be1dcb7249e28286b02450ad17d830599347b52a26e00e800c3d714e6bb05a1dab614b57c9e675c04299fa4307be322f6a61c
6
+ metadata.gz: a70af189af9aee66a693706ba031e5eb7c6d4c8533144099f325dfe2b88b9ef08daae16de8d2f09857f194816d653d3669527d6bc9c07d173566c9ab9121c3f6
7
+ data.tar.gz: d66a1741ec6295f54166a2007a4d168eddd4e7de30f538f87329067b580faf2572514d99302bb467e0b408dfe1a44dd54a9e4e2abaaed0292b3a7ba69bb02b95
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_git'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module AppSrc
8
+ class Base
9
+ enable_simple_cache
10
+ enable_listable
11
+ lists.add_symbol :option, :parent
12
+ common_constructor :path, :options, default: [{}] do
13
+ self.path = path.to_pathname
14
+ self.options = self.class.lists.option.hash_keys_validate!(options)
15
+ end
16
+
17
+ delegate :to_s, to: :path
18
+
19
+ # @return [Avm::AppSrc::Base]
20
+ def parent
21
+ options[OPTION_PARENT]
22
+ end
23
+
24
+ # @return [Pathname]
25
+ def relative_path
26
+ return path if parent.blank?
27
+
28
+ path.relative_path_from(parent.path)
29
+ end
30
+
31
+ # @return [Enumerable<Avm::AppSrc::Base>]
32
+ def subs
33
+ git_repo.subrepos
34
+ .map { |subrepo| self.class.new(subrepo.subpath.expand_path(path), parent: self) }
35
+ end
36
+
37
+ private
38
+
39
+ # @return [EacGit::Local]
40
+ def git_repo_uncached
41
+ ::EacGit::Local.new(path)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/patches/eac_ruby_gems_utils/gem'
4
+ require 'i18n'
5
+
6
+ module Avm
7
+ module AppSrc
8
+ class Configuration < ::EacConfig::OldConfigs
9
+ LOCALE_KEY = :locale
10
+
11
+ def locale
12
+ read_entry(LOCALE_KEY) || ::I18n.default_locale
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module AppSrc
5
+ class Configuration < ::EacConfig::OldConfigs
6
+ RUBOCOP_COMMAND_KEY = 'ruby.rubocop.command'
7
+ RUBOCOP_GEMFILE_KEY = 'ruby.rubocop.gemfile'
8
+
9
+ def rubocop_command
10
+ read_command(RUBOCOP_COMMAND_KEY)
11
+ end
12
+
13
+ def rubocop_gemfile
14
+ gemfile_path = read_entry(RUBOCOP_GEMFILE_KEY)
15
+ return nil if gemfile_path.blank?
16
+
17
+ gemfile_path = gemfile_path.to_pathname.expand_path(storage_path.parent)
18
+ return gemfile_path if gemfile_path.file?
19
+
20
+ raise "Gemfile path \"#{gemfile_path}\" does not exist or is not a file"
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/patches/eac_ruby_gems_utils/gem'
4
+
5
+ module Avm
6
+ module AppSrc
7
+ class Configuration < ::EacConfig::OldConfigs
8
+ BUNDLE_TEST_COMMAND_KEY = 'test.bundle_command'
9
+ TEST_COMMAND_KEY = 'test.command'
10
+
11
+ def any_test_command
12
+ bundle_test_command || test_command
13
+ end
14
+
15
+ def test_command
16
+ read_command(TEST_COMMAND_KEY)
17
+ end
18
+
19
+ def bundle_test_command
20
+ read_entry(BUNDLE_TEST_COMMAND_KEY).if_present do |v|
21
+ args = v.is_a?(::Enumerable) ? v.map(&:to_s) : ::Shellwords.split(v)
22
+ ::EacRubyGemsUtils::Gem.new(::File.dirname(storage_path)).bundle(*args).chdir_root
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_config/old_configs'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'yaml'
6
+
7
+ module Avm
8
+ module AppSrc
9
+ class Configuration < ::EacConfig::OldConfigs
10
+ require_sub __FILE__
11
+
12
+ FILENAMES = %w[.avm.yml .avm.yaml].freeze
13
+
14
+ class << self
15
+ def find_by_path(path)
16
+ path = ::Pathname.new(path.to_s) unless path.is_a?(::Pathname)
17
+ internal_find_path(path.expand_path)
18
+ end
19
+
20
+ def find_in_path(path)
21
+ absolute_pathname = path.to_pathname.expand_path
22
+ if absolute_pathname.directory?
23
+ FILENAMES.each do |filename|
24
+ file = absolute_pathname.join(filename)
25
+ return new(file) if file.exist?
26
+ end
27
+ end
28
+ nil
29
+ end
30
+
31
+ private
32
+
33
+ def internal_find_path(absolute_pathname)
34
+ r = find_in_path(absolute_pathname)
35
+ return r if r.present?
36
+
37
+ internal_find_path(absolute_pathname.dirname) unless absolute_pathname.root?
38
+ end
39
+ end
40
+
41
+ def initialize(path)
42
+ super(nil, storage_path: path)
43
+ end
44
+
45
+ # Utility to read a configuration as a [EacRubyUtils::Envs::Command].
46
+ # @return [EacRubyUtils::Envs::Command]
47
+ def read_command(key)
48
+ read_entry(key).if_present do |v|
49
+ args = v.is_a?(::Enumerable) ? v.map(&:to_s) : ::Shellwords.split(v)
50
+ ::EacRubyUtils::Envs.local.command(args).chdir(::File.dirname(storage_path))
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module AppSrc
7
+ require_sub __FILE__
8
+ end
9
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/files/info'
3
+ require 'eac_fs/file_info'
4
4
  require 'ostruct'
5
5
 
6
6
  module Avm
@@ -50,7 +50,7 @@ module Avm
50
50
  end
51
51
 
52
52
  def match_by_type?(file)
53
- info = ::Avm::Files::Info.new(file)
53
+ info = ::EacFs::FileInfo.new(file)
54
54
  return unless info.content_type.type == 'text'
55
55
 
56
56
  valid_types.include?(info.content_type.subtype)
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avm/executables'
3
4
  require 'avm/files/formatter/formats/generic_plain'
4
5
 
5
6
  module Avm
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avm/executables'
3
4
  require 'avm/files/formatter/formats/generic_plain'
4
5
 
5
6
  module Avm
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avm/executables'
3
4
  require 'avm/files/formatter/formats/generic_plain'
4
5
 
5
6
  module Avm
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avm/executables'
3
4
  require 'avm/files/formatter/formats/generic_plain'
4
5
 
5
6
  module Avm
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/files/info'
3
+ require 'eac_fs/file_info'
4
4
 
5
5
  module Avm
6
6
  module Files
@@ -39,7 +39,7 @@ module Avm
39
39
  private
40
40
 
41
41
  def original_info_uncached
42
- ::Avm::Files::Info.new(path)
42
+ ::EacFs::FileInfo.new(path)
43
43
  end
44
44
 
45
45
  def original_charset_uncached
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/apps/sources/configuration'
3
+ require 'avm/app_src/configuration'
4
4
  require 'avm/result'
5
5
  require 'eac_ruby_utils/fs/temp'
6
6
 
@@ -36,7 +36,7 @@ module Avm
36
36
  end
37
37
 
38
38
  def configuration_uncached
39
- ::Avm::Apps::Sources::Configuration.find_by_path(@git)
39
+ ::Avm::AppSrc::Configuration.find_by_path(@git)
40
40
  end
41
41
  end
42
42
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/fs_cache'
4
3
  require 'eac_ruby_utils/core_ext'
5
4
  require 'eac_ruby_utils/ruby'
6
5
 
@@ -53,8 +52,8 @@ module Avm
53
52
  end
54
53
 
55
54
  def root_cache
56
- ::Avm.fs_cache.child('git', 'revision_test', git_absolute_path.parameterize, sha1,
57
- options.fetch(:test_command).to_s.parameterize)
55
+ fs_cache.child(git_absolute_path.parameterize, sha1,
56
+ options.fetch(:test_command).to_s.parameterize)
58
57
  end
59
58
 
60
59
  def run_test
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/jobs/variables_source'
4
+ require 'eac_cli/core_ext'
5
+
6
+ module Avm
7
+ module Jobs
8
+ module Base
9
+ common_concern do
10
+ include ::ActiveSupport::Callbacks
11
+
12
+ enable_speaker
13
+ enable_simple_cache
14
+ enable_listable
15
+ common_constructor :instance, :options, default: [{}] do
16
+ if option_list.present?
17
+ self.options = option_list.hash_keys_validate!(options.symbolize_keys)
18
+ end
19
+ end
20
+ define_callbacks(*jobs)
21
+ end
22
+
23
+ module ClassMethods
24
+ def jobs
25
+ const_get('JOBS').dup
26
+ end
27
+ end
28
+
29
+ module InstanceMethods
30
+ def option_list
31
+ nil
32
+ end
33
+
34
+ def run
35
+ start_banner if respond_to?(:start_banner)
36
+ run_jobs
37
+ ::Avm::Result.success('Done!')
38
+ rescue ::Avm::Result::Error => e
39
+ e.to_result
40
+ end
41
+
42
+ def variables_source
43
+ ::Avm::Jobs::VariablesSource.new(self, instance)
44
+ end
45
+
46
+ protected
47
+
48
+ def run_jobs
49
+ jobs.each do |job|
50
+ run_callbacks job do
51
+ send(job)
52
+ end
53
+ end
54
+ end
55
+
56
+ def jobs
57
+ self.class.jobs
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Jobs
7
+ class VariablesSource
8
+ common_constructor :job, :instance
9
+
10
+ def read_entry(path, options = {})
11
+ entry_from_job(path) || instance.read_entry(path, options)
12
+ end
13
+
14
+ private
15
+
16
+ def entry_from_job(path)
17
+ method = path.gsub('.', '_').underscore
18
+ return job.send(method) if job.respond_to?(method, true)
19
+ end
20
+ end
21
+ end
22
+ end
data/lib/avm/jobs.rb ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Jobs
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.3.2'
4
+ VERSION = '0.4.0'
5
5
  end
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.3.2
4
+ version: 0.4.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: 2021-09-06 00:00:00.000000000 Z
11
+ date: 2021-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_docker
@@ -72,6 +72,54 @@ dependencies:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: 0.1.1
75
+ - !ruby/object:Gem::Dependency
76
+ name: filesize
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.2'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.2'
89
+ - !ruby/object:Gem::Dependency
90
+ name: htmlbeautifier
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.3'
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: 1.3.1
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - "~>"
104
+ - !ruby/object:Gem::Version
105
+ version: '1.3'
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: 1.3.1
109
+ - !ruby/object:Gem::Dependency
110
+ name: minitar
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: '0.9'
116
+ type: :runtime
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: '0.9'
75
123
  - !ruby/object:Gem::Dependency
76
124
  name: aranha-parsers
77
125
  requirement: !ruby/object:Gem::Requirement
@@ -113,6 +161,12 @@ extensions: []
113
161
  extra_rdoc_files: []
114
162
  files:
115
163
  - lib/avm.rb
164
+ - lib/avm/app_src.rb
165
+ - lib/avm/app_src/base.rb
166
+ - lib/avm/app_src/configuration.rb
167
+ - lib/avm/app_src/configuration/_locale.rb
168
+ - lib/avm/app_src/configuration/_rubocop.rb
169
+ - lib/avm/app_src/configuration/_tests.rb
116
170
  - lib/avm/docker.rb
117
171
  - lib/avm/docker/container.rb
118
172
  - lib/avm/docker/image.rb
@@ -139,7 +193,6 @@ files:
139
193
  - lib/avm/files/formatter/formats/ruby.rb
140
194
  - lib/avm/files/formatter/formats/xml.rb
141
195
  - lib/avm/files/formatter/utf8_assert.rb
142
- - lib/avm/files/info.rb
143
196
  - lib/avm/files/rotate.rb
144
197
  - lib/avm/git.rb
145
198
  - lib/avm/git/auto_commit/commit_info.rb
@@ -183,6 +236,9 @@ files:
183
236
  - lib/avm/git/subrepo_check/show_result.rb
184
237
  - lib/avm/git/subrepo_checks.rb
185
238
  - lib/avm/instances/docker_image.rb
239
+ - lib/avm/jobs.rb
240
+ - lib/avm/jobs/base.rb
241
+ - lib/avm/jobs/variables_source.rb
186
242
  - lib/avm/result.rb
187
243
  - lib/avm/version.rb
188
244
  - lib/avm/version_number.rb
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/executables'
4
- require 'eac_ruby_utils/core_ext'
5
- require 'content-type'
6
-
7
- module Avm
8
- module Files
9
- class Info
10
- enable_simple_cache
11
- common_constructor :path
12
-
13
- private
14
-
15
- def content_type_uncached
16
- ::ContentType.parse(
17
- ::Avm::Executables.file.command.append(['-ib', path]).execute!.strip
18
- )
19
- rescue Parslet::ParseFailed
20
- ::ContentType.parse('application/unknown')
21
- end
22
- end
23
- end
24
- end