dip 6.0.0 → 7.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,50 +1,58 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "shellwords"
4
- require_relative '../command'
4
+ require_relative "../command"
5
5
 
6
6
  module Dip
7
7
  module Commands
8
8
  module SSH
9
9
  class Up < Dip::Command
10
- def initialize(key:, volume:, interactive:)
10
+ def initialize(key:, volume:, interactive:, user: nil)
11
11
  @key = key
12
12
  @volume = volume
13
13
  @interactive = interactive
14
+ @user = user
14
15
  end
15
16
 
16
17
  def execute
17
- subshell("docker", "volume create --name ssh_data".shellsplit, out: File::NULL, err: File::NULL)
18
+ exec_subprocess("docker", "volume create --name ssh_data", out: File::NULL, err: File::NULL)
18
19
 
19
- subshell("docker", "run --detach --volume ssh_data:/ssh --name=ssh-agent whilp/ssh-agent".shellsplit)
20
+ exec_subprocess(
21
+ "docker",
22
+ "run #{user_args}--detach --volume ssh_data:/ssh --name=ssh-agent whilp/ssh-agent"
23
+ )
20
24
 
21
25
  key = Dip.env.interpolate(@key)
22
- subshell("docker", "run #{container_args} whilp/ssh-agent ssh-add #{key}".shellsplit)
26
+ exec_subprocess("docker", "run #{container_args} whilp/ssh-agent ssh-add #{key}")
23
27
  end
24
28
 
25
29
  private
26
30
 
31
+ def user_args
32
+ "-u #{@user} " if @user
33
+ end
34
+
27
35
  def container_args
28
- result = %w(--rm)
36
+ result = %w[--rm]
29
37
  volume = Dip.env.interpolate(@volume)
30
38
  result << "--volume ssh_data:/ssh"
31
39
  result << "--volume #{volume}:#{volume}"
32
40
  result << "--interactive --tty" if @interactive
33
- result.join(' ')
41
+ result.join(" ")
34
42
  end
35
43
  end
36
44
 
37
45
  class Down < Dip::Command
38
46
  def execute
39
- subshell("docker", "stop ssh-agent".shellsplit, panic: false, out: File::NULL, err: File::NULL)
40
- subshell("docker", "rm -v ssh-agent".shellsplit, panic: false, out: File::NULL, err: File::NULL)
41
- subshell("docker", "volume rm ssh_data".shellsplit, panic: false, out: File::NULL, err: File::NULL)
47
+ exec_subprocess("docker", "stop ssh-agent", panic: false, out: File::NULL, err: File::NULL)
48
+ exec_subprocess("docker", "rm -v ssh-agent", panic: false, out: File::NULL, err: File::NULL)
49
+ exec_subprocess("docker", "volume rm ssh_data", panic: false, out: File::NULL, err: File::NULL)
42
50
  end
43
51
  end
44
52
 
45
53
  class Status < Dip::Command
46
54
  def execute
47
- subshell("docker", "inspect --format '{{.State.Status}}' ssh-agent".shellsplit)
55
+ exec_subprocess("docker", "inspect --format '{{.State.Status}}' ssh-agent")
48
56
  end
49
57
  end
50
58
  end
data/lib/dip/config.rb CHANGED
@@ -29,10 +29,10 @@ module Dip
29
29
  @override = override
30
30
 
31
31
  @file_path = if ENV["DIP_FILE"]
32
- Pathname.new(prepared_name(ENV["DIP_FILE"]))
33
- else
34
- find(Pathname.new(work_dir))
35
- end
32
+ Pathname.new(prepared_name(ENV["DIP_FILE"]))
33
+ else
34
+ find(Pathname.new(work_dir))
35
+ end
36
36
  end
37
37
 
38
38
  def exist?
@@ -62,10 +62,19 @@ module Dip
62
62
  def load_yaml(file_path = path)
63
63
  return {} unless File.exist?(file_path)
64
64
 
65
- YAML.safe_load(
66
- ERB.new(File.read(file_path)).result,
67
- [], [], true
68
- )&.deep_symbolize_keys! || {}
65
+ data = if Gem::Version.new(Psych::VERSION) >= Gem::Version.new("4.0.0")
66
+ YAML.safe_load(
67
+ ERB.new(File.read(file_path)).result,
68
+ aliases: true
69
+ )
70
+ else
71
+ YAML.safe_load(
72
+ ERB.new(File.read(file_path)).result,
73
+ [], [], true
74
+ )
75
+ end
76
+
77
+ data&.deep_symbolize_keys! || {}
69
78
  end
70
79
  end
71
80
 
@@ -119,7 +128,7 @@ module Dip
119
128
  end
120
129
 
121
130
  def config_missing_error(config_key)
122
- msg = 'config for %<key>s is not defined in %<path>s' % {key: config_key, path: finder.file_path}
131
+ msg = "config for %<key>s is not defined in %<path>s" % {key: config_key, path: finder.file_path}
123
132
  ConfigKeyMissingError.new(msg)
124
133
  end
125
134
  end
@@ -4,7 +4,7 @@ require "pathname"
4
4
 
