avm-tools 0.59.0 → 0.60.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '08d973e58416ce742fea0b91630ad75c85c48838f302019cdbd4362594704cb8'
4
- data.tar.gz: 6984410c1a7cf6e36f846fa6c388abca39b6b5f9eb8aec359b9bf069cd2d74a8
3
+ metadata.gz: 3a03f7f27fdfdd821203ba28f951ca16404a91b886453f9839e855dcf78627ef
4
+ data.tar.gz: 8f02cc5b2e5454e4e5253be317e73c94d8f007538b3464281f9a84c1bd83768f
5
5
  SHA512:
6
- metadata.gz: 2d019bdb2a01a137afa8a5e01aeb35b9d29214e185eddad3ab926215bbf0267ca1aa21f57927fea98482f381e09fa52e6ba6497da618bcdcc6f522d7672afa5a
7
- data.tar.gz: 17f2e21690f779b7c67405e4397343b13083b8cf8984a8b521031f5f65f8998a0f44062099425e6acb6c9d1a33771a21dd487678afe2929a384f3a6c5a89bfc1
6
+ metadata.gz: dd7d158d5b73aea3e54c715b2a13ec15fa3bc5fd6f87b3252f70ae9b0fd8dce36fb3a6b9c1d043f0b2365087848627595aaf7041142bf27f18d60a3f1ac4e0a9
7
+ data.tar.gz: a8300831601639f79484dcd81934900c4be5003e85ed4e5a6345bb0c19ea5f4b3149556633238bd63fff97c933df7535622bfe588021c06e0567a064ccaca7e2
@@ -5,11 +5,12 @@ require 'eac_ruby_utils/core_ext'
5
5
  require 'avm/projects/stereotypes'
6
6
 
7
7
  module Avm
8
- module LocalProject
8
+ module LocalProjects
9
9
  class Instance
10
10
  enable_simple_cache
11
11
  common_constructor :path do
12
12
  self.path = path.to_pathname
13
+ source_stereotypes_mixins
13
14
  end
14
15
 
15
16
  # Backward compatibility with [EacLauncher::Paths::Logical].
@@ -23,6 +24,12 @@ module Avm
23
24
  def stereotypes_uncached
24
25
  ::Avm::Projects::Stereotypes.list.select { |s| s.match?(self) }
25
26
  end
27
+
28
+ def source_stereotypes_mixins
29
+ stereotypes.each do |s|
30
+ s.local_project_mixin_module.if_present { |v| extend(v) }
31
+ end
32
+ end
26
33
  end
27
34
  end
28
35
  end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module LocalProjects
7
+ module Jobs
8
+ class Update
9
+ enable_console_speaker
10
+ common_constructor :instance
11
+
12
+ def run
13
+ instance.stereotypes.each { |stereotype| run_stereotype(stereotype) }
14
+ end
15
+
16
+ private
17
+
18
+ def run_stereotype(stereotype)
19
+ if stereotype.update_class.present?
20
+ puts stereotype.label + ': update class found. Running...'
21
+ stereotype.update_class.new(instance).run
22
+ else
23
+ puts stereotype.label + ': update class not found'
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -30,22 +30,29 @@ module Avm
30
30
  end
31
31
 
32
32
  def stereotype_name
33
- name.gsub(/^.*::/, '')
33
+ name.demodulize
34
34
  end
35
35
 
36
- def publish_class
37
- sub_class('Publish')
38
- end
39
-
40
- def warp_class
41
- sub_class('Warp')
36
+ {
37
+ local_project_mixin: ::Module,
38
+ publish: ::Class,
39
+ update: ::Class,
40
+ warp: ::Class
41
+ }.each do |name, is_a|
42
+ define_method "#{name}_#{is_a.name.underscore}" do
43
+ sub_constant(name.to_s.camelcase, is_a)
44
+ end
42
45
  end
43
46
 
44
47
  private
45
48
 
46
- def sub_class(sub_class_name)
47
- klass = const_get(sub_class_name)
48
- klass.is_a?(Class) ? klass : nil
49
+ def sub_constant(constant_name, is_a)
50
+ constant = const_get(constant_name)
51
+ unless is_a.if_present(true) { |v| constant.is_a?(v) }
52
+ raise("#{constant} is not a #{is_a}")
53
+ end
54
+
55
+ constant
49
56
  rescue NameError
50
57
  nil
