ehbrs-tools 0.6.0 → 0.7.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.
Files changed (26) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ehbrs/observers/base.rb +64 -0
  3. data/lib/ehbrs/observers/with_persistence.rb +34 -0
  4. data/lib/ehbrs/observers.rb +11 -0
  5. data/lib/ehbrs/runner/fs/used_space.rb +161 -0
  6. data/lib/ehbrs/runner/fs.rb +19 -0
  7. data/lib/ehbrs/self/observers/used_space.rb +22 -0
  8. data/lib/ehbrs/self/observers/with_persistence.rb +38 -0
  9. data/lib/ehbrs/self.rb +9 -0
  10. data/lib/ehbrs/tools/version.rb +1 -1
  11. data/lib/ehbrs/user_dirs.rb +34 -0
  12. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/temp/directory.rb +16 -0
  13. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/temp/file.rb +34 -0
  14. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/temp.rb +27 -8
  15. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerable/boolean_combinations.rb +45 -0
  16. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerable.rb +4 -0
  17. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp/if_match.rb +16 -0
  18. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp.rb +4 -0
  19. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/time/default_time_zone_set.rb +5 -0
  20. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/time/local_time_zone.rb +25 -0
  21. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/time.rb +4 -0
  22. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  23. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/fs/temp/temp_spec.rb +12 -0
  24. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/fs/{temp.rb → temp_spec.rb} +22 -0
  25. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/enumerable/boolean_combinations_spec.rb +39 -0
  26. metadata +37 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 96df751900aa306378007272674b8421190952ee71b133b05c10fd247397ec50
4
- data.tar.gz: 80cce53bd76f46cb08de212d227ac639345198a5c93e9fb3deedd7c214831bf9
3
+ metadata.gz: 72afec8feac114779c526cf0b74bfddf4bb73f3c7b72c68b96d695814773cfad
4
+ data.tar.gz: 456156ff658bcd0c6ccab236d1c0785706e739fe0a98ffafd7ed1c2879216bd8
5
5
  SHA512:
6
- metadata.gz: 538ff43fc795b7dac1aa2ab1cd24974aa8155603e0f4929c5a2a8e7186e2f546625293b6db799c73f46198114541a213bd33d9a27b819d91182e6cbf743a81a7
7
- data.tar.gz: 2292ab898b428f1afb0c490816c0756d832c2cc40fd81ef7e7aa5dfb90a11b28b257ed09de45563d12d84d915b054081db71475da169dedc26bdaab5aa1945ac
6
+ metadata.gz: 549a83c6869358985e585fa9641d93b4b4260eef0da9c00ef48dd98f79c2ade46d8a1bc14dd71742bc9921001dbb066fcb93e9709cb0b82cb81e4cfb24a902ea
7
+ data.tar.gz: 7292c6e2fa9133ce8b9b82f8e0fce3e6183ca95932023a38172d57db1a8684bc24db517c2eaf95a42b900bb0fc22fa643469af78cb5e860bc73aee20d2e81fe9
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'ostruct'
5
+
6
+ module Ehbrs
7
+ module Observers
8
+ class Base
9
+ include ::EacRubyUtils::Listable
10
+
11
+ lists.add_string :blank_value, :add, :ignore, :raise
12
+
13
+ attr_reader :records, :blank_value, :last_check_time
14
+
15
+ common_constructor :options, default: [{}] do
16
+ @records = options[:records] || []
17
+ @blank_value = options[:blank_value].if_present(BLANK_VALUE_ADD) do |v|
18
+ v = v.to_s
19
+ ::Ehbrs::Observers::Base.lists.blank_value.value_validate!(v)
20
+ v
21
+ end
22
+ end
23
+
24
+ def check(value, date = ::Time.zone.now)
25
+ @last_check_time = date
26
+ send("check_with_blank_value_#{blank_value}", value, date)
27
+ end
28
+
29
+ def changing_value?(value)
30
+ records.if_present(true) do
31
+ last_value.if_present(value.present?) { |v| v != value }
32
+ end
33
+ end
34
+
35
+ def last_change_time
36
+ records.last.if_present(&:time)
37
+ end
38
+
39
+ def last_value
40
+ records.last.if_present(&:value)
41
+ end
42
+
43
+ private
44
+
45
+ def check_with_blank_value_add(value, time)
46
+ return false unless changing_value?(value)
47
+
48
+ records << ::OpenStruct.new(value: value, time: time)
49
+ true
50
+ end
51
+
52
+ def check_with_blank_value_ignore(value, date)
53
+ return false if value.blank? ? false : check_with_blank_value_add(value, date)
54
+ end
55
+
56
+ def check_with_blank_value_raise(value, date)
57
+ raise(::ArgumentError, "Blank value checked (Value: #{value}, Class: #{value.class})") if
58
+ value.blank?
59
+
60
+ check_with_blank_value_add(value, date)
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'ehbrs/observers/base'
5
+
6
+ module Ehbrs
7
+ module Observers
8
+ class WithPersistence < ::Ehbrs::Observers::Base
9
+ attr_reader :path
10
+
11
+ def initialize(path, options = {})
12
+ super(options)
13
+ @path = path.to_pathname
14
+ load
15
+ end
16
+
17
+ def check(value, date = ::Time.zone.now)
18
+ save if super(value, date)
19
+ end
20
+
21
+ def load
22
+ save unless path.exist?
23
+ data = ::YAML.load_file(path.to_path)
24
+ @records = data.fetch(:records).map { |h| ::OpenStruct.new(h) }
25
+ @last_check_time = data.fetch(:last_check_time)
26
+ end
27
+
28
+ def save
29
+ path.parent.mkpath
30
+ path.write({ records: records.map(&:to_h), last_check_time: last_check_time }.to_yaml)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Ehbrs
6
+ module Fs
7
+ module Observers
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,161 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs/self/observers/used_space'
4
+ require 'filesize'
5
+
6
+ module Ehbrs
7
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
8
+ class Fs < ::EacRubyUtils::Console::DocoptRunner
9
+ class UsedSpace < ::EacRubyUtils::Console::DocoptRunner
10
+ include ::EacCli::DefaultRunner
11
+
12
+ runner_definition do
13
+ desc 'Verifica e anota alterações de espaço usado de um objeto de sistema de arquivos.'
14
+ bool_opt '-c', '--check', 'Anota o espaço em disco.'
15
+ bool_opt '-v', '--verbose', 'Verbose.'
16
+ pos_arg :paths, repeat: true
17
+ end
18
+
19
+ def run
20
+ root_banner
21
+ paths.each(&:run)
22
+ end
23
+
24
+ def check?
25
+ options.fetch('--check')
26
+ end
27
+
28
+ private
29
+
30
+ def root_banner
31
+ return unless verbose?
32
+
33
+ infov 'Paths', paths.count
34
+ infov 'Check?', check?
35
+ infov 'Verbose?', verbose?
36
+ end
37
+
38
+ def path_class
39
+ verbose? ? PathVerbose : PathUnverbose
40
+ end
41
+
42
+ def paths_uncached
43
+ options.fetch('<paths>').map { |path| path_class.new(self, path) }
44
+ end
45
+
46
+ def verbose?
47
+ options.fetch('--verbose')
48
+ end
49
+
50
+ class PathBase
51
+ enable_simple_cache
52
+ enable_console_speaker
53
+ common_constructor :runner, :path do
54
+ self.path = path.to_pathname
55
+ end
56
+
57
+ private
58
+
59
+ def last_change_time
60
+ time_label(observer.observer.last_change_time)
61
+ end
62
+
63
+ def last_check
64
+ time_label(observer.observer.last_check_time)
65
+ end
66
+
67
+ def last_value
68
+ bytes_label(observer.observer.last_value)
69
+ end
70
+
71
+ def current_value
72
+ bytes_label(observer.current_value).colorize(
73
+ observer.changing_value? ? :green : :light_black
74
+ )
75
+ end
76
+
77
+ def changing_value?
78
+ changing_label(observer.changing_value?)
79
+ end
80
+
81
+ def observer_uncached
82
+ ::Ehbrs::Self::Observers::UsedSpace.new(path)
83
+ end
84
+
85
+ def changing_label(bool)
86
+ bool.to_s.colorize(bool ? :green : :light_black)
87
+ end
88
+
89
+ def time_label(time)
90
+ time.if_present('-', &:to_s)
91
+ end
92
+ end
93
+
94
+ class PathVerbose < PathBase
95
+ def run
96
+ infom path.to_s
97
+ on_speaker_node do |node|
98
+ node.stderr_line_prefix = ' '
99
+ banner
100
+ check
101
+ end
102
+ end
103
+
104
+ private
105
+
106
+ def banner
107
+ { 'Path' => observer.path,
108
+ 'Persistence path' => observer.persistence_path,
109
+ 'Last check' => last_check,
110
+ 'Last change' => last_change_time,
111
+ 'Last value' => last_value,
112
+ 'Current value' => current_value,
113
+ 'Changing?' => changing_value? }.each do |k, v|
114
+ infov k, v
115
+ end
116
+ end
117
+
118
+ def check
119
+ return unless runner.check?
120
+
121
+ infom 'Checking...'
122
+ if observer.check_current_value
123
+ success 'A new value was recorded'
124
+ else
125
+ info 'No new value was recorded'
126
+ end
127
+ end
128
+
129
+ def bytes_label(number)
130
+ number.if_present('-') { |v| "#{v} (#{::Filesize.from("#{v} B").pretty})" }
131
+ end
132
+ end
133
+
134
+ class PathUnverbose < PathBase
135
+ def run
136
+ self.puts output_line
137
+ end
138
+
139
+ def output_line
140
+ [path.to_s.cyan, last_change_time, last_value, current_value, check_result]
141
+ .reject(&:blank?).join('|')
142
+ end
143
+
144
+ def check_result
145
+ return nil unless runner.check?
146
+
147
+ observer.check_current_value ? 'Recorded'.green : 'Unchanged'.light_black
148
+ end
149
+
150
+ def bytes_label(number)
151
+ number.if_present('-') { |v| ::Filesize.from("#{v} B").pretty }
152
+ end
153
+
154
+ def time_label(time)
155
+ time.if_present('-') { |t| t.strftime('%d/%m/%y %H:%M') }
156
+ end
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/default_runner'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'eac_ruby_utils/console/docopt_runner'
6
+
7
+ module Ehbrs
8
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
9
+ class Fs < ::EacRubyUtils::Console::DocoptRunner
10
+ include ::EacCli::DefaultRunner
11
+ require_sub __FILE__
12
+
13
+ runner_definition do
14
+ desc 'Ferramentas para o sistema de arquivos.'
15
+ subcommands
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs/self/observers/with_persistence'
4
+
5
+ module Ehbrs
6
+ module Self
7
+ module Observers
8
+ class UsedSpace < ::Ehbrs::Self::Observers::WithPersistence
9
+ def path
10
+ label
11
+ end
12
+
13
+ def calculate_value
14
+ env = ::EacRubyUtils::Envs.local
15
+ env.command('du', '-sb', path.to_s).pipe(
16
+ env.command('cut', '-f', '-1')
17
+ ).execute!.strip.to_i
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs/observers/with_persistence'
4
+ require 'ehbrs/user_dirs'
5
+
6
+ module Ehbrs
7
+ module Self
8
+ module Observers
9
+ class WithPersistence
10
+ enable_simple_cache
11
+ common_constructor :label
12
+
13
+ def check_current_value
14
+ observer.check(current_value)
15
+ end
16
+
17
+ def changing_value?
18
+ observer.changing_value?(current_value)
19
+ end
20
+
21
+ private
22
+
23
+ def current_value_uncached
24
+ calculate_value
25
+ end
26
+
27
+ def observer_uncached
28
+ ::Ehbrs::Observers::WithPersistence.new(persistence_path, blank_value: :raise)
29
+ end
30
+
31
+ def persistence_path_uncached
32
+ ::Ehbrs::UserDirs.data.child('observers', label.to_s.parameterize)
33
+ .content_path.to_pathname
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
data/lib/ehbrs/self.rb ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Ehbrs
6
+ module Self
7
+ require_sub __FILE__
8
+ end
9
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ehbrs
4
4
  module Tools
5
- VERSION = '0.6.0'
5
+ VERSION = '0.7.0'
6
6
  end
7
7
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/filesystem_cache'
4
+ require 'eac_ruby_utils/simple_cache'
5
+
6
+ module Ehbrs
7
+ module UserDirs
8
+ class << self
9
+ include ::EacRubyUtils::SimpleCache
10
+
11
+ def application_id
12
+ 'ehbrs-tools'
13
+ end
14
+
15
+ private
16
+
17
+ def user_home_dir_uncached
18
+ ::EacRubyUtils::FilesystemCache.new(ENV['HOME'])
19
+ end
20
+
21
+ def cache_uncached
22
+ user_home_dir.child('.cache', application_id)
23
+ end
24
+
25
+ def config_uncached
26
+ user_home_dir.child('.config', application_id)
27
+ end
28
+
29
+ def data_uncached
30
+ user_home_dir.child('.local', 'share', application_id)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/fs/temp/file'
4
+
5
+ module EacRubyUtils
6
+ module Fs
7
+ module Temp
8
+ class Directory < ::EacRubyUtils::Fs::Temp::File
9
+ def initialize(*tempfile_args)
10
+ super(*tempfile_args)
11
+ mkpath
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pathname'
4
+ require 'tempfile'
5
+
6
+ module EacRubyUtils
7
+ module Fs
8
+ module Temp
9
+ class File < Pathname
10
+ # Temporary file
11
+ def initialize(*tempfile_args)
12
+ file = Tempfile.new(*tempfile_args)
13
+ path = file.path
14
+ file.close
15
+ file.unlink
16
+ super(path)
17
+ end
18
+
19
+ def remove
20
+ if directory?
21
+ rmtree
22
+ elsif file?
23
+ unlink
24
+ end
25
+ end
26
+
27
+ def remove!
28
+ remove
29
+ raise "Tried to remove \"#{self}\", but it yet exists" if exist?
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_ruby_utils/require_sub'
3
4
  require 'pathname'
4
5
  require 'tempfile'
5
6
 
@@ -8,23 +9,41 @@ module EacRubyUtils
8
9
  # Utilities for temporary files.
9
10
  module Temp
10
11
  class << self
12
+ ::EacRubyUtils.require_sub __FILE__
13
+
14
+ # Shortcut to +EacRubyUtils::Fs::Temp::Directory.new(*tempfile_args)+.
15
+ #
16
+ # @return [Pathname]
17
+ def directory(*tempfile_args)
18
+ ::EacRubyUtils::Fs::Temp::Directory.new(*tempfile_args)
19
+ end
20
+
21
+ # Shortcut to +EacRubyUtils::Fs::Temp::File.new(*tempfile_args)+.
22
+ #
11
23
  # @return [Pathname]
12
24
  def file(*tempfile_args)
13
- file = Tempfile.new(*tempfile_args)
14
- r = ::Pathname.new(file.path)
15
- file.close
16
- file.unlink
17
- r
25
+ ::EacRubyUtils::Fs::Temp::File.new(*tempfile_args)
26
+ end
27
+
28
+ # Run a block while a temporary directory pathname is provided. The directory is deleted
29
+ # when the block is finished.
30
+ def on_directory(*tempfile_args)
31
+ temp_dir = directory(*tempfile_args)
32
+ begin
33
+ yield(temp_dir)
34
+ ensure
35
+ temp_dir.remove
36
+ end
18
37
  end
19
38
 
20
39
  # Run a block while a temporary file pathname is providade. The file is deleted when block
21
40
  # is finished.
22
41
  def on_file(*tempfile_args)
23
- pathname = file(*tempfile_args)
42
+ temp_file = file(*tempfile_args)
24
43
  begin
25
- yield(pathname)
44
+ yield(temp_file)
26
45
  ensure
27
- pathname.unlink if pathname.exist?
46
+ temp_file.remove
28
47
  end
29
48
  end
30
49
  end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Enumerable
4
+ # Produces a array with values's all combinations.
5
+ #
6
+ # Example:
7
+ # %i[a b].boolean_combinations
8
+ # => [[], [:a], [:b], [:a, :b]]
9
+ #
10
+ # @return [Array]
11
+ def bool_array_combs
12
+ bool_combs([], method(:bool_array_combs_new_comb))
13
+ end
14
+
15
+ # Produces a hash with values's all combinations.
16
+ #
17
+ # Example:
18
+ # %i[a b].boolean_combinations
19
+ # => [{a: false, b: false}, {a: false, b: true}, {a: true, b: false}, {a: true, b: true}]
20
+ #
21
+ # @return [Hash]
22
+ def bool_hash_combs
23
+ bool_combs({}, method(:bool_hash_combs_new_comb))
24
+ end
25
+
26
+ private
27
+
28
+ def bool_combs(empty_value, new_comb_method)
29
+ head = [empty_value]
30
+ r = inject(head) do |a, value|
31
+ new_comb_method.call(value, a)
32
+ end
33
+ r == head ? [] : r
34
+ end
35
+
36
+ def bool_array_combs_new_comb(value, combs)
37
+ combs + combs.map { |c| c + [value] }
38
+ end
39
+
40
+ def bool_hash_combs_new_comb(value, combs)
41
+ combs.flat_map do |comb|
42
+ [false, true].map { |bool_value| comb.dup.merge(value => bool_value) }
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/require_sub'
4
+ ::EacRubyUtils.require_sub __FILE__
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Regexp
4
+ # If +self+ matches +string+ returns +block.call(Match result) or only Match result if block is
5
+ # not provided.
6
+ # If +self+ does not match +string+ raises a +ArgumentError+ if +required+ is truthy or return
7
+ # +nil+ otherwise.
8
+ def if_match(string, required = true, &block)
9
+ m = match(string)
10
+ if m
11
+ block ? block.call(m) : m
12
+ elsif required
13
+ raise(::ArgumentError, "Pattern \"#{self}\" does not match string \"#{string}\"")
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/require_sub'
4
+ ::EacRubyUtils.require_sub __FILE__
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/patches/time/local_time_zone'
4
+
5
+ ::Time.zone = ::Time.local_time_zone
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/time/zones'
4
+ require 'eac_ruby_utils/envs'
5
+
6
+ class Time
7
+ class << self
8
+ TIMEDATECTL_TIMEZONE_LINE_PATTERN = %r{\s*Time zone:\s*(\S+/\S+)\s}.freeze
9
+
10
+ def local_time_zone
11
+ local_time_zone_by_timedatectl || local_time_zone_by_offset
12
+ end
13
+
14
+ def local_time_zone_by_timedatectl
15
+ executable = ::EacRubyUtils::Envs.local.executable('timedatectl', '--version')
16
+ return nil unless executable.exist?
17
+
18
+ TIMEDATECTL_TIMEZONE_LINE_PATTERN.if_match(executable.command.execute!) { |m| m[1] }
19
+ end
20
+
21
+ def local_time_zone_by_offset
22
+ ::ActiveSupport::TimeZone[::Time.now.getlocal.gmt_offset].name
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/require_sub'
4
+ ::EacRubyUtils.require_sub __FILE__
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyUtils
4
- VERSION = '0.30.0'
4
+ VERSION = '0.31.0'
5
5
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/fs/temp/directory'
4
+
5
+ RSpec.describe ::EacRubyUtils::Fs::Temp::Directory do
6
+ describe '#remove!' do
7
+ let(:instance) { described_class.new }
8
+
9
+ it { expect(instance).to be_directory }
10
+ it { expect { instance.remove! }.to_not raise_error }
11
+ end
12
+ end
@@ -27,4 +27,26 @@ RSpec.describe ::EacRubyUtils::Fs::Temp do
27
27
  expect(temp_path).not_to exist
28
28
  end
29
29
  end
30
+
31
+ describe '#on_directory' do
32
+ it do
33
+ temp_path = nil
34
+ described_class.on_directory do |path|
35
+ temp_path = path
36
+ expect(temp_path).to be_directory
37
+ end
38
+ expect(temp_path).not_to exist
39
+ end
40
+
41
+ it 'not fail if already removed' do
42
+ temp_path = nil
43
+ described_class.on_directory do |path|
44
+ temp_path = path
45
+ expect(temp_path).to be_directory
46
+ temp_path.rmtree
47
+ expect(temp_path).not_to exist
48
+ end
49
+ expect(temp_path).not_to exist
50
+ end
51
+ end
30
52
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/patches/enumerable/boolean_combinations'
4
+
5
+ RSpec.describe ::Enumerable do
6
+ let(:empty_instance) { [].to_enum }
7
+ let(:a_instance) { [:a].to_enum }
8
+ let(:ab_instance) { %i[a b].to_enum }
9
+
10
+ describe '#bool_hash_combs' do
11
+ it do
12
+ expect(empty_instance.bool_hash_combs).to eq([])
13
+ end
14
+
15
+ it do
16
+ expect(a_instance.bool_hash_combs).to eq([{ a: false }, { a: true }])
17
+ end
18
+
19
+ it do
20
+ expect(ab_instance.bool_hash_combs)
21
+ .to eq([{ a: false, b: false }, { a: false, b: true }, { a: true, b: false },
22
+ { a: true, b: true }])
23
+ end
24
+ end
25
+
26
+ describe '#bool_array_combs' do
27
+ it do
28
+ expect(empty_instance.bool_array_combs).to eq([])
29
+ end
30
+
31
+ it do
32
+ expect(a_instance.bool_array_combs).to eq([[], [:a]])
33
+ end
34
+
35
+ it do
36
+ expect(ab_instance.bool_array_combs).to eq([[], [:a], [:b], %i[a b]])
37
+ end
38
+ end
39
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ehbrs-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.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-04-29 00:00:00.000000000 Z
11
+ date: 2020-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_ruby_utils
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.19'
27
+ - !ruby/object:Gem::Dependency
28
+ name: filesize
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: inifile
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -63,14 +77,23 @@ files:
63
77
  - exe/ehbrs
64
78
  - lib/ehbrs.rb
65
79
  - lib/ehbrs/executables.rb
80
+ - lib/ehbrs/observers.rb
81
+ - lib/ehbrs/observers/base.rb
82
+ - lib/ehbrs/observers/with_persistence.rb
66
83
  - lib/ehbrs/runner.rb
84
+ - lib/ehbrs/runner/fs.rb
85
+ - lib/ehbrs/runner/fs/used_space.rb
67
86
  - lib/ehbrs/runner/vg.rb
68
87
  - lib/ehbrs/runner/vg/ips.rb
69
88
  - lib/ehbrs/runner/vg/wii.rb
70
89
  - lib/ehbrs/runner/videos.rb
71
90
  - lib/ehbrs/runner/videos/unsupported.rb
91
+ - lib/ehbrs/self.rb
92
+ - lib/ehbrs/self/observers/used_space.rb
93
+ - lib/ehbrs/self/observers/with_persistence.rb
72
94
  - lib/ehbrs/tools.rb
73
95
  - lib/ehbrs/tools/version.rb
96
+ - lib/ehbrs/user_dirs.rb
74
97
  - lib/ehbrs/vg.rb
75
98
  - lib/ehbrs/vg/wii.rb
76
99
  - lib/ehbrs/vg/wii/file_move.rb
@@ -158,6 +181,8 @@ files:
158
181
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/filesystem_cache.rb
159
182
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/fs.rb
160
183
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/temp.rb
184
+ - vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/temp/directory.rb
185
+ - vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/temp/file.rb
161
186
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traversable.rb
162
187
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
163
188
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/fs_cache.rb
@@ -175,6 +200,8 @@ files:
175
200
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches.rb
176
201
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/class.rb
177
202
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/class/common_constructor.rb
203
+ - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerable.rb
204
+ - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/enumerable/boolean_combinations.rb
178
205
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/hash.rb
179
206
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/hash/options_consumer.rb
180
207
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/hash/sym_keys_hash.rb
@@ -191,6 +218,11 @@ files:
191
218
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/to_pathname.rb
192
219
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname.rb
193
220
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/basename_sub.rb
221
+ - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp.rb
222
+ - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/regexp/if_match.rb
223
+ - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/time.rb
224
+ - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/time/default_time_zone_set.rb
225
+ - vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/time/local_time_zone.rb
194
226
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash.rb
195
227
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/require_sub.rb
196
228
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec.rb
@@ -217,9 +249,11 @@ files:
217
249
  - vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/envs/executable_spec.rb
218
250
  - vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/envs/ssh_env_spec.rb
219
251
  - vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/filesystem_cache_spec.rb
220
- - vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/fs/temp.rb
252
+ - vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/fs/temp/temp_spec.rb
253
+ - vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/fs/temp_spec.rb
221
254
  - vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/listable_spec.rb
222
255
  - vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/options_consumer_spec.rb
256
+ - vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/enumerable/boolean_combinations_spec.rb
223
257
  - vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/hash/options_consumer_spec.rb
224
258
  - vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/hash/sym_keys_hash_spec.rb
225
259
  - vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/console_speaker_spec.rb