envandle 0.2.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ff69392778f46788da2d586a57395dd909d84936
4
- data.tar.gz: 601ea8bffd72c9460f953b6356702cda831f1ec3
3
+ metadata.gz: ac9db50e7977e1c07ba3f2a2f882d2dd00fa41e7
4
+ data.tar.gz: b570ef35b12e02cb3a47993a8676710563c32ef9
5
5
  SHA512:
6
- metadata.gz: 70fe6bade653580f5351ebd44ab4bb8ddd476dcd2ccd0a3f85efc05c0f5ef95894d98eb3990c973f6a9d397ea122db4d0559221f13ed739560677c5a194461e6
7
- data.tar.gz: 1794974ec6611b2e511e599939da7c9c03a7cea7064f241f45a08b8f1a281587bf90c2034f0eb858e8ceb0026a6a622e7a3171aa6fdc4c7db747d3c71d05ef38
6
+ metadata.gz: 802b941c80adf4b48a74c5ede5fb4e41f2f5da36c364518df007a0b286f3ae49ff95f87aa91e71cdcef6931c5ed0bf5644035e18f5d5b8ae7ded5e67efbd0600
7
+ data.tar.gz: 5c2185eecac33db45da7fefa71399ca0866372b810c50024a0ae63213d63d4bbcf836c55095bad39d086a7af118753464eef067f23c2e77b84a37ed99fd16a2e
data/README.md CHANGED
@@ -20,7 +20,7 @@ require "envandle"
20
20
  binding.envandle do
21
21
  source "https://rubygems.org"
22
22
 
23
- bundle.gem "mygem", "~> 1.0"
23
+ gem "mygem", "~> 1.0"
24
24
  end
25
25
  ```
26
26
 
@@ -163,3 +163,29 @@ is evaluated as:
163
163
  gem "a", path: "/path/to/a"
164
164
  gem "b", path: "/path/to/b"
165
165
  ```
