libexec 0.2.0 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3d8b26a3b51d11a80ee0b158da31636268490b6b7141f9c0953934df47341f8
4
- data.tar.gz: 31ee9aeae742be7e66c6f8c020957214a22af6edccf9d6131200b2c5b9a34182
3
+ metadata.gz: 8705278823a3fe7c5edd0913befd194389f692ed9833396138a0a97d75b6f72b
4
+ data.tar.gz: 0eccd36d324534284495454e5116890c4620a63657d8fa44dca2fec36f837b49
5
5
  SHA512:
6
- metadata.gz: e15fe7d30af4bbc40b400b7aef5b51208d2478127bc4e23d1488ed80483be8a907711164b94a40655361286a6310d0f821614e469c1a3e2f536c56c9ca8cc290
7
- data.tar.gz: 85858c2cf6fc6be5e607245c332f79aea2e26444f807a9937fba72fbb40b52c94df0ae410d3d0da9222b5c6e855ebfbb15721af0ee1f121c0d1cd8d5a83a649d
6
+ metadata.gz: 8062c95b812bf5f3e5d7d491984bfdfd842a54a4e1446af536476832c720dd9f1d8807c9c4b70936163a8d14b282eb703f6cec072eabb33ba8e54fb836c62e91
7
+ data.tar.gz: 3bc5590a2d359db0d1efbea7ccef0f447ecb8ecbe74e9e20bebfce3ec049b7a33ef8ab5b994febac6fbfc276185e7b438ee6d7d71cc9814aa97a6c21e721bf7d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- libexec (0.2.0)
4
+ libexec (0.2.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -55,4 +55,4 @@ DEPENDENCIES
55
55
  rubocop (~> 1.21)
56
56
 
57
57
  BUNDLED WITH
58
- 2.3.26
58
+ 2.4.1
data/lib/libexec/exec.rb CHANGED
@@ -2,61 +2,75 @@
2
2
 
3
3
  module Libexec
4
4
  module Exec
5
- def run(cmd, *argv, env: {}, mode: "r", **opts)
6
- unless argv.empty?
7
- cmd = [cmd]
8
- argv.each do |arg|
9
- # https://docs.ruby-lang.org/en/master/Kernel.html#method-i-class
10
- if arg.instance_of?(Array)
11
- cmd.concat(arg)
12
- elsif arg.instance_of?(String)
13
- cmd.push(arg)
14
- end
15
- end
16
- end
5
+ # wrapper for Ruby IO.popen
6
+ # {https://docs.ruby-lang.org/en/master/IO.html#method-c-popen link} <br>
7
+ # cmd first grammar <br>
8
+ # conv argv by _ruby_style_cmd
9
+ #
10
+ # @return [nil]
11
+ def run(*argv, env: {}, mode: "r", **opts)
12
+ cmd = _ruby_style_cmd(argv)
17
13
 
18
- # https://docs.ruby-lang.org/en/master/IO.html#method-c-popen
19
14
  IO.popen(env, cmd, mode, opts) do |pipe|
20
15
  print pipe.gets until pipe.eof?
21
16
  end
22
17
  nil
23
18
  end
24
19
 
25
- def each_line(cmd, *argv, env: {}, mode: "r", **opts, &block)
26
- unless argv.empty?
27
- cmd = [cmd]
28
- argv.each do |arg|
29
- if arg.instance_of?(Array)
30
- cmd.concat(arg)
31
- elsif arg.instance_of?(String)
32
- cmd.push(arg)
33
- end
34
- end
35
- end
20
+ # Run code block in IO.popen <br>
21
+ # inspired from Ruby IO.each_line
22
+ # {https://docs.ruby-lang.org/en/master/IO.html#method-i-each_line link}
23
+ def each_line(*argv, env: {}, mode: "r", **opts, &block)
24
+ cmd = _ruby_style_cmd(argv)
36
25
 
37
- # https://docs.ruby-lang.org/en/master/IO.html#method-i-each_line
38
26
  IO.popen(env, cmd, mode, opts) do |pipe|
39
27
  pipe.each_line(&block)
40
28
  end
41
29
  end
42
30
 
43
- def by_ls_1(dir)
31
+ # wrapper for `ls -1` which will be often used
32
+ #
33
+ # @param [Array] argv
34
+ # @return [Array] line.chomp
35
+ def by_ls_1(*argv, **opts)
44
36
  arr = []
45
- each_line("ls -1 #{dir}") do |line|
37
+ each_line("ls", "-1", argv, opts: opts) do |line|
46
38
  arr.push line.chomp
47
39
  end
48
40
  arr
49
41
  end
50
42
 
51
- def each_ls_1(dir, &block)
52
- each_line("ls -1 #{dir}", &block)
43
+ # Operate each line result by yourself in `ls -1`
44
+ #
45
+ # @param [Array] argv
46
+ def each_ls_1(*argv, **opts, &block)
47
+ each_line("ls", "-1", argv, opts: opts, &block)
53
48
  end
54
49
 
55
- def code(cmd, *opt, **args)
56
- catch_error = !opt.empty? || args[:catch_error] || false
57
- code = opt[0] || args[:code] || 1
50
+ # wrapper for Process.spawn
51
+ # {https://docs.ruby-lang.org/en/master/Process.html#method-c-last_status link}
52
+ #
53
+ # @return [Integer]
54
+ def code(*argv, **opts)
55
+ catch_error = opts[:catch_error]
56
+ code = opts[:code]
57
+
58
+ if argv.size < 2
59
+ catch_error ||= false
60
+ code ||= 1
61
+
62
+ cmd = _js_style_cmd(argv)
63
+ else
64
+ is_integer = argv.last.instance_of?(Integer)
65
+
66
+ catch_error ||= is_integer
67
+ code ||= (argv.last if is_integer) || 1
68
+
69
+ args = argv.clone
70
+ args.pop
71
+ cmd = is_integer ? _js_style_cmd(args) : _js_style_cmd(argv)
72
+ end
58
73
 
59
- # https://docs.ruby-lang.org/en/master/Process.html#method-c-last_status
60
74
  Process.spawn(cmd)
61
75
  Process.wait
62
76
 
@@ -71,23 +85,68 @@ module Libexec
71
85
  127
72
86
  end
73
87
 
74
- def output(cmd, *argv)
75
- unless argv.empty?
88
+ # wrapper for Kernel.`command`
89
+ # {https://docs.ruby-lang.org/en/master/Kernel.html#method-i-60 link}
90
+ #
91
+ # @note Only recommend to use when get single line output
92
+ # @return [String] output.chomp
93
+ def output(*argv)
94
+ cmd = _js_style_cmd(argv)
95
+
96
+ output = `#{cmd}`
97
+ output.chomp
98
+ end
99
+
100
+ private
101
+
102
+ # cmd must be unix command String <br>
103
+ # no " ", not Array <br>
104
+ # not support cmd with opt like `ls -1`
105
+ #
106
+ # @param [Array] argv
107
+ # @return [String | Array]
108
+ #
109
+ # @since 0.2.1
110
+ def _ruby_style_cmd(argv)
111
+ cmd, *args = argv
112
+
113
+ unless args.empty?
76
114
  arr = [cmd]
77
- argv.each do |arg|
115
+ args.each do |arg|
116
+ # https://docs.ruby-lang.org/en/master/Kernel.html#method-i-class
78
117
  if arg.instance_of?(Array)
79
- arr.push("'#{arg.join(" ")}'")
118
+ arr.concat(arg)
80
119
  elsif arg.instance_of?(String)
81
120
  arr.push(arg)
82
121
  end
83
122
  end
123
+ cmd = arr
124
+ end
125
+ cmd
126
+ end
127
+
128
+ # in JS style, all arg connect with " " <br>
129
+ # so cmd like `ls -1` is OK
130
+ #
131
+ # @param [Array] argv
132
+ # @return [String | Array]
133
+ #
134
+ # @since 0.2.1
135
+ def _js_style_cmd(argv)
136
+ cmd, *args = argv
84
137
 
138
+ unless args.empty?
139
+ arr = [cmd]
140
+ args.each do |arg|
141
+ if arg.instance_of?(Array)
142
+ arr.push(%('#{arg.join(" ")}'))
143
+ elsif arg.instance_of?(String)
144
+ arr.push(arg)
145
+ end
146
+ end
85
147
  cmd = arr.join(" ")
86
148
  end
87
-
88
- # https://docs.ruby-lang.org/en/master/Kernel.html#method-i-60
89
- output = `#{cmd}`
90
- output.chomp
149
+ cmd
91
150
  end
92
151
  end
93
152
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Libexec
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.1"
5
5
  end
data/lib/libexec.rb CHANGED
@@ -4,8 +4,5 @@ require_relative "libexec/version"
4
4
  require_relative "libexec/exec"
5
5
 
6
6
  module Libexec
7
- class Error < StandardError; end
8
- # Your code goes here...
9
-
10
7
  extend Libexec::Exec
11
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libexec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - initdc
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-25 00:00:00.000000000 Z
11
+ date: 2022-12-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Wrapper for ruby exec shell command.
14
14
  email: