avm-tools 0.113.6 → 0.114.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/lib/avm/launcher/context.rb +19 -8
  3. data/lib/avm/launcher/git/publish_base.rb +2 -0
  4. data/lib/avm/tools/runner/app_src/ruby/bundler/incompatible.rb +2 -2
  5. data/lib/avm/tools/version.rb +1 -1
  6. data/{lib → sub/avm/lib}/avm/launcher/errors/base.rb +0 -0
  7. data/{lib → sub/avm/lib}/avm/launcher/errors/non_project.rb +0 -0
  8. data/{lib → sub/avm/lib}/avm/launcher/paths/real.rb +0 -0
  9. data/{lib → sub/avm/lib}/avm/launcher/publish/check_result.rb +0 -0
  10. data/sub/avm/lib/avm/version.rb +1 -1
  11. data/sub/avm-eac_redmine_base0/avm-eac_redmine_base0.gemspec +1 -0
  12. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/data_unit.rb +6 -10
  13. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instance.rb +20 -0
  14. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/rest_api.rb +11 -0
  15. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/version.rb +1 -1
  16. data/sub/avm-files/lib/avm/files/formatter/formats/generic_plain.rb +2 -2
  17. data/sub/avm-files/lib/avm/files/version.rb +1 -1
  18. data/sub/avm-git/lib/avm/git/revision_test.rb +1 -1
  19. data/sub/avm-git/lib/avm/git/version.rb +1 -1
  20. data/sub/eac_cli/lib/eac_cli/config/entry.rb +1 -1
  21. data/sub/eac_cli/lib/eac_cli/speaker.rb +1 -2
  22. data/sub/eac_cli/lib/eac_cli/version.rb +1 -1
  23. data/sub/eac_fs/lib/eac_fs/cached_download.rb +3 -3
  24. data/sub/eac_fs/lib/eac_fs/contexts.rb +21 -0
  25. data/sub/eac_fs/lib/eac_fs/patches/module/fs_cache.rb +9 -4
  26. data/sub/eac_fs/lib/eac_fs/patches/object/fs_cache.rb +16 -6
  27. data/sub/eac_fs/lib/eac_fs/{cache.rb → storage_tree.rb} +6 -8
  28. data/sub/eac_fs/lib/eac_fs/version.rb +1 -1
  29. data/sub/eac_fs/spec/lib/eac_fs/{cache_spec.rb → storage_tree_spec.rb} +5 -5
  30. data/sub/eac_git/lib/eac_git/local/commit.rb +1 -0
  31. data/sub/eac_git/lib/eac_git/local/remotes.rb +20 -0
  32. data/sub/eac_git/lib/eac_git/version.rb +1 -1
  33. data/sub/eac_rest/Gemfile +5 -0
  34. data/sub/eac_rest/eac_rest.gemspec +18 -0
  35. data/sub/eac_rest/lib/eac_rest/api.rb +39 -0
  36. data/sub/eac_rest/lib/eac_rest/entity.rb +16 -0
  37. data/sub/eac_rest/lib/eac_rest/request.rb +74 -0
  38. data/sub/eac_rest/lib/eac_rest/response.rb +72 -0
  39. data/sub/eac_rest/lib/eac_rest/version.rb +5 -0
  40. data/sub/eac_rest/lib/eac_rest.rb +7 -0
  41. data/sub/eac_rest/spec/rubocop_spec.rb +3 -0
  42. data/sub/eac_rest/spec/spec_helper.rb +4 -0
  43. data/sub/eac_ruby_base0/eac_ruby_base0.gemspec +1 -1
  44. data/sub/eac_ruby_base0/lib/eac_ruby_base0/application.rb +9 -5
  45. data/sub/eac_ruby_base0/lib/eac_ruby_base0/runner.rb +10 -4
  46. data/sub/eac_ruby_base0/lib/eac_ruby_base0/version.rb +1 -1
  47. data/sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb +21 -3
  48. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/to_uri.rb +15 -0
  49. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/if_exist.rb +10 -0
  50. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/readlink_r.rb +11 -0
  51. data/sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/stub_speaker.rb +39 -0
  52. data/sub/eac_ruby_utils/lib/eac_ruby_utils/speaker/receiver.rb +7 -0
  53. data/sub/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  54. metadata +27 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f0c1b42a6d34ae3d070dbbae54375ddd08eab2a177c5c46cc9d42de8165d10a
4
- data.tar.gz: ff02a56141cb130c4b0e9c7fc651ebe3de42ba13ec6c56557fbae70f96ff693c
3
+ metadata.gz: 7e2a7df849fd040b8e6fddad4e1c8507139926f0b587ceab796c1416fb9af873
4
+ data.tar.gz: 70eb055f94b37d37e05510563a654350137d0358283ad7d33a4d895110f1f2cc
5
5
  SHA512:
6
- metadata.gz: c12fcce202f2eb1b40b58485dbf790e29b7f6bb183d450ce3c9f8a479abf9ae35a77865990c481ad1f2a28b18110bcc4e3db82ecc880c355f040eb8646433143
7
- data.tar.gz: d85bb09c92c7d6b1f0414f66509da068ff018d8ec1da32b730f00fe99cc723895d4e09d205f5964cd562a61647c849017f2fe3def50f3fdfec45c770a9d2d8a6
6
+ metadata.gz: 90be4e12df6cda16ffc88680a42a6d3dd118e96f97840cfb4a49b4418b76df1826485065ca069e3105d942136ed9273f03e9e15b340c4913abfeacae01ce1eba
7
+ data.tar.gz: 262a63d17a298911bef85e025b678779e8d7795e2376349128999fc50442275a0303bde419921e2799a3f8a9923366d3996c655ea032d909ca555f6b7d6892a5
@@ -8,6 +8,7 @@ require 'avm/launcher/context/instance_discovery'
8
8
  require 'avm/launcher/context/settings'
