dce 1.2.1 → 2.0.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/dce +6 -3
  3. data/lib/dce.rb +50 -56
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ade08fae6e838cf29b366a060d826eaad54d843d383326556bea190935f893f1
4
- data.tar.gz: eb6edf4a9ee854980e5570a8dde1c3e9dfb98cc967ef27061a0abddf5e30b4d2
3
+ metadata.gz: dfec824823df9097b378b60414248b0f15425f8b36b3b7451976deda98483521
4
+ data.tar.gz: e4f323a4856ddb13104fb6a685f6a7b592d6ac4132ca27dcf407683a68390020
5
5
  SHA512:
6
- metadata.gz: a9a0c16b156794011fb66081ab145c6c02e067f2c2668dcf1071f9a704c9203c92b3ea327ee4336b9a323e17e551f1404f50ad68e0ee7646442bbe08462aaeb1
7
- data.tar.gz: 1b6c4fa0b5c17dcfa297036d5b743f1c46c00ec1affbd543419c1b638da4c88b91db0833512e839a85e6cd7ed760f02480f560f005977e7c658028dbf9898c49
6
+ metadata.gz: e081f242132ddf4bc5f492b70c9cb6ef3c68a6389595719ff7cd9ef057ce4b83f696d90562a62de9de74dc73d67c02c3c2f97f8aee637ccce6533d7d615b291c
7
+ data.tar.gz: aa71ec9c94d55ad927337ac8f67d342964305116af3ef3d15f93731a6e3488d774e9166dba54863be4e1fa4099ad2f01013055bb86955911e2b34622463ed878
data/bin/dce CHANGED
@@ -1,12 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ # frozen_string_literal: true
4
+
3
5
  require 'yaml'
4
6
  if ENV['COVERAGE']
5
7
  require 'simplecov'
6
8
 
7
9
  # Redefine exec to save coverage first.
8
10
  module Kernel
9
- alias_method :exec_real, :exec
11
+ alias exec_real exec
10
12
 
11
13
  def exec(command)
12
14
  SimpleCov.result
@@ -15,12 +17,13 @@ if ENV['COVERAGE']
15
17
  end
16
18
 
17
19
  SimpleCov.at_exit do
20
+ # Merge results with coverage from other processes, but suppresses
21
+ # formatting and output.
18
22
  SimpleCov.result
19
23
  end
20
24
  end
21
25
 
22
- # Possibly not the right way to load file.
23
- require_relative '../lib/dce.rb'
26
+ require_relative '../lib/dce'
24
27
 
25
28
  app = DCE.new
26
29
  app.run
data/lib/dce.rb CHANGED
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Wishlist:
2
4
  # Option to delete .dce_container.
3
5
  # Option for using run instead of exec?
4
6
 
7
+ # The dce commmand class.
5
8
  class DCE
6
9
  # Run the command
7
10
  def run
@@ -9,45 +12,38 @@ class DCE
9
12
 
10
13
  @conf_file = File.join(File.dirname(docker_compose_file), '.dce_container')
11
14
  config_container = nil
12
- if File.exists? @conf_file
13
- config_container = File.read @conf_file
14
- end
15
+ config_container = File.read(@conf_file) if File.exist? @conf_file
15
16
 
16
17
  if @list_containers
17
- STDOUT.puts(get_containers.join(', '))
18
+ $stdout.puts(containers.join(', '))
18
19
  exit
19
20
  end
20
21
 
21
22
  if @query
22
23
  if config_container
23
- STDOUT.puts(config_container)
24
+ $stdout.puts(config_container)
24
25
  exit
25
26
  else
26
- abort "No container saved."
27
+ abort 'No container saved.'
27
28
  end
28
29
  end
29
30
 
30
- if !@container
31
- @container = config_container ? config_container : query_container
32
- end
31
+ @container ||= config_container || query_container
33
32
 
34
- if @container != config_container
35
- File.write(@conf_file, @container)
36
- end
33
+ File.write(@conf_file, @container) if @container != config_container
37
34
 
38
35
  # If no command given, open a shell.
39
- if (@command.strip.empty?)
40
- @command = "if [ -e /usr/bin/fish ]; then /usr/bin/fish; elif [ -e /bin/bash ]; then /bin/bash; else /bin/sh; fi"
36
+ if @command.strip.empty?
37
+ @command = 'if [ -e /usr/bin/fish ]; then /usr/bin/fish; elif [ -e /bin/bash ]; then /bin/bash; else /bin/sh; fi'
41
38
  end
42
39
 