51
58
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_git/local'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module Projects
8
+ module Stereotypes
9
+ class Git
10
+ module LocalProjectMixin
11
+ # @return [EacGit::Local]
12
+ def git_repo
13
+ @git_repo ||= ::EacGit::Local.new(path)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_gems_utils/gem'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module Projects
8
+ module Stereotypes
9
+ class RubyGem
10
+ module LocalProjectMixin
11
+ # @return [EacRubyGemsUtils::Gem]
12
+ def ruby_gem
13
+ @ruby_gem ||= ::EacRubyGemsUtils::Gem.new(path)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Projects
7
+ module Stereotypes
8
+ class RubyGem
9
+ class Update
10
+ enable_console_speaker
11
+ common_constructor :instance
12
+
13
+ def run
14
+ gemfile_lock_checkout
15
+ bundle_update
16
+ gemfile_lock_commit
17
+ end
18
+
19
+ private
20
+
21
+ def bundle_update
22
+ infom 'Running "bundle update"...'
23
+ instance.ruby_gem.bundle('update').execute!
24
+ infom 'Running "bundle install"...'
25
+ instance.ruby_gem.bundle('install').execute!
26
+ end
27
+
28
+ def gemfile_lock_checkout
29
+ return unless instance.respond_to?(:git_repo)
30
+
31
+ infom 'Checkouting Gemfile.lock...'
32
+ instance.git_repo.command('checkout', '--',
33
+ instance.ruby_gem.gemfile_lock_path.to_path).execute!
34
+ end
35
+
36
+ def gemfile_lock_commit
37
+ return unless instance.respond_to?(:git_repo)
38
+
39
+ if gemfile_lock_changed?
40
+ infom 'Commiting Gemfile.lock...'
41
+ instance.git_repo.command('commit', '-m', gemfile_lock_commit_message, '--',
42
+ instance.ruby_gem.gemfile_lock_path).execute!
43
+ else
44
+ infom 'Gemfile.lock did not change'
45
+ end
46
+ end
47
+
48
+ def gemfile_lock_commit_message
49
+ 'Todas as gems: atualiza.'
50
+ end
51
+
52
+ def gemfile_lock_changed?
53
+ instance.git_repo.dirty_file?(instance.ruby_gem.gemfile_lock_path)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -20,7 +20,7 @@ module Avm
20
20
  private
21
21
 
22
22
  def instance_uncached
23
- ::Avm::LocalProject::Instance.new(instance_path)
23
+ ::Avm::LocalProjects::Instance.new(instance_path)
24
24
  end
25
25
 
26
26
  def instance_path_uncached
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/local_projects/jobs/update'
4
+ require 'eac_ruby_utils/console/docopt_runner'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module Tools
9
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
10
+ class LocalProject < ::EacRubyUtils::Console::DocoptRunner
11
+ class Update < ::EacRubyUtils::Console::DocoptRunner
12
+ include ::EacCli::DefaultRunner
13
+
14
+ runner_definition do
15
+ desc 'Update local project.'
16
+ end
17
+
18
+ def run
19
+ infov 'Path', context(:instance).path
20
+ ::Avm::LocalProjects::Jobs::Update.new(context(:instance)).run
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Tools
5
- VERSION = '0.59.0'
5
+ VERSION = '0.60.0'
6
6
  end
7
7
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_launcher/publish/check_result'
3
4
  require('yaml')
4
5
 
5
6
  module EacLauncher
@@ -6,24 +6,15 @@ module EacLauncher
6
6
  module Git
7
7
  class Base < ::EacLauncher::Paths::Real
8
8
  module DirtyFiles
9
- def dirty?
10
- dirty_files.any?
11
- end
9
+ delegate :dirty, to: :eac_git
12
10
 
13
11
  def dirty_files
14
- execute!('status', '--porcelain', '--untracked-files').each_line.map do |line|
15
- parse_status_line(line.gsub(/\n\z/, ''))
12
+ eac_git.dirty_files.map do |df|
13
+ ::OpenStruct.new(
14
+ df.to_h.merge(path: df.path.to_path, absolute_path: df.absolute_path.to_path)
15
+ )
16
16
  end
17
17
  end
18
-
19
- private
20
-
21
- def parse_status_line(line)
22
- m = /\A(.)(.)\s(.+)\z/.match(line)
23
- ::Kernel.raise "Status pattern does not match \"#{line}\"" unless m
24
- ::OpenStruct.new(index: m[1], worktree: m[2], path: m[3],
25
- absolute_path: ::File.expand_path(m[3], self))
26
- end
27
18
  end
28
19
  end
29
20
  end
@@ -6,7 +6,7 @@ require 'eac_ruby_utils/core_ext'
6
6
  module EacGit
7
7
  # A Git repository in local filesystem.
8
8
  class Local