9
9
  require 'avm/launcher/paths/logical'
10
10
  require 'avm/launcher/project'
11
+ require 'avm/tools/self'
11
12
 
12
13
  module Avm
13
14
  module Launcher
@@ -15,10 +16,6 @@ module Avm
15
16
  include ::EacRubyUtils::SimpleCache
16
17
  enable_speaker
17
18
 
18
- DEFAULT_PROJECTS_ROOT = '.'
19
- DEFAULT_SETTINGS_FILE = ::File.join(ENV['HOME'], '.config', 'eac_launcher', 'settings.yml')
20
- DEFAULT_CACHE_ROOT = ::File.join(ENV['HOME'], '.cache', 'eac_launcher')
21
-
22
19
  class << self
23
20
  attr_writer :current
24
21
 
@@ -34,6 +31,8 @@ module Avm
34
31
  attr_reader :root, :settings, :cache_root
35
32
  attr_accessor :publish_options, :recache, :instance_manager
36
33
 
34
+ CONFIG_PATH_PREFIX = 'launcher'
35
+
37
36
  def initialize(options = {})
38
37
  @options = options.with_indifferent_access
39
38
  @root = ::Avm::Launcher::Paths::Logical.new(self, nil, build_option(:projects_root), '/')
@@ -59,15 +58,27 @@ module Avm
59
58
  private
60
59
 
61
60
  def build_option(key)
62
- @options[key] || env_option(key) || default_option(key)
61
+ @options[key] || config_option(key) || default_option(key)
62
+ end
63
+
64
+ def config_option(key)
65
+ ::Avm::Self::Instance.default.entry([CONFIG_PATH_PREFIX, key].join('.')).optional_value
63
66
  end
64
67
 
65
- def env_option(key)
66
- ENV["EAC_LAUNCHER_#{key}".underscore.upcase]
68
+ def default_cache_root
69
+ ::Avm::Tools::Self.application.cache_dir.join('launcher')
67
70
  end
68
71
 
69
72
  def default_option(key)
70
- self.class.const_get("DEFAULT_#{key}".underscore.upcase)
73
+ send("default_#{key}".underscore)
74
+ end
75
+
76
+ def default_projects_root
77
+ '.'
78
+ end
79
+
80
+ def default_settings_file
81
+ ::Avm::Tools::Self.application.config_dir.join('launcher.yaml')
71
82
  end
72
83
 
73
84
  def projects_uncached
@@ -86,6 +86,8 @@ module Avm
86
86
  end
87
87
 
88
88
  def local_following_check_result
89
+ return nil unless local_following?
90
+
89
91
  ::Avm::Launcher::Publish::CheckResult.pending('Local following')
90
92
  end
91
93
 
@@ -17,7 +17,7 @@ module Avm
17
17
 
18
18
  def run
19
19
  infov 'Cache path', fs_cache.content_path
20
- infov 'Cached?', fs_cache.cached?
20
+ infov 'Cached?', fs_cache.stored?
21
21
  parser.gems_in_conflict.each do |gem_in_conflict|
22
22
  print_gem_in_conflict(gem_in_conflict)
23
23
  end
@@ -31,7 +31,7 @@ module Avm
31
31
  end
32
32
 
33
33
  def content_path
34
- fs_cache.write(bundle_update) unless fs_cache.cached? && parsed.last?
34
+ fs_cache.write(bundle_update) unless fs_cache.stored? && parsed.last?
35
35
  fs_cache.content_path
36
36
  end
37
37
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Tools
5
- VERSION = '0.113.6'
5
+ VERSION = '0.114.2'
6
6
  end
7
7
  end
File without changes
File without changes
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Avm
4
- VERSION = '0.14.0'
4
+ VERSION = '0.15.0'
5
5
  end
@@ -16,6 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.add_dependency 'avm-eac_ubuntu_base0', '~> 0.2'
17
17
  s.add_dependency 'curb', '~> 0.9.10'
18
18
  s.add_dependency 'eac_fs', '~> 0.4'
19
+ s.add_dependency 'eac_rest', '~> 0.4'
19
20
  s.add_dependency 'eac_ruby_utils', '~> 0.68'
20
21
 
21
22
  s.add_development_dependency 'eac_ruby_gem_support', '~> 0.4'
@@ -10,11 +10,13 @@ module Avm
10
10
  class DataUnit < ::Avm::Data::Instance::Unit
11
11
  common_constructor :instance
12
12
 
13
+ EXPORT_PATH = '/backup/export'
13
14
  EXTENSION = '.tar'
15
+ IMPORT_PATH = '/backup/import.json'
14
16
 
15
17
  def do_dump(data_path)
16
18
  ::File.open(data_path, 'wb') do |file|
17
- file << URI.parse(export_url).read
19
+ file << export_request.response.body_data_or_raise
18
20
  end
19
21
  end
20
22
 
@@ -37,18 +39,12 @@ module Avm
37
39
  true
38
40
  end
39
41
 
40
- def export_url
41
- url('/backup/export')
42
+ def export_request
43
+ instance.rest_api.request(EXPORT_PATH)
42
44
  end
43
45
 
44
46
  def import_url
