dip 6.0.0 → 7.1.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.
@@ -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: []