shellb 0.0.1 → 0.0.2

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
  SHA256:
3
- metadata.gz: 8d84b5194e0e060985310712fb4bb3babbd1433bf3d05d5b897340df509f23fe
4
- data.tar.gz: 5924d05b401baefbec39d49c870a7500b0bb9de4e212c980d3da8f2a56f7b935
3
+ metadata.gz: 8f3a0166d547f1e9cadca213c3c4966f958d6deaf424cca3e41c7814fac41cf9
4
+ data.tar.gz: 63230d226d8e24acc56416bd12d737082d140ea0a785ddec4d0994365b7b4e0a
5
5
  SHA512:
6
- metadata.gz: 6a013a5ee6be8d4d6bb1e319939c5028e9905069d4dbe5a1dd7ebc1025f1b3560ef51027dd3f3b58c68b6386c2b54a3ef238fe36a286ee8eb9f0e5dfcfd978a9
7
- data.tar.gz: 814d7956dc9aceb546982e5faf89795b7ab4d119b5e75ab8d460f760a8e6d95f80962de527120be63a7c814484320eabac554311c563262e5bf78d645db0d639
6
+ metadata.gz: 38be6a731225de410c59815878f1927cade0f3f01af8bc4181930dae66ec352247891c726bef7230f707419e80e3b3d553c0df6986896e42d9d6f8eb5dee14b2
7
+ data.tar.gz: 1e3f462b44ffef6b6340f99c02921429c1449f49ed4a30b0454dddd7cad8b252611bef5d5fec75e66b14dccdf3083bb62a39de990904b206abe8e18073c21930
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project **may some day** to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.0.2] - 2019-12-03
8
+ ### Added
9
+ - Shell#attempt will execute a script and ignore errors
10
+
11
+ ### Changed
12
+ - Shell#check_point now executes scripts
13
+ - Shell#transact no longer allows chaining with other commands
14
+
7
15
  ## [0.0.1] - 2019-12-02
8
16
  ### Added
9
17
  - Initial version of ShellB
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- shellb (0.0.1)
4
+ shellb (0.0.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -69,13 +69,6 @@ shb = ShellB.new
69
69
  shb.a("--help") | shb.e("last")
70
70
  puts shb.to_sh # => a --help | e last
71
71
 
72
- # Mix transact and direct methods
73
- shb = ShellB.new
74
- shb.a("--help") | shb.transact do
75
- e("last") > dest.txt
76
- end
77
- puts shb.to_sh # => a --help | e last > dest.txt
78
-
79
72
  # Run a script
80
73
  shb = ShellB.new
81
74
  shb.a("--help") | shb.e("last")
@@ -142,6 +135,18 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
142
135
 
143
136
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
144
137
 
138
+ ## Similar Projects
139
+
140
+ As any good programmer, I wrote first and googled later. Here are some other projects that seem very similar to ShellB:
141
+
142
+ - https://github.com/jgoizueta/sys_cmd
143
+ - https://github.com/duncanbeevers/sheller
144
+ - https://github.com/fetlife/scallop
145
+ - https://github.com/quark-zju/easysh
146
+ - https://github.com/eropple/shellator
147
+ - https://github.com/petyosi/shellshot
148
+ - https://github.com/taccon/eksek
149
+
145
150
  ## Contributing
146
151
 
147
152
  Bug reports and pull requests are welcome on GitHub at https://github.com/aguynamedryan/shellb.
@@ -19,9 +19,21 @@ module ShellB
19
19
  @opts = opts
20
20
  end
21
21
 
22
- def transact(&block)
23
- instance_eval(&block)
24
- @commands.last
22
+ def transact(opts = {}, &block)
23
+ instance_eval(&block) if block
24
+ check_point(opts) if opts[:execute]
25
+ end
26
+
27
+ def run(opts = {}, &block)
28
+ transact(opts.merge(execute: true), &block)
29
+ end
30
+
31
+ def run!(opts = {}, &block)
32
+ run(opts.merge(exit_on_errors: true), &block)
33
+ end
34
+
35
+ def attempt(opts = {}, &block)
36
+ run(opts.merge(ignore_errors: true), &block)
25
37
  end
26
38
 
27
39
  def add_command(command)
@@ -33,10 +45,7 @@ module ShellB
33
45
  @commands -= [command]
34
46
  end
35
47
 
36
- def run(opts = {}, &block)
37
- if block
38
- transact(&block)
39
- end
48
+ def check_point(opts = {})
40
49
  script = Tempfile.new("script.sh")
41
50
  script.write(to_sh(opts))
42
51
  script.close
@@ -46,13 +55,13 @@ module ShellB
46
55
  ee.script = File.read(script)
47
56
  raise ee
48
57
  end
58
+ rescue ShellB::ExecutionError => ee
59
+ raise(ee) unless opts[:ignore_errors]
49
60
  ensure
61
+ @commands = []
50
62
  script.close!
51
63
  end
52
-
53
- def run!(opts = {}, &block)
54
- run(opts.merge(exit_on_errors: true), &block)
55
- end
64
+ alias execute check_point
56
65
 
57
66
  def to_sh(opts = {})
58
67
  str = make_preamble(opts)
@@ -64,9 +73,15 @@ module ShellB
64
73
 
65
74
  def decorate_command(command, opts)
66
75
  cmd_str = command.to_sh
67
- return cmd_str unless opts[:exit_on_errors]
76
+ append = if opts[:exit_on_errors]
77
+ "exit $?"
78
+ elsif opts[:ignore_errors]
79
+ "true"
80
+ else
81
+ nil
82
+ end
68
83
  cmd_str = wrap_it(cmd_str, "(") unless command.name == "cd"
69
- "#{cmd_str} || exit $?"
84
+ [cmd_str, append].compact.join(" || ")
70
85
  end
71
86
 
72
87
  def method_missing(meth, *args)
@@ -93,10 +108,6 @@ module ShellB
93
108
  @commander ||= Commander.new(self)
94
109
  end
95
110
 
96
- def check_point
97
- #no-op
98
- end
99
-
100
111
  def pretty_print(pp)
101
112
  pp.object_group(self) do
102
113
  pp.breakable
@@ -1,3 +1,3 @@
1
1
  module ShellB
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["aguynamedryan@gmail.com"]
11
11
 
12
12
  spec.summary = %q{Light DSL to generate shell scripts}
13
- spec.description = %q{Ruby's Shell class is awesome, but it is slow and memory intensive because all IO passes through Ruby. This gem is heavily inspired by the Shell class, but instead generates a script that executes in a shell without having Ruby in the mix, keeping things fast.}
13
+ spec.description = %q{DSL for shell scripts similar to Ruby's Shell class.}
14
14
  spec.homepage = "https://github.com/aguynamedryan/shellb"
15
15
  spec.license = "MIT"
16
16
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shellb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Duryea
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-02 00:00:00.000000000 Z
11
+ date: 2019-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,10 +66,7 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.0'
69
- description: Ruby's Shell class is awesome, but it is slow and memory intensive because
70
- all IO passes through Ruby. This gem is heavily inspired by the Shell class, but
71
- instead generates a script that executes in a shell without having Ruby in the mix,
72
- keeping things fast.
69
+ description: DSL for shell scripts similar to Ruby's Shell class.
73
70
  email:
74
71
  - aguynamedryan@gmail.com
75
72
  executables: []