super_docopt 0.0.1 → 0.2.0

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: 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: []