eac_ruby_utils 0.41.0 → 0.42.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: 8e04909bde0d65f8b8615601194b4fb9c1fb3b6b56f6bf02cd98103fe0510e7b
4
- data.tar.gz: 902d0c69a54f0a0330c4e47afa498501b02beec6367c6d952f6d72f8388b74c5
3
+ metadata.gz: aae61dcf00f56fd19422516fdeddc796f6f18cb592bfda3d994ad91651f6ed9a
4
+ data.tar.gz: cec8de39973f51c39a7466249756105e3c37b80ffba2ab373f8a9a29f9eea8ca
5
5
  SHA512:
6
- metadata.gz: cbaf478b74fbb77fff8682b733685773ad8c3de4eac8e5fc9c2adcca81fbeac56a5e4df330c0ffb60097f1c3d75b371270814b52ca1bd54ef77fa417adf55284
7
- data.tar.gz: 947edd1f4ba4f942ba78ed5e17f99b95d1d89f456426437efa6c3eb35128c12b312fb628f962f0e123a38d8ea37c6fa7a135d1c4c4d7d1b6f9b6449e465458ed
6
+ metadata.gz: 7c8ec736251746dabf77d8d97b35c0768995cc83817830ec9af8c7261ce3d100d74ae87143ba7a3fbd82ca81e2618c8b0fbf13367820babb29341a1bfcf28efc
7
+ data.tar.gz: 98ce82f43d3f029d947e368dc1cd519d69249182e73fb13d0ee683050e0b93e4770d029eda3bc02f07b80909ab16788bec35b6086fb44f6daa82ec38255ebc37
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRubyUtils
4
+ class Boolean
5
+ class << self
6
+ def parse(value)
7
+ return parse_string(value) if value.is_a?(::String)
8
+ return parse_string(value.to_s) if value.is_a?(::Symbol)
9
+ return parse_number(value) if value.is_a?(::Number)
10
+
11
+ value ? true : false
12
+ end
13
+
14
+ private
15
+
16
+ def parse_string(value)
17
+ ['', 'n', 'no', 'f', 'false'].include?(value.strip.downcase) ? false : true
18
+ end
19
+
20
+ def parse_number(value)
21
+ value.zero?
22
+ end
23
+ end
24
+
25
+ attr_reader :value
26
+
27
+ def initialize(value)
28
+ @value = self.class.parse(value)
29
+ end
30
+ end
31
+ end
@@ -3,13 +3,15 @@
3
3
  require 'addressable'
4
4
  require 'eac_ruby_utils/envs/base_env'
5
5
  require 'eac_ruby_utils/patches/object/if_present'
6
+ require 'eac_ruby_utils/patches/module/require_sub'
6
7
  require 'net/ssh'
7
8
  require 'shellwords'
8
9
 
9
10
  module EacRubyUtils
10
11
  module Envs
11
12
  class SshEnv < ::EacRubyUtils::Envs::BaseEnv
12
- IDENTITITY_FILE_OPTION = 'IdentityFile'
13
+ require_sub __FILE__, include_modules: true
14
+
13
15
  USER_PATTERN = /[a-z_][a-z0-9_-]*/.freeze
14
16
  HOSTNAME_PATTERN = /[^@]+/.freeze