45
- url('/backup/import.json')
46
- end
47
-
48
- def url(path)
49
- uri = ::Addressable::URI.parse(instance.read_entry('web.url')) + path
50
- uri.query_values = { key: instance.read_entry('admin.api_key') }
51
- uri.to_s
47
+ instance.rest_api.build_service_url(IMPORT_PATH).to_s
52
48
  end
53
49
  end
54
50
  end
@@ -1,13 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'addressable/uri'
3
4
  require 'avm/eac_redmine_base0/data_unit'
4
5
  require 'avm/eac_redmine_base0/instances/docker_image'
6
+ require 'avm/eac_redmine_base0/rest_api'
5
7
  require 'avm/eac_webapp_base0/instance'
6
8
  require 'avm/eac_rails_base1/instance'
7
9
 
8
10
  module Avm
9
11
  module EacRedmineBase0
10
12
  class Instance < ::Avm::EacRailsBase1::Instance
13
+ enable_simple_cache
14
+
11
15
  FILES_UNITS = { files: 'files' }.freeze
12
16
 
13
17
  def docker_image_class
@@ -32,6 +36,22 @@ module Avm
32
36
  }
33
37
  )
34
38
  end
39
+
40
+ # @return [Addressable::URI]
41
+ def root_url
42
+ r = ::Addressable::URI.parse(read_entry(::Avm::Instances::EntryKeys::WEB_URL))
43
+ r.query_values = nil
44
+ r
45
+ end
46
+
47
+ private
48
+
49
+ # @return [Avm::EacRedmineBase0::RestApi]
50
+ def rest_api_uncached
51
+ url = root_url
52
+ url.query_values = { key: read_entry('api.key') }
53
+ ::Avm::EacRedmineBase0::RestApi.new(url)
54
+ end
35
55
  end
36
56
  end
37
57
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_rest/api'
5
+
6
+ module Avm
7
+ module EacRedmineBase0
8
+ class RestApi < ::EacRest::Api
9
+ end
10
+ end
11
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module EacRedmineBase0
5
- VERSION = '0.3.1'
5
+ VERSION = '0.4.0'
6
6
  end
7
7
  end
@@ -7,8 +7,8 @@ module Avm
7
7
  class Formatter
8
8
  module Formats
9
9
  class GenericPlain < ::Avm::Files::Formatter::Formats::Base
10
- VALID_BASENAMES = %w[*.bat *.css.coffee *.java *.js *.rb *.scss *.sql *.tex *.url *.yml
11
- *.yaml].freeze
10
+ VALID_BASENAMES = %w[*.asm *.bat *.css.coffee *.java *.js *.rb *.s *.scss *.sql *.tex
11
+ *.url *.yml *.yaml].freeze
12
12
 
13
13
  VALID_TYPES = %w[plain x-shellscript].freeze
14
14
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Files
5
- VERSION = '0.2.0'
5
+ VERSION = '0.3.0'
6
6
  end
7
7
  end
@@ -77,7 +77,7 @@ module Avm
77
77
  end
78
78
 
79
79
  def successful_uncached
80
- if options.fetch(:no_cache) || !successful_cache.cached?
80
+ if options.fetch(:no_cache) || !successful_cache.stored?
81
81
  checkout_revision
82
82
  run_test
83
83
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Git
5
- VERSION = '0.3.1'
5
+ VERSION = '0.3.2'
6
6
  end
7
7
  end
@@ -25,7 +25,7 @@ module EacCli
25
25
  end
26
26
 
27
27
  def secret_value
28
- self.class.new(config, path, options.merge(noecho: true)).value
28
+ self.class.new(config, path, options.to_h.merge(noecho: true).to_h).value
29
29
  end
30
30
 
31
31
  delegate :found?, :value=, to: :sub_entry
@@ -23,9 +23,8 @@ module EacCli
23
23
  out_out.write(string.to_s)
24
24
  end
25
25
 
26
- def fatal_error(string)
26
+ def error(string)
27
27
  puts "ERROR: #{string}".white.on_red
28
- Kernel.exit 1
29
28
  end
30
29
 
31
30
  def title(string)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacCli
4
- VERSION = '0.26.0'
4
+ VERSION = '0.26.2'
5
5
  end
@@ -3,17 +3,17 @@
3
3
  require 'eac_fs/patches'
4
4
  require 'eac_ruby_utils/fs/temp'
5
5
 
6
- module Avm
6
+ module EacFs
7
7
  class CachedDownload
8
8
  attr_reader :url, :fs_cache
9
9
 
10
10
  def initialize(url, parent_fs_cache = nil)
11
11
  @url = url
12
- @fs_cache = (parent_fs_cache || fs_cache).child(url.parameterize)
12
+ @fs_cache = (parent_fs_cache || fs_cache).child(url.to_s.parameterize)
13
13
  end
14
14
 
15
15
  def assert
16
- download unless fs_cache.cached?
16
+ download unless fs_cache.stored?
17
17
  end
18
18
 
19
19
  def download
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_ruby_utils/context'
5
+
6
+ module EacFs
7
+ class Contexts
8
+ TYPES = %i[cache config data].freeze
9
+
10
+ class << self
11
+ TYPES.each do |type|
12
+ class_eval <<~CODE, __FILE__, __LINE__ + 1
13
+ # @return [EacRubyUtils::Context<EacFs::StorageTree>]
14
+ def #{type}
15
+ @#{type} ||= ::EacRubyUtils::Context.new
16
+ end
17
+ CODE
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,10 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_fs/cache'
3
+ require 'eac_fs/contexts'
4
4
 