166
+
167
+ ## install-envandle
168
+
169
+ The install-envandle command just installs Envandle itself with the `bundle install` command. It's useful for successfully loading Envandle in your Gemfile with the Bundler's --path option.
170
+
171
+ ```
172
+ $ install-envandle -h
173
+ install-envandle [OPTIONS]
174
+
175
+ Installs Envandle using Bundler.
176
+
177
+ Options:
178
+ --envandle-source gem source (default: https://rubygems.org)
179
+ --envandle-bundle-bin command path (default: bundle)
180
+
181
+ Additionally, you can specify all of the bundle-install's options.
182
+ ```
183
+
184
+ ### Usage Example
185
+
186
+ ```sh
187
+ $ gem install bundler
188
+ $ gem install envandle
189
+ $ install-envandle --path vendor/bundle
190
+ $ bundle install
191
+ ```
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.expand_path("../../lib", __FILE__)
4
+ require "envandle"
5
+ require "tempfile"
6
+
7
+ gem_source = "https://rubygems.org"
8
+ bundle_bin = "bundle"
9
+
10
+ args = []
11
+ argv = ARGV.dup
12
+ while arg = argv.shift
13
+ if arg.start_with?("--gemfile")
14
+ abort "--gemfile option not allowed."
15
+ end
16
+ case arg
17
+ when "--envandle-source"
18
+ gem_source = argv.shift
19
+ when "--envandle-bundle-bin"
20
+ bundle_bin = argv.shift
21
+ when "-h", "--help"
22
+ print <<-EOS
23
+ install-envandle [OPTIONS]
24
+
25
+ Installs Envandle using Bundler.
26
+
27
+ Options:
28
+ --envandle-source gem source (default: https://rubygems.org)
29
+ --envandle-bundle-bin command path (default: bundle)
30
+
31
+ Additionally, you can specify all of the bundle-install's options.
32
+ EOS
33
+ exit
34
+ else
35
+ args << arg
36
+ end
37
+ end
38
+
39
+ abort "Invalid option: --envandle-source" unless gem_source
40
+ abort "Invalid option: --bundle-bin" unless bundle_bin
41
+
42
+ gemfile = Tempfile.new("install_envandle-Gemfile-", Dir.pwd)
43
+ gemfile << <<-EOS
44
+ source #{gem_source.inspect}
45
+ gem "envandle", "#{Envandle::VERSION}"
46
+ EOS
47
+ gemfile.close
48
+ code = system(bundle_bin, "install", "--gemfile", gemfile.path, *args) ? 0 : 1
49
+ File.delete "#{gemfile.path}.lock"
50
+ exit code
@@ -2,11 +2,7 @@ module Envandle
2
2
  module AsReference
3
3
  def self.extended(mod)
4
4
  mod.class_eval do
5
- attr_reader :group, :name
6
-
7
- def key
8
- @key ||= ::Envandle.reference_key(group, name)
9
- end
5
+ attr_reader :name
10
6
  end
11
7
  end
12
8
  end
@@ -1,5 +1,3 @@
1
- require "envandle/lib"
2
-
3
1
  class Binding
4
2
  def envandle(&block)
5
3
  ::Envandle::Elements::Gemfile.new(::Envandle.loc.file, self).draw &block
File without changes
@@ -0,0 +1,7 @@
1
+ module Envandle
2
+ class GemBlock < IllegalElement
3
+ def type
4
+ "gem with block"
5
+ end
6
+ end
7
+ end
@@ -33,6 +33,9 @@ module Envandle
33
33
  children.each do |child|
34
34
  child.exec receiver
35
35
  end
36
+ references.left.each do |k, v|
37
+ v.to_executable_argset(Argset.new(nil)).send_to receiver
38
+ end
36
39
  end
37
40
 
38
41
  def dir
@@ -51,6 +54,10 @@ module Envandle
51
54
  @references ||= ReferenceCache.new(self)
52
55
  end
53
56
 
57
+ def gem_keys
58
+ @gem_keys ||= {}
59
+ end
60
+
54
61
  def gemspecs
55
62
  @gemspecs ||= GemspecCache.new(File.join(config_dir, "cache", "gemspecs"))
56
63
  end
@@ -0,0 +1,7 @@
1
+ module Envandle
2
+ class GemspecBlock < IllegalElement
3
+ def type
4
+ "gemspec with block"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Envandle
2
+ class GitSource < IllegalElement
3
+ def type
4
+ "git_source without block"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Envandle
2
+ class Group < IllegalElement
3
+ def type
4
+ "group without block"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Envandle
2
+ class SourceBlock < UnsupportedElement
3
+ def type
4
+ "source with block"
5
+ end
6
+ end
7
+ end
@@ -1,10 +1,17 @@
1
- require "envandle/elements/element"
2
- require "envandle/elements/illegal_element"
3
- require "envandle/elements/unsupported_element"
4
- require "envandle/elements/gem"
5
- require "envandle/elements/gemfile"
6
- require "envandle/elements/gemspec"
7
- require "envandle/elements/git_source_block"
8
- require "envandle/elements/group_block"
9
- require "envandle/elements/illegals_and_unsupporteds"
10
- require "envandle/elements/source"
1
+ module Envandle
2
+ module Elements
3
+ autoload :GemBlock, "envandle/elements/gem_block"
4
+ autoload :Gem, "envandle/elements/gem"
5
+ autoload :Gemfile, "envandle/elements/gemfile"
6
+ autoload :GemspecBlock, "envandle/elements/gemspec_block"
7
+ autoload :Gemspec, "envandle/elements/gemspec"
8
+ autoload :GitSourceBlock, "envandle/elements/git_source_block"
9
+ autoload :GitSource, "envandle/elements/git_source"
10
+ autoload :GroupBlock, "envandle/elements/group_block"
11
+ autoload :Group, "envandle/elements/group"
12
+ autoload :IllegalElement, "envandle/elements/illegal_element"
13
+ autoload :SourceBlock, "envandle/elements/source_block"
14
+ autoload :Source, "envandle/elements/source"
15
+ autoload :UnsupportedElement, "envandle/elements/unsupported_element"
16
+ end
17
+ end
@@ -47,7 +47,7 @@ module Envandle
47
47
  class Reserved
48
48
  def initialize(cache_path)
49
49
  @cache_path = cache_path
50
- @path = Dir.mktmpdir(nil, cache_path)
50
+ @path = Envandle.tmpdir(nil, cache_path)
51
51
  end
52
52
 
53
53
  attr_reader :path
@@ -2,9 +2,8 @@ module Envandle
2
2
  class GitBranchReference
3
3
  extend AsGitReference
4
4
 
5
- def initialize(context, group, name, url, ref)
5
+ def initialize(context, name, url, ref)
6
6
  @context = context
7
- @group = group
8
7
  @name = name
9
8
  @url = url
10
9
  @ref = ref
@@ -13,16 +12,16 @@ module Envandle
13
12
  def spec
14
13
  @spec ||= begin
15
14
  cache = @context.gemfile.gemspecs
16
- shas = Envandle.git_init(nil, @url) do |dir|
17
- Envandle.git_ls_remote_sha(dir, "refs/heads/#{@ref}")
15
+ shas = Envandle::GitUtil.init(nil, @url) do |dir|
16
+ Envandle::GitUtil.ls_remote_sha(dir, "refs/heads/#{@ref}")
18
17
  end
19
18
  sha = shas[0]
20
19
  cache_url = "#{@url}##{sha}"
21
20
  raise "Can't get a git commit. (url: #{@url}, branch: #{@ref})" unless sha
22
21
  dir = cache.find(cache_url) || begin
23
22
  reserve = cache.reserve
24
- Envandle.git_init reserve.path, @url
25
- sha = Envandle.git_pull(reserve.path, @ref, "master")
23
+ Envandle::GitUtil.init reserve.path, @url
24
+ sha = Envandle::GitUtil.pull(reserve.path, @ref, "master")
26
25
  reserve.url = cache_url
27
26
  reserve.save
28
27
  reserve.path
@@ -34,6 +33,7 @@ module Envandle
34
33
  def to_executable_argset(base)
35
34
  args = base.dup
36
35
  args.clear_reference
36
+ args.args[0] = @name
37
37
  args.options[:git] = @url
38
38
  args.options[:branch] = @ref
39
39
  Argset.new(:gem, *args.args_and_options)
@@ -0,0 +1,53 @@
1
+ module Envandle
2
+ module GitUtil
3
+ BIN = `which git`.chomp
4
+
5
+ def self.raise_if_no_git_installed
6
+ raise "No git installed." if BIN.empty?
7
+ end
8
+
9
+ def self.init(dir, url, &block)
10
+ unless dir
11
+ Envandle.tmpdir do |tmpdir|
12
+ init tmpdir, url, &block
13
+ end
14
+ else
15
+ raise_if_no_git_installed
16
+ Dir.chdir(dir) do
17
+ Envandle.sh "#{BIN} init"
18
+ Envandle.sh "#{BIN} remote add origin #{url}"
19
+ yield dir if block_given?
20
+ end
21
+ end
22
+ end
23
+
24
+ def self.ls_remote_sha(dir, q)
25
+ Dir.chdir(dir) do
26
+ data = Envandle.sh("#{BIN} ls-remote origin #{q}").chomp
27
+ data = if data.empty?
28
+ []
29
+ else
30
+ data.split("\n").map{|i| i.split(/\s+/)[0] }
31
+ end
32
+ if block_given?
33
+ yield data
34
+ else
35
+ data
36
+ end
37
+ end
38
+ end
39
+
40
+ def self.pull(dir, ref, branch)
41
+ Dir.chdir(dir) do
42
+ Envandle.sh "#{BIN} checkout -b #{branch}"
43
+ Envandle.sh "#{BIN} pull origin #{ref}:#{branch}"
44
+ sha = Envandle.sh("#{BIN} rev-parse HEAD").chomp
45
+ if block_given?
46
+ yield sha
47
+ else
48
+ sha
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -19,4 +19,15 @@ module Envandle
19
19
  name
20
20
  end
21
21
  end
22
+
23
+ def self.sh(cmd)
24
+ output, error, status = Open3.capture3(cmd)
25
+ raise "Command error: #{cmd}" unless status.success?
26
+ output
27
+ end
28
+
29
+ def self.tmpdir(*args, &block)
30
+ require "tmpdir"
31
+ Dir.mktmpdir *args, &block
32
+ end
22
33
  end
@@ -2,9 +2,8 @@ module Envandle
2
2
  class PathReference
3
3
  extend AsReference
4
4
 
5
- def initialize(context, group, name, path)
5
+ def initialize(context, name, path)
6
6
  @context = context
7
- @group = group
8
7
  @name = name
9
8
  @path = path
10
9
  end
@@ -16,6 +15,7 @@ module Envandle
16
15
  def to_executable_argset(base)
17
16
  args = base.dup
18
17
  args.clear_reference
18
+ args.args[0] = @name
19
19
  args.options[:path] = @path
20
20
  Argset.new(:gem, *args.args_and_options)
21
21
  end
@@ -4,12 +4,11 @@ module Envandle
4
4
  @context = context
5
5
  end
6
6
 
7
- def find(group, name)
8
- key = Envandle.reference_key(group, name)
9
- paths[key] ||
10
- git_branches[key] ||
11
- paths[name] ||
12
- git_branches[name]
7
+ def use(name)
8
+ if ref = all[name]
9
+ left.delete name
10
+ ref
11
+ end
13
12
  end
14
13
 
15
14
  def paths
@@ -20,23 +19,28 @@ module Envandle
20
19
  @git_branches ||= parse(:git, GitBranchReference, "ENVANDLE_GEM_GIT_BRANCH")
21
20
  end
22
21
 
22
+ def all
23
+ @all ||= git_branches.merge(paths)
24
+ end
25
+
26
+ def left
27
+ @left ||= all.dup
28
+ end
29
+
23
30
  def parse(key, klass, env)
24
31
  {}.tap do |h|
25
32
  (ENV[env].to_s).split(";").each do |i|
26
33
  if v = __send__("parse_#{key}", klass, env, i)
27
- h[v.key] = v if v
34
+ h[v.name] = v if v
28
35
  end
29
36
  end
30
37
  end
31
38
  end
32
39
 
33
- def parse_group_and_name(env, v)
34
- name, group = v.to_s.strip.split("@")
35
- name = name.to_s.strip
36
- group = group.to_s.strip if group
37
- raise "No gem name (#{env}): #{ENV[env]}" if name.empty?
38
- raise "No group name (#{env}): #{ENV[env]}" if group && group.empty?
39
- [group, name]
40
+ def parse_name(env, v)
41
+ v = v.to_s.strip
42
+ raise "No gem name (#{env}): #{ENV[env]}" if v.empty?
43
+ v
40
44
  end
41
45
 
42
46
  def parse_path(klass, env, v)
@@ -46,30 +50,30 @@ module Envandle
46
50
  name = a[0].to_s.strip
47
51
  path = a[1..-1].join(":").to_s.strip
48
52
  raise "No gem path (#{env}): #{ENV[env]}" if path.empty?
49
- klass.new(@context, *parse_group_and_name(env, name), path)
53
+ klass.new(@context, parse_name(env, name), path)
50
54
  end
51
55
 
52
56
  def parse_git(klass, env, v)
53
57
  v = v.to_s.strip
54
58
  return if v.empty?
55
59
  a = v.split(":")
56
- name = a[0].to_s.strip
60
+ name = a[0]
57
61
  path = a[1..-1].join(":").to_s.strip
58
62
  url_and_ref = path.split('#')
59
63
  url = url_and_ref[0].to_s.strip
60
64
  ref = url_and_ref[1].to_s.strip
61
65
  raise "No gem git url (#{env}): #{ENV[env]}" if url.empty?
62
66
  raise "No gem git ref/branch/tag (#{env}): #{ENV[env]}" if ref.empty?
63
- klass.new(@context, *parse_group_and_name(env, name), url, ref)
67
+ klass.new(@context, parse_name(env, name), url, ref)
64
68
  end
65
69
 
66
70
  def extract_executable_argsets(base, group, name, argsets, found = {})
67
71
  key = Envandle.reference_key(group, name)
68
72
  return true if found.key?(key)
69
73
  found[key] = true
70
- if ref = find(group, name)
74
+ if ref = use(name)
71
75
  ref.spec.runtime_dependencies.each do |i|
72
- if ref2 = find(nil, i.name)
76
+ if ref2 = use(i.name)
73
77
  extract_executable_argsets base, nil, i.name, argsets, found
74
78
  end
75
79
  end
@@ -1,3 +1,3 @@
1
1
  module Envandle
2
- VERSION = "0.2.0"
2
+ VERSION = "0.6.0"
3
3
  end
data/lib/envandle.rb CHANGED
@@ -1 +1,25 @@
1
+ autoload :FileUtils, "fileutils" unless Object::const_defined?(:FileUtils) && !Object::autoload?(:FileUtils)
2
+ autoload :Mutex, "thread" unless Object::const_defined?(:Mutex) && !Object::autoload?(:Mutex)
3
+ autoload :Open3, "open3" unless Object::const_defined?(:Open3) && !Object::autoload?(:Open3)
4
+ autoload :YAML, "yaml" unless Object::const_defined?(:YAML) && !Object::autoload?(:YAML)
5
+ require "envandle/version"
6
+ require "envandle/exceptions"
7
+ require "envandle/helper"
1
8
  require "envandle/binding"
9
+
10
+ module Envandle
11
+ autoload :Argset, "envandle/argset"
12
+ autoload :AsContext, "envandle/as_context"
13
+ autoload :AsDsl, "envandle/as_dsl"
14
+ autoload :AsGitReference, "envandle/as_git_reference"
15
+ autoload :AsReference, "envandle/as_reference"
16
+ autoload :Element, "envandle/element"
17
+ autoload :Elements, "envandle/elements"
18
+ autoload :GemspecCache, "envandle/gemspec_cache"
19
+ autoload :Gemspec, "envandle/gemspec"
20
+ autoload :GitBranchReference, "envandle/git_branch_reference"
21
+ autoload :GitUtil, "envandle/git_util"
22
+ autoload :Location, "envandle/location"
23
+ autoload :PathReference, "envandle/path_reference"
24
+ autoload :ReferenceCache, "envandle/reference_cache"
25
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: envandle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - mosop
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-15 00:00:00.000000000 Z
11
+ date: 2017-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -54,7 +54,8 @@ dependencies:
54
54
  version: '3.5'
55
55
  description:
56
56
  email:
57
- executables: []
57
+ executables:
58
+ - install-envandle
58
59
  extensions: []
59
60
  extra_rdoc_files: []
60
61
  files:
@@ -67,6 +68,7 @@ files:
67
68
  - bin/console
68
69
  - bin/setup
69
70
  - envandle.gemspec
71
+ - exe/install-envandle
70
72
  - lib/envandle.rb
71
73
  - lib/envandle/argset.rb
72
74
  - lib/envandle/as_context.rb
@@ -74,28 +76,30 @@ files:
74
76
  - lib/envandle/as_git_reference.rb
75
77
  - lib/envandle/as_reference.rb
76
78
  - lib/envandle/binding.rb
79
+ - lib/envandle/element.rb
77
80
  - lib/envandle/elements.rb
78
- - lib/envandle/elements/element.rb
79
81
  - lib/envandle/elements/gem.rb
82
+ - lib/envandle/elements/gem_block.rb
80
83
  - lib/envandle/elements/gemfile.rb
81
84
  - lib/envandle/elements/gemspec.rb
85
+ - lib/envandle/elements/gemspec_block.rb
86
+ - lib/envandle/elements/git_source.rb
82
87
  - lib/envandle/elements/git_source_block.rb
88
+ - lib/envandle/elements/group.rb
83
89
  - lib/envandle/elements/group_block.rb
84
90
  - lib/envandle/elements/illegal_element.rb
85
- - lib/envandle/elements/illegals_and_unsupporteds.rb
86
91
  - lib/envandle/elements/source.rb
92
+ - lib/envandle/elements/source_block.rb
87
93
  - lib/envandle/elements/unsupported_element.rb
88
94
  - lib/envandle/exceptions.rb
89
95
  - lib/envandle/gemspec.rb
90
96
  - lib/envandle/gemspec_cache.rb
91
- - lib/envandle/git.rb
92
97
  - lib/envandle/git_branch_reference.rb
98
+ - lib/envandle/git_util.rb
93
99
  - lib/envandle/helper.rb
94
- - lib/envandle/lib.rb
95
100
  - lib/envandle/location.rb
96
101
  - lib/envandle/path_reference.rb
97
102
  - lib/envandle/reference_cache.rb
98
- - lib/envandle/shell.rb
99
103
  - lib/envandle/version.rb
100
104
  homepage: https://github.com/mosop/envandle
101
105
  licenses: []
@@ -1,31 +0,0 @@
1
- module Envandle
2
- class GemBlock < IllegalElement
3
- def type
4
- "gem with block"
5
- end
6
- end
7
-
8
- class GemspecBlock < IllegalElement
9
- def type
10
- "gemspec with block"
11
- end
12
- end
13
-
14
- class GitSource < IllegalElement
15
- def type
16
- "git_source without block"
17
- end
18
- end
19
-
20
- class Group < IllegalElement
21
- def type
22
- "group without block"
23
- end
24
- end
25
-
26
- class SourceBlock < UnsupportedElement
27
- def type
28
- "source with block"
29
- end
30
- end
31
- end
data/lib/envandle/git.rb DELETED
@@ -1,51 +0,0 @@
1
- module Envandle
2
- GIT_BIN = `which git`.chomp
3
-
4
- def self.raise_if_no_git_installed
5
- raise "No git installed." if GIT_BIN.empty?
6
- end
7
-
8
- def self.git_init(dir, url, &block)
9
- unless dir
10
- Dir.mktmpdir do |tmpdir|
11
- git_init tmpdir, url, &block
12
- end
13
- else
14
- raise_if_no_git_installed
15
- Dir.chdir(dir) do
16
- sh "#{GIT_BIN} init"
17
- sh "#{GIT_BIN} remote add origin #{url}"
18
- yield dir if block_given?
19
- end
20
- end
21
- end
22
-
23
- def self.git_ls_remote_sha(dir, q)
24
- Dir.chdir(dir) do
25
- data = sh("#{GIT_BIN} ls-remote origin #{q}").chomp
26
- data = if data.empty?
27
- []
28
- else
29
- data.split("\n").map{|i| i.split(/\s+/)[0] }
30
- end
31
- if block_given?
32
- yield data
33
- else
34
- data
35
- end
36
- end
37
- end
38
-
39
- def self.git_pull(dir, ref, branch)
40
- Dir.chdir(dir) do
41
- sh "#{GIT_BIN} checkout -b #{branch}"
42
- sh "#{GIT_BIN} pull origin #{ref}:#{branch}"
43
- sha = sh("#{GIT_BIN} rev-parse HEAD").chomp
44
- if block_given?
45
- yield sha
46
- else
47
- sha
48
- end
49
- end
50
- end
51
- end
data/lib/envandle/lib.rb DELETED
@@ -1,21 +0,0 @@
1
- require "open3"
2
- require "thread"
3
- require "tmpdir"
4
- require "yaml"
5
- require "envandle/version"
6
- require "envandle/helper"
7
- require "envandle/exceptions"
8
- require "envandle/as_context"
9
- require "envandle/as_dsl"
10
- require "envandle/as_git_reference"
11
- require "envandle/as_reference"
12
- require "envandle/argset"
13
- require "envandle/elements"
14
- require "envandle/location"
15
- require "envandle/gemspec"
16
- require "envandle/gemspec_cache"
17
- require "envandle/git"
18
- require "envandle/git_branch_reference"
19
- require "envandle/path_reference"
20
- require "envandle/shell"
21
- require "envandle/reference_cache"
@@ -1,8 +0,0 @@
1
- module Envandle
2
- def self.sh(cmd)
3
- # output, status = Open3.capture2(cmd)
4
- output, error, status = Open3.capture3(cmd)
5
- raise "Command error: #{cmd}" unless status.success?
6
- output
7
- end
8
- end