sym 3.0.0 → 3.0.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/.envrc +1 -1
- data/.github/workflows/rubocop.yml +30 -0
- data/.github/workflows/ruby.yml +30 -0
- data/.rubocop.yml +18 -2
- data/.rubocop_todo.yml +143 -0
- data/CHANGELOG.md +33 -6
- data/README.adoc +15 -7
- data/README.pdf +32877 -18
- data/exe/keychain +2 -2
- data/exe/sym +3 -3
- data/lib/ruby_warnings.rb +1 -1
- data/lib/sym/app/cli.rb +3 -5
- data/lib/sym/app/cli_slop.rb +9 -10
- data/lib/sym/app/commands/base_command.rb +1 -0
- data/lib/sym/app/commands/bash_completion.rb +1 -1
- data/lib/sym/app/commands/keychain_add_key.rb +1 -1
- data/lib/sym/app/commands/open_editor.rb +3 -3
- data/lib/sym/app/commands/show_examples.rb +6 -6
- data/lib/sym/app/input/handler.rb +2 -2
- data/lib/sym/app/keychain.rb +1 -1
- data/lib/sym/app/output/base.rb +1 -1
- data/lib/sym/app/output/file.rb +1 -1
- data/lib/sym/app/password/providers.rb +1 -3
- data/lib/sym/app/private_key/key_source_check.rb +3 -4
- data/lib/sym/app.rb +8 -9
- data/lib/sym/application.rb +4 -4
- data/lib/sym/configuration.rb +1 -5
- data/lib/sym/constants.rb +1 -1
- data/lib/sym/data.rb +2 -2
- data/lib/sym/extensions/instance_methods.rb +5 -5
- data/lib/sym/extensions/stdlib.rb +2 -2
- data/lib/sym/version.rb +1 -1
- data/sym.gemspec +5 -2
- metadata +42 -10
- data/.circleci/config.yml +0 -60
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67acdb213e1c14e6d1eb34a4a0b27e1e3724b1a98d715bff0716290674c3afbb
|
4
|
+
data.tar.gz: 92ae116832760799ed97301189e4b339984163db7881d630044a39a20af9ecd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9202cee6a164dd7bb7fa12f6cc475bf822ecdbd4b613295009362099fd4cd431a41e5a60df701bccf3aec9828826bb7026164e72208123ebce7f0fd5ca69d0f5
|
7
|
+
data.tar.gz: 97437a1e56195daae154c529f65ea878ca5f6cdacfe89ecd4211897a77bad5922a20d6c72d10f6720d56851b029a01dc15dd5b478db08bbf9c019cd5e8f55ed7
|
data/.envrc
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
name: Rubocop
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
build:
|
11
|
+
runs-on: ubuntu-20.04
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
ruby: [ '3.1' ]
|
15
|
+
name: Ruby ${{ matrix.ruby }} Tests
|
16
|
+
steps:
|
17
|
+
- uses: actions/checkout@v2
|
18
|
+
- uses: actions/setup-ruby@v1
|
19
|
+
with:
|
20
|
+
ruby-version: ${{ matrix.ruby }}
|
21
|
+
- uses: actions/cache@v2
|
22
|
+
with:
|
23
|
+
path: vendor/bundle
|
24
|
+
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
25
|
+
restore-keys: |
|
26
|
+
${{ runner.os }}-gems-
|
27
|
+
- run: |
|
28
|
+
gem install bundler -N
|
29
|
+
bundle install --jobs 10
|
30
|
+
bundle exec rubocop
|
@@ -0,0 +1,30 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
build:
|
11
|
+
runs-on: ubuntu-20.04
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
ruby: [ '2.6', '2.7', '3.0', '3.1' ]
|
15
|
+
name: Ruby ${{ matrix.ruby }} Tests
|
16
|
+
steps:
|
17
|
+
- uses: actions/checkout@v2
|
18
|
+
- uses: actions/setup-ruby@v1
|
19
|
+
with:
|
20
|
+
ruby-version: ${{ matrix.ruby }}
|
21
|
+
- uses: actions/cache@v2
|
22
|
+
with:
|
23
|
+
path: vendor/bundle
|
24
|
+
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
25
|
+
restore-keys: |
|
26
|
+
${{ runner.os }}-gems-
|
27
|
+
- run: |
|
28
|
+
gem install bundler -N
|
29
|
+
bundle install --jobs 10
|
30
|
+
bundle exec rspec
|
data/.rubocop.yml
CHANGED
@@ -1,8 +1,15 @@
|
|
1
|
+
inherit_from: .rubocop_todo.yml
|
2
|
+
|
1
3
|
inherit_gem:
|
2
4
|
relaxed-rubocop: .rubocop.yml
|
3
5
|
|
6
|
+
require:
|
7
|
+
- rubocop-rspec
|
8
|
+
- rubocop-rake
|
9
|
+
|
4
10
|
AllCops:
|
5
|
-
|
11
|
+
NewCops: enable
|
12
|
+
TargetRubyVersion: 2.6
|
6
13
|
|
7
14
|
Style/Alias:
|
8
15
|
Enabled: false
|
@@ -47,6 +54,10 @@ Style/FormatString:
|
|
47
54
|
Enabled: false
|
48
55
|
StyleGuide: https://relaxed.ruby.style/#styleformatstring
|
49
56
|
|
57
|
+
Style/StringConcatenation:
|
58
|
+
Enabled: false
|
59
|
+
|
60
|
+
|
50
61
|
Style/IfUnlessModifier:
|
51
62
|
Enabled: false
|
52
63
|
StyleGuide: https://relaxed.ruby.style/#styleifunlessmodifier
|
@@ -223,7 +234,7 @@ Style/BarePercentLiterals:
|
|
223
234
|
Style/FormatStringToken:
|
224
235
|
Enabled: false
|
225
236
|
|
226
|
-
|
237
|
+
Lint/MissingSuper:
|
227
238
|
Enabled: false
|
228
239
|
|
229
240
|
Style/MissingRespondToMissing:
|
@@ -376,3 +387,8 @@ Style/HashTransformKeys:
|
|
376
387
|
Style/HashTransformValues:
|
377
388
|
Enabled: true
|
378
389
|
|
390
|
+
Lint/ConstantDefinitionInBlock:
|
391
|
+
Enabled: false
|
392
|
+
|
393
|
+
Lint/Debugger:
|
394
|
+
Enabled: false
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2022-09-22 23:53:51 UTC using RuboCop version 1.36.0.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 6
|
10
|
+
RSpec/AnyInstance:
|
11
|
+
Exclude:
|
12
|
+
- 'spec/sym/app/cli_spec.rb'
|
13
|
+
- 'spec/sym/app/password/providers_spec.rb'
|
14
|
+
|
15
|
+
# Offense count: 97
|
16
|
+
# Configuration parameters: Prefixes, AllowedPatterns.
|
17
|
+
# Prefixes: when, with, without
|
18
|
+
RSpec/ContextWording:
|
19
|
+
Enabled: false
|
20
|
+
|
21
|
+
# Offense count: 4
|
22
|
+
# Configuration parameters: CountAsOne.
|
23
|
+
RSpec/ExampleLength:
|
24
|
+
Max: 25
|
25
|
+
|
26
|
+
# Offense count: 20
|
27
|
+
RSpec/ExpectInHook:
|
28
|
+
Exclude:
|
29
|
+
- 'spec/sym/app/cli_spec.rb'
|
30
|
+
- 'spec/sym/app/commands/print_key_spec.rb'
|
31
|
+
- 'spec/sym/app/password/providers_spec.rb'
|
32
|
+
- 'spec/sym/app/private_key/detector_spec.rb'
|
33
|
+
- 'spec/sym/app/private_key/handler_spec.rb'
|
34
|
+
- 'spec/sym/application_spec.rb'
|
35
|
+
- 'spec/sym/magic_file_spec.rb'
|
36
|
+
|
37
|
+
# Offense count: 2
|
38
|
+
RSpec/IdenticalEqualityAssertion:
|
39
|
+
Exclude:
|
40
|
+
- 'spec/sym/sym_spec.rb'
|
41
|
+
|
42
|
+
# Offense count: 11
|
43
|
+
RSpec/LeakyConstantDeclaration:
|
44
|
+
Exclude:
|
45
|
+
- 'spec/integration/sym_cli_spec.rb'
|
46
|
+
- 'spec/support/contexts.rb'
|
47
|
+
- 'spec/sym/app/cli_spec.rb'
|
48
|
+
- 'spec/sym/app/keychain_spec.rb'
|
49
|
+
|
50
|
+
# Offense count: 1
|
51
|
+
RSpec/LetSetup:
|
52
|
+
Exclude:
|
53
|
+
- 'spec/sym/app/cli_spec.rb'
|
54
|
+
|
55
|
+
# Offense count: 20
|
56
|
+
# Configuration parameters: .
|
57
|
+
# SupportedStyles: have_received, receive
|
58
|
+
RSpec/MessageSpies:
|
59
|
+
EnforcedStyle: receive
|
60
|
+
|
61
|
+
# Offense count: 36
|
62
|
+
RSpec/MultipleExpectations:
|
63
|
+
Max: 6
|
64
|
+
|
65
|
+
# Offense count: 14
|
66
|
+
# Configuration parameters: AllowSubject.
|
67
|
+
RSpec/MultipleMemoizedHelpers:
|
68
|
+
Max: 9
|
69
|
+
|
70
|
+
# Offense count: 11
|
71
|
+
# Configuration parameters: IgnoreSharedExamples.
|
72
|
+
RSpec/NamedSubject:
|
73
|
+
Exclude:
|
74
|
+
- 'spec/sym/app/commands_spec.rb'
|
75
|
+
- 'spec/sym/app/password/providers_spec.rb'
|
76
|
+
|
77
|
+
# Offense count: 10
|
78
|
+
# Configuration parameters: AllowedGroups.
|
79
|
+
RSpec/NestedGroups:
|
80
|
+
Max: 6
|
81
|
+
|
82
|
+
# Offense count: 3
|
83
|
+
RSpec/NoExpectationExample:
|
84
|
+
Exclude:
|
85
|
+
- 'spec/sym/app/commands/encrypt_decrypt_spec.rb'
|
86
|
+
- 'spec/sym/app/commands/generate_key_spec.rb'
|
87
|
+
- 'spec/sym/data_spec.rb'
|
88
|
+
|
89
|
+
# Offense count: 1
|
90
|
+
RSpec/OverwritingSetup:
|
91
|
+
Exclude:
|
92
|
+
- 'spec/sym/app/commands/generate_key_spec.rb'
|
93
|
+
|
94
|
+
# Offense count: 12
|
95
|
+
RSpec/RepeatedDescription:
|
96
|
+
Exclude:
|
97
|
+
- 'spec/sym/app/commands_spec.rb'
|
98
|
+
- 'spec/sym/app/password/providers_spec.rb'
|
99
|
+
|
100
|
+
# Offense count: 2
|
101
|
+
RSpec/RepeatedExampleGroupDescription:
|
102
|
+
Exclude:
|
103
|
+
- 'spec/sym/app/password/providers_spec.rb'
|
104
|
+
|
105
|
+
# Offense count: 2
|
106
|
+
RSpec/ScatteredSetup:
|
107
|
+
Exclude:
|
108
|
+
- 'spec/integration/sym_cli_spec.rb'
|
109
|
+
|
110
|
+
# Offense count: 10
|
111
|
+
RSpec/StubbedMock:
|
112
|
+
Exclude:
|
113
|
+
- 'spec/support/contexts.rb'
|
114
|
+
- 'spec/sym/app/cli_spec.rb'
|
115
|
+
- 'spec/sym/app/commands/print_key_spec.rb'
|
116
|
+
- 'spec/sym/app/input/handler_spec.rb'
|
117
|
+
- 'spec/sym/app/private_key/detector_spec.rb'
|
118
|
+
- 'spec/sym/application_spec.rb'
|
119
|
+
|
120
|
+
# Offense count: 2
|
121
|
+
# This cop supports safe autocorrection (--autocorrect).
|
122
|
+
Rake/Desc:
|
123
|
+
Exclude:
|
124
|
+
- 'Rakefile'
|
125
|
+
|
126
|
+
# Offense count: 1
|
127
|
+
# This cop supports safe autocorrection (--autocorrect).
|
128
|
+
# Configuration parameters: AllowedVars.
|
129
|
+
Style/FetchEnvVar:
|
130
|
+
Exclude:
|
131
|
+
- 'lib/sym/app/private_key/key_source_check.rb'
|
132
|
+
|
133
|
+
# Offense count: 2
|
134
|
+
# This cop supports unsafe autocorrection (--autocorrect-all).
|
135
|
+
Style/GlobalStdStream:
|
136
|
+
Exclude:
|
137
|
+
- 'spec/sym/app/cli_spec.rb'
|
138
|
+
|
139
|
+
# Offense count: 1
|
140
|
+
# This cop supports unsafe autocorrection (--autocorrect-all).
|
141
|
+
Style/MapToHash:
|
142
|
+
Exclude:
|
143
|
+
- 'lib/sym/application.rb'
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,32 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [Unreleased](https://github.com/kigster/sym/tree/HEAD)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/kigster/sym/compare/v3.0.1...HEAD)
|
6
|
+
|
7
|
+
**Merged pull requests:**
|
8
|
+
|
9
|
+
- Adding github actions [\#33](https://github.com/kigster/sym/pull/33) ([kigster](https://github.com/kigster))
|
10
|
+
|
11
|
+
## [v3.0.1](https://github.com/kigster/sym/tree/v3.0.1) (2021-02-12)
|
12
|
+
|
13
|
+
[Full Changelog](https://github.com/kigster/sym/compare/v3.0.0...v3.0.1)
|
14
|
+
|
15
|
+
**Merged pull requests:**
|
16
|
+
|
17
|
+
- Fixing args expansion for Ruby 3.0.0 [\#32](https://github.com/kigster/sym/pull/32) ([kigster](https://github.com/kigster))
|
18
|
+
|
19
|
+
## [v3.0.0](https://github.com/kigster/sym/tree/v3.0.0) (2020-08-15)
|
20
|
+
|
21
|
+
[Full Changelog](https://github.com/kigster/sym/compare/v2.10.1...v3.0.0)
|
22
|
+
|
3
23
|
## [v2.10.1](https://github.com/kigster/sym/tree/v2.10.1) (2020-08-15)
|
4
24
|
|
5
|
-
[Full Changelog](https://github.com/kigster/sym/compare/
|
25
|
+
[Full Changelog](https://github.com/kigster/sym/compare/list...v2.10.1)
|
26
|
+
|
27
|
+
## [list](https://github.com/kigster/sym/tree/list) (2020-08-15)
|
28
|
+
|
29
|
+
[Full Changelog](https://github.com/kigster/sym/compare/v2.10.0...list)
|
6
30
|
|
7
31
|
**Closed issues:**
|
8
32
|
|
@@ -16,6 +40,10 @@
|
|
16
40
|
|
17
41
|
[Full Changelog](https://github.com/kigster/sym/compare/v2.8.5...v2.10.0)
|
18
42
|
|
43
|
+
**Fixed bugs:**
|
44
|
+
|
45
|
+
- First pass on Version 2.9.0 — dropping the coin gem [\#20](https://github.com/kigster/sym/pull/20) ([kigster](https://github.com/kigster))
|
46
|
+
|
19
47
|
**Closed issues:**
|
20
48
|
|
21
49
|
- Switch to Codecov for test coverage [\#29](https://github.com/kigster/sym/issues/29)
|
@@ -27,7 +55,6 @@
|
|
27
55
|
- Switch to Codecov for test coverage; version bump 2.10.0 [\#28](https://github.com/kigster/sym/pull/28) ([kigster](https://github.com/kigster))
|
28
56
|
- Fix remaining 2.7 warnings; memcached & keychain [\#27](https://github.com/kigster/sym/pull/27) ([kigster](https://github.com/kigster))
|
29
57
|
- Adding Rubocop, and fixing minor issues. [\#21](https://github.com/kigster/sym/pull/21) ([kigster](https://github.com/kigster))
|
30
|
-
- First pass on Version 2.9.0 — dropping the coin gem [\#20](https://github.com/kigster/sym/pull/20) ([kigster](https://github.com/kigster))
|
31
58
|
- CI: Update matrix [\#19](https://github.com/kigster/sym/pull/19) ([olleolleolle](https://github.com/olleolleolle))
|
32
59
|
|
33
60
|
## [v2.8.5](https://github.com/kigster/sym/tree/v2.8.5) (2018-10-13)
|
@@ -60,14 +87,14 @@
|
|
60
87
|
|
61
88
|
[Full Changelog](https://github.com/kigster/sym/compare/v2.8.0...v2.8.1)
|
62
89
|
|
63
|
-
## [v2.8.0](https://github.com/kigster/sym/tree/v2.8.0) (2018-01-06)
|
64
|
-
|
65
|
-
[Full Changelog](https://github.com/kigster/sym/compare/v2.7.0...v2.8.0)
|
66
|
-
|
67
90
|
**Merged pull requests:**
|
68
91
|
|
69
92
|
- Changing -t to expect a file argument; Version 2.7.0 [\#13](https://github.com/kigster/sym/pull/13) ([kigster](https://github.com/kigster))
|
70
93
|
|
94
|
+
## [v2.8.0](https://github.com/kigster/sym/tree/v2.8.0) (2018-01-06)
|
95
|
+
|
96
|
+
[Full Changelog](https://github.com/kigster/sym/compare/v2.7.0...v2.8.0)
|
97
|
+
|
71
98
|
## [v2.7.0](https://github.com/kigster/sym/tree/v2.7.0) (2017-06-23)
|
72
99
|
|
73
100
|
[Full Changelog](https://github.com/kigster/sym/compare/v2.6.3...v2.7.0)
|
data/README.adoc
CHANGED
@@ -1,14 +1,20 @@
|
|
1
|
-
=
|
1
|
+
= **Sym** — _Symmetric Encryption for Humans_
|
2
|
+
:source-highlighter: rouge
|
3
|
+
:rouge-style: base16.monokai
|
4
|
+
:icons: font
|
2
5
|
:toc:
|
3
6
|
:sectnum:
|
4
7
|
:toclevel: 4
|
5
8
|
|
6
9
|
====
|
7
|
-
|
8
|
-
image:https://
|
9
|
-
image:https://
|
10
|
+
|
11
|
+
image:https://github.com/kigster/sym/actions/workflows/ruby.yml/badge.svg[Ruby,link=https://github.com/kigster/sym/actions/workflows/ruby.yml]
|
12
|
+
image:https://github.com/kigster/sym/actions/workflows/rubocop.yml/badge.svg[Rubocop,link=https://github.com/kigster/sym/actions/workflows/rubocop.yml]
|
13
|
+
|
10
14
|
image:https://api.codeclimate.com/v1/badges/4f1d1614ccaa61c974dd/maintainability[Maintainability,link=https://codeclimate.com/github/kigster/sym/maintainability]
|
11
15
|
|
16
|
+
image:https://badge.fury.io/rb/sym.svg[Gem Version,link=https://badge.fury.io/rb/sym]
|
17
|
+
|
12
18
|
image:https://codecov.io/gh/kigster/sym/branch/master/graph/badge.svg?style=shield[Coverage,link="https://codecov.io/gh/kigster/sym"]
|
13
19
|
image:https://img.shields.io/gitter/room/gitterHQ/gitter.svg[Gitter,link=https://gitter.im/kigster/sym]
|
14
20
|
image:https://ruby-gem-downloads-badge.herokuapp.com/sym?extension=svg[Sym Downloads,link=https://rubygems.org/gems/sym]
|
@@ -16,15 +22,16 @@ image:https://ruby-gem-downloads-badge.herokuapp.com/sym?extension=svg[Sym Downl
|
|
16
22
|
image:https://codecov.io/gh/kigster/sym/branch/master/graphs/sunburst.svg[Coverage Map,link=https://codecov.io/gh/kigster/sym]
|
17
23
|
====
|
18
24
|
|
19
|
-
Please checkout the following post — _http://kig.re/2017/03/10/dead-simple-encryption-with-sym.html[Dead Simple Encryption with Sym]_ — that announced the initial release of this library, and provides further in-depth discussion. Your donation of absolutely any amount is much appreciated but never required.
|
25
|
+
NOTE: Please checkout the following post — _http://kig.re/2017/03/10/dead-simple-encryption-with-sym.html[Dead Simple Encryption with Sym]_ — that announced the initial release of this library, and provides further in-depth discussion. Your donation of absolutely any amount is much appreciated but never required.
|
20
26
|
|
21
27
|
image:https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif[Donate,link=https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FSFYYNEQ8RKWU]
|
22
28
|
|
29
|
+
NOTE: You can read this README in the properly rendered for print format, by downloading the xref:README.pdf[PDF].
|
30
|
+
|
23
31
|
== Introduction
|
24
32
|
|
25
33
|
NOTE: *SYM* is an open source command line utility and a Ruby library, which makes it _trivial to encrypt your application secrets with mathematically proven models and ciphers offered in a much larger project — Open SSL.
|
26
34
|
|
27
|
-
|
28
35
|
Unlike many existing encryption tools, *sym* focuses on narrowing the gap between convenience and security, by offering enhanced usability and a streamlined ruby API and a CLI. The primary goal of the library is to make encryption very easy and transparent. +
|
29
36
|
|
30
37
|
* *sym* uses the _https://en.wikipedia.org/wiki/Symmetric-key_algorithm[Symmetric Encryption]_ algorithm. This means that the same key is used to encrypt and decrypt data. In addition to the key, the encryption uses a randomized IV vector, which is automatically generated per each encryption and serialized with the data. Result of encryption is zlib-compressed, and base64 encoded, to be suitable for storage as string. The generated keys are also base64-encoded for convenience. +
|
@@ -47,6 +54,8 @@ Additionally, Sym comes with a helpful BASH wrapper `symit`.
|
|
47
54
|
|
48
55
|
== Supported Ruby Versions
|
49
56
|
|
57
|
+
NOTE: Ruby 3.0.0 is only supported by Sym version 3.0.1 and later.
|
58
|
+
|
50
59
|
Sym currently builds and runs on the following ruby versions on Travis CI:
|
51
60
|
|
52
61
|
.Ruby Version Compatibility
|
@@ -665,6 +674,5 @@ Please submit feature requests, bugs, or donations :)
|
|
665
674
|
|
666
675
|
* link:http:/kig.re[Konstantin Gredeskoul] (primary developer)
|
667
676
|
* https://github.com/bosswissam[Wissam Jarjoui] (testing, inspiration)
|
668
|
-
* https://github.com/meganmmathews[Megan Mathews] (UX, CLI suggestions)
|
669
677
|
* https://twitter.com/z3ndrag0n[Barry Anderson] (sanity checking, review)
|
670
678
|
* https://github.com/JustinNazari[Justin Nazari] (bug fixes)
|