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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 474289f2c16f5a9c803217ab32273e9e98cf926c600c34564ced2eed2eb827ea
4
- data.tar.gz: 62f74ba90e03a7d247696515a6ef8f221155a6f149c53f0c8aa7de687778444e
3
+ metadata.gz: 556c14534c6e62e2a508387a141ca629048a543bc8b2a16bdba47880a63d0fd4
4
+ data.tar.gz: c832a020c2cf4c527fdbac014c8c249f6849d728afa7f15b90ee0490c201d449
5
5
  SHA512:
6
- metadata.gz: fe882885ec596994f74ff2b2f1eb5137524c46348ce29ef9f2ee38005c03e7f624b351d4bd58341ecbf9be11d8d3c3fffc61bc730aaaf53de6973b5fc6cbcade
7
- data.tar.gz: ed0777d6c669a0194baa20ac26bb3e2ea4fd450346e997ca30e70b1a8da8472a6340af4c1bfaec776b693eacbac3a63abfbd0ed4e8e2b3a51260fc378d7f1480
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
+ [![Gem Version](https://badge.fury.io/rb/super_docopt.svg)](https://badge.fury.io/rb/super_docopt)
5
+ [![Build Status](https://github.com/DannyBen/super_docopt/workflows/Test/badge.svg)](https://github.com/DannyBen/super_docopt/actions?query=workflow%3ATest)
6
+ [![Maintainability](https://api.codeclimate.com/v1/badges/2ca07d88e6f7b0b57e82/maintainability)](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/
@@ -1,15 +1,14 @@
1
1
  require 'singleton'
2
- require 'docopt'
2
+ require 'docopt_ng'
3
3
 
4
4
  module SuperDocopt
5
5
  class Base
6
6
  include Singleton
7
7
 
8
- VERSION = '0.0.1'
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 = Docopt::docopt(doc, argv: argv, version: version)
32
- handle_subcommand args
33
- rescue Docopt::Exit => e
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
- private
37
+ private
39
38
 
40
- def handle_subcommand(args)
39
+ def handle_subcommand
41
40
  subcommands.each do |subcommand|
42
- command = subcommand.to_s
43
- method = subcommand.to_s
41
+ input, method = translate_subcommand subcommand
42
+ return execute_subcommand method if args[input]
43
+ end
44
+ end
44
45
 
45
- if subcommand.is_a? Hash
46
- command = subcommand.keys.first.to_s
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
- command = command.gsub '_', '-'
51
- method = method.gsub '-', '_'
49
+ before_execute
50
+ send method
51
+ after_execute
52
+ end
52
53
 
53
- if args[command]
54
- raise NotImplementedError,
55
- "Please implement ##{method}" unless respond_to? method
54
+ def translate_subcommand(subcommand)
55
+ input = subcommand.to_s
56
+ method = subcommand.to_s
56
57
 
57
- send method, args
58
- return
59
- end
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
@@ -1,3 +1,3 @@
1
1
  module SuperDocopt
2
- VERSION = '0.0.1'
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.1
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: 2018-02-09 00:00:00.000000000 Z
11
+ date: 2023-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: docopt
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.6'
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.6'
27
- - !ruby/object:Gem::Dependency
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.0.0
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
- rubyforge_project:
155
- rubygems_version: 2.7.3
57
+ rubygems_version: 3.4.6
156
58
  signing_key:
157
59
  specification_version: 4
158
- summary: Docopt extension for easy command line applications
60
+ summary: docopt-based command line utility builder
159
61
  test_files: []