dce 1.2.1 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
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: d03f0fd181904c307a001e0dff290f8299fd843076ad1e23159cbf2b03cff224
4
+ data.tar.gz: 53d7c24d9de56443eda9b3f7c61fcaed6205514cb6e49bdc438fcb3353d5e48e
5
5
  SHA512:
6
- metadata.gz: a9a0c16b156794011fb66081ab145c6c02e067f2c2668dcf1071f9a704c9203c92b3ea327ee4336b9a323e17e551f1404f50ad68e0ee7646442bbe08462aaeb1
7
- data.tar.gz: 1b6c4fa0b5c17dcfa297036d5b743f1c46c00ec1affbd543419c1b638da4c88b91db0833512e839a85e6cd7ed760f02480f560f005977e7c658028dbf9898c49
6
+ metadata.gz: 062ef9d7e3aaa341f8d606b54c3cdf7719a530592d230e842e37a7ca8c2b260bdc78f0beaebe9bbdb6d5556479b33a1b1f62858079270964f1ae386c6c4cd48c
7
+ data.tar.gz: bc816bf39032f13c06646fd77f086926d93d49d39a27524721498efa375b226a449f03af65fab8a11a9b4fe265a5b201b144051a747e91454a824b5e7ce1e5a7
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: 1.2.3
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-01-03 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