eac_ruby_utils 0.30.0 → 0.33.1

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: 1680d184052f77a08665a26ef0516cf8d277be629bf77e2bb7f80aa567b15d78
4
- data.tar.gz: e188807dabbcbebb5e8540769c568a9d3c67f77ac518710fc05aa9b97f63cbe7
3
+ metadata.gz: b15ce47fc0a4be7f0d4d5c508e7460447818bcc4eef4f1b49d70c21475320091
4
+ data.tar.gz: 904f3e7fddda7113e1b70decadd20e9d1fd0e36c5a2f5467067a76abc1680ee1
5
5
  SHA512:
6
- metadata.gz: c3f8f24fca00cca9810b832e1ba44b9c53c27e61dfea24e0ecdcc7e52bcf8978ab7ba8150e251931ed6bda483dcb5ba2f38c14afb8c03ac10eaeb84fba25921d
7
- data.tar.gz: c0c5a84961622516f85d03120dd4be14d866977c148f0da7b28985b3e8e36274d298ad7c73770aaf11e27f0c9ff35af2840c1dd9411f8f9934fd2edd2db75efa
6
+ metadata.gz: 24b859d02cbb17c2a87f89fecfac6d066cc3446516ecb34dc92d56bbc403a3969229e59622e0c654daf816585b539d14bed37400a072cd63fdf67160804e9d42
7
+ data.tar.gz: b02dc4a1d20787d3cbc0de8a0831d6c0cda42a5f2a6c7af3ce6fb7b6e85e65fd93ef9253d889297c034f8452e867735a8b9a4e5f1cbcd8c49028f4ee26f1a201
@@ -31,9 +31,9 @@ module EacRubyUtils
31
31
  raise ProgramNotFoundError, message if message
32
32
  end
33
33
 
34
- def command
34
+ def command(*command_args)
35
35
  validate!
36
- env.command(name)
36
+ env.command(name, *command_args)
37
37
  end
38
38
 
39
39
  private
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRubyUtils
4
+ module Fs
5
+ class << self
6
+ # A [File.extname] which find multiple extensions (Ex.: .tar.gz).
7
+ def extname(path, limit = -1)
8
+ recursive_extension(::File.basename(path), limit)
9
+ end
10
+
11
+ # Shortcut to +extname(2)+.
12
+ def extname2(path)
13
+ extname(path, 2)
14
+ end
15
+
16
+ private
17
+
18
+ def recursive_extension(basename, limit)
19
+ return '' if limit.zero?
20
+
21
+ m = /\A(.+)(\.[a-z][a-z0-9]*)\z/i.match(basename)
22
+ if m
23
+ "#{recursive_extension(m[1], limit - 1)}#{m[2]}"
24
+ else
25
+ ''
26
+ end
27
+ end
28
+ end
29
+ end
30
+ 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,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
@@ -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,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
@@ -4,6 +4,6 @@ require 'eac_ruby_utils/patch'
4
4
 
5
5
  class Module
6
6
  def patch(patch_module)
7
- ::Eac::Ruby::Utils.patch(self, patch_module)
7
+ ::EacRubyUtils.patch(self, patch_module)
8
8
  end
9
9
  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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyUtils
4
- VERSION = '0.30.0'
4
+ VERSION = '0.33.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eac_ruby_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.0
4
+ version: 0.33.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esquilo Azul Company
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-29 00:00:00.000000000 Z
11
+ date: 2020-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -87,6 +87,9 @@ dependencies:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0.1'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 0.1.1
90
93
  type: :development
91
94
  prerelease: false
92
95
  version_requirements: !ruby/object:Gem::Requirement
@@ -94,6 +97,9 @@ dependencies:
94
97
  - - "~>"
95
98
  - !ruby/object:Gem::Version
96
99
  version: '0.1'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 0.1.1
97
103
  description:
98
104
  email:
99
105
  executables: []
@@ -134,7 +140,10 @@ files:
134
140
  - lib/eac_ruby_utils/envs/ssh_env.rb
135
141
  - lib/eac_ruby_utils/filesystem_cache.rb
136
142
  - lib/eac_ruby_utils/fs.rb
143
+ - lib/eac_ruby_utils/fs/extname.rb
137
144
  - lib/eac_ruby_utils/fs/temp.rb
145
+ - lib/eac_ruby_utils/fs/temp/directory.rb
146
+ - lib/eac_ruby_utils/fs/temp/file.rb
138
147
  - lib/eac_ruby_utils/fs/traversable.rb
139
148
  - lib/eac_ruby_utils/fs/traverser.rb
140
149
  - lib/eac_ruby_utils/fs_cache.rb
@@ -152,6 +161,8 @@ files:
152
161
  - lib/eac_ruby_utils/patches.rb
153
162
  - lib/eac_ruby_utils/patches/class.rb
154
163
  - lib/eac_ruby_utils/patches/class/common_constructor.rb
164
+ - lib/eac_ruby_utils/patches/enumerable.rb
165
+ - lib/eac_ruby_utils/patches/enumerable/boolean_combinations.rb
155
166
  - lib/eac_ruby_utils/patches/hash.rb
156
167
  - lib/eac_ruby_utils/patches/hash/options_consumer.rb
157
168
  - lib/eac_ruby_utils/patches/hash/sym_keys_hash.rb
@@ -168,6 +179,11 @@ files:
168
179
  - lib/eac_ruby_utils/patches/object/to_pathname.rb
169
180
  - lib/eac_ruby_utils/patches/pathname.rb
170
181
  - lib/eac_ruby_utils/patches/pathname/basename_sub.rb
182
+ - lib/eac_ruby_utils/patches/regexp.rb
183
+ - lib/eac_ruby_utils/patches/regexp/if_match.rb
184
+ - lib/eac_ruby_utils/patches/time.rb
185
+ - lib/eac_ruby_utils/patches/time/default_time_zone_set.rb
186
+ - lib/eac_ruby_utils/patches/time/local_time_zone.rb
171
187
  - lib/eac_ruby_utils/paths_hash.rb
172
188
  - lib/eac_ruby_utils/require_sub.rb
173
189
  - lib/eac_ruby_utils/rspec.rb