5
5
  module Dip
6
6
  class Environment
7
- VAR_REGEX = /\$[\{]?(?<var_name>[a-zA-Z_][a-zA-Z0-9_]*)[\}]?/.freeze
7
+ VAR_REGEX = /\$\{?(?<var_name>[a-zA-Z_][a-zA-Z0-9_]*)\}?/.freeze
8
8
  SPECIAL_VARS = %i[os work_dir_rel_path].freeze
9
9
 
10
10
  attr_reader :vars
@@ -26,8 +26,8 @@ module Dip
26
26
  vars.fetch(name) { ENV[name] }
27
27
  end
28
28
 
29
- def fetch(name)
30
- vars.fetch(name) { ENV.fetch(name) { yield } }
29
+ def fetch(name, &block)
30
+ vars.fetch(name) { ENV.fetch(name, &block) }
31
31
  end
32
32
 
33
33
  def []=(key, value)
@@ -35,18 +35,18 @@ module Dip
35
35
  end
36
36
 
37
37
  def interpolate(value)
38
- value.gsub(VAR_REGEX) do
38
+ value.gsub(VAR_REGEX) do |match|
39
39
  var_name = Regexp.last_match[:var_name]
40
40
 
41
41
  if special_vars.key?(var_name)
42
42
  fetch(var_name) { send(special_vars[var_name]) }
43
43
  else
44
- self[var_name]
44
+ fetch(var_name) { match }
45
45
  end
46
46
  end
47
47
  end
48
48
 
49
- alias replace interpolate
49
+ alias_method :replace, :interpolate
50
50
 
51
51
  private
52
52
 
data/lib/dip/ext/hash.rb CHANGED
@@ -24,7 +24,7 @@ module ActiveSupportHashHelpers
24
24
  merge!(other_hash) do |key, this_val, other_val|
25
25
  if this_val.is_a?(Hash) && other_val.is_a?(Hash)
26
26
  this_val.deep_merge(other_val, &block)
27
- elsif block_given?
27
+ elsif block
28
28
  block.call(key, this_val, other_val)
29
29
  else
30
30
  other_val
@@ -58,9 +58,10 @@ module Dip
58
58
  def build_command(entry)
59
59
  {
60
60
  description: entry[:description],
61
- service: entry.fetch(:service),
62
- command: entry[:command],
63
- default_args: prepare_default_args(entry[:default_args]),
61
+ service: entry[:service],
62
+ command: entry[:command].to_s.strip,
63
+ shell: entry.fetch(:shell, true),
64
+ default_args: entry[:default_args].to_s.strip,
64
65
  environment: entry[:environment] || {},
65
66
  compose: {
66
67
  method: entry.dig(:compose, :method) || entry[:compose_method] || "run",
@@ -76,19 +77,6 @@ module Dip
76
77
  entry[:description] ||= nil
77
78
  end
78
79
 
79
- def prepare_default_args(args)
80
- return [] if args.nil?
81
-
82
- case args
83
- when Array
84
- args
85
- when String
86
- args.shellsplit
87
- else
88
- raise ArgumentError, "Unknown type for default_args: #{args.inspect}"
89
- end
90
- end
91
-
92
80
  def compose_run_options(value)
93
81
  return [] unless value
94
82
 
data/lib/dip/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dip
4
- VERSION = "6.0.0"
4
+ VERSION = "7.1.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dip
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0
4
+ version: 7.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - bibendi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-17 00:00:00.000000000 Z
11
+ date: 2021-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -87,19 +87,47 @@ dependencies:
87
87
  - !ruby/object:Gem::Version
88
88
  version: '3.0'
89
89
  - !ruby/object:Gem::Dependency
90
- name: rubocop
90
+ name: standard
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '0.81'
95
+ version: '1.0'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '0.81'
102
+ version: '1.0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rubocop-rake
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.5'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.5'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rubocop-rspec
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '2.2'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '2.2'
103
131
  - !ruby/object:Gem::Dependency
104
132
  name: simplecov
105
133
  requirement: !ruby/object:Gem::Requirement
@@ -168,7 +196,7 @@ licenses:
168
196
  - MIT
169
197
  metadata:
170
198
  allowed_push_host: https://rubygems.org/
171
- post_install_message:
199
+ post_install_message:
172
200
  rdoc_options: []
173
201
  require_paths:
174
202
  - lib
@@ -176,16 +204,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
176
204
  requirements:
177
205
  - - ">="
178
206
  - !ruby/object:Gem::Version
179
- version: '2.4'
207
+ version: '2.5'
180
208
  required_rubygems_version: !ruby/object:Gem::Requirement
181
209
  requirements:
182
210
  - - ">="
183
211
  - !ruby/object:Gem::Version
184
212
  version: '0'
185
213
  requirements: []
186
- rubyforge_project:
187
- rubygems_version: 2.7.7
188
- signing_key:
214
+ rubygems_version: 3.1.2
215
+ signing_key:
189
216
  specification_version: 4
190
217
  summary: Ruby gem CLI tool for better interacting docker-compose files.
191
218
  test_files: []