5
5
  class Module
6
- # @return [EacFs::Cache]
7
- def fs_cache
8
- ::EacFs::Cache.context.current.child('fs_cache', *name.split('::'))
6
+ ::EacFs::Contexts::TYPES.each do |type|
7
+ method_name = "fs_#{type}"
8
+ class_eval <<~CODE, __FILE__, __LINE__ + 1
9
+ # @return [EacFs::StorageTree]
10
+ def #{method_name}
11
+ ::EacFs::Contexts.#{type}.current.child('#{method_name}', *name.split('::'))
12
+ end
13
+ CODE
9
14
  end
10
15
  end
@@ -1,17 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_fs/contexts'
3
4
  require 'eac_fs/patches/module/fs_cache'
4
5
 
5
6
  class Object
6
- # @return [EacFs::Cache]
7
- def fs_cache
8
- oid = fs_cache_object_id
9
- oid = [oid.to_s] unless oid.is_a?(::Enumerable)
10
- oid.inject(self.class.fs_cache) { |a, e| a.child(e.to_s) }
7
+ ::EacFs::Contexts::TYPES.each do |type|
8
+ class_eval <<~CODE, __FILE__, __LINE__ + 1
9
+ # @return [EacFs::StorageTree]
10
+ def fs_#{type}
11
+ oid = fs_object_id_by_type(:'#{type}')
12
+ oid = [oid.to_s] unless oid.is_a?(::Enumerable)
13
+ oid.inject(self.class.fs_#{type}) { |a, e| a.child(e.to_s) }
14
+ end
15
+ CODE
11
16
  end
12
17
 
13
18
  # @return [String, Array<String>]
14
- def fs_cache_object_id
19
+ def fs_object_id
15
20
  raise 'Abstract method hit'
16
21
  end
22
+
23
+ def fs_object_id_by_type(type)
24
+ method = "fs_#{type}_object_id"
25
+ respond_to?(method) ? send(method) : fs_object_id
26
+ end
17
27
  end
@@ -4,9 +4,7 @@ require 'eac_ruby_utils/core_ext'
4
4
  require 'fileutils'
5
5
 
6
6
  module EacFs
7
- class Cache
8
- enable_context
9
-
7
+ class StorageTree
10
8
  CONTENT_FILE_NAME = '__content__'
11
9
 
12
10
  attr_reader :path
@@ -18,19 +16,19 @@ module EacFs
18
16
  end
19
17
 
20
18
  def clear
21
- return unless cached?
19
+ return unless stored?
22
20
 
23
21
  ::File.unlink(content_path)
24
22
  end
25
23
 
26
24
  def read
27
- return nil unless cached?
25
+ return nil unless stored?
28
26
 
29
27
  ::File.read(content_path)
30
28
  end
31
29
 
32
- def read_or_cache
33
- write(yield) unless cached?
30
+ def read_or_store
31
+ write(yield) unless stored?
34
32
 
35
33
  read
36
34
  end
@@ -45,7 +43,7 @@ module EacFs
45
43
  self.class.new(path, *child_path_parts)
46
44
  end
47
45
 
48
- def cached?
46
+ def stored?
49
47
  ::File.exist?(content_path)
50
48
  end
51
49
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacFs
4
- VERSION = '0.9.0'
4
+ VERSION = '0.11.1'
5
5
  end
@@ -1,26 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support/core_ext/object/blank'
4
- require 'eac_fs/cache'
4
+ require 'eac_fs/storage_tree'
5
5
 
6
- RSpec.describe ::EacFs::Cache do
6
+ RSpec.describe ::EacFs::StorageTree do
7
7
  let(:tmpdir) { ::Dir.mktmpdir }
8
8
  let(:instance) { described_class.new(tmpdir, 'instance') }
9
9
 
10
10
  it { expect(instance.read).to be_blank }
11
- it { expect(instance.cached?).to eq(false) }
11
+ it { expect(instance.stored?).to eq(false) }
12
12
 
13
13
  context 'when instance is writed' do
14
14
  before { instance.write('STUB') }
15
15
 
16
16
  it { expect(instance.read).to eq('STUB') }
17
- it { expect(instance.cached?).to eq(true) }
17
+ it { expect(instance.stored?).to eq(true) }
18
18
 
19
19
  context 'when instance is cleared' do
20
20
  before { instance.clear }
21
21
 
22
22
  it { expect(instance.read).to be_blank }
23
- it { expect(instance.cached?).to eq(false) }
23
+ it { expect(instance.stored?).to eq(false) }
24
24
  end
25
25
  end
26
26
 
@@ -13,6 +13,7 @@ module EacGit
13
13
  author_name: '%an', author_email: '%ae', author_date: '%ai',
14
14
  subject: '%s',
15
15
  author_all: '%an <%ae>, %ai',
16
+ commit_hash: '%H', abbreviated_commit_hash: '%h',
16
17
  commiter_name: '%cn', commiter_email: '%ce', commiter_date: '%ci',
17
18
  commiter_all: '%cn <%ce>, %ci',
18
19
  raw_body: '%B'
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_git/local/remote'
5
+
6
+ module EacGit
7
+ class Local
8
+ module Remotes
9
+ def remote(name)
10
+ ::EacGit::Local::Remote.new(self, name)
11
+ end
12
+
13
+ def remotes
14
+ command('remote').execute!.each_line.map(&:strip).reject(&:blank?).map do |name|
15
+ remote(name)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacGit
4
- VERSION = '0.11.0'
4
+ VERSION = '0.12.0'
5
5
  end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
4
+
5
+ require 'eac_rest/version'
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = 'eac_rest'
9
+ s.version = EacRest::VERSION
10
+ s.authors = ['Eduardo H. Bogoni']
11
+ s.summary = 'A REST helper for Ruby.'
12
+
13
+ s.files = Dir['{lib}/**/*']
14
+
15
+ s.add_dependency 'eac_ruby_utils', '~> 0.70'
16
+
17
+ s.add_development_dependency 'eac_ruby_gem_support', '~> 0.3'
18
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_rest/request'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module EacRest
7
+ # Abstract methods
8
+ # * self.issue_get_url_suffix(provider_issue_id)
9
+ class Api
10
+ require_sub __FILE__, include_modules: true
11
+ common_constructor :root_url, :username, :password, default: [nil, nil]
12
+
13
+ def request(service_url_suffix, headers = {}, &body_data_proc)
14
+ r = ::EacRest::Request.new(build_service_url(service_url_suffix),
15
+ body_data_proc)
16
+ headers.each { |name, value| r = r.header(name, value) }
17
+ r = r.autenticate(username, password) if username.present?
18
+ r
19
+ end
20
+
21
+ def request_json(service_url_suffix, headers = {}, &body_data_proc)
22
+ request(service_url_suffix, headers.merge('Accept' => 'application/json')) do |body_data|
23
+ r = ::JSON.parse(body_data)
24
+ r = body_data_proc.call(r) if body_data_proc
25
+ r
26
+ end
27
+ end
28
+
29
+ # @return [Addressable::URI]
30
+ def build_service_url(suffix)
31
+ s = ::Addressable::URI.parse(suffix)
32
+ r = ::Addressable::URI.parse(root_url)
33
+ r.path += s.path
34
+ r.query_values = r.query_values(::Array).if_present([]) +
35
+ s.query_values(::Array).if_present([])
36
+ r
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacRest
6
+ class Entity
7
+ enable_simple_cache
8
+ common_constructor :api, :data
9
+
10
+ class << self
11
+ def from_array_data(api, array_data, *args)
12
+ array_data.map { |item_data| new(api, item_data, *args) }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'curb'
4
+ require 'eac_rest/response'
5
+ require 'eac_ruby_utils/core_ext'
6
+ require 'ostruct'
7
+
8
+ module EacRest
9
+ class Request
10
+ COMMON_MODIFIERS = %w[auth body_data verb].freeze
11
+ HASH_MODIFIERS = %w[header].freeze
12
+ MODIFIERS = COMMON_MODIFIERS + HASH_MODIFIERS.map(&:pluralize)
13
+
14
+ enable_immutable
15
+ immutable_accessor(*COMMON_MODIFIERS, type: :common)
16
+ immutable_accessor(*HASH_MODIFIERS, type: :hash)
17
+
18
+ enable_listable
19
+ lists.add_symbol :verb, :get, :delete, :options, :post, :put
20
+
21
+ common_constructor :url, :body_data_proc, default: [nil]
22
+
23
+ def autenticate(username, password)
24
+ auth(::OpenStruct.new(username: username, password: password))
25
+ end
26
+
27
+ def immutable_constructor_args
28
+ [url, body_data_proc]
29
+ end
30
+
31
+ def response
32
+ ::EacRest::Response.new(build_curl, body_data_proc)
33
+ end
34
+
35
+ private
36
+
37
+ def build_curl
38
+ r = ::Curl::Easy.new(url)
39
+ MODIFIERS.each { |suffix| send("build_curl_#{suffix}", r) }
40
+ r
41
+ end
42
+
43
+ def build_curl_auth(curl)
44
+ auth.if_present do |a|
45
+ curl.http_auth_types = :basic
46
+ curl.username = a.username
47
+ curl.password = a.password
48
+ end
49
+ end
50
+
51
+ def build_curl_body_data(curl)
52
+ www_form_body_data_encoded.if_present { |v| curl.post_body = v }
53
+ end
54
+
55
+ def build_curl_headers(curl)
56
+ curl.headers.merge!(headers)
57
+ end
58
+
59
+ def build_curl_verb(curl)
60
+ curl.set(
61
+ :customrequest,
62
+ verb.if_present(VERB_GET) { |v| self.class.lists.verb.value_validate!(v) }.to_s.upcase
63
+ )
64
+ end
65
+
66
+ def www_form_body_data_encoded
67
+ body_data.if_present do |v|
68
+ v = v.map { |k, vv| [k, vv] } if v.is_a?(::Hash)
69
+ v = URI.encode_www_form(v) if v.is_a?(::Array)
70
+ v.to_s
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/hash/conversions'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'json'
6
+
7
+ module EacRest
8
+ class Response < ::StandardError
9
+ common_constructor :curl, :body_data_proc
10
+
11
+ def body_data
12
+ r = performed_curl.headers['Accept'].if_present(body_str) do |v|
13
+ method_name = "body_data_from_#{v.parameterize.underscore}"
14
+ respond_to?(method_name) ? send(method_name) : body_str
15
+ end
16
+ r = body_data_proc.call(r) if body_data_proc.present?
17
+ r
18
+ end
19
+
20
+ def body_data_or_raise
21
+ raise_unless_200
22
+
23
+ body_data
24
+ end
25
+
26
+ delegate :body_str, :headers, to: :performed_curl
27
+
28
+ def body_str_or_raise
29
+ raise_unless_200
30
+
31
+ body_str
32
+ end
33
+
34
+ def raise_unless_200
35
+ return nil if status == 200
36
+
37
+ raise self
38
+ end
39
+
40
+ def status
41
+ performed_curl.status.to_i
42
+ end
43
+
44
+ delegate :url, to: :curl
45
+
46
+ def to_s
47
+ "URL: #{url}\nStatus: #{status}\nBody:\n\n#{body_str}"
48
+ end
49
+
50
+ private
51
+
52
+ def body_data_from_application_json
53
+ ::JSON.parse(body_str)
54
+ end
55
+
56
+ def body_data_from_application_xml
57
+ Hash.from_xml(body_str)
58
+ end
59
+
60
+ def perform
61
+ @perform ||= begin
62
+ curl.perform || raise("CURL perform failed for #{url}")
63
+ true
64
+ end
65
+ end
66
+
67
+ def performed_curl
68
+ perform
69
+ curl
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRest
4
+ VERSION = '0.4.0'
5
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacRest
6
+ require_sub __FILE__
7
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ ::EacRubyUtils::Rspec.default_setup.describe_rubocop
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/rspec/default_setup'
4
+ ::EacRubyUtils::Rspec.default_setup_create(::File.expand_path('..', __dir__))
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
13
13
  s.files = Dir['{lib}/**/*']
14
14
 
15
15
  s.add_dependency 'eac_cli', '~> 0.26'
16
- s.add_dependency 'eac_fs', '~> 0.3'
16
+ s.add_dependency 'eac_fs', '~> 0.10'
17
17
  s.add_dependency 'eac_ruby_gems_utils', '~> 0.9', '~> 0.9.6'
18
18
  s.add_dependency 'eac_ruby_utils', '~> 0.70'
19
19
 
@@ -3,7 +3,8 @@
3
3
  require 'eac_cli/config'
4
4
  require 'eac_config/envvars_node'
5
5
  require 'eac_config/yaml_file_node'
6
- require 'eac_fs/cache'
6
+ require 'eac_fs/contexts'
7
+ require 'eac_fs/storage_tree'
7
8
  require 'eac_ruby_base0/application_xdg'
8
9
  require 'eac_ruby_gems_utils/gem'
9
10
  require 'eac_ruby_utils/core_ext'
@@ -43,10 +44,13 @@ module EacRubyBase0
43
44
  delegate "#{item}_xdg_env", "#{item}_dir", to: :app_xdg
44
45
  end
45
46
 
46
- def self_fs_cache
47
- @self_fs_cache ||= ::EacFs::Cache.new(
48
- cache_dir.join(::EacFs::Cache.name.parameterize)
49
- )
47
+ ::EacFs::Contexts::TYPES.each do |type|
48
+ class_eval <<CODE, __FILE__, __LINE__ + 1
49
+ # @return [EacFs::StorageTree]
50
+ def self_fs_#{type}
51
+ @self_fs_#{type} ||= ::EacFs::StorageTree.new(#{type}_dir.join('eac_fs'))
52
+ end
53
+ CODE
50
54
  end
51
55
 
52
56
  def home_dir
@@ -3,7 +3,7 @@
3
3
  require 'eac_cli/core_ext'
4
4
  require 'eac_cli/speaker'
5
5
  require 'eac_config/node'
6
- require 'eac_fs/cache'
6
+ require 'eac_fs/contexts'
7
7
  require 'eac_ruby_utils/speaker'
8
8
 
9
9
  module EacRubyBase0
@@ -65,11 +65,10 @@ module EacRubyBase0
65
65
 
66
66
  # @return [Array<EacRubyUtils::Struct>]
67
67
  def available_contexts
68
- [
69
- [:cache, ::EacFs::Cache.context, -> { application.self_fs_cache }],
68
+ (filesystem_available_contexts + [
70
69
  [:config, ::EacConfig::Node.context, -> { runner_context.call(:application).build_config }],
71
70
  [:speaker, ::EacRubyUtils::Speaker.context, -> { build_speaker }]
72
- ].map { |row| available_context_row_to_struct(row) }
71
+ ]).map { |row| available_context_row_to_struct(row) }
73
72
  end
74
73
 
75
74
  def available_context_row_to_struct(row)
@@ -82,5 +81,12 @@ module EacRubyBase0
82
81
  options[:in_in] = FailIfRequestInput.new if parsed.no_input?
83
82
  ::EacCli::Speaker.new(options)
84
83
  end
84
+
85
+ def filesystem_available_contexts
86
+ ::EacFs::Contexts::TYPES.map do |type|
87
+ key = "fs_#{type}".to_sym
88
+ [key, ::EacFs::Contexts.send(type), -> { application.send("self_#{key}") }]
89
+ end
90
+ end
85
91
  end
86
92
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyBase0
4
- VERSION = '0.15.0'
4
+ VERSION = '0.16.1'
5
5
  end
@@ -1,18 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_ruby_utils/listable'
3
4
  require 'eac_ruby_utils/simple_cache'
4
5
 
5
6
  module EacRubyUtils
6
7
  module Envs
7
8
  class Executable
9
+ include ::EacRubyUtils::Listable
8
10
  include ::EacRubyUtils::SimpleCache
9
11
 
10
- attr_reader :env, :name, :check_args
12
+ lists.add_symbol :option, :check_args, :auto_validate
13
+
14
+ DEFAULT_AUTO_VALIDATE = true
15
+
16
+ attr_reader :env, :name, :options
11
17
 
12
18
  def initialize(env, name, *check_args)
13
19
  @env = env
14
20
  @name = name
15
- @check_args = check_args
21
+ self.options = self.class.lists.option.hash_keys_validate!(check_args.extract_options!)
22
+ options[OPTION_CHECK_ARGS] = check_args unless options.key?(OPTION_CHECK_ARGS)
23
+ options.freeze
24
+ end
25
+
26
+ def auto_validate?
27
+ options.key?(OPTION_AUTO_VALIDATE) ? options[OPTION_AUTO_VALIDATE] : DEFAULT_AUTO_VALIDATE
28
+ end
29
+
30
+ def check_args
31
+ options[OPTION_CHECK_ARGS]
16
32
  end
17
33
 
18
34
  def exist?
@@ -32,7 +48,7 @@ module EacRubyUtils
32
48
  end
33
49
 
34
50
  def command(*command_args)
35
- validate!
51
+ validate! if auto_validate?
36
52
  env.command(*executable_args, *command_args)
37
53
  end
38
54
 
@@ -50,6 +66,8 @@ module EacRubyUtils
50
66
 
51
67
  private
52
68
 
69
+ attr_writer :options
70
+
53
71
  def exist_uncached
54
72
  env.command(*executable_args, *check_args).execute!
55
73
  true
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/object/blank'
4
+ require 'addressable/uri'
5
+
6
+ class Object
7
+ # Convert +self+ to String and then to Addressable::URI. Return nil if +self+ is +blank?+.
8
+ #
9
+ # @return [Addressable::URI]
10
+ def to_uri
11
+ return self if is_a?(::Addressable::URI)
12
+
13
+ to_s.blank? ? nil : ::Addressable::URI.parse(to_s)
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pathname
4
+ # @return +block.call(self)+ if +self+ exists, +default_value+ otherwise.
5
+ def if_exist(default_value = nil)
6
+ return default_value unless exist?
7
+
8
+ block_given? ? yield(self) : self
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pathname'
4
+
5
+ class Pathname
6
+ def readlink_r
7
+ r = self
8
+ r = r.readlink while r.symlink?
9
+ r
10
+ end
11
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/speaker/receiver'
4
+
5
+ module EacRubyUtils
6
+ module Rspec
7
+ class StubSpeaker
8
+ include ::EacRubyUtils::Speaker::Receiver
9
+
10
+ def error(_string); end
11
+
12
+ def fatal_error(string)
13
+ error(string)
14
+ raise('Fatal error')
15
+ end
16
+
17
+ # @see EacRubyUtils::Speaker::Sender.input
18
+ def input(_question, _options = {})
19
+ raise 'Input requested'
20
+ end
21
+
22
+ def info(_string); end
23
+
24
+ def infom(_string); end
25
+
26
+ def infov(*_args); end
27
+
28
+ def out(_string = ''); end
29
+
30
+ def puts(_string = ''); end
31
+
32
+ def success(_string); end
33
+
34
+ def title(_string); end
35
+
36
+ def warn(_string); end
37
+ end
38
+ end
39
+ end
@@ -5,8 +5,15 @@ require 'eac_ruby_utils/abstract_methods'
5
5
  module EacRubyUtils
6
6
  module Speaker
7
7
  module Receiver
8
+ extend ::ActiveSupport::Concern
8
9
  extend ::EacRubyUtils::AbstractMethods
9
10
 
11
+ module ClassMethods
12
+ def on(*args, &block)
13
+ ::EacRubyUtils::Speaker.context.on(new(*args), &block)
14
+ end
15
+ end
16
+
10
17
  def error(_string)
11
18
  raise_abstract_method(__method__)
12
19
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyUtils
4
- VERSION = '0.83.0'
4
+ VERSION = '0.87.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.113.6
4
+ version: 0.114.2
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: 2022-01-17 00:00:00.000000000 Z
11
+ date: 2022-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aranha-parsers
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.3'
75
+ version: '0.4'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.3'
82
+ version: '0.4'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: avm-eac_ruby_base1
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -292,8 +292,6 @@ files:
292
292
  - lib/avm/launcher/context/instance_manager/cached_instance.rb
293
293
  - lib/avm/launcher/context/instance_manager/cached_instances.rb
294
294
  - lib/avm/launcher/context/settings.rb
295
- - lib/avm/launcher/errors/base.rb
296
- - lib/avm/launcher/errors/non_project.rb
297
295
  - lib/avm/launcher/git.rb
298
296
  - lib/avm/launcher/git/base.rb
299
297
  - lib/avm/launcher/git/base/class_methods.rb
@@ -315,11 +313,9 @@ files:
315
313
  - lib/avm/launcher/instances/settings.rb
316
314
  - lib/avm/launcher/paths.rb
317
315
  - lib/avm/launcher/paths/logical.rb
318
- - lib/avm/launcher/paths/real.rb
319
316
  - lib/avm/launcher/project.rb
320
317
  - lib/avm/launcher/publish.rb
321
318
  - lib/avm/launcher/publish/base.rb
322
- - lib/avm/launcher/publish/check_result.rb
323
319
  - lib/avm/launcher/ruby.rb
324
320
  - lib/avm/launcher/ruby/gem.rb
325
321
  - lib/avm/launcher/ruby/gem/build.rb
@@ -514,6 +510,7 @@ files:
514
510
  - sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/deploy.rb
515
511
  - sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instance.rb
516
512
  - sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/docker_image.rb
513
+ - sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/rest_api.rb
517
514
  - sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/version.rb
518
515
  - sub/avm-eac_redmine_base0/spec/rubocop_spec.rb
519
516
  - sub/avm-eac_redmine_base0/spec/spec_helper.rb
@@ -721,6 +718,10 @@ files:
721
718
  - sub/avm/lib/avm/jobs.rb
722
719
  - sub/avm/lib/avm/jobs/base.rb
723
720
  - sub/avm/lib/avm/jobs/variables_source.rb
721
+ - sub/avm/lib/avm/launcher/errors/base.rb
722
+ - sub/avm/lib/avm/launcher/errors/non_project.rb
723
+ - sub/avm/lib/avm/launcher/paths/real.rb
724
+ - sub/avm/lib/avm/launcher/publish/check_result.rb
724
725
  - sub/avm/lib/avm/path_string.rb
725
726
  - sub/avm/lib/avm/registry.rb
726
727
  - sub/avm/lib/avm/registry/base.rb
@@ -883,8 +884,8 @@ files:
883
884
  - sub/eac_fs/Gemfile
884
885
  - sub/eac_fs/eac_fs.gemspec
885
886
  - sub/eac_fs/lib/eac_fs.rb
886
- - sub/eac_fs/lib/eac_fs/cache.rb
887
887
  - sub/eac_fs/lib/eac_fs/cached_download.rb
888
+ - sub/eac_fs/lib/eac_fs/contexts.rb
888
889
  - sub/eac_fs/lib/eac_fs/file_info.rb
889
890
  - sub/eac_fs/lib/eac_fs/logs.rb
890
891
  - sub/eac_fs/lib/eac_fs/logs/file.rb
@@ -895,10 +896,11 @@ files:
895
896
  - sub/eac_fs/lib/eac_fs/patches/object/fs_cache.rb
896
897
  - sub/eac_fs/lib/eac_fs/patches/pathname.rb
897
898
  - sub/eac_fs/lib/eac_fs/patches/pathname/info.rb
899
+ - sub/eac_fs/lib/eac_fs/storage_tree.rb
898
900
  - sub/eac_fs/lib/eac_fs/traversable.rb
899
901
  - sub/eac_fs/lib/eac_fs/traverser.rb
900
902
  - sub/eac_fs/lib/eac_fs/version.rb
901
- - sub/eac_fs/spec/lib/eac_fs/cache_spec.rb
903
+ - sub/eac_fs/spec/lib/eac_fs/storage_tree_spec.rb
902
904
  - sub/eac_fs/spec/rubocop_spec.rb
903
905
  - sub/eac_fs/spec/spec_helper.rb
904
906
  - sub/eac_git/Gemfile
@@ -914,6 +916,7 @@ files:
914
916
  - sub/eac_git/lib/eac_git/local/dirty_files.rb
915
917
  - sub/eac_git/lib/eac_git/local/log.rb
916
918
  - sub/eac_git/lib/eac_git/local/remote.rb
919
+ - sub/eac_git/lib/eac_git/local/remotes.rb
917
920
  - sub/eac_git/lib/eac_git/local/subrepo.rb
918
921
  - sub/eac_git/lib/eac_git/local/subrepo/config.rb
919
922
  - sub/eac_git/lib/eac_git/remote.rb
@@ -1122,6 +1125,16 @@ files:
1122
1125
  - sub/eac_git/vendor/git-subrepo/test/setup
1123
1126
  - sub/eac_git/vendor/git-subrepo/test/status.t
1124
1127
  - sub/eac_git/vendor/git-subrepo/test/submodule.t
1128
+ - sub/eac_rest/Gemfile
1129
+ - sub/eac_rest/eac_rest.gemspec
1130
+ - sub/eac_rest/lib/eac_rest.rb
1131
+ - sub/eac_rest/lib/eac_rest/api.rb
1132
+ - sub/eac_rest/lib/eac_rest/entity.rb
1133
+ - sub/eac_rest/lib/eac_rest/request.rb
1134
+ - sub/eac_rest/lib/eac_rest/response.rb
1135
+ - sub/eac_rest/lib/eac_rest/version.rb
1136
+ - sub/eac_rest/spec/rubocop_spec.rb
1137
+ - sub/eac_rest/spec/spec_helper.rb
1125
1138
  - sub/eac_ruby_base0/Gemfile
1126
1139
  - sub/eac_ruby_base0/eac_ruby_base0.gemspec
1127
1140
  - sub/eac_ruby_base0/lib/eac_ruby_base0.rb
@@ -1283,10 +1296,13 @@ files:
1283
1296
  - sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_present.rb
1284
1297
  - sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_respond.rb
1285
1298
  - sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/to_pathname.rb
1299
+ - sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/to_uri.rb
1286
1300
  - sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname.rb
1287
1301
  - sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/basename_sub.rb
1302
+ - sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/if_exist.rb
1288
1303
  - sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/mkpath_s.rb
1289
1304
  - sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/parent_n.rb
1305
+ - sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/readlink_r.rb
1290
1306
  - sub/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp.rb
1291
1307
  - sub/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp/if_match.rb
1292
1308
  - sub/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp/to_parser.rb
@@ -1303,6 +1319,7 @@ files:
1303
1319
  - sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup.rb
1304
1320
  - sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup/conditionals.rb
1305
1321
  - sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup_manager.rb
1322
+ - sub/eac_ruby_utils/lib/eac_ruby_utils/rspec/stub_speaker.rb
1306
1323
  - sub/eac_ruby_utils/lib/eac_ruby_utils/ruby.rb
1307
1324
  - sub/eac_ruby_utils/lib/eac_ruby_utils/ruby/command.rb
1308
1325
  - sub/eac_ruby_utils/lib/eac_ruby_utils/ruby/on_clean_environment.rb