scriptster 0.2.1 → 0.2.2
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/examples/documented-template.rb +55 -0
- data/examples/minimal-template.rb +15 -0
- data/lib/scriptster/version.rb +1 -1
- data/lib/scriptster.rb +32 -2
- data/scriptster.gemspec +3 -2
- data/spec/scriptster_spec.rb +60 -0
- metadata +20 -5
- data/examples/template.rb +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 551e2e0a9a146fcef001e12bc824a0e802b390e0
|
4
|
+
data.tar.gz: 286aaacba36201700bd8e4ace12f49a530f32f98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d16e10d4d6a8442f06b5782075e167cf29906a3e0ab2377b168d98fbd81eb96d27bcc639349c61bc06ea38ef3885c178d5aeebe5f8165cb18d0066706fc86b07
|
7
|
+
data.tar.gz: 0ea04e268a4994bd1b9beba50dfeeae794c8ee0f1416344b389b96dd3303a0fb48de0acc0dd40361fe298b0f22844c107ac30fb54577de848995a0f40dd42b09
|
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Docopt docs: http://bit.ly/1LT7Rch
|
4
|
+
# Scriptster::configure docs: http://bit.ly/1H4X3kR
|
5
|
+
# Scriptster::cmd docs: http://bit.ly/1LOuVrB
|
6
|
+
|
7
|
+
require 'scriptster'
|
8
|
+
include Scriptster
|
9
|
+
|
10
|
+
Scriptster::configure do |conf|
|
11
|
+
# Which log levels will be printed
|
12
|
+
# (one of :quiet, :essential, :important, :informative or :verbose)
|
13
|
+
conf.verbosity = :informative
|
14
|
+
|
15
|
+
# Customise the log line format
|
16
|
+
conf.log_format = '%{timestamp} [%{name}] %{type} %{message}'
|
17
|
+
|
18
|
+
# Save the logs into a file
|
19
|
+
conf.file = "/tmp/lsl-log"
|
20
|
+
|
21
|
+
# Either :light or :dark.
|
22
|
+
conf.colours = :dark
|
23
|
+
end
|
24
|
+
|
25
|
+
args = parse_args <<DOCOPT
|
26
|
+
Usage:
|
27
|
+
#{File.basename __FILE__} [-h] [<dir>]
|
28
|
+
#{File.basename __FILE__} -a
|
29
|
+
|
30
|
+
Options:
|
31
|
+
-a, --aaa Option description
|
32
|
+
-h, --help Show this message.
|
33
|
+
DOCOPT
|
34
|
+
|
35
|
+
log :warn, "There are four logging levels (:error, :warn, :info and :debug)"
|
36
|
+
|
37
|
+
dir = args['<dir>'] || '~'
|
38
|
+
log :info, "Listing files in #{dir}"
|
39
|
+
ls = cmd "ls -l #{dir} | grep -v '^total'",
|
40
|
+
show_out: true, # print stdout as the command runs
|
41
|
+
show_err: true, # print stderr
|
42
|
+
out_level: :debug, # which log level to print the output to
|
43
|
+
tag: 'ls -l', # modify the default command tag
|
44
|
+
expect: 0, # the expected return status (can be an Array as well)
|
45
|
+
raise: true # raise if the command exits with an unexpected code
|
46
|
+
|
47
|
+
# Iterate through stdout (the same can be done for stderr with .err)
|
48
|
+
files = []
|
49
|
+
ls.out.lines.each do |line|
|
50
|
+
files.push line.split[-1]
|
51
|
+
end
|
52
|
+
log :info, files.join(', ')
|
53
|
+
|
54
|
+
# Get information about the process
|
55
|
+
log :info, "ls(#{ls.status.pid}) exited with #{ls.status.exitstatus}"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'scriptster'
|
4
|
+
include Scriptster
|
5
|
+
|
6
|
+
args = parse_args <<DOCOPT
|
7
|
+
Usage:
|
8
|
+
#{File.basename __FILE__} [-h]
|
9
|
+
|
10
|
+
Options:
|
11
|
+
-h, --help Show this message.
|
12
|
+
DOCOPT
|
13
|
+
|
14
|
+
log :info, "Args received: #{args}"
|
15
|
+
ls = cmd 'ls', {show_out: true, out_level: :info}
|
data/lib/scriptster/version.rb
CHANGED
data/lib/scriptster.rb
CHANGED
@@ -20,6 +20,8 @@
|
|
20
20
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
21
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
22
|
|
23
|
+
require "docopt"
|
24
|
+
|
23
25
|
require "scriptster/version"
|
24
26
|
require "scriptster/logger"
|
25
27
|
require "scriptster/shellcmd"
|
@@ -29,6 +31,8 @@ require "scriptster/configuration"
|
|
29
31
|
# functions, cmd and log. The module can be used directly or included
|
30
32
|
# in your class.
|
31
33
|
module Scriptster
|
34
|
+
Configuration.new.apply
|
35
|
+
|
32
36
|
# Pass a message to the logger.
|
33
37
|
#
|
34
38
|
# @see Logger.log
|
@@ -40,7 +44,7 @@ module Scriptster
|
|
40
44
|
#
|
41
45
|
# @see .log
|
42
46
|
def log(*args)
|
43
|
-
|
47
|
+
Scriptster.log *args
|
44
48
|
end
|
45
49
|
|
46
50
|
# Execute a shell command
|
@@ -54,7 +58,7 @@ module Scriptster
|
|
54
58
|
#
|
55
59
|
# @see .cmd
|
56
60
|
def cmd(*args)
|
57
|
-
|
61
|
+
Scriptster.cmd *args
|
58
62
|
end
|
59
63
|
|
60
64
|
# Use this method to reconfigure the library.
|
@@ -73,4 +77,30 @@ module Scriptster
|
|
73
77
|
yield c
|
74
78
|
c.apply
|
75
79
|
end
|
80
|
+
|
81
|
+
# Process command line arguments using docopt and return
|
82
|
+
# the array of options.
|
83
|
+
#
|
84
|
+
# @param [String] docopt_string The interface spec to be passed to docopt.
|
85
|
+
# @return [Array] The processed CLI options, straight from docopt.
|
86
|
+
def self.parse_args(docopt_string, argv=nil)
|
87
|
+
do_parse_args docopt_string, argv
|
88
|
+
end
|
89
|
+
|
90
|
+
# The same as {Scriptster.parse_args}.
|
91
|
+
#
|
92
|
+
# @see .parse_args
|
93
|
+
def parse_args(docopt_string, argv=nil)
|
94
|
+
Scriptster.do_parse_args docopt_string, argv
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
def self.do_parse_args(docopt_string, argv=nil)
|
99
|
+
begin
|
100
|
+
return Docopt::docopt docopt_string, argv: argv
|
101
|
+
rescue Docopt::Exit => e
|
102
|
+
STDERR.puts e.message
|
103
|
+
exit 1
|
104
|
+
end
|
105
|
+
end
|
76
106
|
end
|
data/scriptster.gemspec
CHANGED
@@ -7,9 +7,9 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = "scriptster"
|
8
8
|
spec.version = Scriptster::VERSION
|
9
9
|
spec.authors = ["Radek Pazdera"]
|
10
|
-
spec.email = ["radek
|
10
|
+
spec.email = ["me@radek.io"]
|
11
11
|
spec.summary = %q{Making your Ruby scipts hip.}
|
12
|
-
spec.description = %q{A simple library for making your scipts
|
12
|
+
spec.description = %q{A simple library for making your Ruby scipts nicer.}
|
13
13
|
spec.homepage = "https://github.com/pazdera/scriptster"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_runtime_dependency "tco", "~> 0.1"
|
22
|
+
spec.add_runtime_dependency "docopt", "~> 0.5"
|
22
23
|
|
23
24
|
spec.add_development_dependency "bundler", "~> 1.6"
|
24
25
|
spec.add_development_dependency "rake", "~> 10.1"
|
data/spec/scriptster_spec.rb
CHANGED
@@ -106,6 +106,16 @@ describe Scriptster do
|
|
106
106
|
Scriptster::log :info, "Hello there"
|
107
107
|
expect(@out.string.strip).to match /info Hello there/
|
108
108
|
end
|
109
|
+
|
110
|
+
it "the instance version works" do
|
111
|
+
class Test
|
112
|
+
include Scriptster
|
113
|
+
end
|
114
|
+
|
115
|
+
t = Test.new
|
116
|
+
t.log :info, "Hello there"
|
117
|
+
expect(@out.string.strip).to match /info Hello there/
|
118
|
+
end
|
109
119
|
end
|
110
120
|
|
111
121
|
describe "#cmd" do
|
@@ -217,5 +227,55 @@ describe Scriptster do
|
|
217
227
|
Scriptster::cmd "cat #{@dir}/nonexistent.txt", :expect => 10
|
218
228
|
}.to raise_exception RuntimeError
|
219
229
|
end
|
230
|
+
|
231
|
+
it "the instance version works" do
|
232
|
+
class Test
|
233
|
+
include Scriptster
|
234
|
+
end
|
235
|
+
|
236
|
+
t = Test.new
|
237
|
+
cat = t.cmd "cat #{@dir}/file.txt", :show_out => false
|
238
|
+
expect(cat.out).to eq "Multi-line\nFile contents\n"
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
describe "#parse_args" do
|
243
|
+
before :all do
|
244
|
+
@doc = <<DOCOPT
|
245
|
+
Usage: test [-ab]
|
246
|
+
|
247
|
+
Options:
|
248
|
+
-a, --aaa The first option
|
249
|
+
-b, --bbb The second option
|
250
|
+
DOCOPT
|
251
|
+
|
252
|
+
@args = Scriptster::parse_args @doc, ['-a']
|
253
|
+
end
|
254
|
+
|
255
|
+
it "returns a Hash" do
|
256
|
+
expect(@args).to be_a Hash
|
257
|
+
end
|
258
|
+
|
259
|
+
it "the Hash has two keys" do
|
260
|
+
expect(@args.length).to be(2)
|
261
|
+
end
|
262
|
+
|
263
|
+
it "--aaa is true" do
|
264
|
+
expect(@args['--aaa']).to be
|
265
|
+
end
|
266
|
+
|
267
|
+
it "--bbb is true" do
|
268
|
+
expect(@args['--bbb']).not_to be
|
269
|
+
end
|
270
|
+
|
271
|
+
it "the instance method works" do
|
272
|
+
class Test
|
273
|
+
include Scriptster
|
274
|
+
end
|
275
|
+
|
276
|
+
t = Test.new
|
277
|
+
args = t.parse_args @doc, ['-a']
|
278
|
+
expect(args).to be_a Hash
|
279
|
+
end
|
220
280
|
end
|
221
281
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scriptster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Radek Pazdera
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tco
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: docopt
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.5'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.5'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,9 +80,9 @@ dependencies:
|
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '3.1'
|
69
|
-
description: A simple library for making your scipts
|
83
|
+
description: A simple library for making your Ruby scipts nicer.
|
70
84
|
email:
|
71
|
-
- radek
|
85
|
+
- me@radek.io
|
72
86
|
executables: []
|
73
87
|
extensions: []
|
74
88
|
extra_rdoc_files: []
|
@@ -80,8 +94,9 @@ files:
|
|
80
94
|
- LICENSE.txt
|
81
95
|
- README.md
|
82
96
|
- Rakefile
|
97
|
+
- examples/documented-template.rb
|
98
|
+
- examples/minimal-template.rb
|
83
99
|
- examples/rainbow.rb
|
84
|
-
- examples/template.rb
|
85
100
|
- examples/test.rb
|
86
101
|
- gemrc
|
87
102
|
- lib/scriptster.rb
|
data/examples/template.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Docopt docs: http://bit.ly/1LT7Rch
|
4
|
-
# Scriptster::configure docs: http://bit.ly/1H4X3kR
|
5
|
-
# Scriptster::cmd docs: http://bit.ly/1LOuVrB
|
6
|
-
|
7
|
-
require 'docopt'
|
8
|
-
require 'scriptster'
|
9
|
-
|
10
|
-
include Scriptster
|
11
|
-
|
12
|
-
doc = <<DOCOPT
|
13
|
-
Usage:
|
14
|
-
#{File.basename __FILE__} [-h]
|
15
|
-
|
16
|
-
Options:
|
17
|
-
-h, --help Show this message.
|
18
|
-
DOCOPT
|
19
|
-
|
20
|
-
Scriptster::configure do |conf|
|
21
|
-
conf.verbosity = :verbose
|
22
|
-
conf.log_format = '%{timestamp} [%{name}] %{type} %{message}'
|
23
|
-
end
|
24
|
-
|
25
|
-
begin
|
26
|
-
args = Docopt::docopt doc
|
27
|
-
rescue Docopt::Exit => e
|
28
|
-
log :err, e.message
|
29
|
-
exit 1
|
30
|
-
end
|
31
|
-
|
32
|
-
### >>> Example
|
33
|
-
log :info, "Listing files:"
|
34
|
-
ls = cmd 'ls -l | grep -v "^total"',
|
35
|
-
show_out: true,
|
36
|
-
out_level: :debug,
|
37
|
-
tag: 'ls -l'
|
38
|
-
|
39
|
-
files = []
|
40
|
-
ls.out.lines.each do |line|
|
41
|
-
files.push line.split[-1]
|
42
|
-
end
|
43
|
-
|
44
|
-
log :info, files.join(', ')
|
45
|
-
# <<<
|