15
17
  USER_HOSTNAME_PATTERN = /\A(?:(#{USER_PATTERN})@)?(#{HOSTNAME_PATTERN})\z/.freeze
@@ -51,20 +53,16 @@ module EacRubyUtils
51
53
  private
52
54
 
53
55
  def ssh_command_line
54
- r = %w[ssh]
55
- r += ['-p', uri.port] if uri.port.present?
56
- ssh_identity_file.if_present { |v| r += ['-i', v] }
57
- r += ssh_command_line_options
58
- r << user_hostname_uri
59
- r.map { |a| Shellwords.escape(a) }.join(' ')
56
+ (%w[ssh] +
57
+ %w[nodasho dasho port].flat_map { |m| send("ssh_command_line_#{m}_args") } +
58
+ [user_hostname_uri])
59
+ .map { |a| Shellwords.escape(a) }.join(' ')
60
60
  end
61
61
 
62
- def ssh_command_line_options
63
- r = []
64
- uri.query_values&.each do |k, v|
65
- r += ['-o', "#{k}=#{v}"] unless k == IDENTITITY_FILE_OPTION
62
+ def ssh_command_line_port_args
63
+ uri.port.if_present([]) do |v|
64
+ ['-p', v]
66
65
  end
67
- r
68
66
  end
69
67
 
70
68
  def user_hostname_uri
@@ -72,12 +70,6 @@ module EacRubyUtils
72
70
  r = "#{uri.user}@#{r}" if uri.user.present?
73
71
  r
74
72
  end
75
-
76
- def ssh_identity_file
77
- uri.query_values.if_present do |v|
78
- v[IDENTITITY_FILE_OPTION]
79
- end
80
- end
81
73
  end
82
74
  end
83
75
  end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/patches/module/common_concern'
4
+ require 'eac_ruby_utils/patches/module/simple_cache'
5
+
6
+ module EacRubyUtils
7
+ module Envs
8
+ class SshEnv < ::EacRubyUtils::Envs::BaseEnv
9
+ module DashoOptions
10
+ common_concern
11
+
12
+ module ClassMethods
13
+ def add_nodasho_option(name)
14
+ return if nodasho_options.include?(name)
15
+
16
+ nodasho_options << name
17
+ const_set("#{name.underscore}_option".upcase, name)
18
+ end
19
+
20
+ def nodasho_options
21
+ @nodasho_options ||= []
22
+ end
23
+ end
24
+
25
+ module InstanceMethods
26
+ def ssh_command_line_dasho_args
27
+ r = []
28
+ uri.query_values&.each do |k, v|
29
+ r += ['-o', "#{k}=#{v}"] unless nodasho_options.include?(k)
30
+ end
31
+ r
32
+ end
33
+
34
+ def ssh_command_line_nodasho_args
35
+ nodasho_options.flat_map do |option_name|
36
+ uri_query_value(option_name).if_present([]) do |option_value|
37
+ send("ssh_command_line_#{option_name.underscore}_args", option_value)
38
+ end
39
+ end
40
+ end
41
+
42
+ def nodasho_options
43
+ self.class.nodasho_options
44
+ end
45
+
46
+ def uri_query_value(name)
47
+ uri.query_values.if_present { |v| v[name] }
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
4
+ require 'eac_ruby_utils/listable'
5
+ require 'eac_ruby_utils/patches/object/if_present'
6
+
7
+ module EacRubyUtils
8
+ module Envs
9
+ class SshEnv < ::EacRubyUtils::Envs::BaseEnv
10
+ module IdentityFile
11
+ extend ::ActiveSupport::Concern
12
+
13
+ included do
14
+ add_nodasho_option('IdentityFile')
15
+ end
16
+
17
+ def ssh_command_line_identity_file_args(value)
18
+ ['-i', value]
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
4
+ require 'eac_ruby_utils/boolean'
5
+
6
+ module EacRubyUtils
7
+ module Envs
8
+ class SshEnv < ::EacRubyUtils::Envs::BaseEnv
9
+ module Quiet
10
+ extend ::ActiveSupport::Concern
11
+
12
+ included do
13
+ add_nodasho_option('Quiet')
14
+ end
15
+
16
+ def ssh_command_line_quiet_args(value)
17
+ ::EacRubyUtils::Boolean.parse(value) ? ['-q'] : []
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
4
+ require 'eac_ruby_utils/listable'
5
+ require 'eac_ruby_utils/patches/object/if_present'
6
+
7
+ module EacRubyUtils
8
+ module Envs
9
+ class SshEnv < ::EacRubyUtils::Envs::BaseEnv
10
+ module Terminal
11
+ extend ::ActiveSupport::Concern
12
+
13
+ included do
14
+ add_nodasho_option('Terminal')
15
+ include ::EacRubyUtils::Listable
16
+ lists.add_string :terminal_option, :auto, :disable, :enable, :force
17
+ end
18
+
19
+ def ssh_command_line_terminal_args(value)
20
+ self.class.lists.terminal_option.value_validate!(value)
21
+ case value
22
+ when TERMINAL_OPTION_AUTO then ENV['TERM'].present? ? %w[-t] : []
23
+ when TERMINAL_OPTION_DISABLE then ['-T']
24
+ when TERMINAL_OPTION_ENABLE then ['-t']
25
+ when TERMINAL_OPTION_FORCE then ['-tt']
26
+ else raise "Invalid conditional branch: #{value}"
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyUtils
4
- VERSION = '0.41.0'
4
+ VERSION = '0.42.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.41.0
4
+ version: 0.42.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-07-19 00:00:00.000000000 Z
11
+ date: 2020-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -109,6 +109,7 @@ files:
109
109
  - README.rdoc
110
110
  - lib/eac_ruby_utils.rb
111
111
  - lib/eac_ruby_utils/arguments_consumer.rb
112
+ - lib/eac_ruby_utils/boolean.rb
112
113
  - lib/eac_ruby_utils/by_reference.rb
113
114
  - lib/eac_ruby_utils/common_concern.rb
114
115
  - lib/eac_ruby_utils/common_constructor.rb
@@ -139,6 +140,10 @@ files:
139
140
  - lib/eac_ruby_utils/envs/process.rb
140
141
  - lib/eac_ruby_utils/envs/spawn.rb
141
142
  - lib/eac_ruby_utils/envs/ssh_env.rb
143
+ - lib/eac_ruby_utils/envs/ssh_env/dasho_options.rb
144
+ - lib/eac_ruby_utils/envs/ssh_env/identity_file.rb
145
+ - lib/eac_ruby_utils/envs/ssh_env/quiet.rb
146
+ - lib/eac_ruby_utils/envs/ssh_env/terminal.rb
142
147
  - lib/eac_ruby_utils/filesystem_cache.rb
143
148
  - lib/eac_ruby_utils/fs.rb
144
149
  - lib/eac_ruby_utils/fs/extname.rb
@@ -237,8 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
242
  - !ruby/object:Gem::Version
238
243
  version: '0'
239
244
  requirements: []
240
- rubyforge_project:
241
- rubygems_version: 2.7.7
245
+ rubygems_version: 3.0.6
242
246
  signing_key:
243
247
  specification_version: 4
244
248
  summary: Utilities for E.A.C.'s Ruby projects.