43
- args = '-i'
44
- args += 't' if STDIN.tty?
45
- container_id = %x{docker-compose ps -q #{@container}}.chomp
40
+ container_id = `docker compose ps -q #{@container}`.chomp
46
41
 
47
42
  abort("Container #{@container} not created.") if container_id.empty?
48
43
 
49
- command = "docker exec #{args} #{container_id} sh -c '#{@command}'"
50
- STDERR.puts "Exec'ing: " + command if @verbose
44
+ tty = $stdin.tty? ? 't' : ''
45
+ command = "docker exec -i#{tty} #{container_id} sh -c '#{@command}'"
46
+ warn "Exec'ing: #{command}" if @verbose
51
47
  exec command unless @dry_run
52
48
  end
53
49
 
@@ -55,8 +51,8 @@ class DCE
55
51
  # Will exit with an error if not found
56
52
  def docker_compose_file
57
53
  unless @compose_file
58
- dir = Dir.pwd()
59
- while dir != "/"
54
+ dir = Dir.pwd
55
+ while dir != '/'
60
56
  file = Dir.glob('docker-compose.{yml,yaml}', base: dir).first
61
57
  if file
62
58
  @compose_file = File.join(dir, file)
@@ -65,12 +61,10 @@ class DCE
65
61
  dir = File.dirname(dir)
66
62
  end
67
63
 
68
- if !@compose_file
69
- abort "No docker-compose.yml file found."
70
- end
64
+ abort 'No docker-compose.yml file found.' unless @compose_file
71
65
  end
72
66
 
73
- return @compose_file
67
+ @compose_file
74
68
  end
75
69
 
76
70
  # Parse command line arguments
@@ -82,9 +76,7 @@ class DCE
82
76
  case option
83
77
  when '-c', '--container'
84
78
  @container = ARGV.shift
85
- if !get_containers.include? @container
86
- abort "Unknown container #{@container}"
87
- end
79
+ abort "Unknown container #{@container}" unless containers.include? @container
88
80
  when '-v', '--verbose'
89
81
  @verbose = true
90
82
  when '-n', '--dry-run'
@@ -95,23 +87,23 @@ class DCE
95
87
  when '-l', '--list-containers'
96
88
  @list_containers = true
97
89
  when '-h', '--help'
98
- STDERR.puts <<-HEREDOC
99
- Usage: #{File.basename($0)} [OPTIONS]... COMMAND
100
- Runs COMMAND in docker-compose container.
90
+ warn <<~HEREDOC
91
+ Usage: #{File.basename($PROGRAM_NAME)} [OPTIONS]... COMMAND
92
+ Runs COMMAND in docker compose container.
101
93
 
102
- On first run, asks for the service container to use and saves it to .dce_container next
103
- to the docker-compose.yml file.
94
+ On first run, asks for the service container to use and saves it to .dce_container next
95
+ to the docker-compose.yml file.
104
96
 
105
- If no command given, opens a shell.
97
+ If no command given, opens a shell.
106
98
 
107
- Options:
108
- -c, --container SERVICE use the container of the specified service
99
+ Options:
100
+ -c, --container SERVICE use the container of the specified service
109
101
  replaces the selected container in the .dce_container
110
- -v, --verbose print exec'ed command
111
- -n, --dry-run only print exec'ed command, don't run
112
- -?, --print-service print the service saved
113
- -l, --list-containers print the containers available
114
- -h, --help print this help and exit
102
+ -v, --verbose print exec'ed command
103
+ -n, --dry-run only print exec'ed command, don't run
104
+ -?, --print-service print the service saved
105
+ -l, --list-containers print the containers available
106
+ -h, --help print this help and exit
115
107
 
116
108
  HEREDOC
117
109
  exit
@@ -126,26 +118,28 @@ Options:
126
118
  # Ask the user to select a container
127
119
  # The options are taken from the docker-compose.yml file
128
120
  def query_container
129
- containers = get_containers
130
- STDERR.puts "Please select container [#{containers.join(', ')}]"
131
- choice = STDIN.gets.strip
121
+ warn "Please select container [#{containers.join(', ')}]"
122
+ choice = $stdin.gets.strip
132
123
  exit if choice.empty?
133
- if !containers.include?(choice)
134
- abort "Illegal choice."
135
- end
124
+
125
+ abort 'Illegal choice.' unless containers.include?(choice)
136
126
  choice
137
127
  end
138
128
 
139
129
  # Read containers from docker-compose.yml
140
- def get_containers
141
- # Older Psychs took whether to allow YAML aliases as a fourth
142
- # argument, while newer has a keyword argument. Try both to be
143
- # compatible with as many versions as possible.
144
- begin
145
- content = YAML::safe_load(File.read(docker_compose_file), aliases: true)
146
- rescue ArgumentError
147
- content = YAML::safe_load(File.read(docker_compose_file), [], [], true)
130
+ def containers
131
+ unless @containers
132
+ # Older Psychs took whether to allow YAML aliases as a fourth
133
+ # argument, while newer has a keyword argument. Try both to be
134
+ # compatible with as many versions as possible.
135
+ begin
136
+ content = YAML.safe_load(File.read(docker_compose_file), aliases: true)
137
+ rescue ArgumentError
138
+ content = YAML.safe_load(File.read(docker_compose_file), [], [], true)
139
+ end
140
+ @containers = content.key?('services') ? content['services'].keys : content.keys
148
141
  end
149
- content.has_key?('version') ? content['services'].keys : content.keys
142
+
143
+ @containers
150
144
  end
151
145
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dce
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Fini Hansen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-01 00:00:00.000000000 Z
11
+ date: 2023-03-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Run shell commands in docker.
14
14
  email: xen@xen.dk
@@ -38,7 +38,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
40
  requirements: []
41
- rubygems_version: 3.0.3.1
41
+ rubygems_version: 3.1.6
42
42
  signing_key:
43
43
  specification_version: 4
44
44
  summary: DCE