9
- require_sub __FILE__
9
+ require_sub __FILE__, include_modules: true
10
10
 
11
11
  common_constructor :root_path do
12
12
  self.root_path = root_path.to_pathname
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'ostruct'
5
+
6
+ module EacGit
7
+ class Local
8
+ module DirtyFiles
9
+ STATUS_LINE_PATTERN = /\A(.)(.)\s(.+)\z/.freeze
10
+
11
+ def dirty?
12
+ dirty_files.any?
13
+ end
14
+
15
+ def dirty_file?(path)
16
+ absolute_path = path.to_pathname.expand_path(root_path)
17
+ dirty_files.any? do |df|
18
+ df.absolute_path == absolute_path
19
+ end
20
+ end
21
+
22
+ def dirty_files
23
+ command('status', '--porcelain', '--untracked-files').execute!.each_line.map do |line|
24
+ parse_status_line(line.gsub(/\n\z/, ''))
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def parse_status_line(line)
31
+ STATUS_LINE_PATTERN.if_match(line) do |m|
32
+ ::OpenStruct.new(index: m[1], worktree: m[2], path: m[3].to_pathname,
33
+ absolute_path: m[3].to_pathname.expand_path(root_path))
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacGit
4
- VERSION = '0.2.0'
4
+ VERSION = '0.3.0'
5
5
  end
@@ -3,7 +3,7 @@
3
3
  module EacRubyUtils
4
4
  module Console
5
5
  class DocoptRunner
6
- DOCOPT_ERROR_EXIT_CODE = 0x22220000
6
+ DOCOPT_ERROR_EXIT_CODE = 0xC0
7
7
 
8
8
  class << self
9
9
  def run(options = {})
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support/concern'
4
+ require 'eac_ruby_utils/envs/ssh_env/dasho_options'
4
5
  require 'eac_ruby_utils/listable'
5
6
  require 'eac_ruby_utils/patches/object/if_present'
6
7
 
@@ -11,6 +12,7 @@ module EacRubyUtils
11
12
  extend ::ActiveSupport::Concern
12
13
 
13
14
  included do
15
+ include ::EacRubyUtils::Envs::SshEnv::DashoOptions
14
16
  add_nodasho_option('IdentityFile')
15
17
  end
16
18
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'active_support/concern'
4
4
  require 'eac_ruby_utils/boolean'
5
+ require 'eac_ruby_utils/envs/ssh_env/dasho_options'
5
6
 
6
7
  module EacRubyUtils
7
8
  module Envs
@@ -10,6 +11,7 @@ module EacRubyUtils
10
11
  extend ::ActiveSupport::Concern
11
12
 
12
13
  included do
14
+ include ::EacRubyUtils::Envs::SshEnv::DashoOptions
13
15
  add_nodasho_option('Quiet')
14
16
  end
15
17
 
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support/concern'
4
+ require 'eac_ruby_utils/envs/ssh_env/dasho_options'
4
5
  require 'eac_ruby_utils/listable'
5
6
  require 'eac_ruby_utils/patches/object/if_present'
6
7
 
@@ -11,6 +12,7 @@ module EacRubyUtils
11
12
  extend ::ActiveSupport::Concern
12
13
 
13
14
  included do
15
+ include ::EacRubyUtils::Envs::SshEnv::DashoOptions
14
16
  add_nodasho_option('Terminal')
15
17
  include ::EacRubyUtils::Listable
16
18
  lists.add_string :terminal_option, :auto, :disable, :enable, :force
@@ -33,6 +33,11 @@ module EacRubyUtils
33
33
  find_list_by_method(name) || super
34
34
  end
35
35
 
36
+ def hash_keys_validate!(hash, error_class = ::StandardError)
37
+ hash.keys.each { |key| value_validate!(key, error_class) }
38
+ hash
39
+ end
40
+
36
41
  def i18n_key
37
42
  "eac_ruby_utils.listable.#{class_i18n_key}.#{item}"
38
43
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support/inflector'
4
+ require 'eac_ruby_utils/listable'
4
5
 
5
6
  module EacRubyUtils
6
7
  class << self
@@ -10,15 +11,14 @@ module EacRubyUtils
10
11
  end
11
12
 
12
13
  class RequireSub
13
- BASE_OPTION_KEY = :base
14
- INCLUDE_MODULES_OPTION_KEY = :include_modules
15
- REQUIRE_DEPENDENCY_OPTION_KEY = :require_dependency
14
+ include ::EacRubyUtils::Listable
15
+ lists.add_symbol :option, :base, :include_modules, :require_dependency
16
16
 
