eac_ruby_utils 0.30.0 → 0.31.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: 1680d184052f77a08665a26ef0516cf8d277be629bf77e2bb7f80aa567b15d78
4
- data.tar.gz: e188807dabbcbebb5e8540769c568a9d3c67f77ac518710fc05aa9b97f63cbe7
3
+ metadata.gz: 278662c9d15695f7556fa82d0042a29c65cf38490ef0eb69ba39bb06e125f913
4
+ data.tar.gz: 0f4aa577af44969f94b5a46e3be4c394fd378449ea6e76d5deacfaa2f480b224
5
5
  SHA512:
6
- metadata.gz: c3f8f24fca00cca9810b832e1ba44b9c53c27e61dfea24e0ecdcc7e52bcf8978ab7ba8150e251931ed6bda483dcb5ba2f38c14afb8c03ac10eaeb84fba25921d
7
- data.tar.gz: c0c5a84961622516f85d03120dd4be14d866977c148f0da7b28985b3e8e36274d298ad7c73770aaf11e27f0c9ff35af2840c1dd9411f8f9934fd2edd2db75efa
6
+ metadata.gz: bca74df52d4266c93b2d9355fa788c805c526145ad324e0852605f96f2e749cd15b3db6f2050f07cb30f0e890107e63294b8053415f8384008654084baf7529b
7
+ data.tar.gz: 817d006273a79b5f18d0346e7fbb8c21ad0c15fb53db36a9deb040270ea76b78caa8674b68eab81911a56e6eb8e24e02cef83a93809a17233120fb162a1e344a
@@ -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
@@ -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.31.0'
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.31.0
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-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -135,6 +135,8 @@ files:
135
135
  - lib/eac_ruby_utils/filesystem_cache.rb
136
136
  - lib/eac_ruby_utils/fs.rb
137
137
  - lib/eac_ruby_utils/fs/temp.rb
138
+ - lib/eac_ruby_utils/fs/temp/directory.rb
139
+ - lib/eac_ruby_utils/fs/temp/file.rb
138
140
  - lib/eac_ruby_utils/fs/traversable.rb
139
141
  - lib/eac_ruby_utils/fs/traverser.rb
140
142
  - lib/eac_ruby_utils/fs_cache.rb
@@ -152,6 +154,8 @@ files:
152
154
  - lib/eac_ruby_utils/patches.rb
153
155
  - lib/eac_ruby_utils/patches/class.rb
154
156
  - lib/eac_ruby_utils/patches/class/common_constructor.rb
157
+ - lib/eac_ruby_utils/patches/enumerable.rb
158
+ - lib/eac_ruby_utils/patches/enumerable/boolean_combinations.rb
155
159
  - lib/eac_ruby_utils/patches/hash.rb
156
160
  - lib/eac_ruby_utils/patches/hash/options_consumer.rb
157
161
  - lib/eac_ruby_utils/patches/hash/sym_keys_hash.rb
@@ -168,6 +172,11 @@ files:
168
172
  - lib/eac_ruby_utils/patches/object/to_pathname.rb
169
173
  - lib/eac_ruby_utils/patches/pathname.rb
170
174
  - lib/eac_ruby_utils/patches/pathname/basename_sub.rb
175
+ - lib/eac_ruby_utils/patches/regexp.rb
176
+ - lib/eac_ruby_utils/patches/regexp/if_match.rb
177
+ - lib/eac_ruby_utils/patches/time.rb
178
+ - lib/eac_ruby_utils/patches/time/default_time_zone_set.rb
179
+ - lib/eac_ruby_utils/patches/time/local_time_zone.rb
171
180
  - lib/eac_ruby_utils/paths_hash.rb
172
181
  - lib/eac_ruby_utils/require_sub.rb
173
182
  - lib/eac_ruby_utils/rspec.rb