clactive 0.0.6 → 0.0.7
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/lib/clactive.rb +50 -24
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: daad5612a86170ff930f6e855097ab6a476dd50d
|
|
4
|
+
data.tar.gz: 09e07f5330009a902652da91c948611aa1976b08
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b146d8187e5615cad6c6845198582fa5f770651c909cd4e0ecc82271481b3a0255a783353747279fe150f4d2995d0cf8f0df945fad6275203095f98110ca65bd
|
|
7
|
+
data.tar.gz: 610782ae18c29e9337e8444bc352676495697c0d15d36fcf45be4d72b8e4278b72b6a7935767715795c1792d4c622dfaf27983c620a2912177ea2927abd32c3c
|
data/lib/clactive.rb
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
require 'optparse'
|
|
2
|
-
|
|
3
1
|
module CLActive
|
|
4
2
|
tos = Module.new do
|
|
5
3
|
def [](key)
|
|
@@ -12,11 +10,12 @@ module CLActive
|
|
|
12
10
|
end
|
|
13
11
|
|
|
14
12
|
parser = lambda do |cmd, args|
|
|
15
|
-
|
|
13
|
+
start = cmd
|
|
14
|
+
require 'optparse'
|
|
16
15
|
|
|
17
16
|
until args.empty?
|
|
18
17
|
begin
|
|
19
|
-
|
|
18
|
+
cmd.parse(args)
|
|
20
19
|
rescue OptionParser::ParseError => e
|
|
21
20
|
puts e.message
|
|
22
21
|
return
|
|
@@ -24,67 +23,90 @@ module CLActive
|
|
|
24
23
|
|
|
25
24
|
break unless name = args.shift
|
|
26
25
|
|
|
27
|
-
unless
|
|
26
|
+
unless subcmd = cmd[name]
|
|
28
27
|
puts "invalid option: " << name
|
|
29
28
|
return
|
|
30
29
|
end
|
|
31
30
|
|
|
32
|
-
|
|
31
|
+
cmd.subcmd = subcmd
|
|
32
|
+
cmd = subcmd
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
start.run
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
klass_subcmd = Class.new do
|
|
39
|
+
attr_reader :options
|
|
40
|
+
attr_reader :subcmds
|
|
41
|
+
|
|
39
42
|
define_method :initialize do
|
|
43
|
+
@options = {}.extend(tos)
|
|
40
44
|
@subcmds = {}.extend(tos)
|
|
41
45
|
@usropts = {}.extend(tos)
|
|
42
46
|
@parser = OptionParser.new
|
|
43
47
|
end
|
|
44
48
|
|
|
49
|
+
def name(key = nil)
|
|
50
|
+
key ? (@name = key.to_s) : @name
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def symbol
|
|
54
|
+
name.to_sym if name
|
|
55
|
+
end
|
|
56
|
+
|
|
45
57
|
def parse(args)
|
|
46
58
|
@parser.order!(args)
|
|
47
|
-
@subcmds
|
|
48
59
|
end
|
|
49
60
|
|
|
50
61
|
def help
|
|
51
|
-
|
|
62
|
+
@parser.help
|
|
52
63
|
end
|
|
53
64
|
|
|
54
65
|
def run
|
|
55
66
|
if @action
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
argv << self if argc > 1 || argc < 0
|
|
59
|
-
@action.call(*argv)
|
|
67
|
+
self.instance_exec(@usropts, &@action)
|
|
68
|
+
subcmd.run if subcmd
|
|
60
69
|
end
|
|
61
70
|
end
|
|
62
71
|
|
|
63
|
-
def subcmd(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
72
|
+
def subcmd=(cmd)
|
|
73
|
+
@subcmd = cmd
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def [](key)
|
|
77
|
+
subcmds[key]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def subcmd(&block)
|
|
81
|
+
if block
|
|
82
|
+
cmd = self.class.new
|
|
83
|
+
cmd.instance_exec(&block)
|
|
84
|
+
subcmds[cmd.name] = cmd if cmd.name
|
|
85
|
+
else
|
|
86
|
+
@subcmd
|
|
67
87
|
end
|
|
68
|
-
self
|
|
69
88
|
end
|
|
70
89
|
|
|
71
|
-
def option(
|
|
72
|
-
|
|
73
|
-
@
|
|
90
|
+
def option(key, *argv)
|
|
91
|
+
if argv
|
|
92
|
+
@options[key] = argv
|
|
93
|
+
@parser.on(*argv) do |val|
|
|
94
|
+
@usropts[key] = val
|
|
95
|
+
end
|
|
74
96
|
end
|
|
75
|
-
self
|
|
76
97
|
end
|
|
77
98
|
|
|
78
99
|
def action(&block)
|
|
79
100
|
@action = block if block
|
|
80
|
-
self
|
|
81
101
|
end
|
|
82
102
|
end
|
|
83
103
|
|
|
84
|
-
apis =
|
|
104
|
+
apis = %w(name subcmd option action)
|
|
85
105
|
eigen = class << self; self end
|
|
86
106
|
cmd = klass_subcmd.new
|
|
87
107
|
|
|
108
|
+
cmd.name File::basename($0, '.*')
|
|
109
|
+
|
|
88
110
|
apis.each do |api|
|
|
89
111
|
eigen.send(:define_method, api) do |*args, &block|
|
|
90
112
|
cmd.send(api, *args, &block)
|
|
@@ -95,3 +117,7 @@ module CLActive
|
|
|
95
117
|
parser.call(cmd, ARGV.dup)
|
|
96
118
|
end
|
|
97
119
|
end
|
|
120
|
+
|
|
121
|
+
def CLActive(&block)
|
|
122
|
+
CLActive.instance_exec(&block) if block
|
|
123
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: clactive
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tang Tianyong
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2013-04-
|
|
11
|
+
date: 2013-04-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: CLActive help you to build command quickly
|
|
14
14
|
email: tang3w@gmail.com
|