17
17
  attr_reader :file, :options
18
18
 
19
19
  def initialize(file, options = {})
20
20
  @file = file
21
- @options = options
21
+ @options = self.class.lists.option.hash_keys_validate!(options)
22
22
  end
23
23
 
24
24
  def apply
@@ -29,7 +29,7 @@ module EacRubyUtils
29
29
  private
30
30
 
31
31
  def active_support_require(path)
32
- return false unless options[REQUIRE_DEPENDENCY_OPTION_KEY]
32
+ return false unless options[OPTION_REQUIRE_DEPENDENCY]
33
33
 
34
34
  ::Kernel.require_dependency(path)
35
35
  true
@@ -46,7 +46,7 @@ module EacRubyUtils
46
46
  end
47
47
 
48
48
  def include_modules
49
- return unless options[INCLUDE_MODULES_OPTION_KEY]
49
+ return unless options[OPTION_INCLUDE_MODULES]
50
50
 
51
51
  base.constants.each do |constant_name|
52
52
  constant = base.const_get(constant_name)
@@ -57,11 +57,11 @@ module EacRubyUtils
57
57
  end
58
58
 
59
59
  def base
60
- options[BASE_OPTION_KEY] || raise('Option :base not setted')
60
+ options[OPTION_BASE] || raise('Option :base not setted')
61
61
  end
62
62
 
63
63
  def base?
64
- options[BASE_OPTION_KEY] ? true : false
64
+ options[OPTION_BASE] ? true : false
65
65
  end
66
66
 
67
67
  def kernel_require(path)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyUtils
4
- VERSION = '0.42.0'
4
+ VERSION = '0.43.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avm-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.59.0
4
+ version: 0.60.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esquilo Azul Company
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-25 00:00:00.000000000 Z
11
+ date: 2020-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aranha-parsers
@@ -360,6 +360,7 @@ files:
360
360
  - lib/avm/instances/entry_keys.rb
361
361
  - lib/avm/local_projects.rb
362
362
  - lib/avm/local_projects/instance.rb
363
+ - lib/avm/local_projects/jobs/update.rb
363
364
  - lib/avm/patches.rb
364
365
  - lib/avm/patches/object/template.rb
365
366
  - lib/avm/path_string.rb
@@ -367,6 +368,7 @@ files:
367
368
  - lib/avm/projects/stereotype.rb
368
369
  - lib/avm/projects/stereotypes.rb
369
370
  - lib/avm/projects/stereotypes/git.rb
371
+ - lib/avm/projects/stereotypes/git/local_project_mixin.rb
370
372
  - lib/avm/projects/stereotypes/git/publish.rb
371
373
  - lib/avm/projects/stereotypes/git/warp.rb
372
374
  - lib/avm/projects/stereotypes/git_subrepo.rb
@@ -378,7 +380,9 @@ files:
378
380
  - lib/avm/projects/stereotypes/rails_application.rb
379
381
  - lib/avm/projects/stereotypes/redmine_plugin.rb
380
382
  - lib/avm/projects/stereotypes/ruby_gem.rb
383
+ - lib/avm/projects/stereotypes/ruby_gem/local_project_mixin.rb
381
384
  - lib/avm/projects/stereotypes/ruby_gem/publish.rb
385
+ - lib/avm/projects/stereotypes/ruby_gem/update.rb
382
386
  - lib/avm/rails.rb
383
387
  - lib/avm/rails/runners.rb
384
388
  - lib/avm/rails/runners/bundle.rb
@@ -468,6 +472,7 @@ files:
468
472
  - lib/avm/tools/runner/launcher/publish.rb
469
473
  - lib/avm/tools/runner/local_project.rb
470
474
  - lib/avm/tools/runner/local_project/info.rb
475
+ - lib/avm/tools/runner/local_project/update.rb
471
476
  - lib/avm/tools/runner/ruby.rb
472
477
  - lib/avm/tools/runner/ruby/gems.rb
473
478
  - lib/avm/tools/runner/ruby/gems/generate.rb
@@ -552,6 +557,7 @@ files:
552
557
  - vendor/eac_git/lib/eac_git.rb
553
558
  - vendor/eac_git/lib/eac_git/executables.rb
554
559
  - vendor/eac_git/lib/eac_git/local.rb
560
+ - vendor/eac_git/lib/eac_git/local/dirty_files.rb
555
561
  - vendor/eac_git/lib/eac_git/local/subrepo.rb
556
562
  - vendor/eac_git/lib/eac_git/local/subrepo/config.rb
557
563
  - vendor/eac_git/lib/eac_git/remote.rb