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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/clactive.rb +50 -24
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2807221f858d1a13f24c600df346ab12e4364b6f
4
- data.tar.gz: aa5c10a9e6db92bf2a0ef42e1db8f9a41f862cf5
3
+ metadata.gz: daad5612a86170ff930f6e855097ab6a476dd50d
4
+ data.tar.gz: 09e07f5330009a902652da91c948611aa1976b08
5
5
  SHA512:
6
- metadata.gz: 80671a97c54c39b6634b2c0ee45521a57d95165355277cccc74955cd6c6f13c12906dd908618b634342325292d428cfe02dbbb092c0ec56d47aa65ee44cb73c5
7
- data.tar.gz: 93913244e093331057cb52e7c16501c063ecfccbc5702594680c61f10f9b8c23ef0b1a12a20d63d8c2f963fb137ed65730a4f388a90b1a69dd21a2713b936013
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
- queue = [cmd]
13
+ start = cmd
14
+ require 'optparse'
16
15
 
17
16
  until args.empty?
18
17
  begin
19
- subcmds = cmd.parse(args)
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 cmd = subcmds[name]
26
+ unless subcmd = cmd[name]
28
27
  puts "invalid option: " << name
29
28
  return
30
29
  end
31
30
 
32
- queue << cmd
31
+ cmd.subcmd = subcmd
32
+ cmd = subcmd
33
33
  end
34
34
 
35
- queue.each(&:run)
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
- puts @parser.help
62
+ @parser.help
52
63
  end
53
64
 
54
65
  def run
55
66
  if @action
56
- argv = [@usropts]
57
- argc = @action.arity
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(name)
64
- if block_given?
65
- yield cmd = self.class.new
66
- @subcmds[name] = cmd
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(name, *argv)
72
- @parser.on(*argv) do |val|
73
- @usropts[name] = val
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 = [:subcmd, :option, :action]
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.6
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-15 00:00:00.000000000 Z
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