ing 0.1.1 → 0.1.2
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.
- data/README.md +1 -3
- data/ing.gemspec +2 -0
- data/lib/ing.rb +2 -1
- data/lib/ing/boot.rb +53 -0
- data/lib/ing/commands/generate.rb +8 -8
- data/lib/ing/commands/help.rb +5 -40
- data/lib/ing/commands/implicit.rb +10 -32
- data/lib/ing/commands/list.rb +6 -40
- data/lib/ing/common_options.rb +65 -0
- data/lib/ing/version.rb +1 -1
- data/test/suite.rb +6 -0
- data/todo.yml +0 -1
- metadata +18 -4
- data/lib/ing/commands/boot.rb +0 -76
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
or gratuitous backronym: <b>I</b> <b>N</b>eed a <b>G</b>enerator!
|
5
5
|
|
6
|
-
Note this is a work-in-progress
|
6
|
+
(Note this is a work-in-progress. Expect some quirkiness.)
|
7
7
|
|
8
8
|
The command-line syntax is similar to Thor's, and it incorporates Thor's
|
9
9
|
(Rails') generator methods and shell conventions like
|
@@ -22,8 +22,6 @@ Option parsing courtesy of the venerable and excellent
|
|
22
22
|
|
23
23
|
## Installation
|
24
24
|
|
25
|
-
_Note: not yet gemified_
|
26
|
-
|
27
25
|
gem install ing
|
28
26
|
|
29
27
|
## A quick tour
|
data/ing.gemspec
CHANGED
data/lib/ing.rb
CHANGED
data/lib/ing/boot.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# Base implementation of boot dispatch
|
2
|
+
# Mixed in to Commands::Implicit, Commands::Generate
|
3
|
+
# Note this does NOT provide any options, only provides implementation.
|
4
|
+
# Assumes target class will provide +namespace+ option, otherwise defaults to
|
5
|
+
# global namespace (::Object).
|
6
|
+
#
|
7
|
+
module Ing
|
8
|
+
module Boot
|
9
|
+
|
10
|
+
# Configure the command prior to dispatch.
|
11
|
+
# Default behavior is to set the shell of the dispatched command.
|
12
|
+
# Override in target class as needed; if you want to keep the default
|
13
|
+
# behavior then call +super+.
|
14
|
+
def configure_command(cmd)
|
15
|
+
cmd.shell = Ing.shell_class.new if cmd.respond_to?(:"shell=")
|
16
|
+
end
|
17
|
+
|
18
|
+
# Main processing of arguments and dispatch from command line (+Ing.run+)
|
19
|
+
# Note that three hooks are provided for target classes,
|
20
|
+
# +before+:: runs before any processing of arguments or dispatch of command
|
21
|
+
# +configure_command+:: configures the command prior to dispatch
|
22
|
+
# +after+:: runs after command dispatched
|
23
|
+
#
|
24
|
+
def call(*args)
|
25
|
+
before *args if respond_to?(:before)
|
26
|
+
ns = Ing::Util.to_class_names(options[:namespace] || 'object')
|
27
|
+
classes = Ing::Util.to_class_names(args.shift)
|
28
|
+
Dispatcher.new(ns, classes, *args).dispatch do |cmd|
|
29
|
+
configure_command cmd
|
30
|
+
end
|
31
|
+
after if respond_to?(:after)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Dispatch from +Ing.invoke+
|
35
|
+
def call_invoke(klass, meth, *args)
|
36
|
+
before *args if respond_to?(:before)
|
37
|
+
Dispatcher.invoke(klass, meth, *args) do |cmd|
|
38
|
+
configure_command cmd
|
39
|
+
end
|
40
|
+
after if respond_to?(:after)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Dispatch from +Ing.execute+
|
44
|
+
def call_execute(klass, meth, *args)
|
45
|
+
before *args if respond_to?(:before)
|
46
|
+
Dispatcher.execute(klass, meth, *args) do |cmd|
|
47
|
+
configure_command cmd
|
48
|
+
end
|
49
|
+
after if respond_to?(:after)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -3,7 +3,7 @@ module Ing
|
|
3
3
|
module Commands
|
4
4
|
|
5
5
|
# This is the boot command invoked from `ing generate ...`
|
6
|
-
class Generate
|
6
|
+
class Generate
|
7
7
|
|
8
8
|
DEFAULTS = {
|
9
9
|
namespace: 'object',
|
@@ -13,25 +13,25 @@ module Ing
|
|
13
13
|
|
14
14
|
def self.specify_options(parser)
|
15
15
|
parser.text "Run a generator task"
|
16
|
-
parser.opt :debug, "Display debug messages"
|
17
|
-
parser.opt :namespace, "Top-level namespace for generators",
|
18
|
-
:type => :string, :default => DEFAULTS[:namespace]
|
19
16
|
parser.opt :gen_root, "Generators root directory",
|
20
17
|
:type => :string, :short => 'r',
|
21
18
|
:default => DEFAULTS[:gen_root]
|
22
|
-
parser.opt :ing_file, "Default generator file (ruby)",
|
23
|
-
:type => :string, :short => 'f',
|
24
|
-
:default => DEFAULTS[:ing_file]
|
25
19
|
parser.stop_on_unknown
|
26
20
|
end
|
27
21
|
|
22
|
+
include Ing::Boot
|
23
|
+
include Ing::CommonOptions
|
24
|
+
|
28
25
|
def generator_root
|
29
26
|
@generator_root ||= File.expand_path(options[:gen_root])
|
30
27
|
end
|
31
28
|
|
32
|
-
#
|
29
|
+
# Require libs and ing_file, then
|
30
|
+
# locate and require the generator ruby file identified by the first arg,
|
33
31
|
# before dispatching to it.
|
34
32
|
def before(*args)
|
33
|
+
require_libs
|
34
|
+
require_ing_file
|
35
35
|
require_generator args.first
|
36
36
|
end
|
37
37
|
|
data/lib/ing/commands/help.rb
CHANGED
@@ -14,17 +14,10 @@
|
|
14
14
|
parser.text " ing help generate # help on built-in command generate"
|
15
15
|
parser.text " ing help --namespace test unit # help on command within namespace"
|
16
16
|
parser.text " ing help # display this message"
|
17
|
-
parser.text "\nOptions:"
|
18
|
-
parser.opt :debug, "Display debug messages"
|
19
|
-
parser.opt :namespace, "Top-level namespace",
|
20
|
-
:type => :string, :default => DEFAULTS[:namespace]
|
21
|
-
parser.opt :require, "Require file or library before running (multi)",
|
22
|
-
:multi => true, :type => :string
|
23
|
-
parser.opt :ing_file, "Default task file (ruby)",
|
24
|
-
:type => :string, :short => 'f',
|
25
|
-
:default => DEFAULTS[:ing_file]
|
26
17
|
end
|
27
18
|
|
19
|
+
include Ing::CommonOptions
|
20
|
+
|
28
21
|
attr_accessor :options
|
29
22
|
attr_writer :shell
|
30
23
|
|
@@ -34,51 +27,23 @@
|
|
34
27
|
|
35
28
|
def initialize(options)
|
36
29
|
self.options = options
|
37
|
-
debug "#{__FILE__}:#{__LINE__} :: options #{options.inspect}"
|
38
30
|
end
|
39
31
|
|
40
32
|
# Require each passed file or library before running
|
41
33
|
# and require the ing file if it exists
|
42
|
-
def before
|
43
|
-
require_libs
|
34
|
+
def before
|
35
|
+
require_libs
|
44
36
|
require_ing_file
|
45
37
|
end
|
46
38
|
|
47
39
|
def call(cmd="help")
|
48
|
-
before
|
40
|
+
before
|
49
41
|
ns = Ing::Util.to_class_names(options[:namespace] || 'object')
|
50
42
|
cs = Ing::Util.to_class_names(cmd)
|
51
43
|
help = Dispatcher.new(ns, cs).help
|
52
44
|
shell.say help.read
|
53
45
|
end
|
54
46
|
|
55
|
-
private
|
56
|
-
|
57
|
-
# require relative paths relative to the Dir.pwd
|
58
|
-
# otherwise, require as given (so gems can be required, etc.)
|
59
|
-
def require_libs(libs)
|
60
|
-
libs = Array(libs)
|
61
|
-
libs.each do |lib|
|
62
|
-
f = if /\A\.{1,2}\// =~ lib
|
63
|
-
File.expand_path(lib)
|
64
|
-
else
|
65
|
-
lib
|
66
|
-
end
|
67
|
-
debug "#{__FILE__}:#{__LINE__} :: require #{f.inspect}"
|
68
|
-
require f
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def require_ing_file
|
73
|
-
f = File.expand_path(options[:ing_file])
|
74
|
-
require_libs(f) if File.exists?(f)
|
75
|
-
end
|
76
|
-
|
77
|
-
# Internal debugging
|
78
|
-
def debug(*args)
|
79
|
-
shell.debug(*args) if options[:debug]
|
80
|
-
end
|
81
|
-
|
82
47
|
end
|
83
48
|
|
84
49
|
H = Help
|
@@ -4,7 +4,7 @@ module Ing
|
|
4
4
|
|
5
5
|
# This is the default boot command when ARGV.first not recognized as
|
6
6
|
# a built-in Ing command. For example, `ing some:task run` .
|
7
|
-
class Implicit
|
7
|
+
class Implicit
|
8
8
|
|
9
9
|
DEFAULTS = {
|
10
10
|
namespace: 'object',
|
@@ -13,46 +13,24 @@ module Ing
|
|
13
13
|
|
14
14
|
def self.specify_options(parser)
|
15
15
|
parser.text "(internal)"
|
16
|
-
parser.opt :debug, "Display debug messages"
|
17
|
-
parser.opt :namespace, "Top-level namespace for generators",
|
18
|
-
:type => :string, :default => DEFAULTS[:namespace]
|
19
|
-
parser.opt :require, "Require file or library before running (multi)",
|
20
|
-
:multi => true, :type => :string
|
21
|
-
parser.opt :ing_file, "Default generator file (ruby)",
|
22
|
-
:type => :string, :short => 'f',
|
23
|
-
:default => DEFAULTS[:ing_file]
|
24
16
|
parser.stop_on_unknown
|
25
17
|
end
|
26
18
|
|
19
|
+
include Ing::Boot
|
20
|
+
include Ing::CommonOptions
|
21
|
+
|
22
|
+
attr_accessor :options
|
23
|
+
def initialize(options)
|
24
|
+
self.options = options
|
25
|
+
end
|
26
|
+
|
27
27
|
# Require each passed file or library before running
|
28
28
|
# and require the ing file if it exists
|
29
29
|
def before(*args)
|
30
|
-
require_libs
|
30
|
+
require_libs
|
31
31
|
require_ing_file
|
32
32
|
end
|
33
33
|
|
34
|
-
private
|
35
|
-
|
36
|
-
# require relative paths relative to the Dir.pwd
|
37
|
-
# otherwise, require as given (so gems can be required, etc.)
|
38
|
-
def require_libs(libs)
|
39
|
-
libs = Array(libs)
|
40
|
-
libs.each do |lib|
|
41
|
-
f = if /\A\.{1,2}\// =~ lib
|
42
|
-
File.expand_path(lib)
|
43
|
-
else
|
44
|
-
lib
|
45
|
-
end
|
46
|
-
debug "#{__FILE__}:#{__LINE__} :: require #{f.inspect}"
|
47
|
-
require f
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def require_ing_file
|
52
|
-
f = File.expand_path(options[:ing_file])
|
53
|
-
require_libs(f) if File.exists?(f)
|
54
|
-
end
|
55
|
-
|
56
34
|
end
|
57
35
|
|
58
36
|
end
|
data/lib/ing/commands/list.rb
CHANGED
@@ -14,17 +14,10 @@
|
|
14
14
|
parser.text " ing list # list all built-in ing commands"
|
15
15
|
parser.text " ing list rspec # list all ing commands in rspec namespace, or"
|
16
16
|
parser.text " ing list --namespace rspec"
|
17
|
-
parser.text "\nOptions:"
|
18
|
-
parser.opt :debug, "Display debug messages"
|
19
|
-
parser.opt :namespace, "Top-level namespace",
|
20
|
-
:type => :string, :default => DEFAULTS[:namespace]
|
21
|
-
parser.opt :require, "Require file or library before running (multi)",
|
22
|
-
:multi => true, :type => :string
|
23
|
-
parser.opt :ing_file, "Default task file (ruby)",
|
24
|
-
:type => :string, :short => 'f',
|
25
|
-
:default => DEFAULTS[:ing_file]
|
26
17
|
end
|
27
18
|
|
19
|
+
include Ing::CommonOptions
|
20
|
+
|
28
21
|
attr_accessor :options
|
29
22
|
attr_writer :shell
|
30
23
|
|
@@ -34,19 +27,17 @@
|
|
34
27
|
|
35
28
|
def initialize(options)
|
36
29
|
self.options = options
|
37
|
-
debug "#{__FILE__}:#{__LINE__} :: options #{options.inspect}"
|
38
30
|
end
|
39
31
|
|
40
32
|
# Require each passed file or library before running
|
41
33
|
# and require the ing file if it exists
|
42
|
-
def before
|
43
|
-
require_libs
|
34
|
+
def before
|
35
|
+
require_libs
|
44
36
|
require_ing_file
|
45
37
|
end
|
46
|
-
|
47
38
|
|
48
39
|
def call(namespace=options[:namespace])
|
49
|
-
before
|
40
|
+
before
|
50
41
|
ns = Ing::Util.to_class_names(namespace)
|
51
42
|
mod = Ing::Util.namespaced_const_get(ns)
|
52
43
|
data = mod.constants.map do |c|
|
@@ -59,27 +50,7 @@
|
|
59
50
|
end
|
60
51
|
|
61
52
|
private
|
62
|
-
|
63
|
-
# require relative paths relative to the Dir.pwd
|
64
|
-
# otherwise, require as given (so gems can be required, etc.)
|
65
|
-
def require_libs(libs)
|
66
|
-
libs = Array(libs)
|
67
|
-
libs.each do |lib|
|
68
|
-
f = if /\A\.{1,2}\// =~ lib
|
69
|
-
File.expand_path(lib)
|
70
|
-
else
|
71
|
-
lib
|
72
|
-
end
|
73
|
-
debug "#{__FILE__}:#{__LINE__} :: require #{f.inspect}"
|
74
|
-
require f
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def require_ing_file
|
79
|
-
f = File.expand_path(options[:ing_file])
|
80
|
-
require_libs(f) if File.exists?(f)
|
81
|
-
end
|
82
|
-
|
53
|
+
|
83
54
|
def desc_lines(ns, data)
|
84
55
|
colwidths = data.inject([0,0]) {|max, (line, desc)|
|
85
56
|
max[0] = line.length if line.length > max[0]
|
@@ -95,11 +66,6 @@
|
|
95
66
|
].join(" # ")
|
96
67
|
}
|
97
68
|
end
|
98
|
-
|
99
|
-
# Internal debugging
|
100
|
-
def debug(*args)
|
101
|
-
shell.debug(*args) if options[:debug]
|
102
|
-
end
|
103
69
|
|
104
70
|
end
|
105
71
|
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# Common options for built-in Ing commands
|
2
|
+
module Ing
|
3
|
+
module CommonOptions
|
4
|
+
|
5
|
+
# a bit of trickiness to change a singleton method...
|
6
|
+
def self.included(base)
|
7
|
+
meth = base.method(:specify_options) if base.respond_to?(:specify_options)
|
8
|
+
base.send(:define_singleton_method, :specify_options) do |expect|
|
9
|
+
meth.call(expect) if meth
|
10
|
+
expect.text "\nCommon Options:"
|
11
|
+
expect.opt :debug, "Display debug messages"
|
12
|
+
expect.opt :namespace, "Top-level namespace",
|
13
|
+
:type => :string, :default => base::DEFAULTS[:namespace]
|
14
|
+
expect.opt :require, "Require file or library before running (multi)",
|
15
|
+
:multi => true, :type => :string
|
16
|
+
expect.opt :ing_file, "Default task file (ruby)",
|
17
|
+
:type => :string, :short => 'f',
|
18
|
+
:default => base::DEFAULTS[:ing_file]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def debug?
|
23
|
+
!!options[:debug]
|
24
|
+
end
|
25
|
+
|
26
|
+
def requires
|
27
|
+
options[:require]
|
28
|
+
end
|
29
|
+
|
30
|
+
def ing_file
|
31
|
+
options[:ing_file]
|
32
|
+
end
|
33
|
+
|
34
|
+
def namespace
|
35
|
+
options[:namespace]
|
36
|
+
end
|
37
|
+
|
38
|
+
# require relative paths relative to the Dir.pwd
|
39
|
+
# otherwise, require as given (so gems can be required, etc.)
|
40
|
+
def require_libs(libs=requires)
|
41
|
+
libs = Array(libs)
|
42
|
+
libs.each do |lib|
|
43
|
+
f = if /\A\.{1,2}\// =~ lib
|
44
|
+
File.expand_path(lib)
|
45
|
+
else
|
46
|
+
lib
|
47
|
+
end
|
48
|
+
require f
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def require_ing_file
|
53
|
+
f = File.expand_path(ing_file)
|
54
|
+
require_libs(f) if f && File.exists?(f)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Internal debugging
|
58
|
+
def debug(*msgs)
|
59
|
+
if debug?
|
60
|
+
msgs.each do |msg| $stderr.puts "DEBUG :: #{msg}" end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
data/lib/ing/version.rb
CHANGED
data/test/suite.rb
ADDED
data/todo.yml
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,9 +11,20 @@ bindir: bin
|
|
11
11
|
cert_chain: []
|
12
12
|
date: 2012-09-16 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: minitest
|
16
|
+
requirement: &17352160 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *17352160
|
14
25
|
- !ruby/object:Gem::Dependency
|
15
26
|
name: fakeweb
|
16
|
-
requirement: &
|
27
|
+
requirement: &17351600 !ruby/object:Gem::Requirement
|
17
28
|
none: false
|
18
29
|
requirements:
|
19
30
|
- - ! '>='
|
@@ -21,7 +32,7 @@ dependencies:
|
|
21
32
|
version: '0'
|
22
33
|
type: :development
|
23
34
|
prerelease: false
|
24
|
-
version_requirements: *
|
35
|
+
version_requirements: *17351600
|
25
36
|
description: ! "\nAn alternative to Rake and Thor, Ing has a command-line syntax similar
|
26
37
|
to \nThor's, and it incorporates Thor's (Rails') generator methods and shell \nconventions.
|
27
38
|
But unlike Thor or Rake, it does not define its own DSL. Your tasks\ncorrespond
|
@@ -51,11 +62,12 @@ files:
|
|
51
62
|
- lib/ing/actions/empty_directory.rb
|
52
63
|
- lib/ing/actions/file_manipulation.rb
|
53
64
|
- lib/ing/actions/inject_into_file.rb
|
54
|
-
- lib/ing/
|
65
|
+
- lib/ing/boot.rb
|
55
66
|
- lib/ing/commands/generate.rb
|
56
67
|
- lib/ing/commands/help.rb
|
57
68
|
- lib/ing/commands/implicit.rb
|
58
69
|
- lib/ing/commands/list.rb
|
70
|
+
- lib/ing/common_options.rb
|
59
71
|
- lib/ing/dispatcher.rb
|
60
72
|
- lib/ing/files.rb
|
61
73
|
- lib/ing/lib_trollop.rb
|
@@ -90,6 +102,7 @@ files:
|
|
90
102
|
- test/fixtures/task.ing.rb
|
91
103
|
- test/fixtures/task.thor
|
92
104
|
- test/spec_helper.rb
|
105
|
+
- test/suite.rb
|
93
106
|
- test/test_helper.rb
|
94
107
|
- todo.yml
|
95
108
|
homepage: https://github.com/ericgj/ing
|
@@ -143,5 +156,6 @@ test_files:
|
|
143
156
|
- test/fixtures/task.ing.rb
|
144
157
|
- test/fixtures/task.thor
|
145
158
|
- test/spec_helper.rb
|
159
|
+
- test/suite.rb
|
146
160
|
- test/test_helper.rb
|
147
161
|
has_rdoc:
|
data/lib/ing/commands/boot.rb
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
# Base class
|
2
|
-
|
3
|
-
module Ing
|
4
|
-
module Commands
|
5
|
-
class Boot
|
6
|
-
|
7
|
-
attr_accessor :options
|
8
|
-
attr_writer :shell
|
9
|
-
|
10
|
-
def shell
|
11
|
-
@shell ||= ::Ing.shell_class.new
|
12
|
-
end
|
13
|
-
|
14
|
-
def initialize(options)
|
15
|
-
self.options = options
|
16
|
-
debug "#{__FILE__}:#{__LINE__} :: options #{options.inspect}"
|
17
|
-
end
|
18
|
-
|
19
|
-
# Runs after options initialized but before any processing of arguments
|
20
|
-
# or dispatching the command.
|
21
|
-
# Should be implemented in subclasses.
|
22
|
-
def before(*args)
|
23
|
-
end
|
24
|
-
|
25
|
-
# Configure the command prior to dispatch.
|
26
|
-
# Should be implemented in subclasses.
|
27
|
-
# If you want to keep this default behavior setting the shell,
|
28
|
-
# call +super+ first.
|
29
|
-
def configure_command(cmd)
|
30
|
-
cmd.shell = self.shell if cmd.respond_to?(:"shell=")
|
31
|
-
end
|
32
|
-
|
33
|
-
# Runs after dispatching the command.
|
34
|
-
# Should be implemented in subclasses.
|
35
|
-
def after
|
36
|
-
end
|
37
|
-
|
38
|
-
# Main processing of arguments and dispatch from command line (+Ing.run+)
|
39
|
-
def call(*args)
|
40
|
-
before *args
|
41
|
-
ns = Ing::Util.to_class_names(options[:namespace] || 'object')
|
42
|
-
classes = Ing::Util.to_class_names(args.shift)
|
43
|
-
debug "#{__FILE__}:#{__LINE__} :: dispatch #{ns.inspect}, #{classes.inspect}, #{args.inspect}"
|
44
|
-
Dispatcher.new(ns, classes, *args).dispatch do |cmd|
|
45
|
-
configure_command cmd
|
46
|
-
end
|
47
|
-
after
|
48
|
-
end
|
49
|
-
|
50
|
-
# Dispatch from +Ing.invoke+
|
51
|
-
def call_invoke(klass, meth, *args)
|
52
|
-
before *args
|
53
|
-
Dispatcher.invoke(klass, meth, *args) do |cmd|
|
54
|
-
configure_command cmd
|
55
|
-
end
|
56
|
-
after
|
57
|
-
end
|
58
|
-
|
59
|
-
# Dispatch from +Ing.execute+
|
60
|
-
def call_execute(klass, meth, *args)
|
61
|
-
before *args
|
62
|
-
Dispatcher.execute(klass, meth, *args) do |cmd|
|
63
|
-
configure_command cmd
|
64
|
-
end
|
65
|
-
after
|
66
|
-
end
|
67
|
-
|
68
|
-
# Internal debugging -- define a :debug option in subclass if you want this
|
69
|
-
def debug(*args)
|
70
|
-
shell.debug(*args) if options[:debug]
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
76
|
-
end
|