super_docopt 0.0.1 → 0.2.0
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/README.md +57 -0
- data/lib/super_docopt/base.rb +37 -26
- data/lib/super_docopt/version.rb +2 -2
- metadata +11 -109
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 556c14534c6e62e2a508387a141ca629048a543bc8b2a16bdba47880a63d0fd4
|
4
|
+
data.tar.gz: c832a020c2cf4c527fdbac014c8c249f6849d728afa7f15b90ee0490c201d449
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d634beb5b71cc725979b80e7d314864e1625b4984dd5edabfe7b74ad0406c53aef1751db5fd83cb95825348f5127871c714bef9518d1342aa6a6aff6a80ccf7
|
7
|
+
data.tar.gz: bed43e205b8d88a9c74cfc22abbbe9ae9f27ceb15b818f4fd1c49b7e43dc7fdd34ef8a3837f7b562585f7949bfa86812b2c11d245143e9cde5582628825e7cf3
|
data/README.md
CHANGED
@@ -1,2 +1,59 @@
|
|
1
1
|
Super Docopt
|
2
2
|
==================================================
|
3
|
+
|
4
|
+
[](https://badge.fury.io/rb/super_docopt)
|
5
|
+
[](https://github.com/DannyBen/super_docopt/actions?query=workflow%3ATest)
|
6
|
+
[](https://codeclimate.com/github/DannyBen/super_docopt/maintainability)
|
7
|
+
|
8
|
+
---
|
9
|
+
|
10
|
+
Create command line utilities with ease.
|
11
|
+
*Super Docopt* is an extension that provides syntactic sugar to [Docopt][1]
|
12
|
+
|
13
|
+
---
|
14
|
+
|
15
|
+
Install
|
16
|
+
--------------------------------------------------
|
17
|
+
|
18
|
+
$ gem install super_docopt
|
19
|
+
|
20
|
+
|
21
|
+
Getting Started
|
22
|
+
--------------------------------------------------
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
# my_command_line.rb
|
26
|
+
require 'super_docopt'
|
27
|
+
|
28
|
+
class MyCommandLine < SuperDocopt::Base
|
29
|
+
version '1.0.0'
|
30
|
+
docopt 'docopt.txt'
|
31
|
+
subcommands ['download', 'upload']
|
32
|
+
|
33
|
+
def download
|
34
|
+
puts "#download called with #{args}"
|
35
|
+
end
|
36
|
+
|
37
|
+
def upload
|
38
|
+
puts "#upload called"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
MyCommandLine.execute ARGV
|
43
|
+
```
|
44
|
+
|
45
|
+
```plain
|
46
|
+
# docopt.txt
|
47
|
+
My Command Line
|
48
|
+
|
49
|
+
Usage:
|
50
|
+
mock download [--force]
|
51
|
+
mock upload
|
52
|
+
mock (-h|--help|--version)
|
53
|
+
```
|
54
|
+
|
55
|
+
See the [examples](/examples) folder for more examples.
|
56
|
+
|
57
|
+
---
|
58
|
+
|
59
|
+
[1]: http://docopt.org/
|
data/lib/super_docopt/base.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
require 'singleton'
|
2
|
-
require '
|
2
|
+
require 'docopt_ng'
|
3
3
|
|
4
4
|
module SuperDocopt
|
5
5
|
class Base
|
6
6
|
include Singleton
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
attr_reader :args
|
10
9
|
attr_accessor :version, :docopt, :subcommands
|
11
10
|
|
12
|
-
def self.execute(argv=[])
|
11
|
+
def self.execute(argv = [])
|
13
12
|
instance.execute_cli argv
|
14
13
|
end
|
15
14
|
|
@@ -24,40 +23,52 @@ module SuperDocopt
|
|
24
23
|
def self.subcommands(list)
|
25
24
|
instance.subcommands = list
|
26
25
|
end
|
27
|
-
|
28
|
-
def execute_cli(argv=[])
|
26
|
+
|
27
|
+
def execute_cli(argv = [])
|
29
28
|
doc = File.read docopt
|
30
29
|
begin
|
31
|
-
args =
|
32
|
-
handle_subcommand
|
33
|
-
rescue
|
30
|
+
@args = DocoptNG.docopt(doc, argv: argv, version: version)
|
31
|
+
handle_subcommand
|
32
|
+
rescue DocoptNG::Exit => e
|
34
33
|
puts e.message
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
38
|
-
|
37
|
+
private
|
39
38
|
|
40
|
-
def handle_subcommand
|
39
|
+
def handle_subcommand
|
41
40
|
subcommands.each do |subcommand|
|
42
|
-
|
43
|
-
method
|
41
|
+
input, method = translate_subcommand subcommand
|
42
|
+
return execute_subcommand method if args[input]
|
43
|
+
end
|
44
|
+
end
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
method = subcommand.values.first.to_s
|
48
|
-
end
|
46
|
+
def execute_subcommand(method)
|
47
|
+
raise NotImplementedError, "Please implement ##{method}" unless respond_to? method
|
49
48
|
|
50
|
-
|
51
|
-
|
49
|
+
before_execute
|
50
|
+
send method
|
51
|
+
after_execute
|
52
|
+
end
|
52
53
|
|
53
|
-
|
54
|
-
|
55
|
-
|
54
|
+
def translate_subcommand(subcommand)
|
55
|
+
input = subcommand.to_s
|
56
|
+
method = subcommand.to_s
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
|
58
|
+
if subcommand.is_a? Hash
|
59
|
+
input = subcommand.keys.first.to_s
|
60
|
+
method = subcommand.values.first.to_s
|
60
61
|
end
|
62
|
+
|
63
|
+
input = input.tr '_', '-'
|
64
|
+
method = method.tr '-', '_'
|
65
|
+
|
66
|
+
[input, method]
|
61
67
|
end
|
68
|
+
|
69
|
+
# Overridable Hooks
|
70
|
+
|
71
|
+
def before_execute; end
|
72
|
+
def after_execute; end
|
62
73
|
end
|
63
|
-
end
|
74
|
+
end
|
data/lib/super_docopt/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module SuperDocopt
|
2
|
-
VERSION = '0.0
|
3
|
-
end
|
2
|
+
VERSION = '0.2.0'
|
3
|
+
end
|
metadata
CHANGED
@@ -1,128 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: super_docopt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Ben Shitrit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: docopt_ng
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
27
|
-
|
28
|
-
name: runfile
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0.10'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0.10'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: runfile-tasks
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0.4'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0.4'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rspec
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '3.6'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '3.6'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rspec_fixtures
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0.3'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0.3'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: simplecov
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0.15'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0.15'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: byebug
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '9.0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '9.0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: require_all
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '1.5'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '1.5'
|
125
|
-
description: Create command line applications with docopt
|
26
|
+
version: '0.7'
|
27
|
+
description: Extension to docopt for defining command line utilities with ease
|
126
28
|
email: db@dannyben.com
|
127
29
|
executables: []
|
128
30
|
extensions: []
|
@@ -135,7 +37,8 @@ files:
|
|
135
37
|
homepage: https://github.com/DannyBen/super_docopt
|
136
38
|
licenses:
|
137
39
|
- MIT
|
138
|
-
metadata:
|
40
|
+
metadata:
|
41
|
+
rubygems_mfa_required: 'true'
|
139
42
|
post_install_message:
|
140
43
|
rdoc_options: []
|
141
44
|
require_paths:
|
@@ -144,16 +47,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
144
47
|
requirements:
|
145
48
|
- - ">="
|
146
49
|
- !ruby/object:Gem::Version
|
147
|
-
version: 2.
|
50
|
+
version: '2.7'
|
148
51
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
52
|
requirements:
|
150
53
|
- - ">="
|
151
54
|
- !ruby/object:Gem::Version
|
152
55
|
version: '0'
|
153
56
|
requirements: []
|
154
|
-
|
155
|
-
rubygems_version: 2.7.3
|
57
|
+
rubygems_version: 3.4.6
|
156
58
|
signing_key:
|
157
59
|
specification_version: 4
|
158
|
-
summary:
|
60
|
+
summary: docopt-based command line utility builder
|
159
61
|
test_files: []
|